aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-10-21 22:00:08 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-10-21 22:00:50 -0700
commit382763a7db3f886a598f87b770e9923a2c8b4454 (patch)
treec8d97c062c81efa65a17874d90bff04382267f3d
parent00f1f4a220f870046ca4d257baf0e8f8e0e221e0 (diff)
downloadpandoc-382763a7db3f886a598f87b770e9923a2c8b4454.tar.gz
Man reader: support .ds, .ds1; also fix macro arguments.
Closes #4997.
-rw-r--r--src/Text/Pandoc/Readers/Man.hs16
-rw-r--r--test/man-reader.man4
-rw-r--r--test/man-reader.native2
3 files changed, 18 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/Man.hs b/src/Text/Pandoc/Readers/Man.hs
index 30e66acf1..c3ca1b76e 100644
--- a/src/Text/Pandoc/Readers/Man.hs
+++ b/src/Text/Pandoc/Readers/Man.hs
@@ -273,6 +273,8 @@ lexMacro = do
"\\\"" -> return mempty
"\\#" -> return mempty
"de" -> lexMacroDef args
+ "ds" -> lexStringDef args
+ "ds1" -> lexStringDef args
"sp" -> return $ singleTok MEmptyLine
"so" -> lexIncludeFile args
_ -> resolveMacro macroName args
@@ -309,6 +311,17 @@ resolveMacro macroName args = do
fillMacroArg x = x
return $ ManTokens . fmap fillMacroArg . unManTokens $ ts
+lexStringDef :: PandocMonad m => [Arg] -> ManLexer m ManTokens
+lexStringDef args = do -- string definition
+ case args of
+ [] -> fail "No argument to .ds"
+ (x:ys) -> do
+ let ts = singleTok $ MLine (intercalate [RoffStr (" ", mempty)] ys)
+ let stringName = linePartsToString x
+ modifyState $ \st ->
+ st{ customMacros = M.insert stringName ts (customMacros st) }
+ return mempty
+
lexMacroDef :: PandocMonad m => [Arg] -> ManLexer m ManTokens
lexMacroDef args = do -- macro definition
(macroName, stopMacro) <-
@@ -410,8 +423,7 @@ linePart = macroArg <|> esc <|> escStar <|>
macroArg :: PandocMonad m => ManLexer m [LinePart]
macroArg = try $ do
- char '\\'
- char '$'
+ string "\\\\$"
x <- digit
return [MacroArg $ ord x - ord '0']
diff --git a/test/man-reader.man b/test/man-reader.man
index 1ff714c14..b633e1e1c 100644
--- a/test/man-reader.man
+++ b/test/man-reader.man
@@ -214,8 +214,10 @@ Me Myself
..
.de auth !!
.I
-The author is \$1.
+The author is \\$1.
.!!
.au
and I.
.auth "John Jones"
+.ds me The \f[B]Author\f[R]
+It's \*(me.
diff --git a/test/man-reader.native b/test/man-reader.native
index 549b28e80..9973ac022 100644
--- a/test/man-reader.native
+++ b/test/man-reader.native
@@ -103,4 +103,4 @@ Pandoc (Meta {unMeta = fromList [("date",MetaInlines [Str "Oct",Space,Str "17,",
,Para [Link ("",[],[]) [Str "some",Space,Str "randomsite"] ("http://example.com","")]
,Para [Link ("",[],[]) [Str "my",Space,Str "email",Space,Str "address."] ("mailto:me@example.com","")]
,Header 1 ("",[],[]) [Str "Macros"]
-,Para [Strong [Str "Me",Space,Str "Myself"],Space,Str "and",Space,Str "I.",Space,Emph [Str "The",Space,Str "author",Space,Str "is",Space,Str "John",Space,Str "Jones."]]]
+,Para [Strong [Str "Me",Space,Str "Myself"],Space,Str "and",Space,Str "I.",Space,Emph [Str "The",Space,Str "author",Space,Str "is",Space,Str "John",Space,Str "Jones."],Space,Str "It's",Space,Str "The",Space,Strong [Str "Author"],Str "."]]