aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Readers
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-07-12 13:58:47 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2017-07-12 14:50:49 +0200
commit013fd1c6b68f2c061202d931f541aa4877ae543f (patch)
tree7109ba8de0633f292d48ba673670833f657b1b08 /src/Text/Pandoc/Readers
parent41209ea6765e9898d7e15c4c945c06275b6c0420 (diff)
downloadpandoc-013fd1c6b68f2c061202d931f541aa4877ae543f.tar.gz
Make sure \write18 is parsed as raw LaTeX.
The change is in the LaTeX reader's treatment of raw commands, but it also affects the Markdown reader.
Diffstat (limited to 'src/Text/Pandoc/Readers')
-rw-r--r--src/Text/Pandoc/Readers/LaTeX.hs16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index fde177f14..cd2c7c7f8 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -1049,14 +1049,12 @@ inlineCommand' :: PandocMonad m => LP m Inlines
inlineCommand' = try $ do
Tok _ (CtrlSeq name) cmd <- anyControlSeq
guard $ name /= "begin" && name /= "end"
- (star, rawstar) <- withRaw $ option "" ("*" <$ symbol '*' <* optional sp)
+ star <- option "" ("*" <$ symbol '*' <* optional sp)
let name' = name <> star
let names = ordNub [name', name] -- check non-starred as fallback
let raw = do
guard $ isInlineCommand name || not (isBlockCommand name)
- (_, rawargs) <- withRaw
- (skipangles *> skipopts *> option "" dimenarg *> many braced)
- let rawcommand = T.unpack $ cmd <> untokenize (rawstar ++ rawargs)
+ rawcommand <- getRawCommand (cmd <> star)
(guardEnabled Ext_raw_tex >> return (rawInline "latex" rawcommand))
<|> ignore rawcommand
lookupListDefault raw names inlineCommands
@@ -1353,7 +1351,11 @@ rawInlineOr name' fallback = do
getRawCommand :: PandocMonad m => Text -> LP m String
getRawCommand txt = do
(_, rawargs) <- withRaw
- (many (try (optional sp *> opt)) *>
+ ((if txt == "\\write"
+ then () <$ satisfyTok isWordTok -- digits
+ else return ()) *>
+ skipangles *>
+ skipopts *>
option "" (try (optional sp *> dimenarg)) *>
many braced)
return $ T.unpack (txt <> untokenize rawargs)
@@ -1631,7 +1633,7 @@ blockCommand = try $ do
let names = ordNub [name', name]
let raw = do
guard $ isBlockCommand name || not (isInlineCommand name)
- rawBlock "latex" <$> getRawCommand txt
+ rawBlock "latex" <$> getRawCommand (txt <> star)
lookupListDefault raw names blockCommands
closing :: PandocMonad m => LP m Blocks
@@ -2128,8 +2130,8 @@ block = (mempty <$ spaces1)
<|> environment
<|> include
<|> macroDef
- <|> paragraph
<|> blockCommand
+ <|> paragraph
<|> grouped block
blocks :: PandocMonad m => LP m Blocks