| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | /*Language: JSONDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.Author: Ivan Sagalaev <maniac@softwaremaniacs.org>Website: http://www.json.orgCategory: common, protocols*/function json(hljs) {  const LITERALS = {    literal: 'true false null'  };  const ALLOWED_COMMENTS = [    hljs.C_LINE_COMMENT_MODE,    hljs.C_BLOCK_COMMENT_MODE  ];  const TYPES = [    hljs.QUOTE_STRING_MODE,    hljs.C_NUMBER_MODE  ];  const VALUE_CONTAINER = {    end: ',',    endsWithParent: true,    excludeEnd: true,    contains: TYPES,    keywords: LITERALS  };  const OBJECT = {    begin: /\{/,    end: /\}/,    contains: [      {        className: 'attr',        begin: /"/,        end: /"/,        contains: [hljs.BACKSLASH_ESCAPE],        illegal: '\\n'      },      hljs.inherit(VALUE_CONTAINER, {        begin: /:/      })    ].concat(ALLOWED_COMMENTS),    illegal: '\\S'  };  const ARRAY = {    begin: '\\[',    end: '\\]',    contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents    illegal: '\\S'  };  TYPES.push(OBJECT, ARRAY);  ALLOWED_COMMENTS.forEach(function(rule) {    TYPES.push(rule);  });  return {    name: 'JSON',    contains: TYPES,    keywords: LITERALS,    illegal: '\\S'  };}module.exports = json;
 |