diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-11-12 09:17:02 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-11-12 09:17:02 +0000 |
| commit | b801149fbf5c9eb3f73477d3496cdfd92cb178a1 (patch) | |
| tree | 332b6a3ec1b3b56b9ed1d8e19f175f10df970119 /src/GF/Devel/GFI.hs | |
| parent | eb7b0286016714128aae742b4cedccc3dc30a9a0 (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.hs | 120 |
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 + } |
