aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs13
-rw-r--r--test/command/5369.md7
2 files changed, 16 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index 1a651e57f..4964fbad0 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -306,17 +306,22 @@ attrsToMarkdown :: Attr -> Doc
attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
where attribId = case attribs of
([],_,_) -> empty
- (i,_,_) -> "#" <> text i
+ (i,_,_) -> "#" <> escAttr i
attribClasses = case attribs of
(_,[],_) -> empty
(_,cs,_) -> hsep $
- map (text . ('.':))
+ map (escAttr . ('.':))
cs
attribKeys = case attribs of
(_,_,[]) -> empty
(_,_,ks) -> hsep $
- map (\(k,v) -> text k
- <> "=\"" <> text v <> "\"") ks
+ map (\(k,v) -> escAttr k
+ <> "=\"" <>
+ escAttr v <> "\"") ks
+ escAttr = mconcat . map escAttrChar
+ escAttrChar '"' = text "\\\""
+ escAttrChar '\\' = text "\\\\"
+ escAttrChar c = text [c]
linkAttributes :: WriterOptions -> Attr -> Doc
linkAttributes opts attr =
diff --git a/test/command/5369.md b/test/command/5369.md
new file mode 100644
index 000000000..2f3305c33
--- /dev/null
+++ b/test/command/5369.md
@@ -0,0 +1,7 @@
+```
+% pandoc -f native -t markdown
+[Div ("",[],[("tags","[\"o\\ne\",\"two\"]")]) [] ]
+^D
+::: {tags="[\"o\\ne\",\"two\"]"}
+:::
+```