From f9e4032c3e82d0e8e9965d2167e1a2a861eef07d Mon Sep 17 00:00:00 2001 From: hallgren Date: Tue, 14 Feb 2012 17:18:06 +0000 Subject: [PATCH] gfse: make categories from inherited grammars available in the startcat menu --- src/www/gfse/editor.js | 34 ++++++++++++---------------------- src/www/gfse/gf_abs.js | 4 +++- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/www/gfse/editor.js b/src/www/gfse/editor.js index 77573c20c..96501c77e 100644 --- a/src/www/gfse/editor.js +++ b/src/www/gfse/editor.js @@ -357,7 +357,10 @@ function draw_startcat(g) { var abs=g.abstract; var startcat = abs.startcat || abs.cats[0]; function opt(cat) { return option(cat,cat); } - var m= node("select",{},map(opt,abs.cats)); + var opts = g.extends && g.extends.length>0 ? [opt("-")] : []; + var dc=defined_cats(g); + for(var cat in dc) opts.push(opt(cat)); + var m = node("select",{},opts); m.value=startcat; m.onchange=function() { if(m.value!=abs.startcat) { @@ -382,7 +385,8 @@ function draw_abstract(g) { kw_cat.title = "The categories (nonterminals) of the grammar are enumerated here. [C.3.2]"; var kw_fun = kw("fun"); kw_fun.title = "The functions (productions) of the grammar are enumerated here. [C.3.4]"; - var flags=g.abstract.startcat || g.abstract.cats.length>1 + + var flags=g.abstract.startcat||g.abstract.cats.length>1||g.extends.length>0 ? draw_startcat(g) : text(""); function sort_funs() { @@ -946,28 +950,14 @@ function draw_lins(g,ci) { /* -------------------------------------------------------------------------- */ -function defined_cats(g) { - var grammar_byname=cached_grammar_byname(); - var igs=(g.extends || []).map(grammar_byname) - return all_defined_cats(g,igs) -} +function defined_cats(g) { return all_defined_cats(g,inherited_grammars(g)) } +function defined_funs(g) { return all_defined_funs(g,inherited_gramamrs(g)) } +function inherited_cats(g) {return all_inherited_cats(inherited_grammars(g),{})} +function inherited_funs(g) {return all_inherited_funs(inherited_grammars(g),{})} -function inherited_cats(g) { +function inherited_grammars(g) { var grammar_byname=cached_grammar_byname(); - var igs=(g.extends || []).map(grammar_byname) - return all_inherited_cats(igs,{}) -} - -function defined_funs(g) { - var grammar_byname=cached_grammar_byname(); - var igs=(g.extends || []).map(grammar_byname) - return all_defined_funs(g,igs) -} - -function inherited_funs(g) { - var grammar_byname=cached_grammar_byname(); - var igs=(g.extends || []).map(grammar_byname) - return all_inherited_funs(igs,{}) + return (g.extends || []).map(grammar_byname) } function cached_grammar_byname() { diff --git a/src/www/gfse/gf_abs.js b/src/www/gfse/gf_abs.js index e4829548a..2809b2e32 100644 --- a/src/www/gfse/gf_abs.js +++ b/src/www/gfse/gf_abs.js @@ -247,7 +247,9 @@ function show_extends(exts) { } function show_startcat(startcat) { - return startcat ? "flags startcat = "+startcat+";\n\n" : ""; + return startcat && startcat!="-" + ? "flags startcat = "+startcat+";\n\n" + : ""; } function show_cats(cats) {