@@ -208,7 +208,7 @@ writeDocx opts doc@(Pandoc meta _) = do
208 let doc' = walk fixDisplayMath doc
208 let doc' = walk fixDisplayMath doc
209 username <- P.lookupEnv "USERNAME"
209 username <- P.lookupEnv "USERNAME"
210 utctime <- P.getCurrentTime
210 utctime <- P.getCurrentTime
211− distArchive <- (toArchive . BL.fromStrict) <$> do
211+ distArchive <- toArchive . BL.fromStrict <$> do
212 oldUserDataDir <- P.getUserDataDir
212 oldUserDataDir <- P.getUserDataDir
213 P.setUserDataDir Nothing
213 P.setUserDataDir Nothing
214 res <- P.readDefaultDataFile "reference.docx"
214 res <- P.readDefaultDataFile "reference.docx"
@@ -216,7 +216,7 @@ writeDocx opts doc@(Pandoc meta _) = do
216 return res
216 return res
217 refArchive <- case writerReferenceDoc opts of
217 refArchive <- case writerReferenceDoc opts of
218 Just f -> toArchive <$> P.readFileLazy f
218 Just f -> toArchive <$> P.readFileLazy f
219− Nothing -> (toArchive . BL.fromStrict) <$>
219+ Nothing -> toArchive . BL.fromStrict <$>
220 P.readDataFile "reference.docx"
220 P.readDataFile "reference.docx"
222 parsedDoc <- parseXml refArchive distArchive "word/document.xml"
222 parsedDoc <- parseXml refArchive distArchive "word/document.xml"
@@ -237,7 +237,7 @@ writeDocx opts doc@(Pandoc meta _) = do
237 >>= subtrct mbAttrMarRight
237 >>= subtrct mbAttrMarRight
238 >>= subtrct mbAttrMarLeft
238 >>= subtrct mbAttrMarLeft
240− subtrct mbStr = \x -> mbStr >>= safeRead >>= (\y -> Just $ x - y)
240+ subtrct mbStr x = mbStr >>= safeRead >>= (\y -> Just $ x - y)
242 -- styles
242 -- styles
243 mblang <- toLang $ getLang opts meta
243 mblang <- toLang $ getLang opts meta
@@ -285,7 +285,7 @@ writeDocx opts doc@(Pandoc meta _) = do
285 envRTL = isRTLmeta
285 envRTL = isRTLmeta
286 , envChangesAuthor = fromMaybe "unknown" username
286 , envChangesAuthor = fromMaybe "unknown" username
287 , envChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
287 , envChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
288− , envPrintWidth = maybe 420 (\x -> quot x 20) pgContentWidth
288+ , envPrintWidth = maybe 420 (`quot` 20) pgContentWidth
@@ -366,7 +366,7 @@ writeDocx opts doc@(Pandoc meta _) = do
366 map (\x -> (maybe "" ("/word/" ++) $ extractTarget x,
366 map (\x -> (maybe "" ("/word/" ++) $ extractTarget x,
367 "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml")) footers) ++
367 "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml")) footers) ++
368 map mkImageOverride imgs ++
368 map mkImageOverride imgs ++
369− map mkMediaOverride [ eRelativePath e | e <- zEntries refArchive
369+ [ mkMediaOverride (eRelativePath e) | e <- zEntries refArchive
370 , "word/media/" `isPrefixOf` eRelativePath e ]
370 , "word/media/" `isPrefixOf` eRelativePath e ]
372 let defaultnodes = [mknode "Default"
372 let defaultnodes = [mknode "Default"
@@ -589,8 +589,8 @@ writeDocx opts doc@(Pandoc meta _) = do
589 mapMaybe (fmap ("word/" ++) . extractTarget)
589 mapMaybe (fmap ("word/" ++) . extractTarget)
590 (headers ++ footers)
590 (headers ++ footers)
591 let miscRelEntries = [ e | e <- zEntries refArchive
591 let miscRelEntries = [ e | e <- zEntries refArchive
592− , "word/_rels/" `isPrefixOf` (eRelativePath e)
592+ , "word/_rels/" `isPrefixOf` eRelativePath e
593− , ".xml.rels" `isSuffixOf` (eRelativePath e)
593+ , ".xml.rels" `isSuffixOf` eRelativePath e
594 , eRelativePath e /= "word/_rels/document.xml.rels"
594 , eRelativePath e /= "word/_rels/document.xml.rels"
595 , eRelativePath e /= "word/_rels/footnotes.xml.rels" ]
595 , eRelativePath e /= "word/_rels/footnotes.xml.rels" ]
596 let otherMediaEntries = [ e | e <- zEntries refArchive
596 let otherMediaEntries = [ e | e <- zEntries refArchive
@@ -778,24 +778,24 @@ makeTOC opts = do
778 tocTitle <- gets stTocTitle
778 tocTitle <- gets stTocTitle
779 title <- withParaPropM (pStyleM "TOC Heading") (blocksToOpenXML opts [Para tocTitle])
779 title <- withParaPropM (pStyleM "TOC Heading") (blocksToOpenXML opts [Para tocTitle])
781− [mknode "w:sdt" [] ([
781+ [mknode "w:sdt" [] [
782 mknode "w:sdtPr" [] (
782 mknode "w:sdtPr" [] (
783− mknode "w:docPartObj" [] (
783+ mknode "w:docPartObj" []
784 [mknode "w:docPartGallery" [("w:val","Table of Contents")] (),
784 [mknode "w:docPartGallery" [("w:val","Table of Contents")] (),
785 mknode "w:docPartUnique" [] ()]
785 mknode "w:docPartUnique" [] ()]
786− ) -- w:docPartObj
786+ -- w:docPartObj
787 ), -- w:sdtPr
787 ), -- w:sdtPr
788 mknode "w:sdtContent" [] (title++[
788 mknode "w:sdtContent" [] (title++[
789 mknode "w:p" [] (
789 mknode "w:p" [] (
790− mknode "w:r" [] ([
790+ mknode "w:r" [] [
791 mknode "w:fldChar" [("w:fldCharType","begin"),("w:dirty","true")] (),
791 mknode "w:fldChar" [("w:fldCharType","begin"),("w:dirty","true")] (),
792 mknode "w:instrText" [("xml:space","preserve")] tocCmd,
792 mknode "w:instrText" [("xml:space","preserve")] tocCmd,
793 mknode "w:fldChar" [("w:fldCharType","separate")] (),
793 mknode "w:fldChar" [("w:fldCharType","separate")] (),
794 mknode "w:fldChar" [("w:fldCharType","end")] ()
794 mknode "w:fldChar" [("w:fldCharType","end")] ()
795− ]) -- w:r
795+ ] -- w:r
798− ])] -- w:sdt
798+ ]] -- w:sdt
800-- | Convert Pandoc document to two lists of
800-- | Convert Pandoc document to two lists of
801-- OpenXML elements (the main document and footnotes).
801-- OpenXML elements (the main document and footnotes).
@@ -1030,20 +1030,17 @@ blockToOpenXML' opts (Table caption aligns widths headers rows) = do
1030 : [ mkrow True headers' | hasHeader ] ++
1030 : [ mkrow True headers' | hasHeader ] ++
1031 map (mkrow False) rows'
1031 map (mkrow False) rows'
1033−blockToOpenXML' opts (BulletList lst) = do
1033+blockToOpenXML' opts el
1034− let marker = BulletMarker
1034+ | BulletList lst <- el = addOpenXMLList BulletMarker lst
1037− l <- asList $ concat `fmap` mapM (listItemToOpenXML opts numid) lst
1040−blockToOpenXML' opts (OrderedList (start, numstyle, numdelim) lst) = do
1035+ | OrderedList (start, numstyle, numdelim) lst <- el
1041− let marker = NumberMarker numstyle numdelim start
1036+ = addOpenXMLList (NumberMarker numstyle numdelim start) lst
1038+ addOpenXMLList marker lst = do
1042− addList marker
1039+ addList marker
1043− numid <- getNumId
1040+ numid <- getNumId
1044− l <- asList $ concat `fmap` mapM (listItemToOpenXML opts numid) lst
1041+ l <- asList $ concat `fmap` mapM (listItemToOpenXML opts numid) lst
1045− setFirstPara
1042+ setFirstPara
1046− return l
1043+ return l
1047blockToOpenXML' opts (DefinitionList items) = do
1044blockToOpenXML' opts (DefinitionList items) = do
1048 l <- concat `fmap` mapM (definitionListItemToOpenXML opts) items
1045 l <- concat `fmap` mapM (definitionListItemToOpenXML opts) items
1049 setFirstPara
1046 setFirstPara
@@ -1159,7 +1156,7 @@ inlineToOpenXML' _ (Str str) =
1159 formattedString str
1156 formattedString str
1160inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1157inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1161inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1158inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1162−inlineToOpenXML' opts (Span (_,["underline"],_) ils) = do
1159+inlineToOpenXML' opts (Span (_,["underline"],_) ils) =
1163 withTextProp (mknode "w:u" [("w:val","single")] ()) $
1160 withTextProp (mknode "w:u" [("w:val","single")] ()) $
1164 inlinesToOpenXML opts ils
1161 inlinesToOpenXML opts ils
1165inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do
1162inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do
@@ -1192,18 +1189,21 @@ inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do
1192 Just "rtl" -> local (\env -> env { envRTL = True })
1189 Just "rtl" -> local (\env -> env { envRTL = True })
1193 Just "ltr" -> local (\env -> env { envRTL = False })
1190 Just "ltr" -> local (\env -> env { envRTL = False })
1195− let off x = withTextProp (mknode x [("w:val","0")] ())
1192+ off x = withTextProp (mknode x [("w:val","0")] ())
1196− let pmod = (if "csl-no-emph" `elem` classes then off "w:i" else id) .
1193+ pmod = (if "csl-no-emph" `elem` classes then off "w:i" else id) .
1197 (if "csl-no-strong" `elem` classes then off "w:b" else id) .
1194 (if "csl-no-strong" `elem` classes then off "w:b" else id) .
1198 (if "csl-no-smallcaps" `elem` classes
1195 (if "csl-no-smallcaps" `elem` classes
1199 then off "w:smallCaps"
1196 then off "w:smallCaps"
1200 else id)
1197 else id)
1198+ getChangeAuthorDate = do
1199+ defaultAuthor <- asks envChangesAuthor
1200+ defaultDate <- asks envChangesDate
1201+ let author = fromMaybe defaultAuthor (lookup "author" kvs)
1202+ date = fromMaybe defaultDate (lookup "date" kvs)
1203+ return (author, date)
1201 insmod <- if "insertion" `elem` classes
1204 insmod <- if "insertion" `elem` classes
1203− defaultAuthor <- asks envChangesAuthor
1206+ (author, date) <- getChangeAuthorDate
1204− defaultDate <- asks envChangesDate
1205− let author = fromMaybe defaultAuthor (lookup "author" kvs)
1206− date = fromMaybe defaultDate (lookup "date" kvs)
1207 insId <- gets stInsId
1207 insId <- gets stInsId
1208 modify $ \s -> s{stInsId = insId + 1}
1208 modify $ \s -> s{stInsId = insId + 1}
1209 return $ \f -> do
1209 return $ \f -> do
@@ -1215,10 +1215,7 @@ inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do
1215 else return id
1215 else return id
1216 delmod <- if "deletion" `elem` classes
1216 delmod <- if "deletion" `elem` classes
1218− defaultAuthor <- asks envChangesAuthor
1218+ (author, date) <- getChangeAuthorDate
1219− defaultDate <- asks envChangesDate
1220− let author = fromMaybe defaultAuthor (lookup "author" kvs)
1221− date = fromMaybe defaultDate (lookup "date" kvs)
1222 delId <- gets stDelId
1219 delId <- gets stDelId
1223 modify $ \s -> s{stDelId = delId + 1}
1220 modify $ \s -> s{stDelId = delId + 1}
1224 return $ \f -> local (\env->env{envInDel=True}) $ do
1221 return $ \f -> local (\env->env{envInDel=True}) $ do
@@ -1431,12 +1428,12 @@ defaultFootnotes :: [Element]
1431defaultFootnotes = [ mknode "w:footnote"
1428defaultFootnotes = [ mknode "w:footnote"
1432 [("w:type", "separator"), ("w:id", "-1")]
1429 [("w:type", "separator"), ("w:id", "-1")]
1433 [ mknode "w:p" []
1430 [ mknode "w:p" []
1434− [mknode "w:r" [] $
1431+ [mknode "w:r" []
1435 [ mknode "w:separator" [] ()]]]
1432 [ mknode "w:separator" [] ()]]]
1436 , mknode "w:footnote"
1433 , mknode "w:footnote"
1437 [("w:type", "continuationSeparator"), ("w:id", "0")]
1434 [("w:type", "continuationSeparator"), ("w:id", "0")]
1438 [ mknode "w:p" []
1435 [ mknode "w:p" []
1439− [ mknode "w:r" [] $
1436+ [ mknode "w:r" []
1440 [ mknode "w:continuationSeparator" [] ()]]]]
1437 [ mknode "w:continuationSeparator" [] ()]]]]