|
Packit |
5b08af |
{-# LANGUAGE BangPatterns#-}
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
module Main(main)
|
|
Packit |
5b08af |
where
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
import Text.Regex.XMLSchema.Generic
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
import Control.Arrow
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
import Data.Maybe
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
import System.IO -- import the IO and commandline option stuff
|
|
Packit |
5b08af |
import System.Environment
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
main :: IO ()
|
|
Packit |
5b08af |
main
|
|
Packit |
5b08af |
= do
|
|
Packit |
5b08af |
p <- getProgName
|
|
Packit |
5b08af |
al <- getArgs
|
|
Packit |
5b08af |
let i = if null al
|
|
Packit |
5b08af |
then 4
|
|
Packit |
5b08af |
else (read . head $ al)::Int
|
|
Packit |
5b08af |
main' p i
|
|
Packit |
5b08af |
where
|
|
Packit |
5b08af |
main' p' = fromMaybe main1 . lookup (pn p') $ mpt
|
|
Packit |
5b08af |
mpt = [ ("REtest", main1)
|
|
Packit |
5b08af |
, ("Copy", main2 "copy" (:[]))
|
|
Packit |
5b08af |
, ("Lines", main2 "lines" lines)
|
|
Packit |
5b08af |
, ("RElines", main2 "relines" relines)
|
|
Packit |
5b08af |
, ("SElines", main2 "selines'" relines')
|
|
Packit |
5b08af |
, ("Words", main2 "words" words)
|
|
Packit |
5b08af |
, ("REwords", main2 "rewords" rewords)
|
|
Packit |
5b08af |
, ("SEwords", main2 "sewords" rewords')
|
|
Packit |
5b08af |
]
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- generate a document containing a binary tree of 2^i leafs (= 2^(i-1) XML elements)
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
main1 :: Int -> IO ()
|
|
Packit |
5b08af |
main1 i
|
|
Packit |
5b08af |
= do
|
|
Packit |
5b08af |
genDoc i "REtest.hs" (fn i)
|
|
Packit |
5b08af |
return ()
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- read a document containing a binary tree of 2^i leafs
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
main2 :: String -> (String -> [String]) -> Int -> IO ()
|
|
Packit |
5b08af |
main2 ext lines' i
|
|
Packit |
5b08af |
= do
|
|
Packit |
5b08af |
hPutStrLn stderr "start processing"
|
|
Packit |
5b08af |
h <- openFile (fn i) ReadMode
|
|
Packit |
5b08af |
c <- hGetContents h
|
|
Packit |
5b08af |
let ls = lines' c
|
|
Packit |
5b08af |
o <- openFile (fn i ++ "." ++ ext) WriteMode
|
|
Packit |
5b08af |
mapM_ (hPutStrLn o) ls
|
|
Packit |
5b08af |
hClose o
|
|
Packit |
5b08af |
hClose h
|
|
Packit |
5b08af |
hPutStrLn stderr "end processing"
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
relines :: String -> [String]
|
|
Packit |
5b08af |
relines = tokenize ".*"
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
relines' :: String -> [String]
|
|
Packit |
5b08af |
relines' = tokenizeSubex "({line}.*)" >>> map snd
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
rewords :: String -> [String]
|
|
Packit |
5b08af |
rewords = tokenize "\\S+"
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
rewords' :: String -> [String]
|
|
Packit |
5b08af |
rewords' = tokenizeSubex "({word}\\S+)" >>> map snd
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
pn :: String -> String
|
|
Packit |
5b08af |
pn = reverse . takeWhile (/= '/') . reverse
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
fn :: Int -> String
|
|
Packit |
5b08af |
fn = ("lines-" ++) . (++ ".txt") . reverse . take 4 . reverse . ((replicate 4 '0') ++ ) . show
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
genDoc :: Int -> String -> String -> IO ()
|
|
Packit |
5b08af |
genDoc d inp outp
|
|
Packit |
5b08af |
= do
|
|
Packit |
5b08af |
s <- readFile inp
|
|
Packit |
5b08af |
let s' = take (2^d) . concat . repeat $ s
|
|
Packit |
5b08af |
writeFile outp s'
|
|
Packit |
5b08af |
|
|
Packit |
5b08af |
-- ----------------------------------------
|