Updated JS editor to the latest version from Moises.

This commit is contained in:
bjorn
2008-09-09 09:32:32 +00:00
parent b3af35a88e
commit af2dbf293a
6 changed files with 346 additions and 336 deletions

View File

@@ -10,7 +10,7 @@
<script type="text/javascript" src="gfjseditor.js"></script> <script type="text/javascript" src="gfjseditor.js"></script>
<title>Web-based Syntax Editor</title> <title>Web-based Syntax Editor</title>
</head> </head>
<body onload="mkEditor('editor', Food)" onkeydown="hotKeys(event)"> <body onload="mkEditor('editor', Restaurant)" onkeydown="hotKeys(event)">
<div id="editor"> <div id="editor">
</div> </div>
</body> </body>

File diff suppressed because one or more lines are too long

View File

@@ -6,6 +6,8 @@ expColImg[0] = new Image(12,12);
expColImg[0].src = "minus.png"; expColImg[0].src = "minus.png";
expColImg[1] = new Image(12,12); expColImg[1] = new Image(12,12);
expColImg[1].src = "plus.png"; expColImg[1].src = "plus.png";
expColImg[2] = new Image(12,12);
expColImg[2].src = "empty.png";
// Grammars // Grammars
var grammar = undefined; var grammar = undefined;
@@ -47,7 +49,6 @@ keys ["27"] = function() { clickEsc(); };
function state(selectedNode, tree, collapseBuffer) { function state(selectedNode, tree, collapseBuffer) {
this.selectedNode = selectedNode; this.selectedNode = selectedNode;
// this.tree = myAbstract.copyTree(tree);
this.tree = grammar.abstract.copyTree(tree); this.tree = grammar.abstract.copyTree(tree);
this.collapseBuffer = collapseBuffer; this.collapseBuffer = collapseBuffer;
return this; return this;
@@ -70,6 +71,11 @@ treeNode.prototype.hasChildren = function() {
return this.children.length; return this.children.length;
} }
/* -------------------------------------------------------------------------- */
/* ----------------------------- GUI functions ----------------------------- */
/* -------------------------------------------------------------------------- */
// Creates an instance of the editor and stores it in the given HTML container. // Creates an instance of the editor and stores it in the given HTML container.
// Previous content is destroyed. // Previous content is destroyed.
function mkEditor(container, myGrammar) { function mkEditor(container, myGrammar) {
@@ -375,13 +381,12 @@ function showLanguages() {
"<td class='language' id='EditorDan' title='Label Danish' onclick='clickLanguage(\"\")'>Danish</td>", "<td class='language' id='EditorDan' title='Label Danish' onclick='clickLanguage(\"\")'>Danish</td>",
"<td class='language' id='EditorEng' title='Label English' onclick='clickLanguage(\"EditorEng\")'>English</td>", "<td class='language' id='EditorEng' title='Label English' onclick='clickLanguage(\"EditorEng\")'>English</td>",
"<td class='language' id='EditorFin' title='Label Finnish' onclick='clickLanguage(\"\")'>Finnish</td>", "<td class='language' id='EditorFin' title='Label Finnish' onclick='clickLanguage(\"\")'>Finnish</td>",
"<td class='language' id='EditorFre' title='Label French' onclick='clickLanguage(\"\")'>French</td>", "<td class='language' id='EditorFre' title='Label French' onclick='clickLanguage(\"EditorFre\")'>French</td>",
"<td class='language' id='EditorGer' title='Label German' onclick='clickLanguage(\"\")'>German</td>", "<td class='language' id='EditorGer' title='Label German' onclick='clickLanguage(\"\")'>German</td>",
"<td class='language' id='EditorIta' title='Label Italian' onclick='clickLanguage(\"\")'>Italian</td>", "<td class='language' id='EditorIta' title='Label Italian' onclick='clickLanguage(\"\")'>Italian</td>",
"<td class='language' id='EditorNor' title='Label Norwegian' onclick='clickLanguage(\"\")'>Norwegian</td>", "<td class='language' id='EditorNor' title='Label Norwegian' onclick='clickLanguage(\"\")'>Norwegian</td>",
"<td class='language' id='EditorRus' title='Label Russian' onclick='clickLanguage(\"\")'>Russian</td>", "<td class='language' id='EditorRus' title='Label Russian' onclick='clickLanguage(\"\")'>Russian</td>",
// "<td class='language' id='EditorSpa' title='Label Spanish' onclick='clickLanguage(\"EditorSpa\")'>Spanish</td>", "<td class='language' id='EditorSpa' title='Label Spanish' onclick='clickLanguage(\"EditorSpa\")'>Spanish</td>",
"<td class='language' id='EditorSpa' title='Label Spanish' onclick='clickLanguage(\"\")'>Spanish</td>",
"<td class='language' id='EditorSwe' title='Label Swedish' onclick='clickLanguage(\"EditorSwe\")'>Swedish</td></tr>", "<td class='language' id='EditorSwe' title='Label Swedish' onclick='clickLanguage(\"EditorSwe\")'>Swedish</td></tr>",
"</table>"); "</table>");
return languages.join(""); return languages.join("");
@@ -406,6 +411,7 @@ function applyLanguage() {
for (var i = 0, j = langsToLinearize.length; i < j; i++) { for (var i = 0, j = langsToLinearize.length; i < j; i++) {
var absStr = langsToLinearize[i].getAttribute("title"); var absStr = langsToLinearize[i].getAttribute("title");
var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat)); var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat));
lin = lin.substring(0,1).toUpperCase().concat(lin.substring(1))
if (!langsToLinearize[i].firstChild) { if (!langsToLinearize[i].firstChild) {
var txt = document.createTextNode(lin); var txt = document.createTextNode(lin);
langsToLinearize[i].appendChild(txt); langsToLinearize[i].appendChild(txt);
@@ -416,9 +422,10 @@ function applyLanguage() {
} }
var actionsToLinearize = document.getElementById("actionsTable").getElementsByTagName("td"); var actionsToLinearize = document.getElementById("actionsTable").getElementsByTagName("td");
for (var i = 0, j = actionsToLinearize.length; i < j; i++) { for (var i = 0, j = actionsToLinearize.length; i < j; i++) {
if (actionsToLinearize[i].getAttribute("class") == "action") { if (actionsToLinearize[i].className == "action") {
var absStr = actionsToLinearize[i].getAttribute("title"); var absStr = actionsToLinearize[i].getAttribute("title");
var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat)); var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree(absStr, editorGrammar.abstract.startcat));
lin = lin.substring(0,1).toUpperCase().concat(lin.substring(1))
if (!actionsToLinearize[i].firstChild) { if (!actionsToLinearize[i].firstChild) {
var txt = document.createTextNode(lin); var txt = document.createTextNode(lin);
actionsToLinearize[i].appendChild(txt); actionsToLinearize[i].appendChild(txt);
@@ -430,23 +437,28 @@ function applyLanguage() {
} }
var messageToLinearize = document.getElementById("refgenRefRandom"); var messageToLinearize = document.getElementById("refgenRefRandom");
if (messageToLinearize) { if (messageToLinearize) {
messageToLinearize.firstChild.firstChild.nodeValue = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("RandomlyCommand Select IndefSgDet Refinement", editorGrammar.abstract.startcat)); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("RandomlyCommand Select IndefSgDet Refinement", editorGrammar.abstract.startcat));
messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
} }
var messageToLinearize = document.getElementById("nextRefsNext"); var messageToLinearize = document.getElementById("nextRefsNext");
if (messageToLinearize) { if (messageToLinearize) {
messageToLinearize.firstChild.firstChild.nodeValue = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat)); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat));
messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
} }
messageToLinearize = document.getElementById("nextRefsPrevious"); messageToLinearize = document.getElementById("nextRefsPrevious");
if (messageToLinearize) { if (messageToLinearize) {
messageToLinearize.firstChild.firstChild.nodeValue = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat)); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat));
messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
} }
var messageToLinearize = document.getElementById("nextWrapsNext"); var messageToLinearize = document.getElementById("nextWrapsNext");
if (messageToLinearize) { if (messageToLinearize) {
messageToLinearize.firstChild.firstChild.nodeValue = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat)); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Next Page", editorGrammar.abstract.startcat));
messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
} }
messageToLinearize = document.getElementById("nextWrapsPrevious"); messageToLinearize = document.getElementById("nextWrapsPrevious");
if (messageToLinearize) { if (messageToLinearize) {
messageToLinearize.firstChild.firstChild.nodeValue = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat)); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("CommandAdj Show DefSgDet Previous Page", editorGrammar.abstract.startcat));
messageToLinearize.firstChild.firstChild.nodeValue = msg.substring(0,1).toUpperCase().concat(msg.substring(1));
} }
} }
@@ -529,18 +541,21 @@ function clickRefine(actName) {
switch(node.type) switch(node.type)
{ {
case "String": case "String":
newType = prompt(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat)),'String'); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat));
newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'String');
if (!newType) { newType = "AutoString"; } if (!newType) { newType = "AutoString"; }
break; break;
case "Int": case "Int":
while (isNaN(newType) || (newType && newType.indexOf(".") != -1)) { while (isNaN(newType) || (newType && newType.indexOf(".") != -1)) {
newType = prompt(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Integer_N", editorGrammar.abstract.startcat)),'Int'); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Integer_N", editorGrammar.abstract.startcat));
newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'Int');
} }
if (!newType) { newType = "8"; } if (!newType) { newType = "8"; }
break; break;
case "Float": case "Float":
while (isNaN(newType)) { while (isNaN(newType)) {
newType = prompt(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Float_N", editorGrammar.abstract.startcat)),'Float'); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet Float_N", editorGrammar.abstract.startcat));
newType = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'Float');
} }
if (!newType) { newType = "8.0"; } if (!newType) { newType = "8.0"; }
if (newType.indexOf(".") == -1) { newType += ".0"; } if (newType.indexOf(".") == -1) { newType += ".0"; }
@@ -593,7 +608,6 @@ function pushUndoClearRedo() {
// Gets the refinements to display // Gets the refinements to display
function showRefinements(nodeName) { function showRefinements(nodeName) {
// var refs = getAvailableRefinements(nodeName);
var refs = getAvailableRefinements(nodeName, abstractTree, grammar); var refs = getAvailableRefinements(nodeName, abstractTree, grammar);
var rowsPerPage = 9; var rowsPerPage = 9;
var pages = Math.floor(refs.length / rowsPerPage); var pages = Math.floor(refs.length / rowsPerPage);
@@ -822,7 +836,8 @@ function clickWrap(actName) {
var wrappers = showWrappers(node.caption); var wrappers = showWrappers(node.caption);
document.getElementById("refFrame").innerHTML = wrappers; document.getElementById("refFrame").innerHTML = wrappers;
if (wrappers.length <= 31) { if (wrappers.length <= 31) {
alert(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Wrapper", editorGrammar.abstract.startcat))); var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Wrapper", editorGrammar.abstract.startcat));
alert(lin.substring(0,1).toUpperCase().concat(lin.substring(1)));
document.getElementById("actFrame").innerHTML = showActions(); document.getElementById("actFrame").innerHTML = showActions();
nodeClick(selectedNode); nodeClick(selectedNode);
} }
@@ -834,7 +849,6 @@ function clickWrap(actName) {
function showWrappers(nodeCaption) { function showWrappers(nodeCaption) {
var nodeType = grammar.abstract.types[nodeCaption].cat; var nodeType = grammar.abstract.types[nodeCaption].cat;
var rowsPerPage = 10; var rowsPerPage = 10;
// var availWrappers = getAvailableWrappers(nodeType);
var availWrappers = getAvailableWrappers(nodeType, grammar, selectedNode); var availWrappers = getAvailableWrappers(nodeType, grammar, selectedNode);
var pages = Math.floor(availWrappers.length / rowsPerPage); var pages = Math.floor(availWrappers.length / rowsPerPage);
var upperLimit; var upperLimit;
@@ -880,7 +894,8 @@ function clickParse(actName) {
if (selectedNode) { if (selectedNode) {
refPageCounter = 0; refPageCounter = 0;
parseTrees = undefined; parseTrees = undefined;
var string = prompt(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat)),'String'); var msg = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("Command Enter IndefSgDet String_N", editorGrammar.abstract.startcat));
var string = prompt(msg.substring(0,1).toUpperCase().concat(msg.substring(1)),'String');
if (string || string == "") { if (string || string == "") {
for (var i in grammar.concretes) { for (var i in grammar.concretes) {
parseTrees = grammar.concretes[i].parser.parseString(string, node.cat); parseTrees = grammar.concretes[i].parser.parseString(string, node.cat);
@@ -898,7 +913,8 @@ function clickParse(actName) {
} }
} }
} else { nodeClick(selectedNode); return false; } } else { nodeClick(selectedNode); return false; }
alert(editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Tree", editorGrammar.abstract.startcat))); var lin = editorGrammar.concretes[selectedLanguage].linearize(editorGrammar.abstract.parseTree("ErrorMessage Available Tree", editorGrammar.abstract.startcat));
alert(lin.substring(0,1).toUpperCase().concat(lin.substring(1)));
} }
nodeClick(selectedNode); nodeClick(selectedNode);
} }
@@ -980,7 +996,6 @@ function clickRandomTree(actName) {
function refClick(refName) { function refClick(refName) {
if (selectedNode) { if (selectedNode) {
if (refName == "genRefRandom") { if (refName == "genRefRandom") {
// var refs = getAvailableRefinements(selectedNode);
var refs = getAvailableRefinements(selectedNode, abstractTree, grammar); var refs = getAvailableRefinements(selectedNode, abstractTree, grammar);
refName = refs[Math.floor(refs.length * Math.random())]; refName = refs[Math.floor(refs.length * Math.random())];
} }

View File

@@ -187,12 +187,6 @@ Int.prototype.setTag = function(tag) { if (!this.tag) { this.tag = tag; } };
/* Type annotation */ /* Type annotation */
/*
function Abstract(startcat) {
this.types = new Array();
this.startcat = startcat;
}
*/
function GFAbstract(startcat, types) { function GFAbstract(startcat, types) {
this.startcat = startcat; this.startcat = startcat;
this.types = types; this.types = types;
@@ -275,15 +269,9 @@ function Type(args, cat) {
} }
/* Linearization */ /* Linearization */
/*
function Concrete(abstr) {
this.abstr = abstr;
this.rules = new Array();
this.parser = undefined;
}
*/
function GFConcrete(flags, rules, parser) { function GFConcrete(flags, rules, parser) {
this.flags = flags; this.flags = flags;
this.rules = rules; this.rules = rules;
if (parser) { if (parser) {
this.parser = parser; this.parser = parser;
@@ -761,7 +749,7 @@ function rangeConcatLin (lin1, lin2) {
return undefined; return undefined;
} }
// Performs range concatenation on a linarization row // Performs range concatenation on a linearization row
function rangeConcatLins (lins) { function rangeConcatLins (lins) {
var newLins = new Array(); var newLins = new Array();
newLins.push(lins.shift()); newLins.push(lins.shift());
@@ -779,7 +767,7 @@ function rangeConcatLins (lins) {
return newLins; return newLins;
} }
// Performs range restriction on an element of a linarization row // Performs range restriction on an element of a linearization row
// while keeping track of the tokens that have been used // while keeping track of the tokens that have been used
function rangeRestLinTerm(tokens, lin, rangesNotConsumed) { function rangeRestLinTerm(tokens, lin, rangesNotConsumed) {
if (lin.id == "argProj") { return new Array(lin); } if (lin.id == "argProj") { return new Array(lin); }

File diff suppressed because one or more lines are too long

View File

@@ -78,7 +78,7 @@ body {
#tree { #tree {
left: -10px; left: -10px;
top: -10px; top: -10px;
width: 230px; width: 250px;
height: 250px; height: 250px;
margin: 0px; margin: 0px;
padding: 10px; padding: 10px;
@@ -197,28 +197,35 @@ td.hotKey {
td.language { td.language {
color: black; color: black;
background-color: white; background-color: white;
margin: 1px;
padding: 1px;
} }
td.language:hover { td.language:hover {
color: blue; color: blue;
background-color: white; background-color: white;
text-decoration: underline; text-decoration: underline;
margin: 1px;
padding: 1px;
} }
td.selected { td.selected {
color: white; color: white;
background-color: #3366CC; background-color: #3366CC;
margin: 1px;
padding: 1px;
} }
td.selected:hover { td.selected:hover {
color: white; color: white;
background-color: #3366CC; background-color: #3366CC;
text-decoration: underline; text-decoration: underline;
margin: 1px;
padding: 1px;
} }
p { p {
margin-bottom: 40px; margin-bottom: 40px;
text-align: justify;
} }
span.normal { span.normal {