summaryrefslogtreecommitdiff
path: root/src/www/gfse/editor.js
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2012-03-29 17:10:36 +0000
committerhallgren <hallgren@chalmers.se>2012-03-29 17:10:36 +0000
commite85a3fff563bbb71802fea686c9e23f1cfcd72d3 (patch)
treed7ec33cb1d86b766655c483532dd9288b9373804 /src/www/gfse/editor.js
parenta519d01754f053eaa8301c5433c5a1c64a80d7f9 (diff)
gfse&minibar: work in progress on grammar extension fromminibar
Diffstat (limited to 'src/www/gfse/editor.js')
-rw-r--r--src/www/gfse/editor.js108
1 files changed, 84 insertions, 24 deletions
diff --git a/src/www/gfse/editor.js b/src/www/gfse/editor.js
index 6e7d78cd5..5d7f39006 100644
--- a/src/www/gfse/editor.js
+++ b/src/www/gfse/editor.js
@@ -216,37 +216,97 @@ function compile_button(g,err_ind) {
function minibar_button(g,files,err_ind) {
var b2;
function show_editor() { edit_grammar(g); }
- function goto_minibar(res) {
- show_compile_error(res,err_ind);
- if(res.errorcode=="OK") {
- //location.href=res.minibar_url;
- clear(files);
- files.appendChild(div_id("minibar"));
- var online_options={grammars_url: local.get("dir")+"/",
- grammar_list: [g.basename+".pgf"]}
- var pgf_server=pgf_online(online_options)
- var minibar_options= {
- show_abstract: true,
- show_trees: true,
- show_grouped_translations: false,
- show_brackets: true,
- word_replacements: true,
- default_source_language: "Eng",
- try_google: true
+
+ function extend_grammar(cat0,fun_type0) {
+ var fname0="New"+cat0;
+ var fun=parse_fun(fname0+" : " + fun_type0).ok;
+ var lins=[];
+ var dc=defined_cats(g),df=inherited_funs(g);
+ var cs=g.concretes
+
+ function draw_extension() {
+ var cat=fun.type[fun.type.length-1]
+ files.innerHTML="<h4>Extending "+cat+"</h4>"
+ var ef=editable("span",draw_fun(g,fun,dc,df),g,edit_fun,
+ "Edit this function")
+ var tbl=empty_class("table","extension");
+ tbl.appendChild(tr([th(text("Abstract")),td([kw("fun "),ef])]));
+ var anames=arg_names(fun.type);
+ for(var i in cs) {
+ var lc=cs[i].langcode;
+ var l=[kw("lin "),ident(fun.name)];
+ for(var j in anames) { l.push(text(" ")); l.push(ident(anames[j]));}
+ l.push(sep(" = "))
+ l.push(editable("span",text(lins[lc] || "..."),g,edit_lin(lc),
+ "Edit this linearization"))
+ tbl.appendChild(tr([th(text(concname(cs[i].langcode))),td(l)]));
}
- var minibar=new Minibar(pgf_server,minibar_options);
- b.style.display="none";
- if(b2) b2.style.display="";
- else {
- b2=button("Show editor",show_editor);
- insertAfter(b2,b);
+ files.appendChild(tbl);
+ files.appendChild(button("OK",save_extension))
+ files.appendChild(button("Cancel",cancel_extension))
+ }
+ function edit_fun(g,el) {
+ function replace(s) {
+ var p=parse_fun(s);
+ if(p.ok) {
+ fun=p.ok;
+ draw_extension();
+ return null;
+ }
+ else
+ return p.error;
}
+ string_editor(el,show_fun(fun),replace);
+ }
+ function edit_lin(lc) {
+ return function (g,el) {
+ function replace(s) {
+ lins[lc]=s;
+ draw_extension();
+ return null;
+ }
+ string_editor(el,lins[lc] || "",replace);
+ }
+ }
+ function save_extension() { }
+ function cancel_extension() {
+ goto_minibar();
}
+ draw_extension();
+ }
+
+ function goto_minibar() {
+ clear(files);
+ files.appendChild(div_id("minibar"));
+ var online_options={grammars_url: local.get("dir")+"/",
+ grammar_list: [g.basename+".pgf"]}
+ var pgf_server=pgf_online(online_options)
+ var minibar_options= {
+ show_abstract: true,
+ show_trees: true,
+ show_grouped_translations: false,
+ show_brackets: true,
+ word_replacements: true,
+ extend_grammar: extend_grammar,
+ default_source_language: "Eng",
+ try_google: true
+ }
+ var minibar=new Minibar(pgf_server,minibar_options);
+ b.style.display="none";
+ if(b2) b2.style.display="";
+ else {
+ b2=button("Show editor",show_editor);
+ insertAfter(b2,b);
+ }
+ }
+ function goto_minibar_if_ok(res) {
+ show_compile_error(res,err_ind);
+ if(res.errorcode=="OK") goto_minibar();
}
function compile() {
replaceInnerHTML(err_ind,"Compiling...");
replaceInnerHTML(compiler_output,"<h3>Compiling...</h3>");
- upload(g,goto_minibar);
+ upload(g,goto_minibar_if_ok);
}
var b=button("Minibar",compile);
b.title="Upload the grammar and test it in the minibar";