yaml.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. module.exports = function(hljs) {
  2. var LITERALS = 'true false yes no null';
  3. var keyPrefix = '^[ \\-]*';
  4. var keyName = '[a-zA-Z_][\\w\\-]*';
  5. var KEY = {
  6. className: 'attr',
  7. variants: [
  8. { begin: keyPrefix + keyName + ":"},
  9. { begin: keyPrefix + '"' + keyName + '"' + ":"},
  10. { begin: keyPrefix + "'" + keyName + "'" + ":"}
  11. ]
  12. };
  13. var TEMPLATE_VARIABLES = {
  14. className: 'template-variable',
  15. variants: [
  16. { begin: '\{\{', end: '\}\}' }, // jinja templates Ansible
  17. { begin: '%\{', end: '\}' } // Ruby i18n
  18. ]
  19. };
  20. var STRING = {
  21. className: 'string',
  22. relevance: 0,
  23. variants: [
  24. {begin: /'/, end: /'/},
  25. {begin: /"/, end: /"/},
  26. {begin: /\S+/}
  27. ],
  28. contains: [
  29. hljs.BACKSLASH_ESCAPE,
  30. TEMPLATE_VARIABLES
  31. ]
  32. };
  33. return {
  34. case_insensitive: true,
  35. aliases: ['yml', 'YAML', 'yaml'],
  36. contains: [
  37. KEY,
  38. {
  39. className: 'meta',
  40. begin: '^---\s*$',
  41. relevance: 10
  42. },
  43. { // multi line string
  44. className: 'string',
  45. begin: '[\\|>] *$',
  46. returnEnd: true,
  47. contains: STRING.contains,
  48. // very simple termination: next hash key
  49. end: KEY.variants[0].begin
  50. },
  51. { // Ruby/Rails erb
  52. begin: '<%[%=-]?', end: '[%-]?%>',
  53. subLanguage: 'ruby',
  54. excludeBegin: true,
  55. excludeEnd: true,
  56. relevance: 0
  57. },
  58. { // local tags
  59. className: 'type',
  60. begin: '!' + hljs.UNDERSCORE_IDENT_RE,
  61. },
  62. { // data type
  63. className: 'type',
  64. begin: '!!' + hljs.UNDERSCORE_IDENT_RE,
  65. },
  66. { // fragment id &ref
  67. className: 'meta',
  68. begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$',
  69. },
  70. { // fragment reference *ref
  71. className: 'meta',
  72. begin: '\\*' + hljs.UNDERSCORE_IDENT_RE + '$'
  73. },
  74. { // array listing
  75. className: 'bullet',
  76. begin: '^ *-',
  77. relevance: 0
  78. },
  79. hljs.HASH_COMMENT_MODE,
  80. {
  81. beginKeywords: LITERALS,
  82. keywords: {literal: LITERALS}
  83. },
  84. hljs.C_NUMBER_MODE,
  85. STRING
  86. ]
  87. };
  88. };