12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /*
- Language: .properties
- Contributors: Valentin Aitken <valentin@nalisbg.com>, Egor Rogov <e.rogov@postgrespro.ru>
- Website: https://en.wikipedia.org/wiki/.properties
- Category: common, config
- */
- function properties(hljs) {
- // whitespaces: space, tab, formfeed
- var WS0 = '[ \\t\\f]*';
- var WS1 = '[ \\t\\f]+';
- // delimiter
- var EQUAL_DELIM = WS0+'[:=]'+WS0;
- var WS_DELIM = WS1;
- var DELIM = '(' + EQUAL_DELIM + '|' + WS_DELIM + ')';
- var KEY_ALPHANUM = '([^\\\\\\W:= \\t\\f\\n]|\\\\.)+';
- var KEY_OTHER = '([^\\\\:= \\t\\f\\n]|\\\\.)+';
- var DELIM_AND_VALUE = {
- // skip DELIM
- end: DELIM,
- relevance: 0,
- starts: {
- // value: everything until end of line (again, taking into account backslashes)
- className: 'string',
- end: /$/,
- relevance: 0,
- contains: [
- { begin: '\\\\\\\\'},
- { begin: '\\\\\\n' }
- ]
- }
- };
- return {
- name: '.properties',
- case_insensitive: true,
- illegal: /\S/,
- contains: [
- hljs.COMMENT('^\\s*[!#]', '$'),
- // key: everything until whitespace or = or : (taking into account backslashes)
- // case of a "normal" key
- {
- returnBegin: true,
- variants: [
- { begin: KEY_ALPHANUM + EQUAL_DELIM, relevance: 1 },
- { begin: KEY_ALPHANUM + WS_DELIM, relevance: 0 }
- ],
- contains: [
- {
- className: 'attr',
- begin: KEY_ALPHANUM,
- endsParent: true,
- relevance: 0
- }
- ],
- starts: DELIM_AND_VALUE
- },
- // case of key containing non-alphanumeric chars => relevance = 0
- {
- begin: KEY_OTHER + DELIM,
- returnBegin: true,
- relevance: 0,
- contains: [
- {
- className: 'meta',
- begin: KEY_OTHER,
- endsParent: true,
- relevance: 0
- }
- ],
- starts: DELIM_AND_VALUE
- },
- // case of an empty key
- {
- className: 'attr',
- relevance: 0,
- begin: KEY_OTHER + WS0 + '$'
- }
- ]
- };
- }
- module.exports = properties;
|