@@ -1,4 +1,5 @@
1−{-# LANGUAGE ScopedTypeVariables, PatternGuards, ViewPatterns, DeriveFunctor #-}
1+{-# LANGUAGE ScopedTypeVariables, PatternGuards, ViewPatterns, DeriveFunctor,
2+ ScopedTypeVariables, RankNTypes #-}
3Copyright (C) 2012-2015 John MacFarlane <jgm@berkeley.edu>
4Copyright (C) 2012-2015 John MacFarlane <jgm@berkeley.edu>
@@ -1048,50 +1049,62 @@ inlineToOpenXML' :: PandocMonad m => WriterOptions -> Inline -> WS m [Element]
1048inlineToOpenXML' _ (Str str) = formattedString str
1049inlineToOpenXML' _ (Str str) = formattedString str
1049inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1050inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1050inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1051inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1051−inlineToOpenXML' opts (Span (ident,classes,kvs) ils)
1052+inlineToOpenXML' opts (Span (ident,classes,kvs) ils) = do
1052− | Just sty <- lookup dynamicStyleKey kvs = do
1053+ stylemod <- case lookup dynamicStyleKey kvs of
1053− let kvs' = filter ((dynamicStyleKey, sty)/=) kvs
1054+ Just sty -> do
1054− modify $ \s -> s{stDynamicTextProps = sty : (stDynamicTextProps s)}
1056+ s{stDynamicTextProps = sty : (stDynamicTextProps s)}
1055− withTextProp (rCustomStyle sty) $
1057+ return $ withTextProp (rCustomStyle sty)
1056− inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1058+ _ -> return id
1057− | Just "rtl" <- lookup "dir" kvs = do
1059+ let dirmod = case lookup "dir" kvs of
1058− let kvs' = filter (("dir", "rtl")/=) kvs
1059− local (\env -> env { envRTL = True }) $
1060+ Just "rtl" -> local (\env -> env { envRTL = True })
1060− inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1061− | Just "ltr" <- lookup "dir" kvs = do
1062− let kvs' = filter (("dir", "ltr")/=) kvs
1063− local (\env -> env { envRTL = False }) $
1061+ Just "ltr" -> local (\env -> env { envRTL = False })
1064− inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1062+ _ -> id
1065− | "insertion" `elem` classes = do
1066− defaultAuthor <- asks envChangesAuthor
1067− defaultDate <- asks envChangesDate
1068− let author = fromMaybe defaultAuthor (lookup "author" kvs)
1069− date = fromMaybe defaultDate (lookup "date" kvs)
1070− insId <- gets stInsId
1071− modify $ \s -> s{stInsId = (insId + 1)}
1072− x <- inlinesToOpenXML opts ils
1073− return [ mknode "w:ins" [("w:id", (show insId)),
1074− ("w:author", author),
1077− | "deletion" `elem` classes = do
1078− defaultAuthor <- asks envChangesAuthor
1079− defaultDate <- asks envChangesDate
1080− let author = fromMaybe defaultAuthor (lookup "author" kvs)
1081− date = fromMaybe defaultDate (lookup "date" kvs)
1082− delId <- gets stDelId
1083− modify $ \s -> s{stDelId = (delId + 1)}
1084− x <- local (\env -> env {envInDel = True}) (inlinesToOpenXML opts ils)
1085− return [ mknode "w:del" [("w:id", (show delId)),
1086− ("w:author", author),
1090− let off x = withTextProp (mknode x [("w:val","0")] ())
1063+ let off x = withTextProp (mknode x [("w:val","0")] ())
1091− ((if "csl-no-emph" `elem` classes then off "w:i" else id) .
1064+ let pmod = (if "csl-no-emph" `elem` classes then off "w:i" else id) .
1092− (if "csl-no-strong" `elem` classes then off "w:b" else id) .
1065+ (if "csl-no-strong" `elem` classes then off "w:b" else id) .
1093− (if "csl-no-smallcaps" `elem` classes then off "w:smallCaps" else id))
1066+ (if "csl-no-smallcaps" `elem` classes
1067+ then off "w:smallCaps"
1069+ insmod <- if "insertion" `elem` classes
1071+ defaultAuthor <- asks envChangesAuthor
1072+ defaultDate <- asks envChangesDate
1073+ let author = fromMaybe defaultAuthor (lookup "author" kvs)
1074+ date = fromMaybe defaultDate (lookup "date" kvs)
1075+ insId <- gets stInsId
1076+ modify $ \s -> s{stInsId = (insId + 1)}
1079+ return $ [ mknode "w:ins"
1080+ [("w:id", (show insId)),
1081+ ("w:author", author),
1082+ ("w:date", date)] x]
1084+ delmod <- if "insertion" `elem` classes
1086+ defaultAuthor <- asks envChangesAuthor
1087+ defaultDate <- asks envChangesDate
1088+ let author = fromMaybe defaultAuthor (lookup "author" kvs)
1089+ date = fromMaybe defaultDate (lookup "date" kvs)
1090+ insId <- gets stInsId
1091+ modify $ \s -> s{stInsId = (insId + 1)}
1094+ return [mknode "w:ins"
1095+ [("w:id", (show insId)),
1096+ ("w:author", author),
1097+ ("w:date", date)] x]
1099+ contents <- insmod $ delmod $ dirmod $ stylemod $ pmod
1094− $ inlinesToOpenXML opts ils
1100+ $ inlinesToOpenXML opts ils
1102+ let bookmarkStart = mknode "w:bookmarkStart" [("w:id", id')
1103+ ,("w:name",ident)] ()
1104+ let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()
1105+ return $ if null ident
1107+ else bookmarkStart : contents ++ [bookmarkEnd]
1095inlineToOpenXML' opts (Strong lst) =
1108inlineToOpenXML' opts (Strong lst) =
1096 withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst
1109 withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst
1097inlineToOpenXML' opts (Emph lst) =
1110inlineToOpenXML' opts (Emph lst) =