summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesse Rosenthal <jrosenthal@jhu.edu>2018-01-27 07:21:25 -0500
committerJesse Rosenthal <jrosenthal@jhu.edu>2018-01-27 07:41:55 -0500
commitae2157fe8bca342ba23881e0f5dfba8d9fb07d84 (patch)
tree814d9252e09f09a17c8855f0c204da5da2c3c4f3 /src
parent61f80e795d527cb0a8e084395d60bf553ee85c2c (diff)
Docx writer: Fix ids in comment writing
Comments from `--track-changes=all` were producing corrupt docx, because the writer was trying to get id from the `(ID,_,_)` field of the attributes, and ignoring the "id" entry in the key-value pairs. We now check both. There is a larger conversation to be had about the right way to treat "id" and "class" entries in kvs, but this fix will correctly interpret the output of the docx reader work.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Writers/Docx.hs26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
index 7cbc946cc..ffecb7c7f 100644
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -1104,15 +1104,23 @@ inlineToOpenXML' _ (Str str) =
inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do
- modify $ \st -> st{ stComments = (("id",ident):kvs, ils) : stComments st }
- return [ mknode "w:commentRangeStart" [("w:id", ident)] () ]
-inlineToOpenXML' _ (Span (ident,["comment-end"],_) _) =
- return [ mknode "w:commentRangeEnd" [("w:id", ident)] ()
- , mknode "w:r" []
- [ mknode "w:rPr" []
- [ mknode "w:rStyle" [("w:val", "CommentReference")] () ]
- , mknode "w:commentReference" [("w:id", ident)] () ]
- ]
+ -- prefer the "id" in kvs, since that is the one produced by the docx
+ -- reader.
+ let ident' = fromMaybe ident (lookup "id" kvs)
+ kvs' = filter (("id" /=) . fst) kvs
+ modify $ \st -> st{ stComments = (("id",ident'):kvs', ils) : stComments st }
+ return [ mknode "w:commentRangeStart" [("w:id", ident')] () ]
+inlineToOpenXML' _ (Span (ident,["comment-end"],kvs) _) =
+ -- prefer the "id" in kvs, since that is the one produced by the docx
+ -- reader.
+ let ident' = fromMaybe ident (lookup "id" kvs)
+ in
+ return [ mknode "w:commentRangeEnd" [("w:id", ident')] ()
+ , mknode "w:r" []
+ [ mknode "w:rPr" []
+ [ mknode "w:rStyle" [("w:val", "CommentReference")] () ]
+ , mknode "w:commentReference" [("w:id", ident')] () ]
+ ]
inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do
stylemod <- case lookup dynamicStyleKey kvs of
Just sty -> do