diff options
Diffstat (limited to 'web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx')
-rw-r--r-- | web/server/h2o/libh2o/misc/oktavia/tool/httpstatus.jsx | 130 |
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 000000000..a4d7451e5 --- /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)); + } +} |