UNPKG

2.09 kBJavaScriptView Raw
1/*
2Language: HTTP
3Description: HTTP request and response headers with automatic body highlighting
4Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
5Category: protocols, web
6Website: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
7*/
8
9function http(hljs) {
10 const regex = hljs.regex;
11 const VERSION = 'HTTP/(2|1\\.[01])';
12 const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;
13 const HEADER = {
14 className: 'attribute',
15 begin: regex.concat('^', HEADER_NAME, '(?=\\:\\s)'),
16 starts: {
17 contains: [
18 {
19 className: "punctuation",
20 begin: /: /,
21 relevance: 0,
22 starts: {
23 end: '$',
24 relevance: 0
25 }
26 }
27 ]
28 }
29 };
30 const HEADERS_AND_BODY = [
31 HEADER,
32 {
33 begin: '\\n\\n',
34 starts: { subLanguage: [], endsWithParent: true }
35 }
36 ];
37
38 return {
39 name: 'HTTP',
40 aliases: ['https'],
41 illegal: /\S/,
42 contains: [
43 // response
44 {
45 begin: '^(?=' + VERSION + " \\d{3})",
46 end: /$/,
47 contains: [
48 {
49 className: "meta",
50 begin: VERSION
51 },
52 {
53 className: 'number', begin: '\\b\\d{3}\\b'
54 }
55 ],
56 starts: {
57 end: /\b\B/,
58 illegal: /\S/,
59 contains: HEADERS_AND_BODY
60 }
61 },
62 // request
63 {
64 begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)',
65 end: /$/,
66 contains: [
67 {
68 className: 'string',
69 begin: ' ',
70 end: ' ',
71 excludeBegin: true,
72 excludeEnd: true
73 },
74 {
75 className: "meta",
76 begin: VERSION
77 },
78 {
79 className: 'keyword',
80 begin: '[A-Z]+'
81 }
82 ],
83 starts: {
84 end: /\b\B/,
85 illegal: /\S/,
86 contains: HEADERS_AND_BODY
87 }
88 },
89 // to allow headers to work even without a preamble
90 hljs.inherit(HEADER, {
91 relevance: 0
92 })
93 ]
94 };
95}
96
97export { http as default };