diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2023-10-05 09:38:45 -0700 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2023-10-05 09:38:45 -0700 |
| commit | ddabd85eb8a60aa7d6081824271ab59fff7b3088 (patch) | |
| tree | d3ca9f6db4ddb995982ab520dfc3c93db49d16c3 | |
| parent | c33b4581c94c71fe0ffc7702efa7f6a4fdac23d2 (diff) | |
Man writer: Fix some spacing issues around links.
See #9120.
We need to use `\c` before a `.UR` or `.MT`, to avoid
an extra space, and also after. To ensure that a space
at the beginning of the following line doesn't get swallowed
up, we escape it with `\`.
| -rw-r--r-- | src/Text/Pandoc/Writers/Man.hs | 6 | ||||
| -rw-r--r-- | src/Text/Pandoc/Writers/Shared.hs | 10 | ||||
| -rw-r--r-- | test/command/8508.md | 2 | ||||
| -rw-r--r-- | test/writer.man | 34 |
4 files changed, 29 insertions, 23 deletions
diff --git a/src/Text/Pandoc/Writers/Man.hs b/src/Text/Pandoc/Writers/Man.hs index a32733ec3..b1de1bffb 100644 --- a/src/Text/Pandoc/Writers/Man.hs +++ b/src/Text/Pandoc/Writers/Man.hs @@ -311,8 +311,8 @@ inlineToMan _ il@(RawInline f str) return empty inlineToMan _ LineBreak = return $ cr <> literal ".PD 0" $$ literal ".P" $$ literal ".PD" <> cr -inlineToMan _ SoftBreak = return space -inlineToMan _ Space = return space +inlineToMan _ SoftBreak = return $ afterBreak "\\" <> space +inlineToMan _ Space = return $ afterBreak "\\" <> space inlineToMan opts (Link _ txt (src, _)) | not (isURI src) = inlineListToMan opts txt -- skip relative links | otherwise = do @@ -323,7 +323,7 @@ inlineToMan opts (Link _ txt (src, _)) let (start, end) = if "mailto:" `T.isPrefixOf` src then (".MT", ".ME") else (".UR", ".UE") - return $ cr + return $ "\\c" <> cr -- \c avoids extra space $$ (start <+> literal srcSuffix) $$ linktext $$ (end <+> "\\c" <> cr) -- \c avoids space after diff --git a/src/Text/Pandoc/Writers/Shared.hs b/src/Text/Pandoc/Writers/Shared.hs index 7a374102b..6e6e084f2 100644 --- a/src/Text/Pandoc/Writers/Shared.hs +++ b/src/Text/Pandoc/Writers/Shared.hs @@ -50,7 +50,7 @@ import Safe (lastMay) import qualified Data.ByteString.Lazy as BL import Control.Monad (zipWithM) import Data.Aeson (ToJSON (..), encode) -import Data.Char (chr, ord, isSpace, isLetter) +import Data.Char (chr, ord, isSpace, isLetter, isUpper) import Data.List (groupBy, intersperse, transpose, foldl') import Data.List.NonEmpty (NonEmpty(..), nonEmpty) import Data.Text.Conversions (FromText(..)) @@ -552,10 +552,10 @@ splitSentences :: Doc Text -> Doc Text splitSentences = go . toList where go [] = mempty - go (Text len t : BreakingSpace : xs) = - if isSentenceEnding t - then Text len t <> NewLine <> go xs - else Text len t <> BreakingSpace <> go xs + go (Text len t : AfterBreak _ : BreakingSpace : xs) + | isSentenceEnding t = Text len t <> NewLine <> go xs + go (Text len t : BreakingSpace : xs) + | isSentenceEnding t = Text len t <> NewLine <> go xs go (x:xs) = x <> go xs toList (Concat (Concat a b) c) = toList (Concat a (Concat b c)) diff --git a/test/command/8508.md b/test/command/8508.md index 576a95eea..25c6ae785 100644 --- a/test/command/8508.md +++ b/test/command/8508.md @@ -8,10 +8,12 @@ SEE ALSO ^D .SH SEE ALSO .IP \[bu] 2 +\c .UR https://en.wikipedia.org/wiki/Milk Milk .UE \c .IP \[bu] 2 +\c .UR https://en.wikipedia.org/wiki/Extended_Backus–Naur_form EBNF .UE \c diff --git a/test/writer.man b/test/writer.man index 9dd49b15f..584db3ec0 100644 --- a/test/writer.man +++ b/test/writer.man @@ -483,9 +483,9 @@ So is `pine.' .PP `He said, \[lq]I want to go.\[rq]' Were you alive in the 70\[cq]s? .PP -Here is some quoted `\f[CR]code\f[R]' and a \[lq]quoted -link +Here is some quoted `\f[CR]code\f[R]' and a \[lq]\c .UR http://example.com/?foo=1&bar=2 +quoted link .UE \c \[rq]. .PP @@ -604,7 +604,10 @@ URL and title .PP with_underscore .PP -Email link (mailto:nobody@nowhere.net) +\c +.MT nobody@nowhere.net +Email link +.ME \c .PP Empty. .SS Reference @@ -630,39 +633,40 @@ Foo bar. .PP Foo biz. .SS With ampersands -Here\[cq]s a link with an ampersand in the -URL +Here\[cq]s a \c .UR http://example.com/?foo=1&bar=2 +link with an ampersand in the URL .UE \c -. +\&. .PP -Here\[cq]s a link with an amersand in the link text: +Here\[cq]s a link with an amersand in the link text: \c .UR http://att.com/ AT&T .UE \c -. +\&. .PP Here\[cq]s an inline link. .PP Here\[cq]s an inline link in pointy braces. .SS Autolinks -With an ampersand: +With an ampersand: \c .UR http://example.com/?foo=1&bar=2 -.UE +.UE \c .IP \[bu] 2 In a list? .IP \[bu] 2 +\c .UR http://example.com/ .UE \c .IP \[bu] 2 It should. .PP -An e-mail address: +An e-mail address: \c .MT nobody@nowhere.net .ME \c .RS .PP -Blockquoted: +Blockquoted: \c .UR http://example.com/ .UE \c .RE @@ -717,11 +721,11 @@ the first line of each block. .SS [3] .PP This is \f[I]easier\f[R] to type. -Inline notes may contain links +Inline notes may contain \c .UR http://google.com +links .UE \c - and \f[CR]]\f[R] verbatim -characters, as well as [bracketed text]. +\ and \f[CR]]\f[R] verbatim characters, as well as [bracketed text]. .SS [4] .PP In quote. |
