source: adblock2privoxy/distrib-src/Main.hs @ dda102c

Last change on this file since dda102c was 5ee1d7d, checked in by zubr <a@…>, 5 years ago

before debianizaton

  • Property mode set to 100644
File size: 2.5 KB
Line 
1module Main where
2import Text.Pandoc
3import qualified Text.Pandoc.UTF8 as UTF8
4import Data.Char (toUpper)
5import Control.Monad
6import System.FilePath
7import System.Environment (getArgs)
8import System.Directory
9import Distribution.PackageDescription.Parse
10import Distribution.Verbosity (normal)
11import Distribution.PackageDescription
12import Text.Pandoc.Builder
13import Distribution.Package
14import Data.Time.Clock 
15import Data.Time
16import System.Locale
17import Distribution.Version (versionBranch)
18import Data.List (intercalate)
19
20-- It is helper executable updating documentation
21-- and distribution packages with
22-- latest metadata from .cabal file
23
24main :: IO ()
25main = do
26    verbose <- liftM (elem "--verbose") getArgs
27    cabalMeta <- liftM packageDescription $ readPackageDescription normal "adblock2privoxy.cabal"
28    createManPage verbose cabalMeta                                     
29
30createManPage:: Bool -> PackageDescription -> IO ()
31createManPage verbose cabalMeta = do 
32    pandoc <- liftM (readRST def) $ UTF8.readFile "README.rst"
33    now <- getCurrentTime
34    let PackageIdentifier (PackageName name) version = package cabalMeta
35    let versionText = intercalate "." $ map show $ versionBranch version
36    let pandoc' = setTitle (text $ map toUpper name) . 
37                  setAuthors [text $ author cabalMeta] . 
38                  setDate (text $ formatTime defaultTimeLocale (iso8601DateFormat Nothing) now) .
39                  setMeta "section" (text "1") .
40                  setMeta "header" (text "General Commands Manual") .
41                  setMeta "footer" (text $ name ++ " " ++ versionText)
42                  $ pandoc
43    createDirectoryIfMissing True ("man" </> "man1")
44    writeManPage verbose ("man" </> "man1" </> "adblock2privoxy.1") pandoc'
45
46writeManPage :: Bool -> FilePath -> Pandoc -> IO ()
47writeManPage verbose page pandoc = do
48  template <- getDefaultTemplate Nothing "man"
49  case template of
50        Left ex -> print ex
51        Right template' -> do
52          let opts = def{ writerStandalone = True, 
53                          writerTemplate = template'}
54          let manPage = writeMan opts $
55                            bottomUp capitalizeHeaders pandoc
56          UTF8.writeFile page manPage
57          when verbose $ putStrLn $ "Created " ++ page
58
59capitalizeHeaders :: Block -> Block
60capitalizeHeaders (Header 1 attr xs) = Header 1 attr $ bottomUp capitalize xs
61capitalizeHeaders x = x
62
63capitalize :: Inline -> Inline
64capitalize (Str xs) = Str $ map toUpper xs
65capitalize x = x
Note: See TracBrowser for help on using the repository browser.