git.iko.soy/typeable/pandoc
on master help sign in
Groff reader: got `\f[]` working properly.
02e515cJohn MacFarlane
src/Text/Pandoc/Readers/Groff.hs+7−4
@@ -105,7 +105,8 @@ singleTok :: ManToken -> ManTokens
105singleTok t = ManTokens (Seq.singleton t)
105singleTok t = ManTokens (Seq.singleton t)
106
106
107data RoffState = RoffState { customMacros :: M.Map String ManTokens
107data RoffState = RoffState { customMacros :: M.Map String ManTokens
108− , lastFont :: FontSpec
108+ , prevFont :: FontSpec
109+ , currentFont :: FontSpec
109 } deriving Show
110 } deriving Show
110
111
111instance Default RoffState where
112instance Default RoffState where
@@ -117,7 +118,8 @@ instance Default RoffState where
117 , ("lq", "\x201C")
118 , ("lq", "\x201C")
118 , ("rq", "\x201D")
119 , ("rq", "\x201D")
119 , ("R", "\x00AE") ]
120 , ("R", "\x00AE") ]
121+ , prevFont = defaultFontSpec
120− , lastFont = defaultFontSpec
122+ , currentFont = defaultFontSpec
121 }
123 }
122
124
123type ManLexer m = ParserT [Char] RoffState m
125type ManLexer m = ParserT [Char] RoffState m
@@ -261,7 +263,8 @@ escFont = do
261 , ($ defaultFontSpec) <$> letterFontKind
263 , ($ defaultFontSpec) <$> letterFontKind
262 , lettersFont
264 , lettersFont
263 ]
265 ]
264− modifyState $ \st -> st{ lastFont = font }
266+ modifyState $ \st -> st{ prevFont = currentFont st
267+ , currentFont = font }
265 return [Font font]
268 return [Font font]
266
269
267lettersFont :: PandocMonad m => ManLexer m FontSpec
270lettersFont :: PandocMonad m => ManLexer m FontSpec
@@ -271,7 +274,7 @@ lettersFont = try $ do
271 skipMany letter
274 skipMany letter
272 char ']'
275 char ']'
273 if null fs
276 if null fs
274− then lastFont <$> getState
277+ then prevFont <$> getState
275 else return $ foldr ($) defaultFontSpec fs
278 else return $ foldr ($) defaultFontSpec fs
276
279
277letterFontKind :: PandocMonad m => ManLexer m (FontSpec -> FontSpec)
280letterFontKind :: PandocMonad m => ManLexer m (FontSpec -> FontSpec)
src/Text/Pandoc/Readers/Man.hs+1
@@ -180,6 +180,7 @@ linePartsToInlines = go False
180 go :: Bool -> [LinePart] -> Inlines
180 go :: Bool -> [LinePart] -> Inlines
181 go _ [] = mempty
181 go _ [] = mempty
182 go mono (MacroArg _:xs) = go mono xs -- shouldn't happen
182 go mono (MacroArg _:xs) = go mono xs -- shouldn't happen
183+ go mono (RoffStr s : RoffStr t : xs) = go mono (RoffStr (s <> t):xs)
183 go mono (RoffStr s : xs)
184 go mono (RoffStr s : xs)
184 | mono = code s <> go mono xs
185 | mono = code s <> go mono xs
185 | otherwise = text s <> go mono xs
186 | otherwise = text s <> go mono xs