mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-22 16:36:15 -04:00
first-commit
This commit is contained in:
commit
325c322a27
207 changed files with 35989 additions and 0 deletions
133
doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js
Normal file
133
doc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js
Normal file
|
@ -0,0 +1,133 @@
|
|||
if (typeof JSDOC == "undefined") JSDOC = {};
|
||||
|
||||
/**
|
||||
@constructor
|
||||
*/
|
||||
JSDOC.TokenStream = function(tokens) {
|
||||
this.tokens = (tokens || []);
|
||||
this.rewind();
|
||||
}
|
||||
|
||||
/**
|
||||
@constructor
|
||||
@private
|
||||
*/
|
||||
function VoidToken(/**String*/type) {
|
||||
this.toString = function() {return "<VOID type=\""+type+"\">"};
|
||||
this.is = function(){return false;}
|
||||
}
|
||||
|
||||
JSDOC.TokenStream.prototype.rewind = function() {
|
||||
this.cursor = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
@type JSDOC.Token
|
||||
*/
|
||||
JSDOC.TokenStream.prototype.look = function(/**Number*/n, /**Boolean*/considerWhitespace) {
|
||||
if (typeof n == "undefined") n = 0;
|
||||
|
||||
if (considerWhitespace == true) {
|
||||
if (this.cursor+n < 0 || this.cursor+n > this.tokens.length) return {};
|
||||
return this.tokens[this.cursor+n];
|
||||
}
|
||||
else {
|
||||
var count = 0;
|
||||
var i = this.cursor;
|
||||
|
||||
while (true) {
|
||||
if (i < 0) return new JSDOC.Token("", "VOID", "START_OF_STREAM");
|
||||
else if (i > this.tokens.length) return new JSDOC.Token("", "VOID", "END_OF_STREAM");
|
||||
|
||||
if (i != this.cursor && (this.tokens[i] === undefined || this.tokens[i].is("WHIT"))) {
|
||||
if (n < 0) i--; else i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (count == Math.abs(n)) {
|
||||
return this.tokens[i];
|
||||
}
|
||||
count++;
|
||||
(n < 0)? i-- : i++;
|
||||
}
|
||||
|
||||
return new JSDOC.Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@type JSDOC.Token|JSDOC.Token[]
|
||||
*/
|
||||
JSDOC.TokenStream.prototype.next = function(/**Number*/howMany) {
|
||||
if (typeof howMany == "undefined") howMany = 1;
|
||||
if (howMany < 1) return null;
|
||||
var got = [];
|
||||
|
||||
for (var i = 1; i <= howMany; i++) {
|
||||
if (this.cursor+i >= this.tokens.length) {
|
||||
return null;
|
||||
}
|
||||
got.push(this.tokens[this.cursor+i]);
|
||||
}
|
||||
this.cursor += howMany;
|
||||
|
||||
if (howMany == 1) {
|
||||
return got[0];
|
||||
}
|
||||
else return got;
|
||||
}
|
||||
|
||||
/**
|
||||
@type JSDOC.Token[]
|
||||
*/
|
||||
JSDOC.TokenStream.prototype.balance = function(/**String*/start, /**String*/stop) {
|
||||
if (!stop) stop = JSDOC.Lang.matching(start);
|
||||
|
||||
var depth = 0;
|
||||
var got = [];
|
||||
var started = false;
|
||||
|
||||
while ((token = this.look())) {
|
||||
if (token.is(start)) {
|
||||
depth++;
|
||||
started = true;
|
||||
}
|
||||
|
||||
if (started) {
|
||||
got.push(token);
|
||||
}
|
||||
|
||||
if (token.is(stop)) {
|
||||
depth--;
|
||||
if (depth == 0) return got;
|
||||
}
|
||||
if (!this.next()) break;
|
||||
}
|
||||
}
|
||||
|
||||
JSDOC.TokenStream.prototype.getMatchingToken = function(/**String*/start, /**String*/stop) {
|
||||
var depth = 0;
|
||||
var cursor = this.cursor;
|
||||
|
||||
if (!start) {
|
||||
start = JSDOC.Lang.matching(stop);
|
||||
depth = 1;
|
||||
}
|
||||
if (!stop) stop = JSDOC.Lang.matching(start);
|
||||
|
||||
while ((token = this.tokens[cursor])) {
|
||||
if (token.is(start)) {
|
||||
depth++;
|
||||
}
|
||||
|
||||
if (token.is(stop) && cursor) {
|
||||
depth--;
|
||||
if (depth == 0) return this.tokens[cursor];
|
||||
}
|
||||
cursor++;
|
||||
}
|
||||
}
|
||||
|
||||
JSDOC.TokenStream.prototype.insertAhead = function(/**JSDOC.Token*/token) {
|
||||
this.tokens.splice(this.cursor+1, 0, token);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue