| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | module.exports = function(hljs) {  // whitespaces: space, tab, formfeed  var WS0 = '[ \\t\\f]*';  var WS1 = '[ \\t\\f]+';  // delimiter  var DELIM = '(' + WS0+'[:=]'+WS0+ '|' + WS1 + ')';  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: '\\\\\\n' }            ]          }        };  return {    case_insensitive: true,    illegal: /\S/,    contains: [      hljs.COMMENT('^\\s*[!#]', '$'),      // key: everything until whitespace or = or : (taking into account backslashes)      // case of a "normal" key      {        begin: KEY_ALPHANUM + DELIM,        returnBegin: true,        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 + '$'      }    ]  };};
 |