'use strict' module.exports = yaml yaml.displayName = 'yaml' yaml.aliases = ['yml'] function yaml(Prism) { ;(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) }