-
Notifications
You must be signed in to change notification settings - Fork 3.6k
/
apache.js
103 lines (102 loc) · 2.47 KB
/
apache.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
Language: Apache config
Author: Ruslan Keba <rukeba@gmail.com>
Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
Website: https://httpd.apache.org
Description: language definition for Apache configuration files (httpd.conf & .htaccess)
Category: config, web
Audit: 2020
*/
/** @type LanguageFn */
export default function(hljs) {
const NUMBER_REF = {
className: 'number',
begin: /[$%]\d+/
};
const NUMBER = {
className: 'number',
begin: /\b\d+/
};
const IP_ADDRESS = {
className: "number",
begin: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/
};
const PORT_NUMBER = {
className: "number",
begin: /:\d{1,5}/
};
return {
name: 'Apache config',
aliases: [ 'apacheconf' ],
case_insensitive: true,
contains: [
hljs.HASH_COMMENT_MODE,
{
className: 'section',
begin: /<\/?/,
end: />/,
contains: [
IP_ADDRESS,
PORT_NUMBER,
// low relevance prevents us from claming XML/HTML where this rule would
// match strings inside of XML tags
hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })
]
},
{
className: 'attribute',
begin: /\w+/,
relevance: 0,
// keywords aren’t needed for highlighting per se, they only boost relevance
// for a very generally defined mode (starts with a word, ends with line-end
keywords: { _: [
"order",
"deny",
"allow",
"setenv",
"rewriterule",
"rewriteengine",
"rewritecond",
"documentroot",
"sethandler",
"errordocument",
"loadmodule",
"options",
"header",
"listen",
"serverroot",
"servername"
] },
starts: {
end: /$/,
relevance: 0,
keywords: { literal: 'on off all deny allow' },
contains: [
{
scope: "punctuation",
match: /\\\n/
},
{
className: 'meta',
begin: /\s\[/,
end: /\]$/
},
{
className: 'variable',
begin: /[\$%]\{/,
end: /\}/,
contains: [
'self',
NUMBER_REF
]
},
IP_ADDRESS,
NUMBER,
hljs.QUOTE_STRING_MODE
]
}
}
],
illegal: /\S/
};
}