You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
1.9 KiB
103 lines
1.9 KiB
/** |
|
* @param {string} value |
|
* @returns {RegExp} |
|
* */ |
|
|
|
/** |
|
* @param {RegExp | string } re |
|
* @returns {string} |
|
*/ |
|
function source(re) { |
|
if (!re) return null; |
|
if (typeof re === "string") return re; |
|
|
|
return re.source; |
|
} |
|
|
|
/** |
|
* @param {...(RegExp | string) } args |
|
* @returns {string} |
|
*/ |
|
function concat(...args) { |
|
const joined = args.map((x) => source(x)).join(""); |
|
return joined; |
|
} |
|
|
|
/* |
|
Language: Augmented Backus-Naur Form |
|
Author: Alex McKibben <alex@nullscope.net> |
|
Website: https://tools.ietf.org/html/rfc5234 |
|
Audit: 2020 |
|
*/ |
|
|
|
/** @type LanguageFn */ |
|
function abnf(hljs) { |
|
const regexes = { |
|
ruleDeclaration: /^[a-zA-Z][a-zA-Z0-9-]*/, |
|
unexpectedChars: /[!@#$^&',?+~`|:]/ |
|
}; |
|
|
|
const keywords = [ |
|
"ALPHA", |
|
"BIT", |
|
"CHAR", |
|
"CR", |
|
"CRLF", |
|
"CTL", |
|
"DIGIT", |
|
"DQUOTE", |
|
"HEXDIG", |
|
"HTAB", |
|
"LF", |
|
"LWSP", |
|
"OCTET", |
|
"SP", |
|
"VCHAR", |
|
"WSP" |
|
]; |
|
|
|
const commentMode = hljs.COMMENT(/;/, /$/); |
|
|
|
const terminalBinaryMode = { |
|
className: "symbol", |
|
begin: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/ |
|
}; |
|
|
|
const terminalDecimalMode = { |
|
className: "symbol", |
|
begin: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/ |
|
}; |
|
|
|
const terminalHexadecimalMode = { |
|
className: "symbol", |
|
begin: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/ |
|
}; |
|
|
|
const caseSensitivityIndicatorMode = { |
|
className: "symbol", |
|
begin: /%[si]/ |
|
}; |
|
|
|
const ruleDeclarationMode = { |
|
className: "attribute", |
|
begin: concat(regexes.ruleDeclaration, /(?=\s*=)/) |
|
}; |
|
|
|
return { |
|
name: 'Augmented Backus-Naur Form', |
|
illegal: regexes.unexpectedChars, |
|
keywords: keywords, |
|
contains: [ |
|
ruleDeclarationMode, |
|
commentMode, |
|
terminalBinaryMode, |
|
terminalDecimalMode, |
|
terminalHexadecimalMode, |
|
caseSensitivityIndicatorMode, |
|
hljs.QUOTE_STRING_MODE, |
|
hljs.NUMBER_MODE |
|
] |
|
}; |
|
} |
|
|
|
module.exports = abnf;
|
|
|