summaryrefslogtreecommitdiffstats
path: root/public/prism/prism-json5.js
blob: 6f0eab8444e057f87c6ab3de959b5aa5386d54f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(function (Prism) {
  var string = /("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;

  Prism.languages.json5 = Prism.languages.extend('json', {
    property: [
      {
        pattern: RegExp(string.source + '(?=\\s*:)'),
        greedy: true,
      },
      {
        pattern:
          /(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/,
        alias: 'unquoted',
      },
    ],
    string: {
      pattern: string,
      greedy: true,
    },
    number:
      /[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+\b)?/,
  });
})(Prism);
an class="w"> /[*&][^\s[\]{},]+/; // https://yaml.org/spec/1.2/spec.html#c-ns-tag-property var tag = /!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/; // https://yaml.org/spec/1.2/spec.html#c-ns-properties(n,c) var properties = '(?:' + tag.source + '(?:[ \t]+' + anchorOrAlias.source + ')?|' + anchorOrAlias.source + '(?:[ \t]+' + tag.source + ')?)'; // https://yaml.org/spec/1.2/spec.html#ns-plain(n,c) // This is a simplified version that doesn't support "#" and multiline keys // All these long scarry character classes are simplified versions of YAML's characters var plainKey = /(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace( /<PLAIN>/g, function () { return /[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/ .source; } ); var string = /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source; /** * * @param {string} value * @param {string} [flags] * @returns {RegExp} */ function createValuePattern(value, flags) { flags = (flags || '').replace(/m/g, '') + 'm'; // add m flag var pattern = /([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source .replace(/<<prop>>/g, function () { return properties; }) .replace(/<<value>>/g, function () { return value; }); return RegExp(pattern, flags); } Prism.languages.yaml = { scalar: { pattern: RegExp( /([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace( /<<prop>>/g, function () { return properties; } ) ), lookbehind: true, alias: 'string', }, comment: /#.*/, key: { pattern: RegExp( /((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source .replace(/<<prop>>/g, function () { return properties; }) .replace(/<<key>>/g, function () { return '(?:' + plainKey + '|' + string + ')'; }) ), lookbehind: true, greedy: true, alias: 'atrule', }, directive: { pattern: /(^[ \t]*)%.+/m, lookbehind: true, alias: 'important', }, datetime: { pattern: createValuePattern( /\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/ .source ), lookbehind: true, alias: 'number', }, boolean: { pattern: createValuePattern(/false|true/.source, 'i'), lookbehind: true, alias: 'important', }, null: { pattern: createValuePattern(/null|~/.source, 'i'), lookbehind: true, alias: 'important', }, string: { pattern: createValuePattern(string), lookbehind: true, greedy: true, }, number: { pattern: createValuePattern( /[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/ .source, 'i' ), lookbehind: true, }, tag: tag, important: anchorOrAlias, punctuation: /---|[:[\]{}\-,|>?]|\.\.\./, }; Prism.languages.yml = Prism.languages.yaml; })(Prism);