packages feed

HXQ-0.7: Main.hs

{--------------------------------------------------------------
-
- The main program of the XQuery interpreter
- Programmer: Leonidas Fegaras (fegaras@cse.uta.edu)
- Date: 04/12/2008
-
---------------------------------------------------------------}

{-# OPTIONS_GHC -fth #-}

module Main where

import System.Environment
import XQueryCompiler(functions)
import XQuery


main = do env <- getArgs
          putStrLn "HXQ: XQuery Interpreter version 0.7"
          if (length env) > 0 && (head env) == "-help"
             then putStrLn ("Functions:  "++(foldr (\(f,_,_) r -> f++" "++r) "" functions))
             else if (length env) > 1 && (head env) == "-c"
                  then do query <- readFile (head (tail env))
                          let qf = map (\c -> if c=='\"' then '\'' else c)
                                       (foldr1 (\a r -> a++" "++r) (lines query))
                          let pr = "{-# OPTIONS_GHC -fth #-}\nmodule Main where\nimport XQuery\n\nmain = do res <- $(xq \""
                                   ++ qf ++ "\")\n          putStrLn (show res)\n"
                          writeFile "Temp.hs" pr
                  else do result <- if (length env) == 1
                                    then xfile (head env)
                                    else do let readl x = do t <- getLine
                                                             if null t then return x else readl (x++" "++t)
                                            putStrLn "Write an XQuery (finish the query with an empty line)"
                                            query <- readl ""
                                            xquery query
                          putStrLn (show result)