
import Data.Maybe (mapMaybe)
import Text.ParserCombinators.Parsec (parse)

import Parse (parseWiki)

type Page = (String, String)

readPage :: String -> Maybe (Page, String)
readPage [] = Nothing
readPage s = let (title, rest) = break (== '\x00') s in
                 let (text, rest') = break (== '\x0C') (tail rest) in
                     Just ((title, text), tail rest')

readPages s = case readPage s of
                (Just (p, s')) -> p : readPages s'
                Nothing -> []

main = do
    contents <- getContents
    let pages = readPages contents
    print $ mapMaybe (uncurry parse') pages
    where parse' title text =
              case parse parseWiki "wiki" text of
                   Left error -> Nothing
                   Right values -> Just (title, values)

