diff options
author | John MacFarlane <jgm@berkeley.edu> | 2018-10-21 22:00:08 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2018-10-21 22:00:50 -0700 |
commit | 382763a7db3f886a598f87b770e9923a2c8b4454 (patch) | |
tree | c8d97c062c81efa65a17874d90bff04382267f3d | |
parent | 00f1f4a220f870046ca4d257baf0e8f8e0e221e0 (diff) | |
download | pandoc-382763a7db3f886a598f87b770e9923a2c8b4454.tar.gz |
Man reader: support .ds, .ds1; also fix macro arguments.
Closes #4997.
-rw-r--r-- | src/Text/Pandoc/Readers/Man.hs | 16 | ||||
-rw-r--r-- | test/man-reader.man | 4 | ||||
-rw-r--r-- | test/man-reader.native | 2 |
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 "."]] |