source: node_modules/highlight.js/lib/languages/abnf.js@ d24f17c

main
Last change on this file since d24f17c was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 1.9 KB
Line 
1/**
2 * @param {string} value
3 * @returns {RegExp}
4 * */
5
6/**
7 * @param {RegExp | string } re
8 * @returns {string}
9 */
10function source(re) {
11 if (!re) return null;
12 if (typeof re === "string") return re;
13
14 return re.source;
15}
16
17/**
18 * @param {...(RegExp | string) } args
19 * @returns {string}
20 */
21function concat(...args) {
22 const joined = args.map((x) => source(x)).join("");
23 return joined;
24}
25
26/*
27Language: Augmented Backus-Naur Form
28Author: Alex McKibben <alex@nullscope.net>
29Website: https://tools.ietf.org/html/rfc5234
30Audit: 2020
31*/
32
33/** @type LanguageFn */
34function abnf(hljs) {
35 const regexes = {
36 ruleDeclaration: /^[a-zA-Z][a-zA-Z0-9-]*/,
37 unexpectedChars: /[!@#$^&',?+~`|:]/
38 };
39
40 const keywords = [
41 "ALPHA",
42 "BIT",
43 "CHAR",
44 "CR",
45 "CRLF",
46 "CTL",
47 "DIGIT",
48 "DQUOTE",
49 "HEXDIG",
50 "HTAB",
51 "LF",
52 "LWSP",
53 "OCTET",
54 "SP",
55 "VCHAR",
56 "WSP"
57 ];
58
59 const commentMode = hljs.COMMENT(/;/, /$/);
60
61 const terminalBinaryMode = {
62 className: "symbol",
63 begin: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/
64 };
65
66 const terminalDecimalMode = {
67 className: "symbol",
68 begin: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/
69 };
70
71 const terminalHexadecimalMode = {
72 className: "symbol",
73 begin: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/
74 };
75
76 const caseSensitivityIndicatorMode = {
77 className: "symbol",
78 begin: /%[si]/
79 };
80
81 const ruleDeclarationMode = {
82 className: "attribute",
83 begin: concat(regexes.ruleDeclaration, /(?=\s*=)/)
84 };
85
86 return {
87 name: 'Augmented Backus-Naur Form',
88 illegal: regexes.unexpectedChars,
89 keywords: keywords,
90 contains: [
91 ruleDeclarationMode,
92 commentMode,
93 terminalBinaryMode,
94 terminalDecimalMode,
95 terminalHexadecimalMode,
96 caseSensitivityIndicatorMode,
97 hljs.QUOTE_STRING_MODE,
98 hljs.NUMBER_MODE
99 ]
100 };
101}
102
103module.exports = abnf;
Note: See TracBrowser for help on using the repository browser.