yaml.js 2.1 KB

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