diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2020-11-18 22:44:32 -0800 | 
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2020-11-18 22:44:32 -0800 | 
| commit | 0962b30d8428ef875034c15ae7d9c67c62c2f177 (patch) | |
| tree | e2cbb1b6986fa7ac2ef6fba02a3145870e57f9c9 | |
| parent | 3f278f580e82670999b2bc8e6f10001b792c574c (diff) | |
| download | pandoc-0962b30d8428ef875034c15ae7d9c67c62c2f177.tar.gz | |
Man reader: improve handling of .IP.
We now better handle `.IP` when it is used with non-bullet,
non-numbered lists, creating a definition list.
We also skip blank lines like groff itself.
Closes #6858.
| -rw-r--r-- | src/Text/Pandoc/Readers/Man.hs | 24 | ||||
| -rw-r--r-- | test/command/6858.md | 52 | 
2 files changed, 71 insertions, 5 deletions
| diff --git a/src/Text/Pandoc/Readers/Man.hs b/src/Text/Pandoc/Readers/Man.hs index e87d07bd9..21b8feaab 100644 --- a/src/Text/Pandoc/Readers/Man.hs +++ b/src/Text/Pandoc/Readers/Man.hs @@ -407,12 +407,14 @@ parseBlockQuote = blockQuote <$> continuation  data ListType = Ordered ListAttributes                | Bullet +              | Definition T.Text  listTypeMatches :: Maybe ListType -> ListType -> Bool  listTypeMatches Nothing _            = True  listTypeMatches (Just Bullet) Bullet = True  listTypeMatches (Just (Ordered (_,x,y))) (Ordered (_,x',y'))                                       = x == x' && y == y' +listTypeMatches (Just (Definition _)) (Definition _) = True  listTypeMatches (Just _) _           = False  listItem :: PandocMonad m => Maybe ListType -> ManParser m (ListType, Blocks) @@ -427,20 +429,28 @@ listItem mbListType = try $ do                    Right (start, listtype, listdelim)                      | cs == cs' -> Ordered (start, listtype, listdelim)                      | otherwise -> Ordered (start, listtype, DefaultDelim) -                  Left _        -> Bullet +                  Left _ +                    | cs == "\183" || cs == "-" || cs == "*" || cs == "+" +                                   -> Bullet +                    | otherwise    -> Definition cs        guard $ listTypeMatches mbListType lt +      skipMany memptyLine        inls <- option mempty parseInlines +      skipMany memptyLine        continuations <- mconcat <$> many continuation        return (lt, para inls <> continuations)      []          -> mzero  parseList :: PandocMonad m => ManParser m Blocks  parseList = try $ do -  (lt, x) <- listItem Nothing -  xs <- map snd <$> many (listItem (Just lt)) +  x@(lt, _) <- listItem Nothing +  xs <- many (listItem (Just lt)) +  let toDefItem (Definition t, bs) = (B.text t, [bs]) +      toDefItem _ = mempty    return $ case lt of -             Bullet        -> bulletList (x:xs) -             Ordered lattr -> orderedListWith lattr (x:xs) +             Bullet        -> bulletList $ map snd (x:xs) +             Ordered lattr -> orderedListWith lattr $ map snd (x:xs) +             Definition _  -> definitionList $ map toDefItem (x:xs)  continuation :: PandocMonad m => ManParser m Blocks  continuation = @@ -453,11 +463,15 @@ definitionListItem :: PandocMonad m                     => ManParser m (Inlines, [Blocks])  definitionListItem = try $ do    mmacro "TP"  -- args specify indent level, can ignore +  skipMany memptyLine    term <- parseInline +  skipMany memptyLine    moreterms <- many $ try $ do                   mmacro "TQ"                   parseInline +  skipMany memptyLine    inls <- option mempty parseInlines +  skipMany memptyLine    continuations <- mconcat <$> many continuation    return ( mconcat (intersperse B.linebreak (term:moreterms))           , [para inls <> continuations]) diff --git a/test/command/6858.md b/test/command/6858.md new file mode 100644 index 000000000..53cb9bddb --- /dev/null +++ b/test/command/6858.md @@ -0,0 +1,52 @@ +``` +% pandoc -t markdown -f man +.TH FvwmAnimate 1 "Date" Fvwm "Fvwm Modules" +.UC +.SH NAME +\fBFvwmAnimate\fP \- the fvwm animate module +.SH SYNOPSIS +Module FvwmAnimate [ModuleAlias] + +.IP "*FvwmAnimate: Color \fBcolor\fP" + +Tells \fBFvwmAnimate\fP what color to draw with. +The color is "XOR'ed" (exclusive ORed) onto the background. + +.IP "*FvwmAnimate: Pixmap \fBpixmap\fP" + +Tells \fBFvwmAnimate\fP to use \fBpixmap\fP to draw with. This can be useful +if \fB*FvwmAnimate: Color\fP gives poor results. +^D +# NAME + +**FvwmAnimate** - the fvwm animate module + +# SYNOPSIS + +Module FvwmAnimate \[ModuleAlias\] + +\*FvwmAnimate: Color color + +:   Tells **FvwmAnimate** what color to draw with. The color is +    \"XOR\'ed\" (exclusive ORed) onto the background. + +\*FvwmAnimate: Pixmap pixmap + +:   Tells **FvwmAnimate** to use **pixmap** to draw with. This can be +    useful if **\*FvwmAnimate: Color** gives poor results. +``` + +``` +% pandoc -t markdown -f man +.IP "\[bu]" + +hi + +.IP "\[bu]" + +there +^D +-   hi + +-   there +``` | 
