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