X-Git-Url: http://git.roojs.org/?p=gnome.introspection-doc-generator;a=blobdiff_plain;f=JSDOC%2FCollapse.vala;h=2f883f3687ac20ca95dde372087457909c2a99a1;hp=5ea88effa9e6a6a4a0a0fc664c75d7e002a51589;hb=HEAD;hpb=b6707fabbcbe847088f3c7b70006334ec29a4f3e diff --git a/JSDOC/Collapse.vala b/JSDOC/Collapse.vala index 5ea88ef..2f883f3 100644 --- a/JSDOC/Collapse.vala +++ b/JSDOC/Collapse.vala @@ -26,65 +26,75 @@ namespace JSDOC { -public class Collapse : TokenStream { + public class Collapse : TokenStream { - public Collapse(Gee.ArrayList tokens) - { - parent(ar);; - - this.spaces(); - ar = this.collapse(this.tokens); - - this.tokens = ar; - - // console.dump(ar); - - }, - TokenStream, - { + + + public Collapse(Gee.ArrayList tokens) + { + base(tokens); + + this.spaces(); + + var ar = this.collapse(this.tokens); + + this.tokens = ar; + + // console.dump(ar); + + } + + // put spaces into prefix of tokens.. - spaces : function () { - var ar = []; - var pref = []; + void spaces () + { + var ar = new Gee.ArrayList(); + var pref = new Gee.ArrayList(); - var tok; + - for (var i = 0; i < this.tokens.length; i ++) { - tok = this.tokens[i]; + for (var i = 0; i < this.tokens.size; i ++) { + var tok = this.tokens[i]; if (tok.is("COMM") || tok.is("WHIT")) { - pref.push(tok); + pref.add(tok); continue; } - tok.prefix = ''; - if (pref.length) { - pref.forEach( function(e) { - if (!e) { - return; - } + tok.prefix = ""; + if (pref.size > 0) { + foreach(var e in pref) { tok.prefix += e.data; - }) + } + pref = new Gee.ArrayList(); // reset pref.. } - ar.push(tok); - pref= []; + ar.add(tok); + + } this.tokens = ar; - }, - collapse : function(ar) { + } + + + + Gee.ArrayList collapse(Gee.ArrayList ar) + { - var st = new TokenStream(ar); - var ret = []; + var st = new TokenStream(ar); + var ret = new Gee.ArrayList(); while (true) { var tok = st.look(1,true); - if (!tok || !tok.is) { + if (tok == null) { // Seed.print(TokenStream.toString(ret)); return ret; } // console.log(tok.data); + + debug("COL: %s", tok.asString()); + switch(tok.type) { case "VOID": return ret; //EOF @@ -96,7 +106,10 @@ public class Collapse : TokenStream { case "STRN": case "NUMB": case "REGX": - ret.push(st.next(1)); + var nn = st.next(); + if (nn != null) { + ret.add(nn); + } continue; case "PUNC": @@ -106,41 +119,48 @@ public class Collapse : TokenStream { case "(": var start = st.cursor; - st.next(1); + //st.next(); << no need to shift, balance will start at first character.. + var add = st.balance(tok.data); - if (!add) { - console.dump(tok); - console.dump(start + '...' + st.cursor); - console.dump(st.tokens); + + debug("BALANCE returned %d items\n", add.size); + + + // if (!add) { + //console.dump(tok); + //console.dump(start + '...' + st.cursor); + //console.dump(st.tokens); - } - if (add) { - add.shift(); + //} + if (add.size > 0) { + add.remove_at(0); // remove the first element... (as it's the } //Seed.print("ADD"); //Seed.print(JSON.stringify(add, null,4)); - var toks = add ? this.collapse(add) : []; - tok.items = false; - tok.props = false; - + var toks = add.size > 0 ? this.collapse(add) : add; + tok.items = new Gee.ArrayList>(); //?? needed? + tok.props = new Gee.HashMap(); + - if (tok.data != '{') { + if (tok.data != "{") { // paramters or array elements.. - tok.items = this.toItems(toks, [',']); + tok.items = this.toItems(toks, ","); } else { // check for types.. it could be a list of statements.. or object + // format "{" "xXXX" ":" << looks for the ':'.. seems to work.. not sure if it's foolproof... 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 { // list of statemetns.. - tok.items = this.toItems(toks,[ ';', '{'] );; + tok.items = this.toItems(toks, ";{");; } @@ -154,18 +174,18 @@ public class Collapse : TokenStream { //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; } } @@ -179,63 +199,65 @@ public class Collapse : TokenStream { - }, - toItems : function(ar,sep) + } + // array of arrays of tokens + Gee.ArrayList> toItems(Gee.ArrayList ar, string sep) { - var ret = []; - var g = []; + var ret = new Gee.ArrayList>() ; + var g = new Gee.ArrayList() ; - for (var i = 0; i < ar.length; i ++) { - if (sep.indexOf(ar[i].data) < 0) { - g.push(ar[i]); + for (var i = 0; i < ar.size; i ++) { + if (sep.index_of(ar.get(i).data) < 0) { + g.add(ar.get(i)); continue; } // var a=..., b =... - if ((ar[i].data != ';') && g.length && (g[0].name == "VAR")) {; - g.push(ar[i]); + if ((ar.get(i).data != ";") && g.size> 0 && (g[0].name == "VAR")) {; + g.add(ar.get(i)); continue; } - g.push(ar[i]); - ret.push(g); - g = []; + g.add(ar.get(i)); + ret.add(g); + g = new Gee.ArrayList() ; } // last.. - if (g.length) { - ret.push(g); + if (g.size > 0) { + ret.add(g); } return ret; - }, - toProps : function(ar) + } + + Gee.HashMap toProps (Gee.ArrayList ar) { - var ret = { } + 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; @@ -243,14 +265,14 @@ public class Collapse : TokenStream { } // 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; } + } - -}); +}