summaryrefslogtreecommitdiff
path: root/src/GF/Devel/GFI.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-12 09:17:02 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-12 09:17:02 +0000
commitb801149fbf5c9eb3f73477d3496cdfd92cb178a1 (patch)
tree332b6a3ec1b3b56b9ed1d8e19f175f10df970119 /src/GF/Devel/GFI.hs
parenteb7b0286016714128aae742b4cedccc3dc30a9a0 (diff)
merged gfc and gfi to one binary, and a shell script for gfc
Diffstat (limited to 'src/GF/Devel/GFI.hs')
-rw-r--r--src/GF/Devel/GFI.hs120
1 files changed, 63 insertions, 57 deletions
diff --git a/src/GF/Devel/GFI.hs b/src/GF/Devel/GFI.hs
index 1d88a24a0..f59bd15e6 100644
--- a/src/GF/Devel/GFI.hs
+++ b/src/GF/Devel/GFI.hs
@@ -1,71 +1,77 @@
-module Main where
+module GF.Devel.GFI (mainGFI) where
import GF.Command.Interpreter
+import GF.Command.Importing
import GF.Command.Commands
import GF.GFCC.API
-import System (getArgs)
-import Data.Char (isDigit)
--- Simple translation application built on GFCC. AR 7/9/2006 -- 19/9/2007
+import GF.Devel.UseIO
+import GF.Devel.Arch
+import GF.Infra.Option ---- Haskell's option lib
-main :: IO ()
-main = do
- file:_ <- getArgs
- grammar <- file2grammar file
- let env = CommandEnv grammar (allCommands grammar)
- printHelp grammar
- loop env
-loop :: CommandEnv -> IO ()
-loop env = do
+mainGFI :: [String] -> IO ()
+mainGFI xx = do
+ putStrLn welcome
+ env <- importInEnv emptyMultiGrammar xx
+ loop (GFEnv env [] 0)
+ return ()
+
+loop :: GFEnv -> IO GFEnv
+loop gfenv0 = do
+ let env = commandenv gfenv0
+ putStrFlush (prompt env)
s <- getLine
- if s == "q" then return () else do
- interpretCommandLine env s
- loop env
+ let gfenv = gfenv0 {history = s : history gfenv0}
+ case words s of
+
+ -- special commands, working on GFEnv
+ "i":args -> do
+ env1 <- importInEnv (multigrammar env) args
+ loopNewCPU $ gfenv {commandenv = env1}
+ "e":_ -> loopNewCPU $ gfenv {commandenv=env{multigrammar=emptyMultiGrammar}}
+ "ph":_ -> mapM_ putStrLn (reverse (history gfenv0)) >> loopNewCPU gfenv
+ "q":_ -> putStrLn "See you." >> return gfenv
+
+ -- ordinary commands, working on CommandEnv
+ _ -> do
+ interpretCommandLine env s
+ loopNewCPU gfenv
-printHelp grammar = do
- putStrLn $ "languages: " ++ unwords (languages grammar)
- putStrLn $ "categories: " ++ unwords (categories grammar)
---- putStrLn commands
+loopNewCPU gfenv = do
+ cpu <- prCPU $ cputime gfenv
+ loop $ gfenv {cputime = cpu}
-{- obsolete
+importInEnv mgr0 xx = do
+ let (opts,files) = getOptions "-" xx
+ mgr1 <- case files of
+ [] -> return mgr0
+ _ -> importGrammar mgr0 opts files
+ let env = CommandEnv mgr1 (allCommands mgr1)
+ putStrLn $ unwords $ "\nLanguages:" : languages mgr1
+ return env
-commands = unlines [
- "Commands:",
- " (gt | gtt | gr | grt) Cat Num - generate all or random",
- " p Lang Cat String - parse (unquoted) string",
- " l Tree - linearize in all languages",
- " h - help",
- " q - quit"
+welcome = unlines [
+ " ",
+ " * * * ",
+ " * * ",
+ " * * ",
+ " * ",
+ " * ",
+ " * * * * * * * ",
+ " * * * ",
+ " * * * * * * ",
+ " * * * ",
+ " * * * ",
+ " ",
+ "This is GF version 3.0 alpha. ",
+ "Some things may work. "
]
-treat :: MultiGrammar -> String -> IO ()
-treat mgr s = case words s of
- "gt" :cat:n:_ -> mapM_ prlinonly $ take (read1 n) $ generateAll mgr cat
- "gtt":cat:n:_ -> mapM_ prlin $ take (read1 n) $ generateAll mgr cat
- "gr" :cat:n:_ -> generateRandom mgr cat >>= mapM_ prlinonly . take (read1 n)
- "grt":cat:n:_ -> generateRandom mgr cat >>= mapM_ prlin . take (read1 n)
- "p":lang:cat:ws -> do
- let ts = parse mgr lang cat $ unwords ws
- mapM_ (putStrLn . showTree) ts
- "h":_ -> printHelp mgr
- "l" : ws -> lins $ readTree mgr $ unwords ws
- where
- grammar = gfcc mgr
- langs = languages mgr
- lins t = mapM_ (lint t) $ langs
- lint t lang = do
----- putStrLn $ showTree $ linExp grammar lang t
- lin t lang
- lin t lang = do
- putStrLn $ linearize mgr lang t
- prlins t = do
- putStrLn $ showTree t
- lins t
- prlin t = do
- putStrLn $ showTree t
- prlinonly t
- prlinonly t = mapM_ (lin t) $ langs
- read1 s = if all isDigit s then read s else 1
--}
+prompt env = abstractName (multigrammar env) ++ "> "
+data GFEnv = GFEnv {
+ commandenv :: CommandEnv,
+ history :: [String],
+ cputime :: Integer
+ }