Skip to content

Commit

Permalink
Merge pull request #1075 from wcandillon/master
Browse files Browse the repository at this point in the history
Improvements in the XQuery mode
  • Loading branch information
nightwing committed Nov 3, 2012
2 parents 5c36de8 + 4aef8e9 commit 3f8aa00
Show file tree
Hide file tree
Showing 5 changed files with 11,738 additions and 7,308 deletions.
9 changes: 6 additions & 3 deletions lib/ace/mode/xquery.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,16 @@ var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var XQueryHighlightRules = require("./xquery_highlight_rules").XQueryHighlightRules;
var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour;
//var XQueryBackgroundHighlighter = require("./xquery_background_highlighter").XQueryBackgroundHighlighter;
//var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour;
var Range = require("../range").Range;
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
var CStyleFoldMode = require("./folding/cstyle").FoldMode;


var Mode = function(parent) {
this.$tokenizer = new Tokenizer(new XQueryHighlightRules().getRules());
this.$behaviour = new XQueryBehaviour(parent);
this.$behaviour = new CstyleBehaviour(parent);
this.foldingRules = new CStyleFoldMode();
};

oop.inherits(Mode, TextMode);
Expand Down
92 changes: 92 additions & 0 deletions lib/ace/mode/xquery/JSONParseTreeHandler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2010, Ajax.org B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Ajax.org B.V. nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */

define(function(require, exports, module){
var JSONParseTreeHandler = exports.JSONParseTreeHandler = function() {

var ast = null;
var ptr = null;

function createNode(name){
return { name: name, children: [], getParent: null };
}

function pushNode(name, begin){
var node = createNode(name);
node.begin = begin;
if(ast === null) {
ast = node;
ptr = node;
} else {
node.getParent = ptr;
ptr.children.push(node);
ptr = ptr.children[ptr.children.length - 1];
}
}

function popNode(name, end){
ptr.end = end;
if(ptr.getParent !== null) {
ptr = ptr.getParent;
for(var i in ptr.children) {
delete ptr.children[i].getParent;
}
} else {
delete ptr.getParent;
}
}

this.getParseTree = function() {
return ast;
};

this.reset = function(input) {};

this.startNonterminal = function(name, begin) {
pushNode(name, begin);
};

this.endNonterminal = function(name, end) {
popNode(name, end);
};

this.terminal = function(name, begin, end) {
var name = (name.substring(0, 1) === "'" && name.substring(name.length - 1) === "'") ? "TOKEN" : name;
pushNode(name, begin);
popNode(name, end);
};

this.whitespace = function(begin, end) {
var name = "WS";
pushNode(name, begin);
popNode(name, end);
};
};
});
Loading

0 comments on commit 3f8aa00

Please sign in to comment.