2 -- hzsff, a program to do things to ZSFF files.
3 -- See http://www.zedshaw.com/blog/2008-01-13.html.
5 -- Copyright Michael Orlitzky
7 -- http://michael.orlitzky.com/
9 -- This program is free software: you can redistribute it and/or modify
10 -- it under the terms of the GNU General Public License as published by
11 -- the Free Software Foundation, either version 3 of the License, or
12 -- (at your option) any later version.
14 -- This program is distributed in the hope that it will be useful,
15 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
16 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 -- GNU General Public License for more details.
19 -- http://www.fsf.org/licensing/licenses/gpl.html
21 import System.Environment (getArgs)
23 import Text.ParserCombinators.Parsec
26 data Version = Version (String)
29 data Header = Header (String, String)
32 data Url = Url (String)
35 data ZsffFeed = ZsffFeed (Version, [Header], [Url])
39 version_characters :: GenParser Char st Char
40 version_characters = digit <|>
43 version_parser :: Parser Version
46 val <- many1 version_characters
48 return $ Version (val)
51 header_characters :: GenParser Char st Char
52 header_characters = alphaNum <|>
56 header_parser :: Parser Header
58 val1 <- many1 header_characters
61 val2 <- manyTill anyChar (char '\n')
62 return $ Header (val1, val2)
65 headers_parser :: Parser [Header]
67 headers <- many1 header_parser
71 -- Ad-hoc compilation of characters that I think
73 url_characters :: GenParser Char st Char
74 url_characters = alphaNum <|>
88 -- Will parse one or more url_characters
89 url_parser :: Parser Url
91 val <- manyTill url_characters (char '\n')
95 urls_parser :: Parser [Url]
97 urls <- many1 url_parser
101 main_parser :: Parser ZsffFeed
103 version <- version_parser
104 headers <- headers_parser
107 return $ ZsffFeed (version, headers, urls)
112 feed <- readFile (args !! 0)
113 case (parse main_parser "" feed) of
115 putStrLn ("Error " ++ (show err))