diff options
| author | aarne <unknown> | 2003-11-21 13:57:49 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-11-21 13:57:49 +0000 |
| commit | 6d99debdff614708454e899201cd6f14ec353049 (patch) | |
| tree | 56225cf37a42755a427d81a34a14768ebe63c14b /src/tools/Htmls.hs | |
| parent | 259eb4c86688db70b0beb76721e7df79164d4e5e (diff) | |
Hew version of GFDoc.
Diffstat (limited to 'src/tools/Htmls.hs')
| -rw-r--r-- | src/tools/Htmls.hs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/tools/Htmls.hs b/src/tools/Htmls.hs new file mode 100644 index 000000000..6850a38a8 --- /dev/null +++ b/src/tools/Htmls.hs @@ -0,0 +1,65 @@ +module Main where + +import System + +-- chop an HTML file into separate files, each linked to the next and previous. +-- the names of the files are n-file, with n = 01,02,... +-- the chopping is performed at each separator, here defined as "<!-- NEW -->" + +-- AR 7/1/2002 for the Vinnova meeting in Linköping. + +main :: IO () +main = do + file:_ <- getArgs + htmls file + +htmls :: FilePath -> IO () +htmls file = do + s <- readFile file + let ss = allPages s + mapM (uncurry writeFile) (map (mkFile file (length ss)) ss) + return () + +allPages :: String -> [(Int,String)] +allPages = zip [1..] . map unlines . chop . lines where + chop ls = case span isNoSep ls of + (s,_:ss) -> s : chop ss + _ -> [ls] + isNoSep = (/= separator) + +mkFile :: FilePath -> Int -> (Int,String) -> (FilePath,String) +mkFile base mx (number,content) = + (fileName base number, + unlines [ + begHTML, + "<font size=1>", + pageNum mx number, + link base mx number, + "</font>", + "<p>", + content, + endHTML + ] + ) + +begHTML, endHTML, separator :: String +begHTML = "<html><body bgcolor=\"#FFFFFF\" text=\"#000000\">" +endHTML = "</body></html>" +separator = "<!-- NEW -->" + +link :: FilePath -> Int -> Int -> String +link file mx n = + (if n >= mx then "" else (" <a href=\"" ++ file' ++ "\">Next</a>")) ++ + (if n == 1 then "" else (" <a href=\"" ++ file_ ++ "\">Previous</a>")) ++ + (" <a href=\"" ++ file1 ++ "\">First</a>") ++ + (" <a href=\"" ++ file2 ++ "\">Last</a>") + where + file_ = fileName file (n - 1) + file' = fileName file (n + 1) + file1 = fileName file 1 + file2 = fileName file mx + +fileName :: FilePath -> Int -> FilePath +fileName file n = (if n < 10 then ('0':) else id) $ show n ++ "-" ++ file + +pageNum mx num = "<p align=right>" ++ show num ++"/" ++ show mx ++ "</p>" |
