diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-05-21 09:26:44 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-05-21 09:26:44 +0000 |
| commit | 055c0d0d5a5bb0dc75904fe53df7f2e4f5732a8f (patch) | |
| tree | 0e63fb68c69c8f6ad0f78893c63420f0a3600e1c /src-3.0/GF.hs | |
| parent | 915a1de71783ab8446b1af9e72c7ba7dfbc12d3f (diff) | |
GF/src is now for 2.9, and the new sources are in src-3.0 - keep it this way until the release of GF 3
Diffstat (limited to 'src-3.0/GF.hs')
| -rw-r--r-- | src-3.0/GF.hs | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src-3.0/GF.hs b/src-3.0/GF.hs new file mode 100644 index 000000000..50afeb8e9 --- /dev/null +++ b/src-3.0/GF.hs @@ -0,0 +1,153 @@ +{-# OPTIONS -cpp #-} +---------------------------------------------------------------------- +-- | +-- Module : Main +-- Maintainer : Aarne Ranta +-- Stability : (stability) +-- Portability : (portability) +-- +-- > CVS $Date: 2005/06/30 11:36:49 $ +-- > CVS $Author: aarne $ +-- > CVS $Revision: 1.29 $ +-- +-- The Main module of GF program. +----------------------------------------------------------------------------- + +module Main (main) where + +import GF.GFModes (gfInteract, gfBatch, batchCompile) +import GF.Data.Operations +import GF.Infra.UseIO +import GF.Infra.Option +import GF.API.IOGrammar +import GF.Compile.ShellState +import GF.Compile.Compile +import GF.Compile.MkConcrete +import GF.Compile.Wordlist +import GF.Shell +import GF.Shell.SubShell +import GF.Shell.ShellCommands +import GF.Shell.PShell +import GF.Shell.JGF +import GF.System.Signal +import GF.Text.UTF8 + +import GF.Today (today,version,libdir) +import GF.System.Arch +import System (getArgs,system,getEnv) +import System.FilePath +import Control.Monad (foldM,liftM) +import Data.List (nub) + +#ifdef mingw32_HOST_OS +import System.Win32.Console +import System.Win32.NLS +#endif + +-- AR 19/4/2000 -- 21/3/2006 + +main :: IO () +main = do +#ifdef mingw32_HOST_OS + codepage <- getACP + setConsoleCP codepage + setConsoleOutputCP codepage +#endif + + xs <- getArgs + let + (os,fs) = getOptions "-" xs + opt j = oElem j os + st0 = optInitShellState os + ifNotSil c = if oElem beSilent os then return () else c + + doGF os fs = case 0 of + + _ | opt getHelp || any opt (map iOpt ["h", "-help", "-h"])-> do + putStrLnFlush $ encodeUTF8 helpMsg + + _ | opt forJava -> do + welcome <- welcomeMsgLib + putStrLnFlush $ encodeUTF8 welcome + st <- useIOE st0 $ + foldM (shellStateFromFiles os) st0 fs + sessionLineJ True st + return () + + _ | opt doMake -> do + mapM_ (batchCompile os) fs + return () + + _ | opt makeConcrete -> do + mkConcretes os fs + + _ | opt openEditor -> do + system $ "jgf" +++ unwords xs + return () + + _ | opt doBatch -> do + if opt beSilent then return () else putStrLnFlush "<gfbatch>" + st <- useIOE st0 $ + foldM (shellStateFromFiles os) st0 fs + gfBatch (initHState st) + if opt beSilent then return () else putStrLnFlush "</gfbatch>" + return () + _ -> do + welcome <- welcomeMsgLib + ifNotSil $ putStrLnFlush $ welcome + st <- useIOE st0 $ + foldM (shellStateFromFiles os) st0 fs + if null fs then return () else (ifNotSil putCPU) + blockInterrupt (gfInteract (initHState st)) + return () + -- preprocessing gfe + if opt fromExamples + then do + es <- liftM (nub . concat) $ mapM (getGFEFiles os) fs + mkConcretes os es + doGF (removeOption fromExamples os) fs + -- preprocessing gfwl + else if (length fs == 1 && takeExtensions (head fs) == ".gfwl") + then do + fs' <- mkWordlist (head fs) + doGF os fs' + else doGF os fs + +helpMsg = unlines [ + "Usage: gf <option>* <file>*", + "Options:", + " -batch structure session by XML tags (use > to send into a file)", + " -edit start the editor GUI (same as command 'jgf')", + " -ex first compile .gfe files as needed, then .gf files", + " -examples batch-compile .gfe files by parsing examples", + " -treebank use a treebank, instead of a grammar, as parser", + " -make batch-compile files", + " -noemit do not emit code when compiling", + " -v be verbose when compiling", + " -help show this message", + "Also all flags for import (i) are interpreted; see 'help import'.", + "An example combination of flags is", + " gf -batch -nocpu -s", + "which suppresses all messages except the output and fatal errors." + ] + +welcomeMsgLib = do + lib <- getLibraryPath + return $ welcomeMsg lib + +welcomeMsg lib = + "Welcome to " ++ authorMsg ++++ + "If \228 and \246 (umlaut letters) look strange, see 'h -coding'." ++ + "\nGF_LIB_PATH is set to " ++ lib ++ + "\n\nType 'h' for help, and 'h [Command] for more detailed help.\n" + +authorMsg = unlines [ + "Grammatical Framework, Version " ++ version, + "Compiled " ++ today, + "Copyright (c)", + "Krasimir Angelov, Bj\246rn Bringert, H\229kan Burden, Hans-Joachim Daniels,", + "Markus Forsberg, Thomas Hallgren, Harald Hammarstr\246m, Kristofer Johannisson,", + "Janna Khegai, Peter Ljungl\246f, Petri M\228enp\228\228, and", + "Aarne Ranta, 1998-2006, under GNU General Public License (GPL)", + "Bug reports to aarne@cs.chalmers.se" + ] |
