diff options
| author | Lucas Viana <[email protected]> | 2022-01-06 22:40:53 -0300 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2022-01-07 10:48:28 -0800 |
| commit | 45e2e0d018b01e5a232d0a559dc9832af207ebcb (patch) | |
| tree | ef5d24b5f54c38fe5fc7440d1cda8ed2144e63a5 /src | |
| parent | d562de503908fab696b5992af152dabbd6283d11 (diff) | |
Org writer: support starting number cookies
This complements #7806 by supporting writing Org ordered lists that
start at a specific number.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Writers/Org.hs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Writers/Org.hs b/src/Text/Pandoc/Writers/Org.hs index fed334f35..3b7845cc9 100644 --- a/src/Text/Pandoc/Writers/Org.hs +++ b/src/Text/Pandoc/Writers/Org.hs @@ -207,10 +207,9 @@ blockToOrg (OrderedList (start, _, delim) items) = do x -> x let markers = take (length items) $ orderedListMarkers (start, Decimal, delim') - let maxMarkerLength = maybe 0 maximum . nonEmpty $ map T.length markers - let markers' = map (\m -> let s = maxMarkerLength - T.length m - in m <> T.replicate s " ") markers - contents <- zipWithM orderedListItemToOrg markers' items + counters = (case start of 1 -> Nothing; n -> Just n) : repeat Nothing + contents <- zipWithM (\x f -> f x) items $ + zipWith orderedListItemToOrg markers counters -- ensure that sublists have preceding blank line return $ blankline $$ (if isTightList items then vcat else vsep) contents $$ @@ -232,12 +231,17 @@ bulletListItemToOrg items = do -- | Convert ordered list item (a list of blocks) to Org. orderedListItemToOrg :: PandocMonad m => Text -- ^ marker for list item + -> Maybe Int -- ^ maybe number for a counter cookie -> [Block] -- ^ list item (list of blocks) -> Org m (Doc Text) -orderedListItemToOrg marker items = do +orderedListItemToOrg marker counter items = do exts <- gets $ writerExtensions . stOptions contents <- blockListToOrg (taskListItemToOrg exts items) - return $ hang (T.length marker + 1) (literal marker <> space) contents $$ + let cookie = maybe empty + (\n -> space <> literal "[@" <> literal (tshow n) <> literal "]") + counter + return $ hang (T.length marker + 1) + (literal marker <> cookie <> space) contents $$ if endsWithPlain items then cr else blankline |
