summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/oktavia/src/query-parser.jsx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/misc/oktavia/src/query-parser.jsx60
1 files changed, 60 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/misc/oktavia/src/query-parser.jsx b/web/server/h2o/libh2o/misc/oktavia/src/query-parser.jsx
new file mode 100644
index 00000000..86308bcb
--- /dev/null
+++ b/web/server/h2o/libh2o/misc/oktavia/src/query-parser.jsx
@@ -0,0 +1,60 @@
+import "query.jsx";
+
+
+class QueryParser
+{
+ var queries : Query[];
+ function constructor()
+ {
+ this.queries = [] : Query[];
+ }
+
+ function parse (queryStrings : string[]) : Query[]
+ {
+ var nextOr = false;
+ for (var i = 0; i < queryStrings.length; i++)
+ {
+ var word = queryStrings[i];
+ if (word == 'OR')
+ {
+ nextOr = true;
+ }
+ else
+ {
+ var query = new Query();
+ if (nextOr)
+ {
+ query.or = true;
+ nextOr = false;
+ }
+ if (word.slice(0, 1) == '-')
+ {
+ query.not = true;
+ word = word.slice(1);
+ }
+ if (word.slice(0, 1) == '"' && word.slice(word.length -1) == '"')
+ {
+ query.raw = true;
+ word = word.slice(1, word.length -1);
+ }
+ query.word = word;
+ this.queries.push(query);
+ }
+ }
+ return this.queries;
+ }
+
+ function highlight () : string
+ {
+ var result = [] : string[];
+ for (var i = 0; i < this.queries.length; i++)
+ {
+ var query = this.queries[i];
+ if (!query.not)
+ {
+ result.push("highlight=" + String.encodeURIComponent(query.word));
+ }
+ }
+ return '?' + result.join('&');
+ }
+}