diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-08-23 10:00:10 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-08-23 10:00:10 -0700 |
commit | d6fdfe6f2bba2a8ed25d6c9f11861774001f7a91 (patch) | |
tree | b6fbe3957d062aa30c494f4fbcf9627f16dc06e1 /src/Text | |
parent | 8e01ccb41dde8a5e6123f5b0746c36f240576047 (diff) | |
download | pandoc-d6fdfe6f2bba2a8ed25d6c9f11861774001f7a91.tar.gz |
Asciidoc writer: handle admonitions.
Closes #5690.
Diffstat (limited to 'src/Text')
-rw-r--r-- | src/Text/Pandoc/Writers/AsciiDoc.hs | 25 |
1 files 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. |