1 CodeMirror.defineMode("http", function() {
2 function failFirstLine(stream, state) {
8 function start(stream, state) {
9 if (stream.match(/^HTTP\/\d\.\d/)) {
10 state.cur = responseStatusCode;
12 } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) {
13 state.cur = requestPath;
16 return failFirstLine(stream, state);
20 function responseStatusCode(stream, state) {
21 var code = stream.match(/^\d+/);
22 if (!code) return failFirstLine(stream, state);
24 state.cur = responseStatusText;
25 var status = Number(code[0]);
26 if (status >= 100 && status < 200) {
27 return "positive informational";
28 } else if (status >= 200 && status < 300) {
29 return "positive success";
30 } else if (status >= 300 && status < 400) {
31 return "positive redirect";
32 } else if (status >= 400 && status < 500) {
33 return "negative client-error";
34 } else if (status >= 500 && status < 600) {
35 return "negative server-error";
41 function responseStatusText(stream, state) {
47 function requestPath(stream, state) {
48 stream.eatWhile(/\S/);
49 state.cur = requestProtocol;
53 function requestProtocol(stream, state) {
54 if (stream.match(/^HTTP\/\d\.\d$/)) {
58 return failFirstLine(stream, state);
62 function header(stream) {
63 if (stream.sol() && !stream.eat(/[ \t]/)) {
64 if (stream.match(/^.*?:/)) {
76 function body(stream) {
82 token: function(stream, state) {
84 if (cur != header && cur != body && stream.eatSpace()) return null;
85 return cur(stream, state);
88 blankLine: function(state) {
92 startState: function() {
98 CodeMirror.defineMIME("message/http", "http");