@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 Module : Text.Pandoc.Readers.Man
24 Module : Text.Pandoc.Readers.Man
25− Copyright : Copyright (C) 2018 Yan Pashkovsky
25+ Copyright : Copyright (C) 2018 Yan Pashkovsky and John MacFarlane
26 License : GNU GPL, version 2 or above
26 License : GNU GPL, version 2 or above
28 Maintainer : Yan Pashkovsky <yanp.bugz@gmail.com>
28 Maintainer : Yan Pashkovsky <yanp.bugz@gmail.com>
@@ -74,6 +74,7 @@ data ManToken = MStr RoffStr
74 | MEmptyLine
74 | MEmptyLine
75 | MMacro MacroKind [RoffStr]
75 | MMacro MacroKind [RoffStr]
76 | MComment String
76 | MComment String
77 deriving Show
78 deriving Show
79data RoffState = RoffState { fontKind :: Font
80data RoffState = RoffState { fontKind :: Font
@@ -159,7 +160,7 @@ escapeLexer = do
159 cs <- count 2 anyChar
160 cs <- count 2 anyChar
160 case M.lookup cs characterCodeMap of
161 case M.lookup cs characterCodeMap of
161 Just c -> return [c]
162 Just c -> return [c]
162− Nothing -> escUnknown ('(':cs)
163+ Nothing -> escUnknown ('\\':'(':cs) "\xFFFD"
164 bracketedGlyph =
165 bracketedGlyph =
165 char '[' *>
166 char '[' *>
@@ -177,7 +178,7 @@ escapeLexer = do
177 charCode = do
178 charCode = do
178 cs <- many1 (noneOf ['[',']',' ','\t','\n'])
179 cs <- many1 (noneOf ['[',']',' ','\t','\n'])
179 case M.lookup cs characterCodeMap of
180 case M.lookup cs characterCodeMap of
180− Nothing -> mzero
181+ Nothing -> escUnknown ("\\[" ++ cs ++ "]") '\xFFFD'
181 Just c -> return c
182 Just c -> return c
183 escStar = do
184 escStar = do
@@ -216,7 +217,7 @@ escapeLexer = do
216 '|' -> return " "
217 '|' -> return " "
217 '\'' -> return "`"
218 '\'' -> return "`"
218 '.' -> return "`"
219 '.' -> return "`"
219− _ -> escUnknown [c]
220+ _ -> escUnknown [c] "\xFFFD"
221 escFont :: PandocMonad m => ManLexer m String
222 escFont :: PandocMonad m => ManLexer m String
222 escFont = do
223 escFont = do
@@ -245,11 +246,11 @@ escapeLexer = do
245 , (char 'P' <|> char 'R') >> return Regular
246 , (char 'P' <|> char 'R') >> return Regular
248− escUnknown :: PandocMonad m => String -> ManLexer m String
249+ escUnknown :: PandocMonad m => String -> a -> ManLexer m a
249− escUnknown s = do
250+ escUnknown s x = do
250 pos <- getPosition
251 pos <- getPosition
251 report $ SkippedContent ("Unknown escape sequence " ++ s) pos
252 report $ SkippedContent ("Unknown escape sequence " ++ s) pos
252− return mempty
253+ return x
254currentFont :: PandocMonad m => ManLexer m Font
255currentFont :: PandocMonad m => ManLexer m Font
255currentFont = fontKind <$> getState
256currentFont = fontKind <$> getState
@@ -267,12 +268,13 @@ lexMacro :: PandocMonad m => ManLexer m ManToken
267lexMacro = do
268lexMacro = do
268 char '.' <|> char '\''
269 char '.' <|> char '\''
269 many spacetab
270 many spacetab
270− macroName <- many (letter <|> oneOf ['\\', '"', '&'])
271+ macroName <- many (letter <|> oneOf ['\\', '"', '&', '.'])
271 args <- lexArgs
272 args <- lexArgs
272 let joinedArgs = unwords $ fst <$> args
273 let joinedArgs = unwords $ fst <$> args
274 tok = case macroName of
275 tok = case macroName of
275 "" -> MComment ""
276 "" -> MComment ""
276 x | x `elem` ["\\\"", "\\#"] -> MComment joinedArgs
278 x | x `elem` ["\\\"", "\\#"] -> MComment joinedArgs
277 "B" -> MStr (joinedArgs, singleton Bold)
279 "B" -> MStr (joinedArgs, singleton Bold)
278 "BR" -> MMaybeLink joinedArgs
280 "BR" -> MMaybeLink joinedArgs