From 800b03ba505c1c40dbe1432e3686f41d8f4a31f1 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Sun, 14 Mar 2010 23:23:14 +0000 Subject: LaTeX reader: ignore \section, \pdfannot, \pdfstringdef. Resolves Issue #202. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1887 788f1e2b-df1e-0410-8736-df70ead52e1b --- src/Text/Pandoc/Readers/LaTeX.hs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 233f5a3d5..f10f0e219 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -39,6 +39,7 @@ import Text.Pandoc.Shared import Data.Maybe ( fromMaybe ) import Data.Char ( chr ) import Data.List ( isPrefixOf, isSuffixOf ) +import Control.Monad ( when ) -- | Parse LaTeX from string and return 'Pandoc' document. readLaTeX :: ParserState -- ^ Parser state, including options for parser @@ -400,21 +401,22 @@ unknownCommand = try $ do notFollowedBy' $ choice $ map end ["itemize", "enumerate", "description", "document"] state <- getState - if stateParserContext state == ListItemState - then notFollowedBy' $ string "\\item" - else return () + when (stateParserContext state == ListItemState) $ + notFollowedBy' (string "\\item") if stateParseRaw state then do (name, star, args) <- command spaces return $ Plain [TeX ("\\" ++ name ++ star ++ concat args)] - else do -- skip unknown command, leaving arguments to be parsed - char '\\' - letter - many (letter <|> digit) - optional (try $ string "{}") + else do + (name, _, args) <- command spaces - return Null + if name `elem` commandsToIgnore + then return Null + else return $ Plain [Str $ concat args] + +commandsToIgnore :: [String] +commandsToIgnore = ["special","pdfannot","pdfstringdef"] -- latex comment comment :: GenParser Char st Block @@ -780,9 +782,9 @@ rawLaTeXInline = try $ do then do (name, star, args) <- command return $ TeX ("\\" ++ name ++ star ++ concat args) - else do -- skip unknown command, leaving arguments to be parsed - char '\\' - letter - many (letter <|> digit) - optional (try $ string "{}") - return $ Str "" + else do + (name, _, args) <- command + spaces + if name `elem` commandsToIgnore + then return $ Str "" + else return $ Str (concat args) -- cgit v1.2.3