1
0
forked from GitHub/gf-core

gfse: supply information about what's defined in the exampe language to the server functions for example-based grammar writing

This commit is contained in:
hallgren
2011-11-02 16:54:22 +00:00
parent bed4395a3d
commit 366922aa0f
5 changed files with 23 additions and 8 deletions

View File

@@ -42,8 +42,8 @@ data Environ = Env {getTypeMap :: TypeMap, -- mapping between a
} }
getNext :: Environ -> ([MyFunc],[MyFunc]) getNext :: Environ -> Environ -> ([MyFunc],[MyFunc])
getNext env = getNext env example_env =
let sgs = getSigs env let sgs = getSigs env
allfuncs = getAll env allfuncs = getAll env
names = Set.fromList $ map getName $ concat $ Map.elems sgs names = Set.fromList $ map getName $ concat $ Map.elems sgs

View File

@@ -22,12 +22,16 @@ cgiMain' root cwd cache =
do command <- getInp "command" do command <- getInp "command"
environ <- parseEnviron =<< getInp "state" environ <- parseEnviron =<< getInp "state"
case command of case command of
"possibilities" -> outputJSONP (E.getNext environ) "possibilities" -> doPossibilities environ
"provide_example" -> doProvideExample root cwd cache environ "provide_example" -> doProvideExample root cwd cache environ
"abstract_example" -> doAbstractExample cwd cache environ "abstract_example" -> doAbstractExample cwd cache environ
"test_function" -> doTestFunction cwd cache environ "test_function" -> doTestFunction cwd cache environ
_ -> throwCGIError 400 ("Unknown command: "++command) [] _ -> throwCGIError 400 ("Unknown command: "++command) []
doPossibilities environ =
do example_environ <- parseEnviron =<< getInp "example_state"
outputJSONP (E.getNext environ example_environ)
doProvideExample root cwd cache environ = doProvideExample root cwd cache environ =
do Just lang <- readInput "lang" do Just lang <- readInput "lang"
fun <- getCId "fun" fun <- getCId "fun"

View File

@@ -1,7 +1,7 @@
Editor improvements for example-based grammar writing: Editor improvements for example-based grammar writing:
+ Remove the same language from the example language menu + Remove the same language from the example language menu
- Send the other language environment to getNext + Send the other language environment to getNext
- Compile a new .pgf automatically when needed - Compile a new .pgf automatically when needed
- Update buttons automatically when functions are added or removed - Update buttons automatically when functions are added or removed
- Switch over to using AbsParadigmsEng.pgf instead of the old exprToAPI function - Switch over to using AbsParadigmsEng.pgf instead of the old exprToAPI function

View File

@@ -51,8 +51,8 @@ function ask_possibilities(g,ci) {
if(!conc.example_lang) conc.example_lang=g.concretes[0].langcode; if(!conc.example_lang) conc.example_lang=g.concretes[0].langcode;
reload_grammar(g); reload_grammar(g);
} }
var exci=conc_index(g,conc.example_lang);
exb_call(g,ci,"possibilities",{},show_poss) exb_call(g,ci,"possibilities",{example_state:exb_state(g,exci)},show_poss)
} }
var parser = { Eng: "ParseEngAbs.pgf", var parser = { Eng: "ParseEngAbs.pgf",

View File

@@ -14,18 +14,29 @@ function defined_funs(g) {
return df; return df;
} }
// Return the type of a named function in the abstract syntax
function function_type(g,fun) { function function_type(g,fun) {
with(g.abstract) with(g.abstract)
for(var i in funs) if(funs[i].name==fun) return funs[i].type for(var i in funs) if(funs[i].name==fun) return funs[i].type
return null; return null;
} }
// Return the lincat defined in a given concrete syntax for an abstract category
function cat_lincat(conc,cat) { function cat_lincat(conc,cat) {
with(conc) with(conc)
for(var i in lincats) if(lincats[i].cat==cat) return lincats[i].type for(var i in lincats) if(lincats[i].cat==cat) return lincats[i].type
return null; return null;
} }
// Return the index of the concrete syntax with a given langcode
function conc_index(g,langcode) {
var c=g.concretes;
for(var ix=0;ix<c.length;ix++)
if(c[ix].langcode==langcode) return ix
return null;
}
function rename_category(g,oldcat,newcat) { function rename_category(g,oldcat,newcat) {
function rename_cats(cats) { function rename_cats(cats) {
for(var i in cats) if(cats[i]==oldcat) cats[i]=newcat; for(var i in cats) if(cats[i]==oldcat) cats[i]=newcat;