Syntax editor: start with initial AST

Note that the argument has been renamed to initial.abstr
(Where abstr means an abstract syntax tree in string form, NOT an AST object)
This commit is contained in:
john.j.camilleri
2012-11-21 15:24:44 +00:00
parent 8bd58a0297
commit 381dc3900c
3 changed files with 45 additions and 34 deletions

View File

@@ -19,8 +19,7 @@ An improved version of the [old syntax editor][1].
grammar: "http://localhost:41296/grammars/Foods.pgf",
startcat: "Kind",
languages: ["Eng","Swe","Mlt"],
ast: null,
node_id: null
abstr: "Pred (That Fish) Expensive"
},
show: {
grammar_menu: true,
@@ -33,7 +32,6 @@ An improved version of the [old syntax editor][1].
## TODO
- Link to jump into minibar
- Start with initial grammar, startcat, ast
- Compatibility with grammars with dependent category types
- Clicking on tokens to select tree node
- Use local caching

View File

@@ -7,6 +7,22 @@
// }
/* --- Main Editor object --------------------------------------------------- */
/* When creating the object, stuff gets called in this order:
new EditorMenu
server.get_grammarlists
EditorMenu.show_grammarlist
EditorMenu.change_grammar
server.switch_to_other_grammar
server.get_grammar_info
EditorMenu.update_startcat_menu
EditorMenu.update_language_menu
Editor.change_grammar
Editor.get_grammar_constructors
Editor.start_fresh
Editor.update_current_node();
Editor.redraw_tree();
Editor.get_refinements();
*/
function Editor(server,opts) {
var t = this;
/* --- Configuration ---------------------------------------------------- */
@@ -18,7 +34,7 @@ function Editor(server,opts) {
grammar: null,
startcat: null,
languages: null,
ast: null,
abstr: null,
node_id: null
},
show: {
@@ -98,19 +114,20 @@ Editor.prototype.change_grammar=function(grammar_info) {
}
Editor.prototype.change_startcat=function(startcat) {
this.startcat = startcat;
this.start_fresh();
var t = this;
t.startcat = startcat;
t.start_fresh();
}
// Called after changing grammar or startcat
Editor.prototype.start_fresh=function () {
with(this) {
ast = new AST(null, get_startcat());
redraw_tree();
update_current_node();
get_refinements();
clear(ui.lin);
var t = this;
t.ast = new AST(null, t.get_startcat());
if (t.options.initial.abstr) {
t.import_ast(t.options.initial.abstr);
}
t.update_current_node();
clear(t.ui.lin);
}
/* --- Functions for handling tree manipulation ----------------------------- */

View File

@@ -59,9 +59,7 @@ function EditorMenu(editor,opts) {
this.server = editor.server;
/* --- Main program, this gets things going ----------------------------- */
with(this) {
server.get_grammarlists(bind(show_grammarlist,this));
}
this.server.get_grammarlists(bind(this.show_grammarlist,this));
}
/* --- Grammar menu --------------------------------------------------------- */
@@ -75,25 +73,23 @@ EditorMenu.prototype.show_grammarlist=function(dir,grammar_names,dir_count) {
t.grammars=[];
t.grammar_dirs=[];
}
with(t) {
grammar_dirs.push(dir);
grammars=grammars.concat(grammar_names.map(function(g){return dir+g}))
function glabel(g) {
return hasPrefix(dir,"/tmp/gfse.") ? "gfse: "+g : g
}
function opt(g) { return option(glabel(g),dir+g); }
appendChildren(t.ui.grammar_menu,map(opt,grammar_names));
function pick_first_grammar() {
if(t.timeout) clearTimeout(t.timeout),t.timeout=null;
var grammar0=t.options.initial.grammar;
if(!grammar0) grammar0=t.grammars[0];
t.ui.grammar_menu.value=grammar0;
t.change_grammar();
}
// Wait at most 1.5s before showing the grammar menu.
if(first_time) t.timeout=setTimeout(pick_first_grammar,1500);
if(t.grammar_dirs.length>=dir_count) pick_first_grammar();
t.grammar_dirs.push(dir);
t.grammars=t.grammars.concat(grammar_names.map(function(g){return dir+g}))
function glabel(g) {
return hasPrefix(dir,"/tmp/gfse.") ? "gfse: "+g : g
}
function opt(g) { return option(glabel(g),dir+g); }
appendChildren(t.ui.grammar_menu, map(opt, grammar_names));
function pick_first_grammar() {
if(t.timeout) clearTimeout(t.timeout),t.timeout=null;
var grammar0=t.options.initial.grammar;
if(!grammar0) grammar0=t.grammars[0];
t.ui.grammar_menu.value=grammar0;
t.change_grammar();
}
// Wait at most 1.5s before showing the grammar menu.
if(first_time) t.timeout=setTimeout(pick_first_grammar,1500);
if(t.grammar_dirs.length>=dir_count) pick_first_grammar();
}
// Copied from minibar.js
@@ -102,8 +98,8 @@ EditorMenu.prototype.change_grammar=function() {
var grammar_url = t.ui.grammar_menu.value;
t.server.switch_to_other_grammar(grammar_url, function() {
t.server.grammar_info(function(grammar){
t.update_language_menu(t.ui.to_menu, grammar);
t.update_startcat_menu(grammar);
t.update_language_menu(t.ui.to_menu, grammar);
// Call in main Editor object
t.editor.change_grammar(grammar);