From d6fdfe6f2bba2a8ed25d6c9f11861774001f7a91 Mon Sep 17 00:00:00 2001 From: John MacFarlane <jgm@berkeley.edu> Date: Fri, 23 Aug 2019 10:00:10 -0700 Subject: [PATCH] Asciidoc writer: handle admonitions. Closes #5690. --- src/Text/Pandoc/Writers/AsciiDoc.hs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Text/Pandoc/Writers/AsciiDoc.hs b/src/Text/Pandoc/Writers/AsciiDoc.hs index d0bbc5784..bc895c437 100644 --- a/src/Text/Pandoc/Writers/AsciiDoc.hs +++ b/src/Text/Pandoc/Writers/AsciiDoc.hs @@ -22,7 +22,7 @@ AsciiDoc: <http://www.methods.co.nz/asciidoc/> module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc, writeAsciiDoctor) where import Prelude import Control.Monad.State.Strict -import Data.Char (isPunctuation, isSpace, toLower) +import Data.Char (isPunctuation, isSpace, toLower, toUpper) import Data.List (intercalate, intersperse, stripPrefix) import Data.Maybe (fromMaybe, isJust, listToMaybe) import qualified Data.Set as Set @@ -279,9 +279,28 @@ blockToAsciiDoc opts (DefinitionList items) = do contents <- mapM (definitionListItemToAsciiDoc opts) items modify $ \st -> st{ inList = inlist } return $ cat contents <> blankline -blockToAsciiDoc opts (Div (ident,_,_) bs) = do +blockToAsciiDoc opts (Div (ident,classes,_) bs) = do let identifier = if null ident then empty else "[[" <> text ident <> "]]" - contents <- blockListToAsciiDoc opts bs + let admonitions = ["attention","caution","danger","error","hint", + "important","note","tip","warning"] + contents <- + case classes of + (l:_) | l `elem` admonitions -> do + let (titleBs, bodyBs) = + case bs of + (Div (_,["title"],_) ts : rest) -> (ts, rest) + _ -> ([], bs) + admonitionTitle <- if null titleBs + then return mempty + else ("." <>) <$> + blockListToAsciiDoc opts titleBs + admonitionBody <- blockListToAsciiDoc opts bodyBs + return $ "[" <> text (map toUpper l) <> "]" $$ + chomp admonitionTitle $$ + "====" $$ + chomp admonitionBody $$ + "====" + _ -> blockListToAsciiDoc opts bs return $ identifier $$ contents -- | Convert bullet list item (list of blocks) to asciidoc.