You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.4 KiB
121 lines
2.4 KiB
/** |
|
* @param {string} value |
|
* @returns {RegExp} |
|
* */ |
|
|
|
/** |
|
* @param {RegExp | string } re |
|
* @returns {string} |
|
*/ |
|
function source(re) { |
|
if (!re) return null; |
|
if (typeof re === "string") return re; |
|
|
|
return re.source; |
|
} |
|
|
|
/** |
|
* @param {...(RegExp | string) } args |
|
* @returns {string} |
|
*/ |
|
function concat(...args) { |
|
const joined = args.map((x) => source(x)).join(""); |
|
return joined; |
|
} |
|
|
|
/* |
|
Language: HTTP |
|
Description: HTTP request and response headers with automatic body highlighting |
|
Author: Ivan Sagalaev <maniac@softwaremaniacs.org> |
|
Category: common, protocols |
|
Website: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview |
|
*/ |
|
|
|
function http(hljs) { |
|
const VERSION = 'HTTP/(2|1\\.[01])'; |
|
const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/; |
|
const HEADER = { |
|
className: 'attribute', |
|
begin: concat('^', HEADER_NAME, '(?=\\:\\s)'), |
|
starts: { |
|
contains: [ |
|
{ |
|
className: "punctuation", |
|
begin: /: /, |
|
relevance: 0, |
|
starts: { |
|
end: '$', |
|
relevance: 0 |
|
} |
|
} |
|
] |
|
} |
|
}; |
|
const HEADERS_AND_BODY = [ |
|
HEADER, |
|
{ |
|
begin: '\\n\\n', |
|
starts: { subLanguage: [], endsWithParent: true } |
|
} |
|
]; |
|
|
|
return { |
|
name: 'HTTP', |
|
aliases: ['https'], |
|
illegal: /\S/, |
|
contains: [ |
|
// response |
|
{ |
|
begin: '^(?=' + VERSION + " \\d{3})", |
|
end: /$/, |
|
contains: [ |
|
{ |
|
className: "meta", |
|
begin: VERSION |
|
}, |
|
{ |
|
className: 'number', begin: '\\b\\d{3}\\b' |
|
} |
|
], |
|
starts: { |
|
end: /\b\B/, |
|
illegal: /\S/, |
|
contains: HEADERS_AND_BODY |
|
} |
|
}, |
|
// request |
|
{ |
|
begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)', |
|
end: /$/, |
|
contains: [ |
|
{ |
|
className: 'string', |
|
begin: ' ', |
|
end: ' ', |
|
excludeBegin: true, |
|
excludeEnd: true |
|
}, |
|
{ |
|
className: "meta", |
|
begin: VERSION |
|
}, |
|
{ |
|
className: 'keyword', |
|
begin: '[A-Z]+' |
|
} |
|
], |
|
starts: { |
|
end: /\b\B/, |
|
illegal: /\S/, |
|
contains: HEADERS_AND_BODY |
|
} |
|
}, |
|
// to allow headers to work even without a preamble |
|
hljs.inherit(HEADER, { |
|
relevance: 0 |
|
}) |
|
] |
|
}; |
|
} |
|
|
|
module.exports = http;
|
|
|