From 405c3e9c36837226b0f714f241b115c72f0b8861 Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Wed, 4 May 2016 23:16:23 +0200
Subject: [PATCH] Org reader: fix spacing after LaTeX-style symbols
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The org-reader was droping space after unescaped LaTeX-style symbol
commands: `\ForAll \Auml` resulted in `∀Ä` but should give `∀ Ä`
instead.  This seems to be because the LaTeX-reader treats the
command-terminating space as part of the command.  Dropping the trailing
space from the symbol-command fixes this issue.
---
 src/Text/Pandoc/Readers/Org.hs | 12 +++++++-----
 tests/Tests/Readers/Org.hs     |  4 ++++
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/Text/Pandoc/Readers/Org.hs b/src/Text/Pandoc/Readers/Org.hs
index 5e98be31d..a7987475a 100644
--- a/src/Text/Pandoc/Readers/Org.hs
+++ b/src/Text/Pandoc/Readers/Org.hs
@@ -49,7 +49,7 @@ import qualified Text.TeXMath.Readers.MathML.EntityMap as MathMLEntityMap
 import           Control.Arrow (first)
 import           Control.Monad (foldM, guard, liftM, liftM2, mplus, mzero, when)
 import           Control.Monad.Reader (Reader, runReader, ask, asks, local)
-import           Data.Char (isAlphaNum, toLower)
+import           Data.Char (isAlphaNum, isSpace, toLower)
 import           Data.Default
 import           Data.List (intersperse, isPrefixOf, isSuffixOf)
 import qualified Data.Map as M
@@ -1587,8 +1587,8 @@ inlineLaTeX = try $ do
    state :: ParserState
    state = def{ stateOptions = def{ readerParseRaw = True }}
 
-   texMathToPandoc inp = (maybeRight $ readTeX inp) >>=
-                         writePandoc DisplayInline
+   texMathToPandoc :: String -> Maybe [Inline]
+   texMathToPandoc cs = (maybeRight $ readTeX cs) >>= writePandoc DisplayInline
 
 maybeRight :: Either a b -> Maybe b
 maybeRight = either (const Nothing) Just
@@ -1598,9 +1598,11 @@ inlineLaTeXCommand = try $ do
   rest <- getInput
   case runParser rawLaTeXInline def "source" rest of
     Right (RawInline _ cs) -> do
-      let len = length cs
+      -- drop any trailing whitespace, those should not be part of the command
+      let cmdNoSpc = takeWhile (not . isSpace) $ cs
+      let len = length cmdNoSpc
       count len anyChar
-      return cs
+      return cmdNoSpc
     _ -> mzero
 
 smart :: OrgParser (F Inlines)
diff --git a/tests/Tests/Readers/Org.hs b/tests/Tests/Readers/Org.hs
index bb9b37d13..6112055ba 100644
--- a/tests/Tests/Readers/Org.hs
+++ b/tests/Tests/Readers/Org.hs
@@ -328,6 +328,10 @@ tests =
           "\\copy" =?>
           para "©"
 
+      , "MathML symbols, space separated" =:
+          "\\ForAll \\Auml" =?>
+          para "∀ Ä"
+
       , "LaTeX citation" =:
           "\\cite{Coffee}" =?>
           let citation = Citation