Skip to content

Commit 03f8b94

Browse files
committed
Some fixes for quotes, add bool range, add tree in output
1 parent 5d05ecf commit 03f8b94

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

cql.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ var CQLBoolean = function () {
172172
this.left = null;
173173
this.right = null;
174174
this._pos = null;
175+
this._range = null;
175176
}
176177

177178
CQLBoolean.prototype = {
@@ -209,6 +210,7 @@ CQLBoolean.prototype = {
209210
s += ',' + nl + indent(n, c) + ' "s1": ' + this.left.toFQ(n + 1, c, nl);
210211
s += ',' + nl + indent(n, c) + ' "s2": ' + this.right.toFQ(n + 1, c, nl);
211212
if (this._pos !== null) s += ',' + nl + indent(n, c) + ' "@pos": ' + this._pos;
213+
if (this._range !== null) s += ',' + nl + indent(n, c) + ' "@range": ' + JSON.stringify(this._range);
212214
var fill = n && c ? ' ' : '';
213215
s += nl + indent(n - 1, c) + fill + '}';
214216
return s;
@@ -272,6 +274,8 @@ CQLParser.prototype = {
272274
for (var key in fq) {
273275
if (key == 'op' || key == 's1' || key == 's2')
274276
continue;
277+
if (key.endsWith("@pos") || key.endsWith("@range"))
278+
continue;
275279
var mod = new CQLModifier();
276280
mod.name = key;
277281
mod.relation = '=';
@@ -333,6 +337,7 @@ CQLParser.prototype = {
333337
b.op = this.lval;
334338
this._move();
335339
b.modifiers = this._parseModifiers();
340+
b._range = [b._pos, Math.max(b._pos + b.op.length - 1, Math.max.apply(null, b.modifiers.map(x => ("_range" in x) ? x._range[1]: 0)))];
336341
b.left = left;
337342
b.right = this._parseSearchClause(field, relation, modifiers);
338343
left = b;
@@ -362,6 +367,7 @@ CQLParser.prototype = {
362367
var m = new CQLModifier();
363368
m._pos = _mpos;
364369
m._range = [_mstart, _mend];
370+
this._exprStart = null;
365371
m.name = name;
366372
m.relation = rel;
367373
m.value = this.val;
@@ -371,6 +377,7 @@ CQLParser.prototype = {
371377
var m = new CQLModifier();
372378
m._pos = _mpos;
373379
m._range = [_mstart, _mend];
380+
this._exprStart = null;
374381
m.name = name;
375382
m.relation = "";
376383
m.value = "";

index.html

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,29 @@
99
cp.parse(query);
1010
var fq = JSON.parse(cp.toFQ());
1111

12-
function recMods (obj, s) {
12+
function recMods (obj, s, lvl) {
13+
if (lvl === undefined) lvl = 0;
1314
if ("term" in obj) {
15+
if ("@range" in obj) {
16+
let range = obj["@range"];
17+
s += '\n' + ("".padStart(range[0] - 1) + "t".padEnd(range[1] - range[0] + 1, "-")).padEnd(query.length + 1 + lvl) + "[term:" + range + "]"
18+
}
1419
Object.entries(obj).filter(x => x[0].endsWith("@range") && x[0].length > 6).map(([_, range]) => {
15-
s += '\n' + "".padStart(range[0] - 1) + "m".padEnd(range[1] - range[0] + 1, "-")
20+
s += '\n' + ("".padStart(range[0] - 1) + "m".padEnd(range[1] - range[0] + 1, "-")).padEnd(query.length + 1 + lvl + 1) + "[term:mod:" + range + "]"
1621
})
17-
if ("@range" in obj)
18-
s += '\n' + "".padStart(obj["@range"][0] - 1) + "t".padEnd(obj["@range"][1] - obj["@range"][0] + 1, "-")
1922
} else if ("op" in obj) {
20-
if ("@pos" in obj)
21-
s += '\n' + "r".padEnd(obj.op.length, "-").padStart(obj["@pos"] + obj.op.length - 1)
22-
23-
Object.entries(obj).filter(x => x[0].endsWith("@range")).map(([_, range]) => {
24-
s += '\n' + "".padStart(range[0] - 1) + "m".padEnd(range[1] - range[0] + 1, "-")
23+
if ("@range" in obj) {
24+
let range = obj["@range"];
25+
s += '\n' + ("".padStart(range[0] - 1) + "o".padEnd(range[1] - range[0] + 1, "-")).padEnd(query.length + 1 + lvl) + "[op:" + range + "]"
26+
} else if ("@pos" in obj) {
27+
let range = [obj["@pos"], obj["@pos"] + obj.op.length - 1]
28+
s += '\n' + ("o".padEnd(obj.op.length, "-").padStart(obj["@pos"] + obj.op.length - 1)).padEnd(query.length + 1 + lvl) + "[op:" + range + "]"
29+
}
30+
Object.entries(obj).filter(x => x[0].endsWith("@range") && x[0].length > 6).map(([_, range]) => {
31+
s += '\n' + ("".padStart(range[0] - 1) + "m".padEnd(range[1] - range[0] + 1, "-")).padEnd(query.length + 1 + lvl + 1) + "[op:mod:" + range + "]"
2532
})
26-
27-
s = recMods(obj.s1, s);
28-
s = recMods(obj.s2, s);
33+
s = recMods(obj.s1, s, lvl+1);
34+
s = recMods(obj.s2, s, lvl+1);
2935
}
3036
return s;
3137
}

0 commit comments

Comments
 (0)