@@ -124,10 +124,11 @@ instance Default DState where
124124
125125data DEnv = DEnv { docxOptions :: ReaderOptions
126126 , docxInHeaderBlock :: Bool
127+ , docxInBidi :: Bool
127128 }
128129
129130instance Default DEnv where
130− def = DEnv def False
131+ def = DEnv def False False
131132
132133type DocxContext m = ReaderT DEnv (StateT DState m)
133134
@@ -290,7 +291,10 @@ runStyleToTransform rPr
290291 return $ spanWith ("",[],[("dir","rtl")]) . transform
291292 | Just False <- isRTL rPr = do
292293 transform <- runStyleToTransform rPr{isRTL = Nothing}
293− return $ spanWith ("",[],[("dir","ltr")]) . transform
294+ inBidi <- asks docxInBidi
295+ return $ if inBidi
296+ then spanWith ("",[],[("dir","ltr")]) . transform
297+ else transform
294298 | Just SupScrpt <- rVertAlign rPr = do
295299 transform <- runStyleToTransform rPr{rVertAlign = Nothing}
296300 return $ superscript . transform
@@ -561,6 +565,10 @@ normalizeToClassName = map go . fromStyleName
561565
562566bodyPartToBlocks :: PandocMonad m => BodyPart -> DocxContext m Blocks
563567bodyPartToBlocks (Paragraph pPr parparts)
568+ | Just True <- pBidi pPr = do
569+ let pPr' = pPr { pBidi = Nothing }
570+ local (\s -> s{ docxInBidi = True })
571+ (bodyPartToBlocks (Paragraph pPr' parparts))
564572 | isCodeDiv pPr = do
565573 transform <- parStyleToTransform pPr
566574 return $