summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2011-02-28 14:18:20 +0000
committerhallgren <hallgren@chalmers.se>2011-02-28 14:18:20 +0000
commit1cae23fce70b43751e770a2460c474244507afa0 (patch)
tree686c4946f0f4c45f0d65161044ff735a9f5d5bae /src
parenta9287e83af1b6b87b216331fe62218d46079ce9f (diff)
gfse: support for opening RGL modules
Diffstat (limited to 'src')
-rw-r--r--src/editor/simple/editor.js70
-rw-r--r--src/editor/simple/gf_abs.js9
2 files changed, 68 insertions, 11 deletions
diff --git a/src/editor/simple/editor.js b/src/editor/simple/editor.js
index f829c12f8..fe2c5f0b2 100644
--- a/src/editor/simple/editor.js
+++ b/src/editor/simple/editor.js
@@ -164,7 +164,7 @@ function add_concrete(g,el) {
list.push(li([a(jsurl("add_concrete2("+g.index+",'"+c+"')"),
[text(l.name)])]));
}
- file.appendChild(text("Pick a language for the new concrete syntax:"));
+ file.appendChild(p(text("Pick a language for the new concrete syntax:")));
file.appendChild(node("ul",{},list));
}
@@ -276,13 +276,6 @@ function add_cat(g,el) {
string_editor(el,"",add);
}
-function delete_ix(old,ix) {
- var a=[];
-// for(var i=0;i<old.length;i++) if(i!=ix) a.push(old[i]);
- for(var i in old) if(i!=ix) a.push(old[i]);
- return a;
-}
-
function delete_cat(g,ix) {
with(g.abstract) cats=delete_ix(cats,ix);
reload_grammar(g);
@@ -315,7 +308,6 @@ function draw_cats(g) {
return ifError(defined[cat],"Same category named twice",el);
}
function del(i) { return function() { delete_cat(g,i); }}
-// for(var i=0; i<cs.length;i++) {
for(var i in cs) {
es.push(deletable(del(i),check(cs[i],eident(cs[i])),"Delete this category"));
defined[cs[i]]=true;
@@ -424,6 +416,7 @@ function draw_concrete(g,i) {
return div_id("file",
[kw("concrete "),ident(g.basename+conc.langcode),
kw(" of "),ident(g.basename),sep(" = "),
+ indent([extensible([kw("open "),draw_opens(g,i)])]),
indent([extensible([kw("param"),draw_params(g,i)])]),
indent([kw("lincat"),draw_lincats(g,i)]),
indent([extensible([kw("oper"),draw_opers(g,i)])]),
@@ -431,6 +424,58 @@ function draw_concrete(g,i) {
])
}
+var rgl_modules=["Paradigms","Syntax"];
+
+function add_open(ci) {
+ return function (g,el) {
+ var conc=g.concretes[ci];
+ var os=conc.opens;
+ var ds={};
+ for(var i in os) ds[os[i]]=true;
+ var list=[]
+ for(var i in rgl_modules) {
+ var b=rgl_modules[i], m=b+conc.langcode;
+ if(!ds[m])
+ list.push(li([a(jsurl("add_open2("+g.index+","+ci+",'"+m+"')"),
+ [text(m)])]));
+ }
+ if(list.length>0) {
+ var file=element("file");
+ file.innerHTML="";
+ file.appendChild(p(text("Pick a resource library module to open:")));
+ file.appendChild(node("ul",{},list));
+ }
+ }
+}
+
+function add_open2(ix,ci,m) {
+ var g=local.get(ix);
+ var conc=g.concretes[ci];
+ conc.opens || (conc.opens=[]);
+ conc.opens.push(m);
+ save_grammar(g);
+ open_concrete(g,ci);
+}
+
+function delete_open(g,ci,ix) {
+ with(g.concretes[ci]) opens=delete_ix(opens,ix);
+ reload_grammar(g);
+}
+
+function draw_opens(g,ci) {
+ var conc=g.concretes[ci];
+ var os=conc.opens || [] ;
+ var es=[];
+ function del(i) { return function() { delete_open(g,ci,i); }}
+ var first=true;
+ for(var i in os) {
+ if(!first) es.push(sep(", "))
+ es.push(deletable(del(i),ident(os[i]),"Don't open this module"));
+ first=false;
+ }
+ es.push(more(g,add_open(ci),"Open more modules"));
+ return indent(es);
+}
function draw_param(p,dp) {
function check(el) {
@@ -718,6 +763,13 @@ function hidden(name,value) {
/* -------------------------------------------------------------------------- */
+function delete_ix(old,ix) {
+ var a=[];
+// for(var i=0;i<old.length;i++) if(i!=ix) a.push(old[i]);
+ for(var i in old) if(i!=ix) a.push(old[i]);
+ return a;
+}
+
function sort_list(list,olditems,key) {
var items=[];
function find(fun) {
diff --git a/src/editor/simple/gf_abs.js b/src/editor/simple/gf_abs.js
index 9c4681dc3..869861f64 100644
--- a/src/editor/simple/gf_abs.js
+++ b/src/editor/simple/gf_abs.js
@@ -176,8 +176,9 @@ function show_concretes(g) {
function show_concrete(basename) {
return function(conc) {
- return "concrete "+basename+conc.langcode+" of "+basename+" = {\n\n"
- +"flags coding = utf8 ;\n\n"
+ return "concrete "+basename+conc.langcode+" of "+basename+" ="
+ +show_opens(conc.opens)
+ +" {\n\nflags coding = utf8 ;\n\n"
+show_params(conc.params)
+show_lincats(conc.lincats)
+show_opers(conc.opers)
@@ -192,6 +193,10 @@ function show_list(kw,show1,list) {
: ""
}
+function show_opens(opens) {
+ return opens && opens.length>0 ? "\n\nopen "+opens.join(", ")+" in" : ""
+}
+
function show_params(params) { return show_list("param",show_param,params); }
function show_lincats(lincats) { return show_list("lincat",show_lincat,lincats); }
function show_opers(opers) { return show_list("oper",show_oper,opers); }