@@ -780,7 +780,7 @@ makeTOC opts = do
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
@@ -809,12 +809,12 @@ writeOpenXML opts (Pandoc meta blocks) = do
809 let includeTOC = writerTableOfContents opts || lookupMetaBool "toc" meta
809 let includeTOC = writerTableOfContents opts || lookupMetaBool "toc" meta
810 title <- withParaPropM (pStyleM "Title") $ blocksToOpenXML opts [Para tit | not (null tit)]
810 title <- withParaPropM (pStyleM "Title") $ blocksToOpenXML opts [Para tit | not (null tit)]
811 subtitle <- withParaPropM (pStyleM "Subtitle") $ blocksToOpenXML opts [Para subtitle' | not (null subtitle')]
811 subtitle <- withParaPropM (pStyleM "Subtitle") $ blocksToOpenXML opts [Para subtitle' | not (null subtitle')]
812− authors <- withParaProp (pCustomStyle "Author") $ blocksToOpenXML opts $
812+ authors <- withParaPropM (pStyleM "Author") $ blocksToOpenXML opts $
813 map Para auths
813 map Para auths
814 date <- withParaPropM (pStyleM "Date") $ blocksToOpenXML opts [Para dat | not (null dat)]
814 date <- withParaPropM (pStyleM "Date") $ blocksToOpenXML opts [Para dat | not (null dat)]
815 abstract <- if null abstract'
815 abstract <- if null abstract'
816 then return []
816 then return []
817− else withParaProp (pCustomStyle "Abstract") $ blocksToOpenXML opts abstract'
817+ else withParaPropM (pStyleM "Abstract") $ blocksToOpenXML opts abstract'
818 let convertSpace (Str x : Space : Str y : xs) = Str (x ++ " " ++ y) : xs
818 let convertSpace (Str x : Space : Str y : xs) = Str (x ++ " " ++ y) : xs
819 convertSpace (Str x : Str y : xs) = Str (x ++ y) : xs
819 convertSpace (Str x : Str y : xs) = Str (x ++ y) : xs
820 convertSpace xs = xs
820 convertSpace xs = xs
@@ -848,18 +848,12 @@ writeOpenXML opts (Pandoc meta blocks) = do
848blocksToOpenXML :: (PandocMonad m) => WriterOptions -> [Block] -> WS m [Element]
848blocksToOpenXML :: (PandocMonad m) => WriterOptions -> [Block] -> WS m [Element]
849blocksToOpenXML opts bls = concat `fmap` mapM (blockToOpenXML opts) bls
849blocksToOpenXML opts bls = concat `fmap` mapM (blockToOpenXML opts) bls
851−pCustomStyle :: String -> Element
852−pCustomStyle sty = mknode "w:pStyle" [("w:val",sty)] ()
854pStyleM :: (PandocMonad m) => String -> WS m XML.Element
851pStyleM :: (PandocMonad m) => String -> WS m XML.Element
855pStyleM styleName = do
852pStyleM styleName = do
856 styleMaps <- gets stStyleMaps
853 styleMaps <- gets stStyleMaps
857 let sty' = getStyleId styleName $ sParaStyleMap styleMaps
854 let sty' = getStyleId styleName $ sParaStyleMap styleMaps
858 return $ mknode "w:pStyle" [("w:val",sty')] ()
855 return $ mknode "w:pStyle" [("w:val",sty')] ()
860−rCustomStyle :: String -> Element
861−rCustomStyle sty = mknode "w:rStyle" [("w:val",sty)] ()
863rStyleM :: (PandocMonad m) => String -> WS m XML.Element
857rStyleM :: (PandocMonad m) => String -> WS m XML.Element
864rStyleM styleName = do
858rStyleM styleName = do
865 styleMaps <- gets stStyleMaps
859 styleMaps <- gets stStyleMaps
@@ -921,19 +915,19 @@ blockToOpenXML' opts (Header lev (ident,_,_) lst) = do
921blockToOpenXML' opts (Plain lst) = do
915blockToOpenXML' opts (Plain lst) = do
922 isInTable <- gets stInTable
916 isInTable <- gets stInTable
923 let block = blockToOpenXML opts (Para lst)
917 let block = blockToOpenXML opts (Para lst)
918+ prop <- pStyleM "Compact"
924− para <- if isInTable then withParaProp (pCustomStyle "Compact") block else block
919+ para <- if isInTable then withParaProp prop block else block
925 return $ para
920 return $ para
927-- title beginning with fig: indicates that the image is a figure
921-- title beginning with fig: indicates that the image is a figure
928blockToOpenXML' opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) = do
922blockToOpenXML' opts (Para [Image attr alt (src,'f':'i':'g':':':tit)]) = do
929 setFirstPara
923 setFirstPara
930− let prop = pCustomStyle $
924+ prop <- pStyleM $
931 if null alt
925 if null alt
932 then "Figure"
926 then "Figure"
933− else "CaptionedFigure"
927+ else "Captioned Figure"
934 paraProps <- local (\env -> env { envParaProperties = EnvProps (Just prop) [] <> envParaProperties env }) (getParaProps False)
928 paraProps <- local (\env -> env { envParaProperties = EnvProps (Just prop) [] <> envParaProperties env }) (getParaProps False)
935 contents <- inlinesToOpenXML opts [Image attr alt (src,tit)]
929 contents <- inlinesToOpenXML opts [Image attr alt (src,tit)]
936− captionNode <- withParaProp (pCustomStyle "ImageCaption")
930+ captionNode <- withParaPropM (pStyleM "Image Caption")
937 $ blockToOpenXML opts (Para alt)
931 $ blockToOpenXML opts (Para alt)
938 return $ mknode "w:p" [] (paraProps ++ contents) : captionNode
932 return $ mknode "w:p" [] (paraProps ++ contents) : captionNode
939blockToOpenXML' opts (Para lst)
933blockToOpenXML' opts (Para lst)
@@ -944,10 +938,10 @@ blockToOpenXML' opts (Para lst)
944 [x] -> isDisplayMath x
938 [x] -> isDisplayMath x
945 _ -> False
939 _ -> False
946 paraProps <- getParaProps displayMathPara
940 paraProps <- getParaProps displayMathPara
941+ bodyTextStyle <- if isFirstPara
942+ then pStyleM "First Paragraph"
947− bodyTextStyle <- pStyleM "Body Text"
943+ else pStyleM "Body Text"
948 let paraProps' = case paraProps of
944 let paraProps' = case paraProps of
949− [] | isFirstPara -> [mknode "w:pPr" []
950− [pCustomStyle "FirstParagraph"]]
951 [] -> [mknode "w:pPr" [] [bodyTextStyle]]
945 [] -> [mknode "w:pPr" [] [bodyTextStyle]]
953 modify $ \s -> s { stFirstPara = False }
947 modify $ \s -> s { stFirstPara = False }
@@ -965,7 +959,7 @@ blockToOpenXML' opts (BlockQuote blocks) = do
965 setFirstPara
959 setFirstPara
967blockToOpenXML' opts (CodeBlock attrs@(ident, _, _) str) = do
961blockToOpenXML' opts (CodeBlock attrs@(ident, _, _) str) = do
968− p <- withParaProp (pCustomStyle "SourceCode") (blockToOpenXML opts $ Para [Code attrs str])
962+ p <- withParaPropM (pStyleM "Source Code") (blockToOpenXML opts $ Para [Code attrs str])
969 setFirstPara
963 setFirstPara
970 wrapBookmark ident p
964 wrapBookmark ident p
971blockToOpenXML' _ HorizontalRule = do
965blockToOpenXML' _ HorizontalRule = do
@@ -981,7 +975,7 @@ blockToOpenXML' opts (Table caption aligns widths headers rows) = do
981 let captionStr = stringify caption
975 let captionStr = stringify caption
982 caption' <- if null caption
976 caption' <- if null caption
983 then return []
977 then return []
984− else withParaProp (pCustomStyle "TableCaption")
978+ else withParaPropM (pStyleM "Table Caption")
985 $ blockToOpenXML opts (Para caption)
979 $ blockToOpenXML opts (Para caption)
986 let alignmentFor al = mknode "w:jc" [("w:val",alignmentToString al)] ()
980 let alignmentFor al = mknode "w:jc" [("w:val",alignmentToString al)] ()
987 -- Table cells require a <w:p> element, even an empty one!
981 -- Table cells require a <w:p> element, even an empty one!
@@ -997,7 +991,8 @@ blockToOpenXML' opts (Table caption aligns widths headers rows) = do
997 [ mknode "w:tcBorders" []
991 [ mknode "w:tcBorders" []
998 $ mknode "w:bottom" [("w:val","single")] ()
992 $ mknode "w:bottom" [("w:val","single")] ()
999 , mknode "w:vAlign" [("w:val","bottom")] () ]
993 , mknode "w:vAlign" [("w:val","bottom")] () ]
994+ compactStyle <- pStyleM "Compact"
1000− let emptyCell = [mknode "w:p" [] [mknode "w:pPr" [] [pCustomStyle "Compact"]]]
995+ let emptyCell = [mknode "w:p" [] [mknode "w:pPr" [] [compactStyle]]]
1001 let mkcell border contents = mknode "w:tc" []
996 let mkcell border contents = mknode "w:tc" []
1002 $ [ borderProps | border ] ++
997 $ [ borderProps | border ] ++
1003 if null contents
998 if null contents
@@ -1048,9 +1043,9 @@ blockToOpenXML' opts (DefinitionList items) = do
1049definitionListItemToOpenXML :: (PandocMonad m) => WriterOptions -> ([Inline],[[Block]]) -> WS m [Element]
1044definitionListItemToOpenXML :: (PandocMonad m) => WriterOptions -> ([Inline],[[Block]]) -> WS m [Element]
1050definitionListItemToOpenXML opts (term,defs) = do
1045definitionListItemToOpenXML opts (term,defs) = do
1051− term' <- withParaProp (pCustomStyle "DefinitionTerm")
1046+ term' <- withParaPropM (pStyleM "Definition Term")
1052 $ blockToOpenXML opts (Para term)
1047 $ blockToOpenXML opts (Para term)
1053− defs' <- withParaProp (pCustomStyle "Definition")
1048+ defs' <- withParaPropM (pStyleM "Definition")
1054 $ concat `fmap` mapM (blocksToOpenXML opts) defs
1049 $ concat `fmap` mapM (blocksToOpenXML opts) defs
1055 return $ term' ++ defs'
1050 return $ term' ++ defs'
@@ -1263,14 +1258,17 @@ inlineToOpenXML' opts (Math mathType str) = do
1263 Left il -> inlineToOpenXML' opts il
1258 Left il -> inlineToOpenXML' opts il
1264inlineToOpenXML' opts (Cite _ lst) = inlinesToOpenXML opts lst
1259inlineToOpenXML' opts (Cite _ lst) = inlinesToOpenXML opts lst
1265inlineToOpenXML' opts (Code attrs str) = do
1260inlineToOpenXML' opts (Code attrs str) = do
1261+ let alltoktypes = [KeywordTok ..]
1262+ tokTypesMap <- mapM (\tt -> (,) tt <$> rStyleM (show tt)) alltoktypes
1266 let unhighlighted = intercalate [br] `fmap`
1263 let unhighlighted = intercalate [br] `fmap`
1267 mapM formattedString (lines str)
1264 mapM formattedString (lines str)
1268 formatOpenXML _fmtOpts = intercalate [br] . map (map toHlTok)
1265 formatOpenXML _fmtOpts = intercalate [br] . map (map toHlTok)
1269− toHlTok (toktype,tok) = mknode "w:r" []
1266+ toHlTok (toktype,tok) =
1270− [ mknode "w:rPr" []
1268+ [ mknode "w:rPr" [] $
1271− [ rCustomStyle (show toktype) ]
1269+ maybeToList (lookup toktype tokTypesMap)
1272− , mknode "w:t" [("xml:space","preserve")] (T.unpack tok) ]
1270+ , mknode "w:t" [("xml:space","preserve")] (T.unpack tok) ]
1273− withTextProp (rCustomStyle "VerbatimChar")
1271+ withTextPropM (rStyleM "Verbatim Char")
1274 $ if isNothing (writerHighlightStyle opts)
1272 $ if isNothing (writerHighlightStyle opts)
1275 then unhighlighted
1273 then unhighlighted
1276 else case highlight (writerSyntaxMap opts)
1274 else case highlight (writerSyntaxMap opts)