From ab31d5ea8d0fc17b900a5843104784a25a2c8ed9 Mon Sep 17 00:00:00 2001
From: Jesse Rosenthal <jrosenthal@jhu.edu>
Date: Mon, 3 Oct 2016 21:33:57 -0400
Subject: [PATCH] Remove bool on setRTL.

We had to use this because we set the env, which means that setRTL
wouldn't do anything at the top level. We now don't set the env (it will
always be false at the outset), which means the toplevel setRTL will
work if necessary.
---
 src/Text/Pandoc/Writers/Docx.hs | 30 +++++++++++++-----------------
 1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
index 36e20fc61..407df18e7 100644
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -261,16 +261,9 @@ writeDocx opts doc@(Pandoc meta _) = do
   let tocTitle = fromMaybe (stTocTitle defaultWriterState) $
                     metaValueToInlines <$> lookupMeta "toc-title" meta
 
-  let isRTL = case lookupMeta "dir" meta of
-        Just (MetaString "rtl")        -> True
-        Just (MetaInlines [Str "rtl"]) -> True
-        _                              -> False
-
-  ((contents, footnotes), st) <- runStateT (
-    runReaderT
-    (writeOpenXML opts{writerWrapText = WrapNone} doc')
-    defaultWriterEnv { envRTL = isRTL }
-    ) defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
+  ((contents, footnotes), st) <- runStateT 
+    (runReaderT (writeOpenXML opts{writerWrapText = WrapNone} doc') defaultWriterEnv)
+    defaultWriterState{ stChangesAuthor = fromMaybe "unknown" username
                         , stChangesDate   = formatTime defaultTimeLocale "%FT%XZ" utctime
                         , stPrintWidth = (maybe 420 (\x -> quot x 20) pgContentWidth)
                         , stStyleMaps  = styleMaps
@@ -723,8 +716,11 @@ makeTOC _ = return []
 -- OpenXML elements (the main document and footnotes).
 writeOpenXML :: WriterOptions -> Pandoc -> WS ([Element], [Element])
 writeOpenXML opts (Pandoc meta blocks) = do
-  isRTL <- asks envRTL
-  (if isRTL then (setRTL True) else id) $ do
+  let isRTL = case lookupMeta "dir" meta of
+        Just (MetaString "rtl")        -> True
+        Just (MetaInlines [Str "rtl"]) -> True
+        _                              -> False
+  (if isRTL then setRTL else id) $ do
   let tit = docTitle meta ++ case lookupMeta "subtitle" meta of
                                   Just (MetaBlocks [Plain xs]) -> LineBreak : xs
                                   _ -> []
@@ -797,7 +793,7 @@ blockToOpenXML opts (Div (ident,classes,kvs) bs)
       withParaPropM (pStyleM sty) $ blocksToOpenXML opts bs
   | Just "rtl" <- lookup "dir" kvs = do
       let kvs' = filter (("dir", "rtl")/=) kvs
-      setRTL False $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
+      setRTL $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
   | Just "ltr" <- lookup "dir" kvs = do
       let kvs' = filter (("dir", "ltr")/=) kvs
       setLTR $ blockToOpenXML opts (Div (ident,classes,kvs') bs)
@@ -1042,7 +1038,7 @@ inlineToOpenXML opts (Span (ident,classes,kvs) ils)
         inlineToOpenXML opts (Span (ident,classes,kvs') ils)
   | Just "rtl" <- lookup "dir" kvs = do
       let kvs' = filter (("dir", "rtl")/=) kvs
-      setRTL False $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
+      setRTL $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
   | Just "ltr" <- lookup "dir" kvs = do
       let kvs' = filter (("dir", "ltr")/=) kvs
       setLTR $ inlineToOpenXML opts (Span (ident,classes,kvs') ils)
@@ -1275,10 +1271,10 @@ fitToPage (x, y) pageWidth
     (pageWidth, floor $ ((fromIntegral pageWidth) / x) * y)
   | otherwise = (floor x, floor y)
 
-setRTL :: Bool -> WS a -> WS a
-setRTL topLevel x = do
+setRTL :: WS a -> WS a
+setRTL x = do
   isRTL <- asks envRTL
-  if isRTL && not topLevel
+  if isRTL
     then x
     else flip local x $ \env -> env {
       envRTL = True