LaTeX reader: Refactored inlineCommand.
This commit is contained in:
parent
dd217f75e5
commit
9daf22fa61
1 changed files with 11 additions and 24 deletions
|
@ -237,19 +237,21 @@ withVerbatimMode parser = do
|
|||
return result
|
||||
|
||||
rawLaTeXParser :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
||||
=> LP m a -> ParserT String s m String
|
||||
=> LP m a -> ParserT String s m (a, String)
|
||||
rawLaTeXParser parser = do
|
||||
inp <- getInput
|
||||
let toks = tokenize "source" $ T.pack inp
|
||||
pstate <- getState
|
||||
let lstate = def{ sOptions = extractReaderOptions pstate }
|
||||
res <- lift $ runParserT ((,) <$> try (snd <$> withRaw parser) <*> getState)
|
||||
lstate "source" toks
|
||||
let lstate = def{ sOptions = extractReaderOptions pstate
|
||||
, sMacros = extractMacros pstate }
|
||||
let rawparser = (,) <$> withRaw parser <*> getState
|
||||
res <- lift $ runParserT rawparser lstate "chunk" toks
|
||||
case res of
|
||||
Left _ -> mzero
|
||||
Right (raw, st) -> do
|
||||
Right ((val, raw), st) -> do
|
||||
updateState (updateMacros (sMacros st <>))
|
||||
takeP (T.length (untokenize raw))
|
||||
rawstring <- takeP (T.length (untokenize raw))
|
||||
return (val, rawstring)
|
||||
|
||||
applyMacros :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
||||
=> String -> ParserT String s m String
|
||||
|
@ -268,33 +270,18 @@ rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
|||
=> ParserT String s m String
|
||||
rawLaTeXBlock = do
|
||||
lookAhead (try (char '\\' >> letter))
|
||||
rawLaTeXParser (environment <|> macroDef <|> blockCommand)
|
||||
snd <$> rawLaTeXParser (environment <|> macroDef <|> blockCommand)
|
||||
|
||||
rawLaTeXInline :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
||||
=> ParserT String s m String
|
||||
rawLaTeXInline = do
|
||||
lookAhead (try (char '\\' >> letter) <|> char '$')
|
||||
rawLaTeXParser (inlineEnvironment <|> inlineCommand')
|
||||
snd <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand')
|
||||
|
||||
inlineCommand :: PandocMonad m => ParserT String ParserState m Inlines
|
||||
inlineCommand = do
|
||||
lookAhead (try (char '\\' >> letter) <|> char '$')
|
||||
inp <- getInput
|
||||
let toks = tokenize "chunk" $ T.pack inp
|
||||
let rawinline = do
|
||||
(il, raw) <- try $ withRaw (inlineEnvironment <|> inlineCommand')
|
||||
st <- getState
|
||||
return (il, raw, st)
|
||||
pstate <- getState
|
||||
let lstate = def{ sOptions = extractReaderOptions pstate
|
||||
, sMacros = extractMacros pstate }
|
||||
res <- runParserT rawinline lstate "source" toks
|
||||
case res of
|
||||
Left _ -> mzero
|
||||
Right (il, raw, s) -> do
|
||||
updateState $ updateMacros (const $ sMacros s)
|
||||
takeP (T.length (untokenize raw))
|
||||
return il
|
||||
fst <$> rawLaTeXParser (inlineEnvironment <|> inlineCommand')
|
||||
|
||||
tokenize :: SourceName -> Text -> [Tok]
|
||||
tokenize sourcename = totoks (initialPos sourcename)
|
||||
|
|
Loading…
Add table
Reference in a new issue