git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: Improved warning messages for unknown commands.
29b1ed0John MacFarlane
src/Text/Pandoc/Readers/LaTeX.hs+23−19
@@ -296,28 +296,32 @@ inBrackets x = str "[" <> x <> str "]"
296
296
297-- eat an optional argument and one or more arguments in braces
297-- eat an optional argument and one or more arguments in braces
298ignoreInlines :: PandocMonad m => String -> (String, LP m Inlines)
298ignoreInlines :: PandocMonad m => String -> (String, LP m Inlines)
299−ignoreInlines name = (name, doraw <|> (optargs >> ignore name))
299+ignoreInlines name = (name, p)
300− where optargs = skipopts *> skipMany (try $ optional sp *> braced)
300+ where
301− contseq = '\\':name
301+ p = do oa <- optargs
302+ let rawCommand = '\\':name ++ oa
302− doraw = (rawInline "latex" . (contseq ++) . snd) <$>
303+ let doraw = guardRaw >> return (rawInline "latex" rawCommand)
303− (do exts <- getOption readerExtensions
304+ doraw <|> ignore rawCommand
305+
306+guardRaw :: PandocMonad m => LP m ()
304− guard $ extensionEnabled Ext_raw_tex exts
307+guardRaw = getOption readerExtensions >>= guard . extensionEnabled Ext_raw_tex
305− withRaw optargs)
308+
306−
309+optargs :: PandocMonad m => LP m String
310+optargs = snd <$> withRaw (skipopts *> skipMany (try $ optional sp *> braced))
311+
307−ignore :: (Monoid a, PandocMonad m) => String -> LP m a
312+ignore :: (Monoid a, PandocMonad m) => String -> ParserT s u m a
308−ignore name = do
313+ignore raw = do
309 pos <- getPosition
314 pos <- getPosition
310− warningWithPos pos $ "Skipped \\" ++ name ++ " and its arguments"
315+ warningWithPos pos $ "Skipped " ++ raw
311 return mempty
316 return mempty
312
317
313ignoreBlocks :: PandocMonad m => String -> (String, LP m Blocks)
318ignoreBlocks :: PandocMonad m => String -> (String, LP m Blocks)
314−ignoreBlocks name = (name, doraw <|> (optargs >> ignore name))
319+ignoreBlocks name = (name, p)
315− where optargs = skipopts *> skipMany (try $ optional sp *> braced)
320+ where
316− contseq = '\\':name
321+ p = do oa <- optargs
322+ let rawCommand = '\\':name ++ oa
317− doraw = (rawBlock "latex" . (contseq ++) . snd) <$>
323+ let doraw = guardRaw >> return (rawBlock "latex" rawCommand)
318− (do exts <- getOption readerExtensions
324+ doraw <|> ignore rawCommand
319− guard $ extensionEnabled Ext_raw_tex exts
320− withRaw optargs)
321
325
322blockCommands :: PandocMonad m => M.Map String (LP m Blocks)
326blockCommands :: PandocMonad m => M.Map String (LP m Blocks)
323blockCommands = M.fromList $
327blockCommands = M.fromList $
@@ -444,7 +448,7 @@ inlineCommand = try $ do
444 then parseFromString inlines transformed
448 then parseFromString inlines transformed
445 else if extensionEnabled Ext_raw_tex exts
449 else if extensionEnabled Ext_raw_tex exts
446 then return $ rawInline "latex" rawcommand
450 then return $ rawInline "latex" rawcommand
447− else ignore name
451+ else ignore rawcommand
448 (lookupListDefault mzero [name',name] inlineCommands <*
452 (lookupListDefault mzero [name',name] inlineCommands <*
449 optional (try (string "{}")))
453 optional (try (string "{}")))
450 <|> raw
454 <|> raw