@@ -74,10 +74,12 @@ data LinePart = RoffStr (String, Font)
74 | MacroArg Int
74 | MacroArg Int
75 deriving Show
75 deriving Show
77-- TODO parse tables (see man tbl)
79-- TODO parse tables (see man tbl)
78data ManToken = MLine [LinePart]
80data ManToken = MLine [LinePart]
79 | MEmptyLine
81 | MEmptyLine
80− | MMacro MacroKind [[LinePart]]
82+ | MMacro MacroKind [Arg]
81 deriving Show
83 deriving Show
83newtype ManTokens = ManTokens { unManTokens :: Seq.Seq ManToken }
85newtype ManTokens = ManTokens { unManTokens :: Seq.Seq ManToken }
@@ -303,7 +305,7 @@ lexMacro = do
305 resolveMacro :: PandocMonad m
307 resolveMacro :: PandocMonad m
306− => String -> [[LinePart]] -> ManLexer m ManTokens
308+ => String -> [Arg] -> ManLexer m ManTokens
307 resolveMacro macroName args = do
309 resolveMacro macroName args = do
308 macros <- customMacros <$> getState
310 macros <- customMacros <$> getState
309 case M.lookup macroName macros of
311 case M.lookup macroName macros of
@@ -319,7 +321,7 @@ lexMacro = do
319 fillMacroArg x = x
321 fillMacroArg x = x
320 return $ ManTokens . fmap fillMacroArg . unManTokens $ ts
322 return $ ManTokens . fmap fillMacroArg . unManTokens $ ts
322− lexMacroDef :: PandocMonad m => [[LinePart]] -> ManLexer m ManTokens
324+ lexMacroDef :: PandocMonad m => [Arg] -> ManLexer m ManTokens
323 lexMacroDef args = do -- macro definition
325 lexMacroDef args = do -- macro definition
324 (macroName, stopMacro) <-
326 (macroName, stopMacro) <-
325 case args of
327 case args of
@@ -338,7 +340,7 @@ lexMacro = do
338 st{ customMacros = M.insert macroName ts (customMacros st) }
340 st{ customMacros = M.insert macroName ts (customMacros st) }
339 return mempty
341 return mempty
341− lexArgs :: PandocMonad m => ManLexer m [[LinePart]]
343+ lexArgs :: PandocMonad m => ManLexer m [Arg]
342 lexArgs = do
344 lexArgs = do
343 args <- many $ try oneArg
345 args <- many $ try oneArg
344 skipMany spacetab
346 skipMany spacetab
@@ -539,14 +541,14 @@ parseInline = try $ do
539 MMacro "RB" args -> parseAlternatingFonts [id, strong] args
541 MMacro "RB" args -> parseAlternatingFonts [id, strong] args
540 _ -> mzero
542 _ -> mzero
542−parseBold :: PandocMonad m => [[LinePart]] -> ManParser m Inlines
544+parseBold :: PandocMonad m => [Arg] -> ManParser m Inlines
543parseBold [] = do
545parseBold [] = do
544 MLine lparts <- mline
546 MLine lparts <- mline
545 return $ strong $ linePartsToInlines lparts
547 return $ strong $ linePartsToInlines lparts
546parseBold args = return $
548parseBold args = return $
547 strong $ mconcat $ intersperse B.space $ map linePartsToInlines args
549 strong $ mconcat $ intersperse B.space $ map linePartsToInlines args
549−parseItalic :: PandocMonad m => [[LinePart]] -> ManParser m Inlines
551+parseItalic :: PandocMonad m => [Arg] -> ManParser m Inlines
550parseItalic [] = do
552parseItalic [] = do
551 MLine lparts <- mline
553 MLine lparts <- mline
552 return $ emph $ linePartsToInlines lparts
554 return $ emph $ linePartsToInlines lparts
@@ -555,7 +557,7 @@ parseItalic args = return $
556parseAlternatingFonts :: PandocMonad m
558parseAlternatingFonts :: PandocMonad m
557 => [Inlines -> Inlines]
559 => [Inlines -> Inlines]
558− -> [[LinePart]]
560+ -> [Arg]
559 -> ManParser m Inlines
561 -> ManParser m Inlines
560parseAlternatingFonts constructors args = return $ mconcat $
562parseAlternatingFonts constructors args = return $ mconcat $
561 zipWith (\f arg -> f (linePartsToInlines arg)) (cycle constructors) args
563 zipWith (\f arg -> f (linePartsToInlines arg)) (cycle constructors) args
@@ -661,7 +663,7 @@ definitionListItem = try $ do
661parseDefinitionList :: PandocMonad m => ManParser m Blocks
663parseDefinitionList :: PandocMonad m => ManParser m Blocks
662parseDefinitionList = definitionList <$> many1 definitionListItem
664parseDefinitionList = definitionList <$> many1 definitionListItem
664−parseLink :: PandocMonad m => [[LinePart]] -> ManParser m Inlines
666+parseLink :: PandocMonad m => [Arg] -> ManParser m Inlines
665parseLink args = do
667parseLink args = do
666 contents <- mconcat <$> many lineInl
668 contents <- mconcat <$> many lineInl
667 mmacro "UE"
669 mmacro "UE"
@@ -670,7 +672,7 @@ parseLink args = do
670 (x:_) -> linePartsToString x
672 (x:_) -> linePartsToString x
671 return $ link url "" contents
673 return $ link url "" contents
673−parseEmailLink :: PandocMonad m => [[LinePart]] -> ManParser m Inlines
675+parseEmailLink :: PandocMonad m => [Arg] -> ManParser m Inlines
674parseEmailLink args = do
676parseEmailLink args = do
675 contents <- mconcat <$> many lineInl
677 contents <- mconcat <$> many lineInl
676 mmacro "ME"
678 mmacro "ME"