git.iko.soy/typeable/pandoc
on master help sign in
AsciiDoc Writer: escape square brackets at start of line (#4708)

closes #4545

commit5809d5bef2de59757fc9cd72c6508b8cfeeae186 authorMauro Bieg <mb21@users.noreply.github.com> dateThu 12 Jul 2018, 19:37 (8 years ago) parente56a1a3
2 files changed+33−8
src/Text/Pandoc/Writers/AsciiDoc.hs+13−8 test/command/4545.md+20
src/Text/Pandoc/Writers/AsciiDoc.hs+13−8
@@ -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
test/command/4545.mdnew file+20
@@ -0,0 +1,20 @@
1+```
2+% pandoc -t asciidoc
3+Test 1
4+
5+[my text]
6+
7+Test 2
8+^D
9+Test 1
10+
11+{empty}[my text]
12+
13+Test 2
14+```
15+```
16+% pandoc -t asciidoc
17+4\. foo
18+^D
19+{empty}4. foo
20+```