aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-10-20 22:55:03 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-10-20 22:55:20 -0700
commit9593b375d747d681db0d3aba3af0f1ffd2db0f2f (patch)
treeb1755410f3d6f7065adf38395d65c1ba0a047792
parent2b7a541dd0503a30b26e3a5f4f97470c675466b6 (diff)
downloadpandoc-9593b375d747d681db0d3aba3af0f1ffd2db0f2f.tar.gz
Man reader: support UR/UE, MT/ME for links.
Closes #4989.
-rw-r--r--src/Text/Pandoc/Readers/Man.hs25
-rw-r--r--test/man-reader.man10
-rw-r--r--test/man-reader.native5
3 files changed, 36 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/Man.hs b/src/Text/Pandoc/Readers/Man.hs
index 52f4ef2f7..9ef20be0e 100644
--- a/src/Text/Pandoc/Readers/Man.hs
+++ b/src/Text/Pandoc/Readers/Man.hs
@@ -497,9 +497,8 @@ parsePara = para . trimInlines <$> parseInlines
parseInlines :: PandocMonad m => ManParser m Inlines
parseInlines = do
- inls <- many1 (lineInl <|> comment)
- let withspaces = intersperse B.space inls
- return $ mconcat withspaces
+ inls <- many1 (lineInl <|> comment <|> parseLink <|> parseEmailLink)
+ return $ mconcat $ intersperse B.space inls
lineInl :: PandocMonad m => ManParser m Inlines
lineInl = do
@@ -605,6 +604,26 @@ definitionListItem = try $ do
parseDefinitionList :: PandocMonad m => ManParser m Blocks
parseDefinitionList = definitionList <$> many1 definitionListItem
+parseLink :: PandocMonad m => ManParser m Inlines
+parseLink = try $ do
+ MMacro _ args <- mmacro "UR"
+ contents <- mconcat <$> many1 (lineInl <|> comment)
+ mmacro "UE"
+ let url = case args of
+ [] -> ""
+ (x:_) -> linePartsToString x
+ return $ link url "" contents
+
+parseEmailLink :: PandocMonad m => ManParser m Inlines
+parseEmailLink = do
+ MMacro _ args <- mmacro "MT"
+ contents <- mconcat <$> many1 (lineInl <|> comment)
+ mmacro "ME"
+ let url = case args of
+ [] -> ""
+ (x:_) -> "mailto:" ++ linePartsToString x
+ return $ link url "" contents
+
parseMacroDef :: PandocMonad m => ManParser m Blocks
parseMacroDef = do
MMacro _ args <- mmacro "de"
diff --git a/test/man-reader.man b/test/man-reader.man
index f94aaedd6..acda23a00 100644
--- a/test/man-reader.man
+++ b/test/man-reader.man
@@ -197,3 +197,13 @@ Plus: +
.PP
Minus: \-
.PP
+.SH Links
+.PP
+.UR http://\:example.com
+some random
+site
+.UE
+.PP
+.MT me@example.com
+my email address.
+.ME
diff --git a/test/man-reader.native b/test/man-reader.native
index b0853b683..eb85c7440 100644
--- a/test/man-reader.native
+++ b/test/man-reader.native
@@ -98,4 +98,7 @@ Pandoc (Meta {unMeta = fromList [("date",MetaInlines [Str "Oct",Space,Str "17,",
,Para [Str "Period:",Space,Str "."]
,Para [Str "Bang:",Space,Str "!"]
,Para [Str "Plus:",Space,Str "+"]
-,Para [Str "Minus:",Space,Str "-"]]
+,Para [Str "Minus:",Space,Str "-"]
+,Header 1 ("",[],[]) [Str "Links"]
+,Para [Link ("",[],[]) [Str "some",Space,Str "randomsite"] ("http://example.com","")]
+,Para [Link ("",[],[]) [Str "my",Space,Str "email",Space,Str "address."] ("mailto:me@example.com","")]]