1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | function abnf(hljs) {
|
10 | const regex = hljs.regex;
|
11 | const IDENT = /^[a-zA-Z][a-zA-Z0-9-]*/;
|
12 |
|
13 | const KEYWORDS = [
|
14 | "ALPHA",
|
15 | "BIT",
|
16 | "CHAR",
|
17 | "CR",
|
18 | "CRLF",
|
19 | "CTL",
|
20 | "DIGIT",
|
21 | "DQUOTE",
|
22 | "HEXDIG",
|
23 | "HTAB",
|
24 | "LF",
|
25 | "LWSP",
|
26 | "OCTET",
|
27 | "SP",
|
28 | "VCHAR",
|
29 | "WSP"
|
30 | ];
|
31 |
|
32 | const COMMENT = hljs.COMMENT(/;/, /$/);
|
33 |
|
34 | const TERMINAL_BINARY = {
|
35 | scope: "symbol",
|
36 | match: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+)?/
|
37 | };
|
38 |
|
39 | const TERMINAL_DECIMAL = {
|
40 | scope: "symbol",
|
41 | match: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+)?/
|
42 | };
|
43 |
|
44 | const TERMINAL_HEXADECIMAL = {
|
45 | scope: "symbol",
|
46 | match: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+)?/
|
47 | };
|
48 |
|
49 | const CASE_SENSITIVITY = {
|
50 | scope: "symbol",
|
51 | match: /%[si](?=".*")/
|
52 | };
|
53 |
|
54 | const RULE_DECLARATION = {
|
55 | scope: "attribute",
|
56 | match: regex.concat(IDENT, /(?=\s*=)/)
|
57 | };
|
58 |
|
59 | const ASSIGNMENT = {
|
60 | scope: "operator",
|
61 | match: /=\/?/
|
62 | };
|
63 |
|
64 | return {
|
65 | name: 'Augmented Backus-Naur Form',
|
66 | illegal: /[!@#$^&',?+~`|:]/,
|
67 | keywords: KEYWORDS,
|
68 | contains: [
|
69 | ASSIGNMENT,
|
70 | RULE_DECLARATION,
|
71 | COMMENT,
|
72 | TERMINAL_BINARY,
|
73 | TERMINAL_DECIMAL,
|
74 | TERMINAL_HEXADECIMAL,
|
75 | CASE_SENSITIVITY,
|
76 | hljs.QUOTE_STRING_MODE,
|
77 | hljs.NUMBER_MODE
|
78 | ]
|
79 | };
|
80 | }
|
81 |
|
82 | export { abnf as default };
|