mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-02 07:42:50 -06:00
moved all old source code to src-2.9 ; src will be for GF 3 development
This commit is contained in:
89
src-2.9/GF/Shell/JGF.hs
Normal file
89
src-2.9/GF/Shell/JGF.hs
Normal file
@@ -0,0 +1,89 @@
|
||||
----------------------------------------------------------------------
|
||||
-- |
|
||||
-- Module : JGF
|
||||
-- Maintainer : AR
|
||||
-- Stability : (stable)
|
||||
-- Portability : (portable)
|
||||
--
|
||||
-- > CVS $Date: 2005/06/03 22:44:36 $
|
||||
-- > CVS $Author: aarne $
|
||||
-- > CVS $Revision: 1.13 $
|
||||
--
|
||||
-- GF editing session controlled by e.g. a Java program. AR 16\/11\/2001
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
module GF.Shell.JGF where
|
||||
|
||||
import GF.Data.Operations
|
||||
import GF.Infra.UseIO
|
||||
import GF.Text.Unicode
|
||||
|
||||
import GF.API.IOGrammar
|
||||
import GF.Infra.Option
|
||||
import GF.Compile.ShellState
|
||||
import GF.UseGrammar.Session
|
||||
import GF.Shell.Commands
|
||||
import GF.Shell.CommandL
|
||||
import GF.Text.UTF8
|
||||
|
||||
import Control.Monad (foldM)
|
||||
import System
|
||||
|
||||
|
||||
|
||||
-- GF editing session controlled by e.g. a Java program. AR 16/11/2001
|
||||
|
||||
-- | the Boolean is a temporary hack to have two parallel GUIs
|
||||
sessionLineJ :: Bool -> ShellState -> IO ()
|
||||
sessionLineJ isNew env = do
|
||||
putStrLnFlush $ initEditMsgJavaX env
|
||||
let env' = addGlobalOptions (options [sizeDisplay "short",beSilent]) env
|
||||
editLoopJnewX isNew env' (initSState)
|
||||
|
||||
-- | this is the real version, with XML
|
||||
--
|
||||
-- the Boolean is a temporary hack to have two parallel GUIs
|
||||
editLoopJnewX :: Bool -> CEnv -> SState -> IO ()
|
||||
editLoopJnewX isNew env state = do
|
||||
mscs <- getCommandUTF (isCEnvUTF8 env state) ----
|
||||
let (ms,cs) = unzip mscs
|
||||
m = unlines ms --- ?
|
||||
if null cs
|
||||
then editLoopJnewX isNew env state
|
||||
else
|
||||
case cs of
|
||||
[CQuit] -> return ()
|
||||
_ -> do
|
||||
(env',state') <- foldM exec (env,state) cs
|
||||
let inits = initAndEditMsgJavaX isNew env' state' m
|
||||
let
|
||||
package = case last cs of
|
||||
CCEnvImport _ -> inits
|
||||
CCEnvEmptyAndImport _ -> inits
|
||||
CCEnvOpenTerm _ -> inits
|
||||
CCEnvOpenString _ -> inits
|
||||
CCEnvEmpty -> initEditMsgJavaX env'
|
||||
_ -> displaySStateJavaX isNew env' state' m
|
||||
putStrLnFlush package
|
||||
editLoopJnewX isNew env' state'
|
||||
where
|
||||
exec (env,state) c = do
|
||||
execCommand env c state
|
||||
|
||||
welcome :: String
|
||||
welcome =
|
||||
"An experimental GF Editor for Java." ++
|
||||
"(c) Kristofer Johannisson, Janna Khegai, and Aarne Ranta 2002 under CNU GPL."
|
||||
|
||||
initEditMsgJavaX :: CEnv -> String
|
||||
initEditMsgJavaX env = encodeUTF8 $ mkUnicode $ unlines $ tagXML "gfinit" $
|
||||
tagsXML "newcat" [["n" +++ cat] | (_,cat) <- newCatMenu env] ++
|
||||
tagXML "topic" [abstractName env] ++
|
||||
tagXML "language" [prLanguage langAbstract] ++
|
||||
concat [tagAttrXML "language" ("file",file) [prLanguage lang] |
|
||||
(file,lang) <- zip (allGrammarFileNames env) (allLanguages env)]
|
||||
|
||||
|
||||
initAndEditMsgJavaX :: Bool -> CEnv -> SState -> String -> String
|
||||
initAndEditMsgJavaX isNew env state m =
|
||||
initEditMsgJavaX env ++++ displaySStateJavaX isNew env state m
|
||||
Reference in New Issue
Block a user