properties.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. Language: .properties
  3. Contributors: Valentin Aitken <valentin@nalisbg.com>, Egor Rogov <e.rogov@postgrespro.ru>
  4. Website: https://en.wikipedia.org/wiki/.properties
  5. Category: common, config
  6. */
  7. function properties(hljs) {
  8. // whitespaces: space, tab, formfeed
  9. var WS0 = '[ \\t\\f]*';
  10. var WS1 = '[ \\t\\f]+';
  11. // delimiter
  12. var DELIM = '(' + WS0+'[:=]'+WS0+ '|' + WS1 + ')';
  13. var KEY_ALPHANUM = '([^\\\\\\W:= \\t\\f\\n]|\\\\.)+';
  14. var KEY_OTHER = '([^\\\\:= \\t\\f\\n]|\\\\.)+';
  15. var DELIM_AND_VALUE = {
  16. // skip DELIM
  17. end: DELIM,
  18. relevance: 0,
  19. starts: {
  20. // value: everything until end of line (again, taking into account backslashes)
  21. className: 'string',
  22. end: /$/,
  23. relevance: 0,
  24. contains: [
  25. { begin: '\\\\\\n' }
  26. ]
  27. }
  28. };
  29. return {
  30. name: '.properties',
  31. case_insensitive: true,
  32. illegal: /\S/,
  33. contains: [
  34. hljs.COMMENT('^\\s*[!#]', '$'),
  35. // key: everything until whitespace or = or : (taking into account backslashes)
  36. // case of a "normal" key
  37. {
  38. begin: KEY_ALPHANUM + DELIM,
  39. returnBegin: true,
  40. contains: [
  41. {
  42. className: 'attr',
  43. begin: KEY_ALPHANUM,
  44. endsParent: true,
  45. relevance: 0
  46. }
  47. ],
  48. starts: DELIM_AND_VALUE
  49. },
  50. // case of key containing non-alphanumeric chars => relevance = 0
  51. {
  52. begin: KEY_OTHER + DELIM,
  53. returnBegin: true,
  54. relevance: 0,
  55. contains: [
  56. {
  57. className: 'meta',
  58. begin: KEY_OTHER,
  59. endsParent: true,
  60. relevance: 0
  61. }
  62. ],
  63. starts: DELIM_AND_VALUE
  64. },
  65. // case of an empty key
  66. {
  67. className: 'attr',
  68. relevance: 0,
  69. begin: KEY_OTHER + WS0 + '$'
  70. }
  71. ]
  72. };
  73. }
  74. module.exports = properties;