@@ -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 =