@@ -37,7 +37,7 @@ import Control.Monad (liftM)
37import Control.Monad.Except (throwError)
37import Control.Monad.Except (throwError)
38import Data.Default (Default)
38import Data.Default (Default)
39import Data.Map (insert)
39import Data.Map (insert)
40−import Data.Maybe (isJust, catMaybes)
40+import Data.Maybe (catMaybes)
41import Data.List (intersperse, intercalate)
41import Data.List (intersperse, intercalate)
42import qualified Data.Text as T
42import qualified Data.Text as T
@@ -159,6 +159,9 @@ parseMan = do
159 isNull Null = True
159 isNull Null = True
160 isNull _ = False
160 isNull _ = False
162+eofline :: PandocMonad m => ManLexer m ()
163+eofline = (newline >> return ()) <|> eof
162-- TODO escape characters in arguments
165-- TODO escape characters in arguments
163lexMacro :: PandocMonad m => ManLexer m ManToken
166lexMacro :: PandocMonad m => ManLexer m ManToken
164lexMacro = do
167lexMacro = do
@@ -166,7 +169,7 @@ lexMacro = do
166 many space
169 many space
167 macroName <- many1 (letter <|> oneOf ['\\', '"'])
170 macroName <- many1 (letter <|> oneOf ['\\', '"'])
168 args <- lexArgs
171 args <- lexArgs
169− let joinedArgs = concat $ intersperse " " args
172+ let joinedArgs = unwords args
170 let knownMacro mkind = MMacro mkind args
173 let knownMacro mkind = MMacro mkind args
172 let tok = case macroName of
175 let tok = case macroName of
@@ -190,17 +193,17 @@ lexMacro = do
191 lexArgs :: PandocMonad m => ManLexer m [String]
194 lexArgs :: PandocMonad m => ManLexer m [String]
192 lexArgs = do
195 lexArgs = do
193− eolOpt <- optionMaybe $ char '\n'
196+ args <- many oneArg
194− if isJust eolOpt
197+ eofline
198− arg <- try quotedArg <|> plainArg
199− otherargs <- lexArgs
200− return $ arg : otherargs
198+ return args
202+ oneArg :: PandocMonad m => ManLexer m String
205+ try quotedArg <|> plainArg
204 plainArg :: PandocMonad m => ManLexer m String
207 plainArg :: PandocMonad m => ManLexer m String
205 plainArg = many1 $ noneOf " \t\n"
208 plainArg = many1 $ noneOf " \t\n"
@@ -257,7 +260,7 @@ escapeLexer = do
257lexLine :: PandocMonad m => ManLexer m ManToken
260lexLine :: PandocMonad m => ManLexer m ManToken
258lexLine = do
261lexLine = do
259 lnparts <- many1 (esc <|> linePart)
262 lnparts <- many1 (esc <|> linePart)
261 return $ MLine $ catMaybes lnparts
264 return $ MLine $ catMaybes lnparts
@@ -384,7 +387,7 @@ strToInline s ItalicBold = Strong [Emph [Str s]]
384parsePara :: PandocMonad m => ManParser m Block
387parsePara :: PandocMonad m => ManParser m Block
385parsePara = do
388parsePara = do
386 inls <- many1 (strInl <|> lineInl <|> linkInl <|> comment)
389 inls <- many1 (strInl <|> lineInl <|> linkInl <|> comment)
387− let withspaces = intersperse [Str " "] inls
390+ let withspaces = intersperse [Space] inls
388 return $ Para (concat withspaces)
391 return $ Para (concat withspaces)
@@ -420,7 +423,9 @@ parsePara = do
420 other <- many anyChar
423 other <- many anyChar
421 let manurl pagename section = "../"++section++"/"++pagename++"."++section
424 let manurl pagename section = "../"++section++"/"++pagename++"."++section
422 return $ [ Link nullAttr [Strong [Str mpage]] (manurl mpage [mansect], mpage)
425 return $ [ Link nullAttr [Strong [Str mpage]] (manurl mpage [mansect], mpage)
423− , Strong [Str $ " ("++[mansect] ++ ")", Str other]]
426+ , Strong [Str $ " ("++[mansect] ++ ")"
425 comment :: PandocMonad m => ManParser m [Inline]
430 comment :: PandocMonad m => ManParser m [Inline]
426 comment = mcomment >> return []
431 comment = mcomment >> return []
@@ -448,9 +453,7 @@ parseHeader = do
448 return $ Header lvl nullAttr [Str s]
453 return $ Header lvl nullAttr [Str s]
450parseBulletList :: PandocMonad m => ManParser m Block
455parseBulletList :: PandocMonad m => ManParser m Block
451−parseBulletList = do
456+parseBulletList = BulletList . map (: []) <$> many1 block
453− return $ BulletList $ map (:[]) bls