@@ -40,7 +40,7 @@ AsciiDoc: <http://www.methods.co.nz/asciidoc/>
4040module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc) where
4141import Prelude
4242import Control.Monad.State.Strict
43−import Data.Char (isPunctuation, isSpace)
43+import Data.Char (isPunctuation, isSpace, toLower)
4444import Data.List (intercalate, intersperse, stripPrefix)
4545import Data.Maybe (fromMaybe, isJust, listToMaybe)
4646import qualified Data.Set as Set
@@ -258,17 +258,18 @@ blockToAsciiDoc opts (Table caption aligns widths headers rows) = do
258258blockToAsciiDoc opts (BulletList items) = do
259259 contents <- mapM (bulletListItemToAsciiDoc opts) items
260260 return $ cat contents <> blankline
261−blockToAsciiDoc opts (OrderedList (_start, sty, _delim) items) = do
262− let sty' = case sty of
263− UpperRoman -> UpperAlpha
264− LowerRoman -> LowerAlpha
265− x -> x
266− let markers = orderedListMarkers (1, sty', Period) -- start num not used
267− let markers' = map (\m -> if length m < 3
268− then m ++ replicate (3 - length m) ' '
269− else m) markers
270− contents <- zipWithM (orderedListItemToAsciiDoc opts) markers' items
271− return $ cat contents <> blankline
261+blockToAsciiDoc opts (OrderedList (start, sty, _delim) items) = do
262+ let listStyle = case sty of
263+ DefaultStyle -> []
264+ Decimal -> ["arabic"]
265+ Example -> []
266+ _ -> [map toLower (show sty)]
267+ let listStart = if start == 1 then [] else ["start=" ++ show start]
268+ let listoptions = case intercalate ", " (listStyle ++ listStart) of
269+ [] -> empty
270+ x -> brackets (text x)
271+ contents <- mapM (orderedListItemToAsciiDoc opts) items
272+ return $ listoptions $$ cat contents <> blankline
272273blockToAsciiDoc opts (DefinitionList items) = do
273274 contents <- mapM (definitionListItemToAsciiDoc opts) items
274275 return $ cat contents <> blankline
@@ -281,40 +282,34 @@ blockToAsciiDoc opts (Div (ident,_,_) bs) = do
281282bulletListItemToAsciiDoc :: PandocMonad m
282283 => WriterOptions -> [Block] -> ADW m Doc
283284bulletListItemToAsciiDoc opts blocks = do
284− let addBlock :: PandocMonad m => Doc -> Block -> ADW m Doc
285− addBlock d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b
286− addBlock d b@(BulletList _) = do x <- blockToAsciiDoc opts b
287− return $ d <> cr <> chomp x
288− addBlock d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b
289− return $ d <> cr <> chomp x
290− addBlock d b = do x <- blockToAsciiDoc opts b
291− return $ d <> cr <> text "+" <> cr <> chomp x
292285 lev <- gets bulletListLevel
293286 modify $ \s -> s{ bulletListLevel = lev + 1 }
294− contents <- foldM addBlock empty blocks
287+ contents <- foldM (addBlock opts) empty blocks
295288 modify $ \s -> s{ bulletListLevel = lev }
296289 let marker = text (replicate lev '*')
297290 return $ marker <> text " " <> contents <> cr
298291
292+addBlock :: PandocMonad m => WriterOptions -> Doc -> Block -> ADW m Doc
293+addBlock opts d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b
294+addBlock opts d b@(BulletList _) = do x <- blockToAsciiDoc opts b
295+ return $ d <> cr <> chomp x
296+addBlock opts d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b
297+ return $ d <> cr <> chomp x
298+addBlock opts d b = do x <- blockToAsciiDoc opts b
299+ return $ d <> cr <> text "+" <> cr <> chomp x
300+
299301-- | Convert ordered list item (a list of blocks) to asciidoc.
300302orderedListItemToAsciiDoc :: PandocMonad m
301303 => WriterOptions -- ^ options
302− -> String -- ^ list item marker
303304 -> [Block] -- ^ list item (list of blocks)
304305 -> ADW m Doc
305−orderedListItemToAsciiDoc opts marker blocks = do
306− let addBlock d b | isEmpty d = chomp `fmap` blockToAsciiDoc opts b
307− addBlock d b@(BulletList _) = do x <- blockToAsciiDoc opts b
308− return $ d <> cr <> chomp x
309− addBlock d b@(OrderedList _ _) = do x <- blockToAsciiDoc opts b
310− return $ d <> cr <> chomp x
311− addBlock d b = do x <- blockToAsciiDoc opts b
312− return $ d <> cr <> text "+" <> cr <> chomp x
306+orderedListItemToAsciiDoc opts blocks = do
313307 lev <- gets orderedListLevel
314308 modify $ \s -> s{ orderedListLevel = lev + 1 }
315− contents <- foldM addBlock empty blocks
309+ contents <- foldM (addBlock opts) empty blocks
316310 modify $ \s -> s{ orderedListLevel = lev }
317− return $ text marker <> text " " <> contents <> cr
311+ let marker = text (replicate lev '.')
312+ return $ marker <> text " " <> contents <> cr
318313
319314-- | Convert definition list item (label, list of blocks) to asciidoc.
320315definitionListItemToAsciiDoc :: PandocMonad m