123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /**
- * @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;
|