Skip to content

Commit

Permalink
Man writer: Fix some spacing issues around links.
Browse files Browse the repository at this point in the history
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 `\`.
  • Loading branch information
jgm committed Oct 5, 2023
1 parent c33b458 commit ddabd85
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 23 deletions.
6 changes: 3 additions & 3 deletions src/Text/Pandoc/Writers/Man.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
10 changes: 5 additions & 5 deletions src/Text/Pandoc/Writers/Shared.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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(..))
Expand Down Expand Up @@ -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))
Expand Down
2 changes: 2 additions & 0 deletions test/command/8508.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 19 additions & 15 deletions test/writer.man
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit ddabd85

Please sign in to comment.