summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx130
1 files changed, 130 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx b/web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx
new file mode 100644
index 00000000..a4d7451e
--- /dev/null
+++ b/web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx
@@ -0,0 +1,130 @@
+import "console.jsx";
+import "oktavia.jsx";
+import "metadata.jsx";
+import "query-parser.jsx";
+import "stemmer/english-stemmer.jsx";
+
+
+class HTTPStatus
+{
+ var oktavia : Oktavia;
+ var splitter : Splitter;
+ var httpstatus : string[];
+
+ function constructor ()
+ {
+ this.oktavia = new Oktavia;
+ this.oktavia.setStemmer(new EnglishStemmer());
+ this.splitter = this.oktavia.addSplitter('line break');
+ this.makeIndex();
+ }
+
+ function makeIndex () : void
+ {
+ this.httpstatus = [
+ "100: Continue",
+ "101: Switching Protocols",
+ "102: Processing",
+ "200: OK",
+ "201: Created",
+ "202: Accepted",
+ "203: Non-Authoritative Information",
+ "204: No Content",
+ "205: Reset Content",
+ "206: Partial Content",
+ "207: Multi-Status",
+ "208: Already Reported",
+ "300: Multiple Choices",
+ "301: Moved Permanently",
+ "302: Found",
+ "303: See Other",
+ "304: Not Modified",
+ "305: Use Proxy",
+ "307: Temporary Redirect",
+ "400: Bad Request",
+ "401: Unauthorized",
+ "402: Payment Required",
+ "403: Forbidden",
+ "404: Not Found",
+ "405: Method Not Allowed",
+ "406: Not Acceptable",
+ "407: Proxy Authentication Required",
+ "408: Request Timeout",
+ "409: Conflict",
+ "410: Gone",
+ "411: Length Required",
+ "412: Precondition Failed",
+ "413: Request Entity Too Large",
+ "414: Request-URI Too Large",
+ "415: Unsupported Media Type",
+ "416: Request Range Not Satisfiable",
+ "417: Expectation Failed",
+ "418: I'm a teapot",
+ "422: Unprocessable Entity",
+ "423: Locked",
+ "424: Failed Dependency",
+ "425: No code",
+ "426: Upgrade Required",
+ "428: Precondition Required",
+ "429: Too Many Requests",
+ "431: Request Header Fields Too Large",
+ "449: Retry with",
+ "500: Internal Server Error",
+ "501: Not Implemented",
+ "502: Bad Gateway",
+ "503: Service Unavailable",
+ "504: Gateway Timeout",
+ "505: HTTP Version Not Supported",
+ "506: Variant Also Negotiates",
+ "507: Insufficient Storage",
+ "509: Bandwidth Limit Exceeded",
+ "510: Not Extended"
+ ];
+ for (var i in this.httpstatus)
+ {
+ this.oktavia.addWord(this.httpstatus[i], true);
+ this.splitter.split();
+ }
+ this.oktavia.build();
+ }
+
+ function search (words : string[]) : string
+ {
+ var queryParser = new QueryParser();
+ var queries = queryParser.parse(words);
+ if (queries.length == 0)
+ {
+ var result = this.httpstatus.join('\n');
+ result = result + "\n\nToday's status: " + this.random();
+ return result;
+ }
+ else
+ {
+ var summary = this.oktavia.search(queries);
+ if (summary.size() == 0)
+ {
+ return "not found ";
+ }
+ var resultWords = [] : string[];
+ for (var i in summary.result.unitIds)
+ {
+ resultWords.push(this.splitter.getContent(summary.result.unitIds[i]));
+ }
+ return resultWords.join('\n');
+ }
+ }
+
+ function random () : string
+ {
+ return this.httpstatus[Math.round(Math.random() * this.httpstatus.length)];
+ }
+}
+
+class _Main
+{
+ static function main (argv : string []) : void
+ {
+ var httpstatus = new HTTPStatus();
+ console.log(httpstatus.search(argv));
+ }
+}