this.rewind();
}
-
+ public Gee.ArrayList<Token> toArray()
+ {
+ return this.tokens;
+ }
public void rewind() {
/**
@type JSDOC.Token
*/
- public Token? look (int n, bool considerWhitespace)
+ public Token? look (int n, bool considerWhitespace) // depricated... causes all sorts of problems...
{
// return new Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
}
+ // look through token stream, including white space...
+ public Token lookAny (int n)
+ {
+
+
+ if (this.cursor+n < 0 || this.cursor+n > (this.tokens.size -1)) {
+ return new Token("", "VOID", "START_OF_STREAM");
+ }
+ return this.tokens.get(this.cursor+n);
+
+
+
+ }
+
+
public int lookFor (string data)
{
* @param start {String} token name or data (eg. '{'
* @param stop {String} (Optional) token name or data (eg. '}'
*/
- public Gee.ArrayList<Token> balance (string start, string stop = "") throws TokenStreamError
+ public Gee.ArrayList<Token> balance (string start, string in_stop = "") throws TokenStreamError
{
// accepts names or "{" etc..
-
+ var stop = in_stop;
start = Lang.punc(start) == null ? start : Lang.punc(start);
if (stop=="") {
if (stop == null) {
throw new TokenStreamError.ArgumentError("balance called with invalid start/stop : %s",start);
}
-
+ debug("START=%s, STOP=%s \n", start,stop);
var depth = 0;
var got = new Gee.ArrayList<Token>();
var started = false;
//Seed.print("STOP:" + stop);
Token token;
- while (null != (token = this.look(1,false))) {
+ while (null != (token = this.lookAny(1))) {
+ debug("BALANCE: %d %s " , this.cursor, token.asString());
if (token.is(start)) {
// Seed.print("balance: START : " + depth + " " + token.data);
depth++;
if (token.is(stop)) {
depth--;
- // Seed.print("balance: STOP: " + depth + " " + token.data);
+
+ print("balance (%d): STOP: %s\n" , depth , token.data);
if (depth < 1) {
+ this.next(); // shift cursor to eat closer...
+ print("returning got %d\n", got.size);
return got;
}
+
}
if (null == this.next()) {
break;
public void dumpAll(string indent)
{
- for (var i = 0;i < this.tokens.length; i++) {
+ for (var i = 0;i < this.tokens.size; i++) {
this.tokens[i].dump("");
}
- print(outs);
+
+ }
+ public void dumpAllFlat()
+ {
+ for (var i = 0;i < this.tokens.size; i++) {
+
+ print("%d: %s\n", i, this.tokens[i].asString());
+ }
+
}
-
}
}