public string xvala_cls;
public string xvala_xcls; // 'Xcls_' + id;
public string xvala_id; // item id or ""
-
-
+
+ // line markers..
+ public int line_start;
+ public int line_end;
+ public Gee.ArrayList<int> lines;
+ public Gee.HashMap<int,string> line_map; // store of l:xxx or p:....
+ public Gee.ArrayList<int> node_lines;
+ public Gee.HashMap<int,Node> node_lines_map; // store of l:xxx or p:....
+
public Node()
{
this.xvala_xcls = "";
this.xvala_id = "";
this.parent = null;
+ this.line_start = -1;
+ this.line_end = -1;
+ this.lines = new Gee.ArrayList<int>();
+ this.line_map = new Gee.HashMap<int,string>();
+ this.node_lines = new Gee.ArrayList<int>();
+ this.node_lines_map = new Gee.HashMap<int,Node>();
+
+ }
+
+ public void setNodeLine(int line, Node node) {
+ //print("Add node @ %d\n", line);
+ if (this.node_lines_map.has_key(line)) {
+ return;
+ }
+ this.node_lines.add(line);
+ this.node_lines_map.set(line, node);
+
+ }
+
+ public void setLine(int line, string type, string prop) {
+ if (this.line_map.has_key(line)) {
+ if (this.line_map.get(line) != "e:" ) {
+ return;
+ }
+ } else {
+ this.lines.add(line);
+ }
+ this.line_map.set(line, type + ":" + prop);
+ GLib.debug("setLine %d, %s", line, type + ":" + prop);
+ }
+ public void sortLines() {
+ //print("sortLines\n");
+ this.lines.sort((a,b) => {
+ return (int)a-(int)b;
+ });
+ this.node_lines.sort((a,b) => {
+ return (int)a-(int)b;
+ });
}
+ public Node? lineToNode(int line)
+ {
+ //print("Searching for line %d\n",line);
+ var l = -1;
+ //foreach(int el in this.node_lines) {
+ //print("all lines %d\n", el);
+ //}
+
+
+ foreach(int el in this.node_lines) {
+ //print("?match %d\n", el);
+ if (el < line) {
+
+ l = el;
+ //print("LESS\n");
+ continue;
+ }
+ if (el == line) {
+ //print("SAME\n");
+ l = el;
+ break;
+ }
+ if (l > -1) {
+ var ret = this.node_lines_map.get(l);
+ if (line > ret.line_end) {
+ return null;
+ }
+ //print("RETURNING NODE ON LINE %d", l);
+ return ret;
+ }
+ return null;
+
+ }
+ if (l > -1) {
+ var ret = this.node_lines_map.get(l);
+ if (line > ret.line_end) {
+ return null;
+ }
+ //print("RETURNING NODE ON LINE %d", l);
+ return ret;
+ }
+ return null;
+
+ }
+ public string lineToProp(int line)
+ {
+ // assume lineToNode called first...
+ var l = -1;
+ //foreach(int el in this.lines) {
+ // //print("all lines %d\n", el);
+ //
+
+
+ foreach(int el in this.lines) {
+ //print("?match %d\n", el);
+ if (el < line) {
+
+ l = el;
+ //print("LESS\n");
+ continue;
+ }
+ if (el == line) {
+ //print("SAME\n");
+ l = el;
+ break;
+ }
+ if (l > -1) {
+ //print("RETURNING NODE ON LINE %d", l);
+ return this.line_map.get(l);
+ }
+ return null;
+
+ }
+ if (l > -1) {
+ //print("RETURNING NODE ON LINE %d", l);
+ return this.line_map.get(l);
+ }
+ return null;
+
+ }
+
+ public bool getPropertyRange(string prop, out int start, out int end)
+ {
+ start = -1;
+ foreach(int el in this.lines) {
+ if (start < 0) {
+ if (this.line_map.get(el) == prop) {
+ start = el;
+ end = el;
+ }
+ continue;
+ }
+ end = el -1;
+ break;
+ }
+ return start > -1;
+
+
+ }
+
+ public void dumpProps(string indent = "")
+ {
+ print("%s:\n" , this.fqn());
+ foreach(int el in this.lines) {
+ print("%d: %s%s\n", el, indent, this.line_map.get(el));
+ }
+ foreach(Node n in this.items) {
+ n.dumpProps(indent + " ");
+ }
+ }
+
+
public string uid()
{
this.props.set("xtype", ar[ar.length-1]);
var l = name.length - (ar[ar.length-1].length +1);
this.props.set("$ xns", name.substring(0, l));
- print("setFQN %s to %s\n", name , this.fqn());
+ //print("setFQN %s to %s\n", name , this.fqn());
}
// $ XXX - with flag (no type)
// $ string XXX - with flag
kname = "";
- ktype = "-";
- kflag = "-";
- var kk = key.strip().split(" ");
+ ktype = ""; // these used to contain '-' ???
+ kflag = ""; // these used to contain '-' ???
+ var kkv = key.strip().split(" ");
+ string[] kk = {};
+ for (var i = 0; i < kkv.length; i++) {
+ if (kkv[i].length > 0 ) {
+ kk+= kkv[i];
+ }
+ }
+ //print("normalize %s => %s\n", key,string.joinv("=:=",kk));
+
switch(kk.length) {
case 1:
kname = kk[0];
continue;
}
if ( i[0] != '|') {
- props += "\n<b>" +
+ props += "\n\t<b>" +
GLib.Markup.escape_text(i) +"</b> : " +
GLib.Markup.escape_text(val.split("\n")[0]);
//}
if (Regex.match_simple("^\\s*function", val)) {
- funcs += "\n<b>" +
- GLib.Markup.escape_text(i.substring(1)) +"</b> : " +
+ funcs += "\n\t<b>" +
+ GLib.Markup.escape_text(i.substring(1)).strip() +"</b> : " +
GLib.Markup.escape_text(val.split("\n")[0]);
continue;
}
if (Regex.match_simple("^\\s*\\(", val)) {
- funcs += "\n<b>" + GLib.Markup.escape_text(i.substring(1)) +
+ funcs += "\n\t<b>" + GLib.Markup.escape_text(i.substring(1)).strip() +
"</b> : " +
GLib.Markup.escape_text(val.split("\n")[0]);
continue;
}
iter = this.listeners.map_iterator();
while (iter.next()) {
- var i = iter.get_key();
- var val = iter.get_value();
+ var i = iter.get_key().strip();
+ var val = iter.get_value().strip();
if (val == null || val.length < 1) {
continue;
}
- listen += "\n<b>" +
+ listen += "\n\t<b>" +
GLib.Markup.escape_text(i) +"</b> : " +
GLib.Markup.escape_text(val.split("\n")[0]);