git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: Refactored inlineCommand.
commit9daf22fa615ad49b675e4e3aae722c982eb4cce3 authorJohn MacFarlane <jgm@berkeley.edu> dateFri 22 Dec 2017, 16:45 (9 years ago) parentdd217f7
1 file changed+11−24
src/Text/Pandoc/Readers/LaTeX.hs+11−24
src/Text/Pandoc/Readers/LaTeX.hs+11−24
@@ -237,19 +237,21 @@ withVerbatimMode parser = do
237237 return result
238238
239239rawLaTeXParser :: (PandocMonad m, HasMacros s, HasReaderOptions s)
240− => LP m a -> ParserT String s m String
240+ => LP m a -> ParserT String s m (a, String)
241241rawLaTeXParser parser = do
242242 inp <- getInput
243243 let toks = tokenize "source" $ T.pack inp
244244 pstate <- getState
245− let lstate = def{ sOptions = extractReaderOptions pstate }
246− res <- lift $ runParserT ((,) <$> try (snd <$> withRaw parser) <*> getState)
247− lstate "source" toks
245+ let lstate = def{ sOptions = extractReaderOptions pstate
246+ , sMacros = extractMacros pstate }
247+ let rawparser = (,) <$> withRaw parser <*> getState
248+ res <- lift $ runParserT rawparser lstate "chunk" toks
248249 case res of
249250 Left _ -> mzero
250− Right (raw, st) -> do
251+ Right ((val, raw), st) -> do
251252 updateState (updateMacros (sMacros st <>))
252− takeP (T.length (untokenize raw))
253+ rawstring <- takeP (T.length (untokenize raw))
254+ return (val, rawstring)
253255
254256applyMacros :: (PandocMonad m, HasMacros s, HasReaderOptions s)
255257 => String -> ParserT String s m String
@@ -268,33 +270,18 @@ rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
268270 => ParserT String s m String
269271rawLaTeXBlock = do
270272 lookAhead (try (char '\\' >> letter))
271− rawLaTeXParser (environment <|> macroDef <|> blockCommand)
273+ snd <$> rawLaTeXParser (environment <|> macroDef <|> blockCommand)
272274
273275rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)
274276 => ParserT String s m String
275277rawLaTeXInline = do
276278 lookAhead (try (char '\\' >> letter) <|> char '$')
277− rawLaTeXParser (inlineEnvironment <|> inlineCommand')
279+ snd <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand')
278280
279281inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines
280282inlineCommand = do
281283 lookAhead (try (char '\\' >> letter) <|> char '$')
282− inp <- getInput
283− let toks = tokenize "chunk" $ T.pack inp
284− let rawinline = do
285− (il, raw) <- try $ withRaw (inlineEnvironment <|> inlineCommand')
286− st <- getState
287− return (il, raw, st)
288− pstate <- getState
289− let lstate = def{ sOptions = extractReaderOptions pstate
290− , sMacros = extractMacros pstate }
291− res <- runParserT rawinline lstate "source" toks
292− case res of
293− Left _ -> mzero
294− Right (il, raw, s) -> do
295− updateState $ updateMacros (const $ sMacros s)
296− takeP (T.length (untokenize raw))
297− return il
284+ fst <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand')
298285
299286tokenize :: SourceName -> Text -> [Tok]
300287tokenize sourcename = totoks (initialPos sourcename)