41 lines
1.4 KiB
Haskell
41 lines
1.4 KiB
Haskell
|
-- Create pandoc.1 man page from README
|
||
|
import Text.Pandoc
|
||
|
import Data.ByteString.UTF8 (toString, fromString)
|
||
|
import Data.Char (toUpper)
|
||
|
import qualified Data.ByteString as B
|
||
|
import Control.Monad
|
||
|
import System.FilePath
|
||
|
|
||
|
main = do
|
||
|
rmContents <- liftM toString $ B.readFile "README"
|
||
|
let (Pandoc meta blocks) = readMarkdown defaultParserState rmContents
|
||
|
let newBlocks = removeWrapperSect blocks
|
||
|
manTemplate <- liftM toString $ B.readFile "manpage.template"
|
||
|
let opts = defaultWriterOptions{ writerStandalone = True
|
||
|
, writerTemplate = manTemplate }
|
||
|
let manPage = writeMan opts $
|
||
|
processWith (concatMap removeLinks) $
|
||
|
processWith capitalizeHeaders $
|
||
|
Pandoc meta newBlocks
|
||
|
B.writeFile ("man" </> "man1" </> "pandoc.1") $ fromString manPage
|
||
|
|
||
|
removeLinks :: Inline -> [Inline]
|
||
|
removeLinks (Link l _) = l
|
||
|
removeLinks x = [x]
|
||
|
|
||
|
capitalizeHeaders :: Block -> Block
|
||
|
capitalizeHeaders (Header 1 xs) = Header 1 $ processWith capitalize xs
|
||
|
capitalizeHeaders x = x
|
||
|
|
||
|
capitalize :: Inline -> Inline
|
||
|
capitalize (Str xs) = Str $ map toUpper xs
|
||
|
capitalize x = x
|
||
|
|
||
|
removeWrapperSect :: [Block] -> [Block]
|
||
|
removeWrapperSect (Header 1 [Str "Wrappers"]:xs) =
|
||
|
dropWhile notLevelOneHeader xs
|
||
|
where notLevelOneHeader (Header 1 _) = False
|
||
|
notLevelOneHeader _ = True
|
||
|
removeWrapperSect (x:xs) = x : removeWrapperSect xs
|
||
|
removeWrapperSect [] = []
|