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 "" -- 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, "", pageNum mx number, link base mx number, "", "
", content, endHTML ] ) begHTML, endHTML, separator :: String begHTML = "
" endHTML = "" separator = "" link :: FilePath -> Int -> Int -> String link file mx n = (if n >= mx then "" else (" Next")) ++ (if n == 1 then "" else (" Previous")) ++ (" First") ++ (" Last") 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 = "" ++ show num ++"/" ++ show mx ++ "
"