1
Fork 0
simple-sql-parser/tools/Filter.lhs

36 lines
1,016 B
Plaintext

> import System.IO
> import System.Environment
> main :: IO ()
> main = do
> [a] <- getArgs
> r <- readFile a
> let ls = lines r
> a = noAdjacentBlankLines ls
> b = concat $ combineGroups $ group [] a
> putStrLn $ unlines b
> noAdjacentBlankLines [] = []
> noAdjacentBlankLines [a] = [a]
> noAdjacentBlankLines ("":xs@("":_)) = noAdjacentBlankLines xs
> noAdjacentBlankLines (x:xs) = x:noAdjacentBlankLines xs
> group :: [String] -> [String] -> [[String]]
> group acc [] = [acc]
> group acc ("":xs) = reverse ("":acc) : group [] xs
> group acc (x:xs) = group (x : acc) xs
> combineGroups :: [[String]] -> [[String]]
> combineGroups [] = []
> combineGroups (x@(('<':_):_):xs) | gs <- map trim x
> , ns <- trim $ unwords gs
> , length ns < 80 = [ns ++ "\n"] : combineGroups xs
> combineGroups (x:xs) = x:combineGroups xs
> trim :: String -> String
> trim = x . x
> where
> x = dropWhile (==' ') . reverse