diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Readers/Man.hs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/Text/Pandoc/Readers/Man.hs b/src/Text/Pandoc/Readers/Man.hs index 24f8316ef..ea5657b56 100644 --- a/src/Text/Pandoc/Readers/Man.hs +++ b/src/Text/Pandoc/Readers/Man.hs @@ -31,10 +31,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Conversion of man to 'Pandoc' document. -} -module Text.Pandoc.Readers.Man (readMan) where --testFile +module Text.Pandoc.Readers.Man (readMan) where import Prelude -import Control.Monad (liftM) +import Control.Monad (liftM, void) import Control.Monad.Except (throwError) import Data.Char (isDigit, isUpper, isLower) import Data.Default (Default) @@ -123,13 +123,11 @@ readMan :: PandocMonad m => ReaderOptions -> T.Text -> m Pandoc readMan opts txt = do eithertokens <- readWithM lexMan def (T.unpack $ crFilter txt) case eithertokens of + Left e -> throwError e Right tokenz -> do let state = def {stateOptions = opts} :: ParserState eitherdoc <- readWithMTokens parseMan state tokenz - case eitherdoc of - Right doc -> return doc - Left e -> throwError e - Left e -> throwError e + either throwError return eitherdoc where @@ -139,7 +137,8 @@ readMan opts txt = do -> [ManToken] -- ^ input -> m (Either PandocError a) readWithMTokens parser state input = - mapLeft (PandocParsecError . (intercalate "\n") $ show <$> input) `liftM` runParserT parser state "source" input + let leftF = PandocParsecError . (intercalate "\n") $ show <$> input + in mapLeft leftF `liftM` runParserT parser state "source" input mapLeft :: (a -> c) -> Either a b -> Either c b mapLeft f (Left x) = Left $ f x @@ -166,12 +165,12 @@ parseMan = do isNull _ = False eofline :: Stream s m Char => ParsecT s u m () -eofline = (newline >> return ()) <|> eof +eofline = void newline <|> eof spacetab :: Stream s m Char => ParsecT s u m Char spacetab = char ' ' <|> char '\t' --- TODO handle more cases +-- TODO add other sequences from man (7) groff escapeLexer :: PandocMonad m => ManLexer m EscapeThing escapeLexer = do char '\\' @@ -225,9 +224,7 @@ escapeLexer = do return ENothing currentFont :: PandocMonad m => ManLexer m FontKind -currentFont = do - RoffState {fontKind = fk} <- getState - return fk +currentFont = fontKind <$> getState -- separate function from lexMacro since real man files sometimes do not follow the rules lexComment :: PandocMonad m => ManLexer m ManToken |