summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2012-02-14 17:18:06 +0000
committerhallgren <hallgren@chalmers.se>2012-02-14 17:18:06 +0000
commitf9e4032c3e82d0e8e9965d2167e1a2a861eef07d (patch)
tree2275207e8e9b1dd4d1dd3235aa24778d11f9310e /src
parentf0702e6942892125c98ee8e418985a4802932c90 (diff)
gfse: make categories from inherited grammars available in the startcat menu
Diffstat (limited to 'src')
-rw-r--r--src/www/gfse/editor.js34
-rw-r--r--src/www/gfse/gf_abs.js4
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 inherited_cats(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 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_funs(g) {
+function inherited_grammars(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) {