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.
This commit is contained in:
John MacFarlane 2017-07-12 13:58:47 +02:00
parent 41209ea676
commit 013fd1c6b6
5 changed files with 28 additions and 9 deletions

View file

@ -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

View file

@ -25,7 +25,8 @@
<td style="text-align: left;">thank you</td>
</tr>
<tr class="odd">
<td style="text-align: right;"><em>blah</em></td>
<td style="text-align: right;">
<p><em>blah</em></p></td>
<td style="text-align: left;"><em>blah</em></td>
<td style="text-align: left;"><em>blah</em></td>
</tr>

View file

@ -15,9 +15,11 @@
\caption{Subfigure with Subfloat}
\end{figure}
^D
<figure>
<img src="img1.jpg" alt="Caption 1" /><figcaption>Caption 1</figcaption>
</figure>
<figure>
<img src="img2.jpg" alt="Caption 2" /><figcaption>Caption 2</figcaption>
</figure>

14
test/command/write18.md Normal file
View file

@ -0,0 +1,14 @@
Handle \write18{..} as raw tex:
```
% pandoc -t native
\write18{git --version}
^D
[RawBlock (Format "latex") "\\write18{git --version}"]
```
```
% pandoc -f latex+raw_tex -t native
\write18{git --version}
^D
[RawBlock (Format "latex") "\\write18{git --version}"]
```

View file

@ -261,7 +261,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
,Header 1 ("latex",[],[]) [Str "LaTeX"]
,BulletList
[[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline (Format "latex") "\\cite[22-23]{smith.1899}"]]]
,[Para [RawInline (Format "latex") "\\doublespacing"]]
,[RawBlock (Format "latex") "\\doublespacing"]
,[Para [Math InlineMath "2+2=4"]]
,[Para [Math InlineMath "x \\in y"]]
,[Para [Math InlineMath "\\alpha \\wedge \\omega"]]