@@ -39,6 +39,7 @@ import Data.List ( isPrefixOf, intersperse, intercalate )
3939import Text.Pandoc.Pretty
4040import Text.Pandoc.Builder (deleteMeta)
4141import Control.Monad.State
42+import Data.Char ( isDigit )
4243
4344type Notes = [[Block]]
4445data WriterState = WriterState { stNotes :: Notes
@@ -56,13 +57,20 @@ pandocToMan opts (Pandoc meta blocks) = do
5657 else Nothing
5758 let render' = render colwidth
5859 titleText <- inlineListToMan opts $ docTitle meta
59− let (cmdName, rest) = break (== ' ') $ render' titleText
60− let (title', section) = case reverse cmdName of
61− (')':d:'(':xs) | d `elem` ['0'..'9'] ->
62− (reverse xs, [d])
63− xs -> (reverse xs, "\"\"")
64− let description = hsep $
65− map (doubleQuotes . text . trim) $ splitBy (== '|') rest
60+ let title' = render' titleText
61+ let setFieldsFromTitle =
62+ case break (== ' ') title' of
63+ (cmdName, rest) -> case reverse cmdName of
64+ (')':d:'(':xs) | isDigit d ->
65+ setField "title" (reverse xs) .
66+ setField "section" [d] .
67+ case splitBy (=='|') rest of
68+ (ft:hds) ->
69+ setField "footer" (trim ft) .
70+ setField "header"
71+ (trim $ concat hds)
72+ [] -> id
73+ _ -> setField "title" title'
6674 metadata <- metaToJSON
6775 (fmap (render colwidth) . blockListToMan opts)
6876 (fmap (render colwidth) . inlineListToMan opts)
@@ -73,9 +81,7 @@ pandocToMan opts (Pandoc meta blocks) = do
7381 let main = render' $ body $$ notes' $$ text ""
7482 hasTables <- liftM stHasTables get
7583 let context = setField "body" main
76− $ setField "title" title'
77− $ setField "section" section
78− $ setField "description" (render' description)
84+ $ setFieldsFromTitle
7985 $ setField "has-tables" hasTables
8086 $ foldl (\acc (x,y) -> setField x y acc)
8187 metadata (writerVariables opts)