git.iko.soy/typeable/pandoc
on master help sign in
Man reader: remove algebraic type for MacroKind.
3182145John MacFarlane
src/Text/Pandoc/Readers/Man.hs+8−22
@@ -61,13 +61,7 @@ import Text.Pandoc.GroffChar (characterCodes, combiningAccents)
61--
61--
62data FontKind = Bold | Italic | Monospace | Regular deriving (Show, Eq, Ord)
62data FontKind = Bold | Italic | Monospace | Regular deriving (Show, Eq, Ord)
63
63
64−data MacroKind = KTitle
64+type MacroKind = String
65− | KCodeBlStart
66− | KCodeBlEnd
67− | KTab
68− | KTabEnd
69− | KSubTab
70− deriving (Show, Eq)
71
65
72type Font = Set FontKind
66type Font = Set FontKind
73
67
@@ -291,17 +285,9 @@ lexMacro = do
291 macroName <- many1 (letter <|> oneOf ['\\', '"', '&'])
285 macroName <- many1 (letter <|> oneOf ['\\', '"', '&'])
292 args <- lexArgs
286 args <- lexArgs
293 let joinedArgs = unwords $ fst <$> args
287 let joinedArgs = unwords $ fst <$> args
294− knownMacro mkind = MMacro mkind args
295
288
296 tok = case macroName of
289 tok = case macroName of
297 x | x `elem` ["\\\"", "\\#"] -> MComment joinedArgs
290 x | x `elem` ["\\\"", "\\#"] -> MComment joinedArgs
298− "TH" -> knownMacro KTitle
299− "IP" -> knownMacro KTab
300− "TP" -> knownMacro KTab
301− "RE" -> knownMacro KTabEnd
302− "RS" -> knownMacro KSubTab
303− "nf" -> knownMacro KCodeBlStart
304− "fi" -> knownMacro KCodeBlEnd
305 "B" -> MStr (joinedArgs, singleton Bold)
291 "B" -> MStr (joinedArgs, singleton Bold)
306 "BR" -> MMaybeLink joinedArgs
292 "BR" -> MMaybeLink joinedArgs
307 x | x `elem` ["BI", "IB"] -> MStr (joinedArgs, S.fromList [Italic, Bold])
293 x | x `elem` ["BI", "IB"] -> MStr (joinedArgs, S.fromList [Italic, Bold])
@@ -309,7 +295,7 @@ lexMacro = do
309 "SH" -> MHeader 2 args
295 "SH" -> MHeader 2 args
310 "SS" -> MHeader 3 args
296 "SS" -> MHeader 3 args
311 x | x `elem` [ "P", "PP", "LP", "sp"] -> MEmptyLine
297 x | x `elem` [ "P", "PP", "LP", "sp"] -> MEmptyLine
312− _ -> MUnknownMacro macroName args
298+ _ -> MMacro macroName args
313 return tok
299 return tok
314
300
315 where
301 where
@@ -438,7 +424,7 @@ mcomment = msatisfy isMComment where
438
424
439parseTitle :: PandocMonad m => ManParser m Blocks
425parseTitle :: PandocMonad m => ManParser m Blocks
440parseTitle = do
426parseTitle = do
441− (MMacro _ args) <- mmacro KTitle
427+ (MMacro _ args) <- mmacro "TH"
442 if null args
428 if null args
443 then return mempty
429 then return mempty
444 else do
430 else do
@@ -527,9 +513,9 @@ parseInlines = do
527
513
528parseCodeBlock :: PandocMonad m => ManParser m Blocks
514parseCodeBlock :: PandocMonad m => ManParser m Blocks
529parseCodeBlock = do
515parseCodeBlock = do
530− mmacro KCodeBlStart
516+ mmacro "nf"
531 toks <- many (mstr <|> mline <|> mmaybeLink <|> memplyLine <|> munknownMacro <|> mcomment)
517 toks <- many (mstr <|> mline <|> mmaybeLink <|> memplyLine <|> munknownMacro <|> mcomment)
532− mmacro KCodeBlEnd
518+ mmacro "fi"
533 return $ codeBlock (removeFinalNewline $
519 return $ codeBlock (removeFinalNewline $
534 intercalate "\n" . catMaybes $
520 intercalate "\n" . catMaybes $
535 extractText <$> toks)
521 extractText <$> toks)
@@ -574,7 +560,7 @@ parseList = do
574
560
575 paras :: PandocMonad m => ManParser m (ListBuilder, Blocks)
561 paras :: PandocMonad m => ManParser m (ListBuilder, Blocks)
576 paras = do
562 paras = do
577− (MMacro _ args) <- mmacro KTab
563+ (MMacro _ args) <- mmacro "IP"
578 let lbuilder = listKind args
564 let lbuilder = listKind args
579 inls <- parseInlines
565 inls <- parseInlines
580 subls <- mconcat <$> many sublist
566 subls <- mconcat <$> many sublist
@@ -582,9 +568,9 @@ parseList = do
582
568
583 sublist :: PandocMonad m => ManParser m Blocks
569 sublist :: PandocMonad m => ManParser m Blocks
584 sublist = do
570 sublist = do
585− mmacro KSubTab
571+ mmacro "RS"
586 bl <- parseList
572 bl <- parseList
587− mmacro KTabEnd
573+ mmacro "RE"
588 return bl
574 return bl
589
575
590-- In case of weird man file it will be parsed succesfully
576-- In case of weird man file it will be parsed succesfully