git.iko.soy/typeable/pandoc
on master help sign in
Roff tokenizer: better handling of font inlines `\f`....
dc7f41bJohn MacFarlane
src/Text/Pandoc/Readers/Roff.hs+4−7
@@ -271,9 +271,7 @@ escFontSize = do
271escFont :: PandocMonad m => RoffLexer m [LinePart]
271escFont :: PandocMonad m => RoffLexer m [LinePart]
272escFont = do
272escFont = do
273 font <- choice
273 font <- choice
274− [ char 'S' >> return defaultFontSpec
275− , digit >> return defaultFontSpec
276− , char '(' >> anyChar >> anyChar >> return defaultFontSpec
274+ [ digit >> return defaultFontSpec
277 , digit >> return defaultFontSpec
275 , digit >> return defaultFontSpec
278 , ($ defaultFontSpec) <$> letterFontKind
276 , ($ defaultFontSpec) <$> letterFontKind
279 , lettersFont
277 , lettersFont
@@ -284,10 +282,8 @@ escFont = do
284
282
285lettersFont :: PandocMonad m => RoffLexer m FontSpec
283lettersFont :: PandocMonad m => RoffLexer m FontSpec
286lettersFont = try $ do
284lettersFont = try $ do
287− char '['
288− fs <- many letterFontKind
285+ fs <- (char '[' *> many letterFontKind <* char ']')
289− skipMany letter
286+ <|> (char '(' *> count 2 letterFontKind)
290− char ']'
291 if null fs
287 if null fs
292 then prevFont <$> getState
288 then prevFont <$> getState
293 else return $ foldr ($) defaultFontSpec fs
289 else return $ foldr ($) defaultFontSpec fs
@@ -298,6 +294,7 @@ letterFontKind = choice [
298 , oneOf ['I','i'] >> return (\fs -> fs { fontItalic = True })
294 , oneOf ['I','i'] >> return (\fs -> fs { fontItalic = True })
299 , oneOf ['C','c'] >> return (\fs -> fs { fontMonospace = True })
295 , oneOf ['C','c'] >> return (\fs -> fs { fontMonospace = True })
300 , oneOf ['P','p','R','r'] >> return id
296 , oneOf ['P','p','R','r'] >> return id
297+ , letter >> return id -- L, S, etc.
301 ]
298 ]
302
299
303
300