@@ -261,16 +261,9 @@ writeDocx opts doc@(Pandoc meta _) = do
261261 let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
262262 metaValueToInlines <$> lookupMeta "toc-title" meta
263263
264− let isRTL = case lookupMeta "dir" meta of
265− Just (MetaString "rtl") -> True
266− Just (MetaInlines [Str "rtl"]) -> True
267− _ -> False
268−
269− ((contents, footnotes), st) <- runStateT (
270− runReaderT
271− (writeOpenXML opts{writerWrapText = WrapNone} doc')
272− defaultWriterEnv { envRTL = isRTL }
273− ) defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
264+ ((contents, footnotes), st) <- runStateT
265+ (runReaderT (writeOpenXML opts{writerWrapText = WrapNone} doc') defaultWriterEnv)
266+ defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
274267 , stChangesDate = formatTime defaultTimeLocale "%FT%XZ" utctime
275268 , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
276269 , stStyleMaps = styleMaps
@@ -723,8 +716,11 @@ makeTOC _ = return []
723716-- OpenXML elements (the main document and footnotes).
724717writeOpenXML :: WriterOptions -> Pandoc -> WS ([Element], [Element])
725718writeOpenXML opts (Pandoc meta blocks) = do
726− isRTL <- asks envRTL
727− (if isRTL then (setRTL True) else id) $ do
719+ let isRTL = case lookupMeta "dir" meta of
720+ Just (MetaString "rtl") -> True
721+ Just (MetaInlines [Str "rtl"]) -> True
722+ _ -> False
723+ (if isRTL then setRTL else id) $ do
728724 let tit = docTitle meta ++ case lookupMeta "subtitle" meta of
729725 Just (MetaBlocks [Plain xs]) -> LineBreak : xs
730726 _ -> []
@@ -797,7 +793,7 @@ blockToOpenXML opts (Div (ident,classes,kvs) bs)
797793 withParaPropM (pStyleM sty) $ blocksToOpenXML opts bs
798794 | Just "rtl" <- lookup "dir" kvs = do
799795 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)
801797 | Just "ltr" <- lookup "dir" kvs = do
802798 let kvs' = filter (("dir", "ltr")/=) kvs
803799 setLTR $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
@@ -1042,7 +1038,7 @@ inlineToOpenXML opts (Span (ident,classes,kvs) ils)
10421038 inlineToOpenXML opts (Span (ident,classes,kvs') ils)
10431039 | Just "rtl" <- lookup "dir" kvs = do
10441040 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)
10461042 | Just "ltr" <- lookup "dir" kvs = do
10471043 let kvs' = filter (("dir", "ltr")/=) kvs
10481044 setLTR $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
@@ -1275,10 +1271,10 @@ fitToPage (x, y) pageWidth
12751271 (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)
12761272 | otherwise = (floor x, floor y)
12771273
1278−setRTL :: Bool -> WS a -> WS a
1279−setRTL topLevel x = do
1274+setRTL :: WS a -> WS a
1275+setRTL x = do
12801276 isRTL <- asks envRTL
1281− if isRTL && not topLevel
1277+ if isRTL
12821278 then x
12831279 else flip local x $ \env -> env {
12841280 envRTL = True