abnf.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. Language: Augmented Backus-Naur Form
  3. Author: Alex McKibben <alex@nullscope.net>
  4. Website: https://tools.ietf.org/html/rfc5234
  5. */
  6. /** @type LanguageFn */
  7. function abnf(hljs) {
  8. var regexes = {
  9. ruleDeclaration: "^[a-zA-Z][a-zA-Z0-9-]*",
  10. unexpectedChars: "[!@#$^&',?+~`|:]"
  11. };
  12. var keywords = [
  13. "ALPHA",
  14. "BIT",
  15. "CHAR",
  16. "CR",
  17. "CRLF",
  18. "CTL",
  19. "DIGIT",
  20. "DQUOTE",
  21. "HEXDIG",
  22. "HTAB",
  23. "LF",
  24. "LWSP",
  25. "OCTET",
  26. "SP",
  27. "VCHAR",
  28. "WSP"
  29. ];
  30. var commentMode = hljs.COMMENT(";", "$");
  31. var terminalBinaryMode = {
  32. className: "symbol",
  33. begin: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/
  34. };
  35. var terminalDecimalMode = {
  36. className: "symbol",
  37. begin: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/
  38. };
  39. var terminalHexadecimalMode = {
  40. className: "symbol",
  41. begin: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/,
  42. };
  43. var caseSensitivityIndicatorMode = {
  44. className: "symbol",
  45. begin: /%[si]/
  46. };
  47. var ruleDeclarationMode = {
  48. className: "attribute",
  49. begin: regexes.ruleDeclaration + '(?=\\s*=)',
  50. };
  51. return {
  52. name: 'Augmented Backus-Naur Form',
  53. illegal: regexes.unexpectedChars,
  54. keywords: keywords.join(" "),
  55. contains: [
  56. ruleDeclarationMode,
  57. commentMode,
  58. terminalBinaryMode,
  59. terminalDecimalMode,
  60. terminalHexadecimalMode,
  61. caseSensitivityIndicatorMode,
  62. hljs.QUOTE_STRING_MODE,
  63. hljs.NUMBER_MODE
  64. ]
  65. };
  66. }
  67. module.exports = abnf;