Roff reader: Improved handling of custom strings as arguments.

Added test.
This commit is contained in:
John MacFarlane 2018-11-02 21:35:49 -07:00
parent e95aeeafb8
commit 805b9f8a12
2 changed files with 33 additions and 6 deletions

View file

@ -212,6 +212,7 @@ readUnicodeChar _ = Nothing
escapeNormal :: PandocMonad m => RoffLexer m [LinePart]
escapeNormal = do
c <- anyChar
optional expandString
case c of
' ' -> return [RoffStr " "]
'"' -> mempty <$ skipMany (satisfy (/='\n')) -- line comment
@ -313,13 +314,12 @@ signedNumber = try $ do
-- Parses: [..] or (..
escapeArg :: PandocMonad m => RoffLexer m String
escapeArg = choice
[ char '[' *> manyTill (expanding $ noneOf ['\n',']']) (char ']')
, char '(' *> count 2 (expanding $ satisfy (/='\n'))
[ char '[' *> optional expandString *>
manyTill (noneOf ['\n',']']) (char ']')
, char '(' *> optional expandString *>
count 2 (satisfy (/='\n'))
]
expanding :: PandocMonad m => RoffLexer m a -> RoffLexer m a
expanding parser = try $ optional expandString >> parser
expandString :: PandocMonad m => RoffLexer m ()
expandString = try $ do
pos <- getPosition
@ -336,7 +336,7 @@ quoteArg = char '\'' *> manyTill (noneOf ['\n','\'']) (char '\'')
escFont :: PandocMonad m => RoffLexer m [LinePart]
escFont = do
font <- expanding (escapeArg <|> count 1 alphaNum)
font <- escapeArg <|> count 1 alphaNum
font' <- if null font || font == "P"
then prevFont <$> getState
else return $ foldr processFontLetter defaultFontSpec font

27
test/command/5039.md Normal file
View file

@ -0,0 +1,27 @@
```
% pandoc -f man -t plain
.ds foo bar
.ds bar baz
\*[\*[foo]]
^D
baz
```
```
% pandoc -f man -t plain
.ds foo [bar]
.ds bar baz
\*\*[foo]
^D
baz
```
```
% pandoc -f man -t html
.ds B-Font B
.ds I-Font I
.ds R-Font R
\f\*[B-Font]certtool\fP
^D
<p><strong>certtool</strong></p>
```