abnf.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. Language: Augmented Backus-Naur Form
  3. Author: Alex McKibben <[email protected]>
  4. */
  5. function(hljs) {
  6. var regexes = {
  7. ruleDeclaration: "^[a-zA-Z][a-zA-Z0-9-]*",
  8. unexpectedChars: "[!@#$^&',?+~`|:]"
  9. };
  10. var keywords = [
  11. "ALPHA",
  12. "BIT",
  13. "CHAR",
  14. "CR",
  15. "CRLF",
  16. "CTL",
  17. "DIGIT",
  18. "DQUOTE",
  19. "HEXDIG",
  20. "HTAB",
  21. "LF",
  22. "LWSP",
  23. "OCTET",
  24. "SP",
  25. "VCHAR",
  26. "WSP"
  27. ];
  28. var commentMode = hljs.COMMENT(";", "$");
  29. var terminalBinaryMode = {
  30. className: "symbol",
  31. begin: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/
  32. };
  33. var terminalDecimalMode = {
  34. className: "symbol",
  35. begin: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/
  36. };
  37. var terminalHexadecimalMode = {
  38. className: "symbol",
  39. begin: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/,
  40. };
  41. var caseSensitivityIndicatorMode = {
  42. className: "symbol",
  43. begin: /%[si]/
  44. };
  45. var ruleDeclarationMode = {
  46. begin: regexes.ruleDeclaration + '\\s*=',
  47. returnBegin: true,
  48. end: /=/,
  49. relevance: 0,
  50. contains: [{className: "attribute", begin: regexes.ruleDeclaration}]
  51. };
  52. return {
  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. }