From 8d2f0d5d3dfc04dd254a0de7651721ef4b5d93de Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Mon, 30 Nov 2015 17:27:09 +0800 Subject: [PATCH] JSDOC/Collapse.vala --- JSDOC/Collapse.vala | 60 +++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/JSDOC/Collapse.vala b/JSDOC/Collapse.vala index 758a282..d11e7c6 100644 --- a/JSDOC/Collapse.vala +++ b/JSDOC/Collapse.vala @@ -29,13 +29,15 @@ namespace JSDOC { public class Collapse : TokenStream { + + public Collapse(Gee.ArrayList tokens) { - parent(ar);; + base(tokens); this.spaces(); - ar = this.collapse(this.tokens); + var ar = this.collapse(this.tokens); this.tokens = ar; @@ -58,7 +60,7 @@ namespace JSDOC { pref.add(tok); continue; } - tok.prefix = ''; + tok.prefix = ""; if (pref.size > 0) { foreach(var e in pref) { tok.prefix += e.data; @@ -102,7 +104,10 @@ namespace JSDOC { case "STRN": case "NUMB": case "REGX": - ret.push(st.next(1)); + var nn = st.next(); + if (nn != null) { + ret.add(nn); + } continue; case "PUNC": @@ -112,7 +117,8 @@ namespace JSDOC { case "(": var start = st.cursor; - st.next(1); + st.next(); + var add = st.balance(tok.data); // if (!add) { //console.dump(tok); @@ -131,7 +137,7 @@ namespace JSDOC { var toks = add.size > 0 ? this.collapse(add) : add; tok.items = new Gee.ArrayList>(); //?? needed? - tok.props = new Gee.HashMap>(); + tok.props = new Gee.HashMap(); if (tok.data != "{") { @@ -143,7 +149,7 @@ namespace JSDOC { var ost = new TokenStream(toks); //console.dump(ost.look(2,true) ); - if (ost.look(2,true) && ost.look(2,true).data == ":") { + if (ost.look(2,true) != null && ost.look(2,true).data == ":") { // object properties... tok.props = this.toProps(toks); } else { @@ -162,18 +168,18 @@ namespace JSDOC { //Seed.print(" ADD : " + add.length + " ITEMS: " + tok.items.length); - ret.push(tok); + ret.add(tok); continue; default: - ret.push(st.next(1)); + ret.add(st.next()); continue; } - Seed.print("OOPS"); + print("OOPS"); continue; default : - Seed.print("OOPS" + tok.type); + print("OOPS" + tok.type); continue; } } @@ -194,7 +200,7 @@ namespace JSDOC { var ret = new Gee.ArrayList>() ; var g = new Gee.ArrayList() ; - for (var i = 0; i < ar.length; i ++) { + for (var i = 0; i < ar.size; i ++) { if (sep.index_of(ar.get(i).data) < 0) { g.add(ar.get(i)); continue; @@ -218,34 +224,34 @@ namespace JSDOC { } - Gee.HashMap> toProps (Gee.ArrayList ar) + Gee.HashMap toProps (Gee.ArrayList ar) { - var ret = new Gee.HashMap>(); + var ret = new Gee.HashMap(); - var g = { key : '', val: [] } + var g = new TokenKeyMap(); - var k = ''; + var k = ""; var state = 0; - for (var i = 0; i < ar.length; i ++) { + for (var i = 0; i < ar.size; i ++) { switch(state) { case 0: - k = ar[i].data; - g.key = ar[i]; + k = ar.get(i).data; + g.key = ar.get(i); state = 1; continue; case 1: state =2; // should be ':' continue; case 2: - g.val.push(ar[i]); - if (ar[i].data != ',') { + g.vals.add( ar.get(i)); + if ( ar.get(i).data != ",") { continue; } - ret[k] = g; - g = { key : '', val: [] } + ret.set(k, g); + g = new TokenKeyMap(); state = 0; continue; @@ -253,14 +259,14 @@ namespace JSDOC { } // last.. - if g.val.length is 0 then it's a trailing ','... // we should really throw a syntax error in that case.. - if (k.length && g.val.length) { - ret[k] = g; + if (k.length > 0 && g.vals.size > 0) { + ret.set(k, g); } return ret; } + } - -}); +} -- 2.39.2