From 1a679a4d6e99f4bdb19f1f546a0ccf856ba00cf4 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Mon, 19 Nov 2018 00:17:22 -0800
Subject: LaTeX reader: cleaned up handling of dimension arguments.

Allow decimal points, preceding space.

Also require text 1.1+.
---
 src/Text/Pandoc/Readers/LaTeX/Parsing.hs | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

(limited to 'src/Text/Pandoc/Readers/LaTeX')

diff --git a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
index 69bbf28d4..c5385bedc 100644
--- a/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
+++ b/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
@@ -105,7 +105,7 @@ import Text.Pandoc.Error (PandocError (PandocMacroLoop))
 import Text.Pandoc.Logging
 import Text.Pandoc.Options
 import Text.Pandoc.Parsing hiding (blankline, many, mathDisplay, mathInline,
-                            optional, space, spaces, withRaw, (<|>))
+                            space, spaces, withRaw, (<|>))
 import Text.Pandoc.Readers.LaTeX.Types (ExpansionPoint (..), Macro (..),
                                         ArgSpec (..), Tok (..), TokType (..))
 import Text.Pandoc.Shared
@@ -668,13 +668,19 @@ parenWrapped parser = try $ do
 
 dimenarg :: PandocMonad m => LP m Text
 dimenarg = try $ do
+  optional sp
   ch  <- option False $ True <$ symbol '='
-  Tok _ _ s <- satisfyTok isWordTok
-  guard $ T.take 2 (T.reverse s) `elem`
+  Tok _ _ s1 <- satisfyTok isWordTok
+  s2 <- option "" $ try $ do
+          symbol '.'
+          Tok _ _ t <-  satisfyTok isWordTok
+          return ("." <> t)
+  let s = s1 <> s2
+  guard $ T.takeEnd 2 s `elem`
            ["pt","pc","in","bp","cm","mm","dd","cc","sp"]
-  let num = T.take (T.length s - 2) s
+  let num = T.dropEnd 2 s
   guard $ T.length num > 0
-  guard $ T.all isDigit num
+  guard $ T.all (\c -> isDigit c || c == '.') num
   return $ T.pack ['=' | ch] <> s
 
 ignore :: (Monoid a, PandocMonad m) => String -> ParserT s u m a
-- 
cgit v1.2.3