openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

http.js (2795B)


      1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
      2 // Distributed under an MIT license: http://codemirror.net/LICENSE
      3 
      4 (function(mod) {
      5   if (typeof exports == "object" && typeof module == "object") // CommonJS
      6     mod(require("../../lib/codemirror"));
      7   else if (typeof define == "function" && define.amd) // AMD
      8     define(["../../lib/codemirror"], mod);
      9   else // Plain browser env
     10     mod(CodeMirror);
     11 })(function(CodeMirror) {
     12 "use strict";
     13 
     14 CodeMirror.defineMode("http", function() {
     15   function failFirstLine(stream, state) {
     16     stream.skipToEnd();
     17     state.cur = header;
     18     return "error";
     19   }
     20 
     21   function start(stream, state) {
     22     if (stream.match(/^HTTP\/\d\.\d/)) {
     23       state.cur = responseStatusCode;
     24       return "keyword";
     25     } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) {
     26       state.cur = requestPath;
     27       return "keyword";
     28     } else {
     29       return failFirstLine(stream, state);
     30     }
     31   }
     32 
     33   function responseStatusCode(stream, state) {
     34     var code = stream.match(/^\d+/);
     35     if (!code) return failFirstLine(stream, state);
     36 
     37     state.cur = responseStatusText;
     38     var status = Number(code[0]);
     39     if (status >= 100 && status < 200) {
     40       return "positive informational";
     41     } else if (status >= 200 && status < 300) {
     42       return "positive success";
     43     } else if (status >= 300 && status < 400) {
     44       return "positive redirect";
     45     } else if (status >= 400 && status < 500) {
     46       return "negative client-error";
     47     } else if (status >= 500 && status < 600) {
     48       return "negative server-error";
     49     } else {
     50       return "error";
     51     }
     52   }
     53 
     54   function responseStatusText(stream, state) {
     55     stream.skipToEnd();
     56     state.cur = header;
     57     return null;
     58   }
     59 
     60   function requestPath(stream, state) {
     61     stream.eatWhile(/\S/);
     62     state.cur = requestProtocol;
     63     return "string-2";
     64   }
     65 
     66   function requestProtocol(stream, state) {
     67     if (stream.match(/^HTTP\/\d\.\d$/)) {
     68       state.cur = header;
     69       return "keyword";
     70     } else {
     71       return failFirstLine(stream, state);
     72     }
     73   }
     74 
     75   function header(stream) {
     76     if (stream.sol() && !stream.eat(/[ \t]/)) {
     77       if (stream.match(/^.*?:/)) {
     78         return "atom";
     79       } else {
     80         stream.skipToEnd();
     81         return "error";
     82       }
     83     } else {
     84       stream.skipToEnd();
     85       return "string";
     86     }
     87   }
     88 
     89   function body(stream) {
     90     stream.skipToEnd();
     91     return null;
     92   }
     93 
     94   return {
     95     token: function(stream, state) {
     96       var cur = state.cur;
     97       if (cur != header && cur != body && stream.eatSpace()) return null;
     98       return cur(stream, state);
     99     },
    100 
    101     blankLine: function(state) {
    102       state.cur = body;
    103     },
    104 
    105     startState: function() {
    106       return {cur: start};
    107     }
    108   };
    109 });
    110 
    111 CodeMirror.defineMIME("message/http", "http");
    112 
    113 });