From a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 30 Dec 2021 19:47:21 +0100 Subject: chore: add prismjs for syntax highlighting --- public/prism/prism-yaml.js | 121 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 public/prism/prism-yaml.js (limited to 'public/prism/prism-yaml.js') diff --git a/public/prism/prism-yaml.js b/public/prism/prism-yaml.js new file mode 100644 index 0000000..2a1687a --- /dev/null +++ b/public/prism/prism-yaml.js @@ -0,0 +1,121 @@ +(function (Prism) { + // https://yaml.org/spec/1.2/spec.html#c-ns-anchor-property + // https://yaml.org/spec/1.2/spec.html#c-ns-alias-node + var anchorOrAlias = /[*&][^\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]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace( + //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<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source + .replace(/<>/g, function () { + return properties; + }) + .replace(/<>/g, function () { + return value; + }); + return RegExp(pattern, flags); + } + + Prism.languages.yaml = { + scalar: { + pattern: RegExp( + /([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace( + /<>/g, + function () { + return properties; + } + ) + ), + lookbehind: true, + alias: 'string', + }, + comment: /#.*/, + key: { + pattern: RegExp( + /((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source + .replace(/<>/g, function () { + return properties; + }) + .replace(/<>/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); -- cgit v1.2.3