aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/AsciiDoc.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2019-08-23 10:00:10 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2019-08-23 10:00:10 -0700
commitd6fdfe6f2bba2a8ed25d6c9f11861774001f7a91 (patch)
treeb6fbe3957d062aa30c494f4fbcf9627f16dc06e1 /src/Text/Pandoc/Writers/AsciiDoc.hs
parent8e01ccb41dde8a5e6123f5b0746c36f240576047 (diff)
downloadpandoc-d6fdfe6f2bba2a8ed25d6c9f11861774001f7a91.tar.gz
Asciidoc writer: handle admonitions.
Closes #5690.
Diffstat (limited to 'src/Text/Pandoc/Writers/AsciiDoc.hs')
-rw-r--r--src/Text/Pandoc/Writers/AsciiDoc.hs25
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.