summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2022-03-11 21:59:26 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2022-03-11 21:59:26 -0800
commit6abcde0bf77a9a2ddee08ecc2dea90ef95cdd681 (patch)
tree66356d5eb16323412407f22edf42f512d5027148
parentb423c17100c2a9b198baac29737bae4d011b804a (diff)
LaTeX reader: further optimizations for inline parsing.
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index cda9bdba3..da2af80e7 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -188,9 +188,6 @@ inlineCommand = do
-- inline elements:
-word :: PandocMonad m => LP m Inlines
-word = str . untoken <$> satisfyTok isWordTok
-
inlineGroup :: PandocMonad m => LP m Inlines
inlineGroup = do
ils <- grouped inline
@@ -604,33 +601,32 @@ lookupListDefault d = (fromMaybe d .) . lookupList
inline :: PandocMonad m => LP m Inlines
inline = do
Tok pos toktype t <- peekTok
- let symbolAsString = str . untoken <$> anySymbol
+ let eatOneToken = satisfyTok (const True)
+ let symbolAsString = str t <$ eatOneToken
let unescapedSymbolAsString =
- do s <- untoken <$> anySymbol
- report $ ParsingUnescaped s pos
- return $ str s
+ do eatOneToken
+ report $ ParsingUnescaped t pos
+ return $ str t
case toktype of
- Comment -> mempty <$ comment
- Spaces -> space <$ whitespace
+ Comment -> mempty <$ eatOneToken
+ Spaces -> space <$ eatOneToken
Newline -> softbreak <$ endline
- Word -> word
- Esc1 -> str . T.singleton <$> primEscape
- Esc2 -> str . T.singleton <$> primEscape
+ Word -> str t <$ eatOneToken
Symbol ->
case t of
- "-" -> symbol '-' *>
+ "-" -> eatOneToken *>
option (str "-") (symbol '-' *>
option (str "–") (str "—" <$ symbol '-'))
- "'" -> symbol '\'' *>
- option (str "’") (str "”" <$ symbol '\'')
- "~" -> str "\160" <$ symbol '~'
+ "'" -> eatOneToken *>
+ option (str "’") (str "”" <$ symbol '\'')
+ "~" -> str "\160" <$ eatOneToken
"`" -> doubleQuote <|> singleQuote <|> symbolAsString
"\"" -> doubleQuote <|> singleQuote <|> symbolAsString
"“" -> doubleQuote <|> symbolAsString
"‘" -> singleQuote <|> symbolAsString
"$" -> dollarsMath <|> unescapedSymbolAsString
"|" -> (guardEnabled Ext_literate_haskell *>
- symbol '|' *> doLHSverb) <|> symbolAsString
+ eatOneToken *> doLHSverb) <|> symbolAsString
"{" -> inlineGroup
"#" -> unescapedSymbolAsString
"&" -> unescapedSymbolAsString
@@ -643,6 +639,8 @@ inline = do
<|> inlineGroup
<|> inlineCommand'
<|> inlineEnvironment
+ Esc1 -> str . T.singleton <$> primEscape
+ Esc2 -> str . T.singleton <$> primEscape
_ -> mzero
inlines :: PandocMonad m => LP m Inlines