@@ -261,16 +261,9 @@ writeDocx opts doc@(Pandoc meta _) = do
261 let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
261 let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
262 metaValueToInlines <$> lookupMeta "toc-title" meta
262 metaValueToInlines <$> lookupMeta "toc-title" meta
264− let isRTL = case lookupMeta "dir" meta of
265− Just (MetaString "rtl") -> True
266− Just (MetaInlines [Str "rtl"]) -> True
269− ((contents, footnotes), st) <- runStateT (
264+ ((contents, footnotes), st) <- runStateT
271− (writeOpenXML opts{writerWrapText = WrapNone} doc')
265+ (runReaderT (writeOpenXML opts{writerWrapText = WrapNone} doc') defaultWriterEnv)
272− defaultWriterEnv { envRTL = isRTL }
273− ) defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
266+ defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
274 , stChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
267 , stChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
275 , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
268 , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
276 , stStyleMaps = styleMaps
269 , stStyleMaps = styleMaps
@@ -723,8 +716,11 @@ makeTOC _ = return []
723-- OpenXML elements (the main document and footnotes).
716-- OpenXML elements (the main document and footnotes).
724writeOpenXML :: WriterOptions -> Pandoc -> WS ([Element], [Element])
717writeOpenXML :: WriterOptions -> Pandoc -> WS ([Element], [Element])
725writeOpenXML opts (Pandoc meta blocks) = do
718writeOpenXML opts (Pandoc meta blocks) = do
726− isRTL <- asks envRTL
719+ let isRTL = case lookupMeta "dir" meta of
720+ Just (MetaString "rtl") -> True
721+ Just (MetaInlines [Str "rtl"]) -> True
727− (if isRTL then (setRTL True) else id) $ do
723+ (if isRTL then setRTL else id) $ do
728 let tit = docTitle meta ++ case lookupMeta "subtitle" meta of
724 let tit = docTitle meta ++ case lookupMeta "subtitle" meta of
729 Just (MetaBlocks [Plain xs]) -> LineBreak : xs
725 Just (MetaBlocks [Plain xs]) -> LineBreak : xs
@@ -797,7 +793,7 @@ blockToOpenXML opts (Div (ident,classes,kvs) bs)
797 withParaPropM (pStyleM sty) $ blocksToOpenXML opts bs
793 withParaPropM (pStyleM sty) $ blocksToOpenXML opts bs
798 | Just "rtl" <- lookup "dir" kvs = do
794 | Just "rtl" <- lookup "dir" kvs = do
799 let kvs' = filter (("dir", "rtl")/=) kvs
795 let kvs' = filter (("dir", "rtl")/=) kvs
800− setRTL False $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
796+ setRTL $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
801 | Just "ltr" <- lookup "dir" kvs = do
797 | Just "ltr" <- lookup "dir" kvs = do
802 let kvs' = filter (("dir", "ltr")/=) kvs
798 let kvs' = filter (("dir", "ltr")/=) kvs
803 setLTR $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
799 setLTR $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
@@ -1042,7 +1038,7 @@ inlineToOpenXML opts (Span (ident,classes,kvs) ils)
1042 inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1038 inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1043 | Just "rtl" <- lookup "dir" kvs = do
1039 | Just "rtl" <- lookup "dir" kvs = do
1044 let kvs' = filter (("dir", "rtl")/=) kvs
1040 let kvs' = filter (("dir", "rtl")/=) kvs
1045− setRTL False $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1041+ setRTL $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1046 | Just "ltr" <- lookup "dir" kvs = do
1042 | Just "ltr" <- lookup "dir" kvs = do
1047 let kvs' = filter (("dir", "ltr")/=) kvs
1043 let kvs' = filter (("dir", "ltr")/=) kvs
1048 setLTR $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
1044 setLTR $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
@@ -1275,10 +1271,10 @@ fitToPage (x, y) pageWidth
1275 (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)
1271 (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)
1276 | otherwise = (floor x, floor y)
1272 | otherwise = (floor x, floor y)
1278−setRTL :: Bool -> WS a -> WS a
1274+setRTL :: WS a -> WS a
1279−setRTL topLevel x = do
1275+setRTL x = do
1280 isRTL <- asks envRTL
1276 isRTL <- asks envRTL
1281− if isRTL && not topLevel
1277+ if isRTL
1283 else flip local x $ \env -> env {
1279 else flip local x $ \env -> env {
1284 envRTL = True
1280 envRTL = True