git.iko.soy/typeable/pandoc
on master help sign in
Asciidoc writer: handle admonitions.

Closes #5690.

commitd6fdfe6f2bba2a8ed25d6c9f11861774001f7a91 authorJohn MacFarlane <jgm@berkeley.edu> dateFri 23 Aug 2019, 10:00 (7 years ago) parent8e01ccb
1 file changed+22−3
src/Text/Pandoc/Writers/AsciiDoc.hs+22−3
src/Text/Pandoc/Writers/AsciiDoc.hs+22−3
@@ -22,7 +22,7 @@ AsciiDoc: <http://www.methods.co.nz/asciidoc/>
2222module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc, writeAsciiDoctor) where
2323import Prelude
2424import Control.Monad.State.Strict
25−import Data.Char (isPunctuation, isSpace, toLower)
25+import Data.Char (isPunctuation, isSpace, toLower, toUpper)
2626import Data.List (intercalate, intersperse, stripPrefix)
2727import Data.Maybe (fromMaybe, isJust, listToMaybe)
2828import qualified Data.Set as Set
@@ -279,9 +279,28 @@ blockToAsciiDoc opts (DefinitionList items) = do
279279 contents <- mapM (definitionListItemToAsciiDoc opts) items
280280 modify $ \st -> st{ inList = inlist }
281281 return $ cat contents <> blankline
282−blockToAsciiDoc opts (Div (ident,_,_) bs) = do
282+blockToAsciiDoc opts (Div (ident,classes,_) bs) = do
283283 let identifier = if null ident then empty else "[[" <> text ident <> "]]"
284− contents <- blockListToAsciiDoc opts bs
284+ let admonitions = ["attention","caution","danger","error","hint",
285+ "important","note","tip","warning"]
286+ contents <-
287+ case classes of
288+ (l:_) | l `elem` admonitions -> do
289+ let (titleBs, bodyBs) =
290+ case bs of
291+ (Div (_,["title"],_) ts : rest) -> (ts, rest)
292+ _ -> ([], bs)
293+ admonitionTitle <- if null titleBs
294+ then return mempty
295+ else ("." <>) <$>
296+ blockListToAsciiDoc opts titleBs
297+ admonitionBody <- blockListToAsciiDoc opts bodyBs
298+ return $ "[" <> text (map toUpper l) <> "]" $$
299+ chomp admonitionTitle $$
300+ "====" $$
301+ chomp admonitionBody $$
302+ "===="
303+ _ -> blockListToAsciiDoc opts bs
285304 return $ identifier $$ contents
286305
287306-- | Convert bullet list item (list of blocks) to asciidoc.