git.iko.soy/typeable/pandoc
on master help sign in
Properly escape attributes in Markdown writer.

Closes #5369.

commit3880a23de9004748319bdf3ecced676d6e5b2ea0 authorJohn MacFarlane <jgm@berkeley.edu> dateSun 17 Mar 2019, 18:08 (8 years ago) parentebd7035
2 files changed+16−4
src/Text/Pandoc/Writers/Markdown.hs+9−4 test/command/5369.md+7
src/Text/Pandoc/Writers/Markdown.hs+9−4
@@ -306,17 +306,22 @@ attrsToMarkdown :: Attr -> Doc
306306attrsToMarkdown attribs = braces $ hsep [attribId, attribClasses, attribKeys]
307307 where attribId = case attribs of
308308 ([],_,_) -> empty
309− (i,_,_) -> "#" <> text i
309+ (i,_,_) -> "#" <> escAttr i
310310 attribClasses = case attribs of
311311 (_,[],_) -> empty
312312 (_,cs,_) -> hsep $
313− map (text . ('.':))
313+ map (escAttr . ('.':))
314314 cs
315315 attribKeys = case attribs of
316316 (_,_,[]) -> empty
317317 (_,_,ks) -> hsep $
318− map (\(k,v) -> text k
319− <> "=\"" <> text v <> "\"") ks
318+ map (\(k,v) -> escAttr k
319+ <> "=\"" <>
320+ escAttr v <> "\"") ks
321+ escAttr = mconcat . map escAttrChar
322+ escAttrChar '"' = text "\\\""
323+ escAttrChar '\\' = text "\\\\"
324+ escAttrChar c = text [c]
320325
321326linkAttributes :: WriterOptions -> Attr -> Doc
322327linkAttributes opts attr =
test/command/5369.mdnew file+7
@@ -0,0 +1,7 @@
1+```
2+% pandoc -f native -t markdown
3+[Div ("",[],[("tags","[\"o\\ne\",\"two\"]")]) [] ]
4+^D
5+::: {tags="[\"o\\ne\",\"two\"]"}
6+:::
7+```