@@ -40,12 +40,13 @@ import Data.List ( isPrefixOf, intersperse, intercalate, transpose )
4040import Text.Pandoc.Pretty
4141import Control.Monad.State
4242
43−data WriterState = WriterState { }
43+data WriterState = WriterState { defListMarker :: String }
4444
4545-- | Convert Pandoc to Asciidoc.
4646writeAsciidoc :: WriterOptions -> Pandoc -> String
4747writeAsciidoc opts document =
48− evalState (pandocToAsciidoc opts document) WriterState{ }
48+ evalState (pandocToAsciidoc opts document) WriterState{
49+ defListMarker = "::" }
4950
5051-- | Return markdown representation of document.
5152pandocToAsciidoc :: WriterOptions -> Pandoc -> State WriterState String
@@ -221,14 +222,16 @@ definitionListItemToAsciidoc :: WriterOptions
221222 -> State WriterState Doc
222223definitionListItemToAsciidoc opts (label, defs) = do
223224 labelText <- inlineListToAsciidoc opts label
224− let tabStop = writerTabStop opts
225− let leader = " ~"
226− let sps = case writerTabStop opts - 3 of
227− n | n > 0 -> text $ replicate n ' '
228− _ -> text " "
229− defs' <- mapM (mapM (blockToAsciidoc opts)) defs
230− let contents = vcat $ map (\d -> hang tabStop (leader <> sps) $ vcat d <> cr) defs'
231− return $ labelText <> cr <> contents <> cr
225+ marker <- defListMarker `fmap` get
226+ if marker == "::"
227+ then modify (\st -> st{ defListMarker = ";;"})
228+ else modify (\st -> st{ defListMarker = "::"})
229+ let defsToAsciidoc :: [Block] -> State WriterState Doc
230+ defsToAsciidoc ds = vcat `fmap` mapM (blockToAsciidoc opts) ds
231+ defs' <- mapM defsToAsciidoc defs
232+ modify (\st -> st{ defListMarker = marker })
233+ let contents = nest 2 $ vsep defs'
234+ return $ labelText <> text marker <> cr <> contents <> cr
232235
233236-- | Convert list of Pandoc block elements to markdown.
234237blockListToAsciidoc :: WriterOptions -- ^ Options