mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 11:19:32 -06:00
81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
|
|
/* --- Grammar access object ------------------------------------------------ */
|
|
|
|
function pgf_online(options) {
|
|
var server = {
|
|
// State variables (private):
|
|
grammars_url: "/grammars/",
|
|
other_grammars_urls: [],
|
|
grammar_list: null,
|
|
current_grammar_url: null,
|
|
|
|
// Methods:
|
|
switch_grammar: function(grammar_url,cont) {
|
|
this.current_grammar_url=this.grammars_url+grammar_url;
|
|
if(cont) cont();
|
|
},
|
|
add_grammars_url: function(grammars_url,cont) {
|
|
this.other_grammars_urls.push(grammars_url);
|
|
if(cont) cont();
|
|
},
|
|
switch_to_other_grammar: function(grammar_url,cont) {
|
|
this.current_grammar_url=grammar_url;
|
|
if(cont) cont();
|
|
},
|
|
get_grammarlist: function(cont,err) {
|
|
if(this.grammar_list) cont(this.grammar_list)
|
|
else http_get_json(this.grammars_url+"grammars.cgi",cont,err);
|
|
},
|
|
get_grammarlists: function(cont,err) { // May call cont several times!
|
|
var ds=this.other_grammars_urls;
|
|
var n=1+ds.length;
|
|
function pair(dir) {
|
|
return function(grammar_list){cont(dir,grammar_list,n)}
|
|
}
|
|
function ignore_error(err) { console.log(err) }
|
|
this.get_grammarlist(pair(this.grammars_url),err)
|
|
for(var i in ds)
|
|
http_get_json(ds[i]+"grammars.cgi",pair(ds[i]),ignore_error);
|
|
},
|
|
pgf_call: function(cmd,args,cont,err) {
|
|
var url=this.current_grammar_url+"?command="+cmd+encodeArgs(args)
|
|
http_get_json(url,cont,err);
|
|
},
|
|
|
|
get_languages: function(cont,err) {
|
|
this.pgf_call("grammar",{},cont,err);
|
|
},
|
|
grammar_info: function(cont,err) {
|
|
this.pgf_call("grammar",{},cont,err);
|
|
},
|
|
|
|
get_random: function(args,cont,err) { // cat, limit
|
|
args.random=Math.random(); // side effect!!
|
|
this.pgf_call("random",args,cont,err);
|
|
},
|
|
linearize: function(args,cont,err) { // tree, to
|
|
this.pgf_call("linearize",args,cont,err);
|
|
},
|
|
complete: function(args,cont,err) { // from, input, cat, limit
|
|
this.pgf_call("complete",args,cont,err);
|
|
},
|
|
parse: function(args,cont,err) { // from, input, cat
|
|
this.pgf_call("parse",args,cont,err);
|
|
},
|
|
translate: function(args,cont,err) { // from, input, cat, to
|
|
this.pgf_call("translate",args,cont,err);
|
|
},
|
|
translategroup: function(args,cont,err) { // from, input, cat, to
|
|
this.pgf_call("translategroup",args,cont,err);
|
|
},
|
|
browse: function(args,cont,err) { // id, format
|
|
if(!args.format) args.format="json"; // sife effect!!
|
|
this.pgf_call("browse",args,cont,err);
|
|
}
|
|
};
|
|
for(var o in options) server[o]=options[o];
|
|
if(server.grammar_list && server.grammar_list.length>0)
|
|
server.switch_grammar(server.grammar_list[0]);
|
|
return server;
|
|
}
|