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);
}
}
+ // 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;
}
case '(':
case ')': this.addStr(str); this.ungetChar(); return;
case '"':
- if (strlen(str)) {
+ if (str.length) {
this.addStr(str);
str = '';
}
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;
}
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