This works perfectly (including in targeting org, my use case). Thanks so much! On Monday, February 27, 2023 at 3:11:13 PM UTC-5 Julien Dutant wrote: > Well, couldn't help but give it a shot. Here's a short filter that does > the trick. Will work at arbitrary depth. > > https://gist.github.com/jdutant/549ef06074d3ae00b78ca6ec8ed2cfe1 > > > function fixList(elem) > local changed = false > local newList = pandoc.List:new() > > local function isSubList(list) > return #list == 1 > and (list[1].t == 'BulletList' or list[1].t == 'OrderedList') > end > > for _,item in ipairs(elem.c) do > > if #newList > 0 and isSubList(item) then > -- append item's sublist to the last item of newList > changed = true > newList[#newList]:insert(item[1]) > else > -- otherwise append item to newList > newList:insert(item) > end > > end > > if changed then > elem.c = newList > end > > return changed and elem or nil > end > > return {{ > OrderedList = fixList, > BulletList = fixList, }} > > On Monday, February 27, 2023 at 12:33:54 AM UTC JDTS wrote: > >> >> Thanks, I'll investigate this. The HTML structure is generated and >> therefore quite uniform, so it may be possible to do the munging there. >> On Sunday, February 26, 2023 at 10:47:36 AM UTC-5 Julien Dutant wrote: >> >>> From my labelled-lists filter ( >>> https://github.com/dialoa/dialectica-filters/blob/main/labelled-lists/labelled-lists.lua), >>> here is a filter + function that checks whether every item in a bullet list >>> starts with a Span element. >>> >>> ```lua >>> >>> --- is_custom_labelled_list: Look for custom labels markup >>> -- Custom label markup requires each item starting with a span >>> -- containing the label >>> -- @param element pandoc BulletList element >>> function is_custom_labelled_list (element) >>> local is_cl_list = true >>> >>> -- the content of BulletList is a List of List of Blocks >>> for _,blocks in ipairs(element.c) do >>> -- check that the first element of the first block is Span >>> if not( blocks[1].c[1].t == 'Span' ) then >>> is_cl_list = false >>> break >>> end >>> end >>> return is_cl_list >>> >>> end >>> >>> return {{ >>> BulletList = function(element) >>> if is_custom_labelled_list(element) then >>> return pandoc.Para(pandoc.Str('Was a list of the required kind!))) >>> end >>> end, }} >>> >>> ``` >>> >>> The difficulty with manipulating lists is to follow their intricate >>> structure: a BulletList element as a content (element.c) that is a pandoc >>> List. Each item in it (element.c[1], element.c[2]) is of Blocks type, i.e. >>> a pandoc.List where the each element is a block. In your case you should >>> check that the list item only contains one block of type ordered list: >>> >>> if #elem.c[i] == 1 then list_item_contains_one_block_only = true end >>> >>> and check that this block is of type OrderedList: >>> if #elem.c[i]==1 and elem.c[i].t == 'OrderedList' then ... >>> >>> you should then add that block to the previous item, and remove the >>> current item. >>> >>> Hope this helps, >>> >>> J >>> >>> On Saturday, February 25, 2023 at 10:06:45 PM UTC JDTS wrote: >>> >>>> Thanks. Any pointers to lua filters that do something similar? >>>> >>>> On Saturday, February 25, 2023 at 10:01:08 AM UTC-5 Julien Dutant wrote: >>>> >>>>> Looks feasible. Pandoc converts the first html to: >>>>> >>>>> [ BulletList >>>>> [ [ Plain >>>>> [ ... Inlines ] >>>>> ] >>>>> , [ BulletList >>>>> [ [ Plain >>>>> [ ... Inlines ] >>>>> ] >>>>> , [ Plain >>>>> [ ... Inlines ] >>>>> ] >>>>> ] >>>>> ] >>>>> , [ Plain >>>>> [ Inlines ] >>>>> ] >>>>> ] >>>>> ] >>>>> >>>>> I.e., the sublist is converted to its own list item. So the filter >>>>> should pick up list, check if any item within them consists of a lone >>>>> sublist, and if so, move it to the previous item. (And best, apply the >>>>> filter recursively to that sublist itself.) >>>>> >>>>> On Saturday, February 25, 2023 at 2:26:04 PM UTC JDTS wrote: >>>>> >>>>>> The Apple Notes app produces (via AppleScript) HTML for notes with >>>>>> nested lists structured like: >>>>>> >>>>>> >>>>>> >>>>>> As you can see, the sublist is incorrectly positioned. It should be >>>>>> positioned *within* the
  • Level 1 element 1 item, ala: >>>>>> >>>>>> >>>>>> >>>>>> Is there a straightforward way with Lua filters to fix this at the >>>>>> AST level, for arbitrary-depth sublist nesting? >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "pandoc-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/8208c36c-dd86-49f6-9b77-32cc5f48299dn%40googlegroups.com.