git.iko.soy/typeable/pandoc
on master help sign in
Add ReaderT env to the docx writer:
6a3d1cfJesse Rosenthal
src/Text/Pandoc/Writers/Docx.hs+17−8
@@ -54,6 +54,7 @@ import Text.XML.Light as XML
54import Text.TeXMath
54import Text.TeXMath
55import Text.Pandoc.Readers.Docx.StyleMap
55import Text.Pandoc.Readers.Docx.StyleMap
56import Text.Pandoc.Readers.Docx.Util (elemName)
56import Text.Pandoc.Readers.Docx.Util (elemName)
57+import Control.Monad.Reader
57import Control.Monad.State
58import Control.Monad.State
58import Text.Highlighting.Kate
59import Text.Highlighting.Kate
59import Data.Unique (hashUnique, newUnique)
60import Data.Unique (hashUnique, newUnique)
@@ -91,6 +92,11 @@ listMarkerToId (NumberMarker sty delim n) =
91 OneParen -> '2'
92 OneParen -> '2'
92 TwoParens -> '3'
93 TwoParens -> '3'
93
94
95+data WriterEnv = WriterEnv{ envRTL :: Bool }
96+
97+defaultWriterEnv :: WriterEnv
98+defaultWriterEnv = WriterEnv{ envRTL = False }
99+
94data WriterState = WriterState{
100data WriterState = WriterState{
95 stTextProperties :: [Element]
101 stTextProperties :: [Element]
96 , stParaProperties :: [Element]
102 , stParaProperties :: [Element]
@@ -138,7 +144,7 @@ defaultWriterState = WriterState{
138 , stDynamicTextProps = []
144 , stDynamicTextProps = []
139 }
145 }
140
146
141−type WS a = StateT WriterState IO a
147+type WS = ReaderT WriterEnv (StateT WriterState IO)
142
148
143mknode :: Node t => String -> [(String,String)] -> t -> Element
149mknode :: Node t => String -> [(String,String)] -> t -> Element
144mknode s attrs =
150mknode s attrs =
@@ -249,13 +255,16 @@ writeDocx opts doc@(Pandoc meta _) = do
249 let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
255 let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
250 metaValueToInlines <$> lookupMeta "toc-title" meta
256 metaValueToInlines <$> lookupMeta "toc-title" meta
251
257
258+ ((contents, footnotes), st) <- runStateT (
259+ runReaderT
252− ((contents, footnotes), st) <- runStateT (writeOpenXML opts{writerWrapText = WrapNone} doc')
260+ (writeOpenXML opts{writerWrapText = WrapNone} doc')
261+ defaultWriterEnv
253− defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
262+ ) defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
254− , stChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
263+ , stChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
255− , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
264+ , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
256− , stStyleMaps = styleMaps
265+ , stStyleMaps = styleMaps
257− , stTocTitle = tocTitle
266+ , stTocTitle = tocTitle
258− }
267+ }
259 let epochtime = floor $ utcTimeToPOSIXSeconds utctime
268 let epochtime = floor $ utcTimeToPOSIXSeconds utctime
260 let imgs = M.elems $ stImages st
269 let imgs = M.elems $ stImages st
261
270