X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Pman.SearchTokenizer.js;h=8db0be1b8579dbfad2a4dac29c7e41c7d518e78a;hp=a55605de4d1d94332edee43d93e61056d311b529;hb=1524f8b36295809a3eedd6da3c6494f8aa0d86f5;hpb=43f606106d1c034d4a410347c3862fcda6af5a02 diff --git a/Pman.SearchTokenizer.js b/Pman.SearchTokenizer.js index a55605de..8db0be1b 100644 --- a/Pman.SearchTokenizer.js +++ b/Pman.SearchTokenizer.js @@ -14,8 +14,8 @@ Pman.SearchTokenizer = function(s) { - this.str = s; - this.strlen = s.length; + this.str = typeof(s) == 'string' ? s : ''; + this.strlen = typeof(s) == 'string' ? s.length : 0; this.i = 0; this.tokens = []; //print_r(this); @@ -49,15 +49,20 @@ Pman.SearchTokenizer.prototype = { } } + // sort tokens longest first.. + + + // should not get here... return this.tokens; }, strParse : function () { - - str = ''; + var c; + var str = ''; while(true) { - if (false === (c = this.getChar())) { + c = this.getChar(); + if (false === c) { this.addStr(str); return; } @@ -68,7 +73,7 @@ Pman.SearchTokenizer.prototype = { case '(': case ')': this.addStr(str); this.ungetChar(); return; case '"': - if (strlen(str)) { + if (str.length) { this.addStr(str); str = ''; } @@ -76,17 +81,20 @@ Pman.SearchTokenizer.prototype = { break; default : - str .= c; + str += c; continue; } } - } - function strParseQuoted(end) + }, + + strParseQuoted: function (end) { - str = ''; /// ignore \" slashed ??? + var str = ''; /// ignore \" slashed ??? + var c; while(true) { - if (false === (c = this.getChar())) { + c = this.getChar(); + if (false === c) { this.addStr(str,true); return; } @@ -94,40 +102,46 @@ Pman.SearchTokenizer.prototype = { this.addStr(str,true); return; } - str .= c; + str += c; } - } - function addStr(s, q=false) { //q == quoted.. - s = q ? s : trim(s); - if (!strlen(s)) { + }, + addStr : function (s,q) { //q == quoted.. + q = q || false; + + s = q ? s : Roo.util.Format.trim(s); + if (!s.length) { return; } + if (!q) { - - if ((strtoupper(s) == 'AND') || (strtoupper(s) == 'OR')) { - this.tokens[] = new Text_SearchParser_Token_Op(strtoupper(s)); + if ((s.toUpperCase() == 'AND') || (s.toUpperCase() == 'OR')) { + this.tokens.push( { type: s.toUpperCase() }); return; } } - this.tokens[] = new Text_SearchParser_Token_String(s); - } + this.tokens.push( { type : 's' , v : s, q: q }); + }, - function getChar() + getChar : function () { + if (this.i >= this.strlen) { return false; } c = this.str[this.i]; this.i++; return c; - } - function ungetChar() + }, + ungetChar : function () { this.i--; } - - - + +}; + +Pman.SearchTokenizer.parse = function(v) { + var x = new Pman.SearchTokenizer(v); + return x.parse(); } \ No newline at end of file