@@ -38,7 +38,8 @@ module Text.Pandoc.Readers.Man (readMan) where
38import Prelude
38import Prelude
39import Control.Monad (liftM, void, mzero, guard)
39import Control.Monad (liftM, void, mzero, guard)
40import Control.Monad.Except (throwError)
40import Control.Monad.Except (throwError)
41+import Text.Pandoc.Class
41−import Text.Pandoc.Class (getResourcePath, readFileFromDirs)
42+ (getResourcePath, readFileFromDirs, PandocMonad(..), report)
42import Data.Char (isHexDigit, chr, ord)
43import Data.Char (isHexDigit, chr, ord)
43import Data.Default (Default)
44import Data.Default (Default)
44import Data.Maybe (catMaybes)
45import Data.Maybe (catMaybes)
@@ -47,14 +48,13 @@ import Data.Set (Set)
47import qualified Data.Set as S
48import qualified Data.Set as S
48import Data.List (intersperse, intercalate)
49import Data.List (intersperse, intercalate)
49import qualified Data.Text as T
50import qualified Data.Text as T
50−import Text.Pandoc.Class (PandocMonad(..), report)
51import Text.Pandoc.Builder as B
51import Text.Pandoc.Builder as B
52import Text.Pandoc.Error (PandocError (PandocParsecError))
52import Text.Pandoc.Error (PandocError (PandocParsecError))
53import Text.Pandoc.Logging (LogMessage(..))
53import Text.Pandoc.Logging (LogMessage(..))
54import Text.Pandoc.Options
54import Text.Pandoc.Options
55import Text.Pandoc.Parsing
55import Text.Pandoc.Parsing
56import Text.Pandoc.Shared (crFilter, safeRead)
56import Text.Pandoc.Shared (crFilter, safeRead)
57−import Text.Parsec hiding (tokenPrim, space)
57+import Text.Parsec hiding (tokenPrim)
58import qualified Text.Parsec as Parsec
58import qualified Text.Parsec as Parsec
59import Text.Parsec.Pos (updatePosString)
59import Text.Parsec.Pos (updatePosString)
60import Text.Pandoc.GroffChar (characterCodes, combiningAccents)
60import Text.Pandoc.GroffChar (characterCodes, combiningAccents)
@@ -138,7 +138,7 @@ readMan opts txt = do
138 -> [ManToken] -- ^ input
138 -> [ManToken] -- ^ input
139 -> m (Either PandocError a)
139 -> m (Either PandocError a)
140 readWithMTokens parser state input =
140 readWithMTokens parser state input =
141− let leftF = PandocParsecError . (intercalate "\n") $ show <$> input
141+ let leftF = PandocParsecError . intercalate "\n" $ show <$> input
142 in mapLeft leftF `liftM` runParserT parser state "source" input
142 in mapLeft leftF `liftM` runParserT parser state "source" input
144 mapLeft :: (a -> c) -> Either a b -> Either c b
144 mapLeft :: (a -> c) -> Either a b -> Either c b
@@ -498,7 +498,7 @@ msatisfy predic = tokenPrim show nextPos testTok
498 testTok t = if predic t then Just t else Nothing
498 testTok t = if predic t then Just t else Nothing
499 nextPos pos _x _xs = updatePosString
499 nextPos pos _x _xs = updatePosString
500 (setSourceColumn
500 (setSourceColumn
501− (setSourceLine pos $ sourceLine pos + 1) 1) ("")
501+ (setSourceLine pos $ sourceLine pos + 1) 1) ""
503mtoken :: PandocMonad m => ManParser m ManToken
503mtoken :: PandocMonad m => ManParser m ManToken
504mtoken = msatisfy (const True)
504mtoken = msatisfy (const True)
@@ -521,7 +521,7 @@ mmacro mk = msatisfy isMMacro where
522mmacroAny :: PandocMonad m => ManParser m ManToken
522mmacroAny :: PandocMonad m => ManParser m ManToken
523mmacroAny = msatisfy isMMacro where
523mmacroAny = msatisfy isMMacro where
524− isMMacro (MMacro _ _ _) = True
524+ isMMacro (MMacro{}) = True
525 isMMacro _ = False
525 isMMacro _ = False
@@ -639,7 +639,7 @@ parseAlternatingFonts constructors args = return $ mconcat $
639lineInl :: PandocMonad m => ManParser m Inlines
639lineInl :: PandocMonad m => ManParser m Inlines
640lineInl = do
640lineInl = do
641 (MLine fragments) <- mline
641 (MLine fragments) <- mline
642− return $ linePartsToInlines $ fragments
642+ return $ linePartsToInlines fragments
644bareIP :: PandocMonad m => ManParser m ManToken
644bareIP :: PandocMonad m => ManParser m ManToken
645bareIP = msatisfy isBareIP where
645bareIP = msatisfy isBareIP where
@@ -667,11 +667,9 @@ parseHeader :: PandocMonad m => ManParser m Blocks
667parseHeader = do
667parseHeader = do
668 MMacro name args _ <- mmacro "SH" <|> mmacro "SS"
668 MMacro name args _ <- mmacro "SH" <|> mmacro "SS"
669 contents <- if null args
669 contents <- if null args
671− lineInl
670+ then lineInl
672− else do
671+ else return $ mconcat $ intersperse B.space
674− mconcat $ intersperse B.space $ map linePartsToInlines args
672+ $ map linePartsToInlines args
675 let lvl = if name == "SH" then 1 else 2
673 let lvl = if name == "SH" then 1 else 2
676 return $ header lvl contents
674 return $ header lvl contents
@@ -704,7 +702,7 @@ listItem mbListType = try $ do
704 guard $ listTypeMatches mbListType lt
702 guard $ listTypeMatches mbListType lt
705 inls <- parseInlines
703 inls <- parseInlines
706 continuations <- mconcat <$> many continuation
704 continuations <- mconcat <$> many continuation
707− return $ (lt, para inls <> continuations)
705+ return (lt, para inls <> continuations)
708 [] -> mzero
706 [] -> mzero
710parseList :: PandocMonad m => ManParser m Blocks
708parseList :: PandocMonad m => ManParser m Blocks
@@ -721,7 +719,7 @@ continuation = (do
721 bs <- mconcat <$> many (notFollowedBy (mmacro "RE") >> parseBlock)
719 bs <- mconcat <$> many (notFollowedBy (mmacro "RE") >> parseBlock)
722 mmacro "RE"
720 mmacro "RE"
723 return bs)
721 return bs)
724− <|> mconcat <$> (many1 (try (bareIP *> parsePara)))
722+ <|> mconcat <$> many1 (try (bareIP *> parsePara))
726definitionListItem :: PandocMonad m
724definitionListItem :: PandocMonad m
727 => ManParser m (Inlines, [Blocks])
725 => ManParser m (Inlines, [Blocks])
@@ -730,7 +728,7 @@ definitionListItem = try $ do
730 term <- parseInline
728 term <- parseInline
731 inls <- parseInlines
729 inls <- parseInlines
732 continuations <- mconcat <$> many continuation
730 continuations <- mconcat <$> many continuation
733− return $ (term, [para inls <> continuations])
731+ return (term, [para inls <> continuations])
735parseDefinitionList :: PandocMonad m => ManParser m Blocks
733parseDefinitionList :: PandocMonad m => ManParser m Blocks
736parseDefinitionList = definitionList <$> many1 definitionListItem
734parseDefinitionList = definitionList <$> many1 definitionListItem