UNPKG

1.46 kBJavaScriptView Raw
1/*
2Language: Augmented Backus-Naur Form
3Author: Alex McKibben <alex@nullscope.net>
4Website: https://tools.ietf.org/html/rfc5234
5Audit: 2020
6*/
7
8/** @type LanguageFn */
9function 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
82export { abnf as default };