@@ -44,7 +44,7 @@ import Data.Aeson (Result (..), Value (String), fromJSON, toJSON)
4444import Data.Char (isPunctuation, isSpace)
4545import Data.List (intercalate, intersperse, stripPrefix)
4646import qualified Data.Map as M
47−import Data.Maybe (fromMaybe, isJust)
47+import Data.Maybe (fromMaybe, isJust, listToMaybe)
4848import qualified Data.Set as Set
4949import Data.Text (Text)
5050import qualified Data.Text as T
@@ -126,11 +126,16 @@ olMarker = do (start, style', delim) <- anyOrderedListMarker
126126 else spaceChar
127127
128128-- | True if string begins with an ordered list marker
129−beginsWithOrderedListMarker :: String -> Bool
130−beginsWithOrderedListMarker str =
131− case runParser olMarker defaultParserState "para start" (take 10 str) of
132− Left _ -> False
133− Right _ -> True
129+-- or would be interpreted as an AsciiDoc option command
130+needsEscaping :: String -> Bool
131+needsEscaping s = beginsWithOrderedListMarker s || isBracketed s
132+ where
133+ beginsWithOrderedListMarker str =
134+ case runParser olMarker defaultParserState "para start" (take 10 str) of
135+ Left _ -> False
136+ Right _ -> True
137+ isBracketed ('[':cs) = listToMaybe (reverse cs) == Just ']'
138+ isBracketed _ = False
134139
135140-- | Convert Pandoc block element to asciidoc.
136141blockToAsciiDoc :: PandocMonad m
@@ -146,8 +151,8 @@ blockToAsciiDoc opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) =
146151blockToAsciiDoc opts (Para inlines) = do
147152 contents <- inlineListToAsciiDoc opts inlines
148153 -- escape if para starts with ordered list marker
149− let esc = if beginsWithOrderedListMarker (render Nothing contents)
150− then text "\\"
154+ let esc = if needsEscaping (render Nothing contents)
155+ then text "{empty}"
151156 else empty
152157 return $ esc <> contents <> blankline
153158blockToAsciiDoc opts (LineBlock lns) = do