diff options
Diffstat (limited to 'public/prism/prism-markup.js')
| -rw-r--r-- | public/prism/prism-markup.js | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/public/prism/prism-markup.js b/public/prism/prism-markup.js new file mode 100644 index 0000000..031bbc9 --- /dev/null +++ b/public/prism/prism-markup.js @@ -0,0 +1,196 @@ +Prism.languages.markup = { + comment: { + pattern: /<!--(?:(?!<!--)[\s\S])*?-->/, + greedy: true, + }, + prolog: { + pattern: /<\?[\s\S]+?\?>/, + greedy: true, + }, + doctype: { + // https://www.w3.org/TR/xml/#NT-doctypedecl + pattern: + /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i, + greedy: true, + inside: { + 'internal-subset': { + pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/, + lookbehind: true, + greedy: true, + inside: null, // see below + }, + string: { + pattern: /"[^"]*"|'[^']*'/, + greedy: true, + }, + punctuation: /^<!|>$|[[\]]/, + 'doctype-tag': /^DOCTYPE/i, + name: /[^\s<>'"]+/, + }, + }, + cdata: { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + greedy: true, + }, + tag: { + pattern: + /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, + greedy: true, + inside: { + tag: { + pattern: /^<\/?[^\s>\/]+/, + inside: { + punctuation: /^<\/?/, + namespace: /^[^\s>\/:]+:/, + }, + }, + 'special-attr': [], + 'attr-value': { + pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, + inside: { + punctuation: [ + { + pattern: /^=/, + alias: 'attr-equals', + }, + /"|'/, + ], + }, + }, + punctuation: /\/?>/, + 'attr-name': { + pattern: /[^\s>\/]+/, + inside: { + namespace: /^[^\s>\/:]+:/, + }, + }, + }, + }, + entity: [ + { + pattern: /&[\da-z]{1,8};/i, + alias: 'named-entity', + }, + /&#x?[\da-f]{1,8};/i, + ], +}; + +Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = + Prism.languages.markup['entity']; +Prism.languages.markup['doctype'].inside['internal-subset'].inside = + Prism.languages.markup; + +// Plugin to make entity title show the real entity, idea by Roman Komarov +Prism.hooks.add('wrap', function (env) { + if (env.type === 'entity') { + env.attributes['title'] = env.content.replace(/&/, '&'); + } +}); + +Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { + /** + * Adds an inlined language to markup. + * + * An example of an inlined language is CSS with `<style>` tags. + * + * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addInlined('style', 'css'); + */ + value: function addInlined(tagName, lang) { + var includedCdataInside = {}; + includedCdataInside['language-' + lang] = { + pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i, + lookbehind: true, + inside: Prism.languages[lang], + }; + includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i; + + var inside = { + 'included-cdata': { + pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i, + inside: includedCdataInside, + }, + }; + inside['language-' + lang] = { + pattern: /[\s\S]+/, + inside: Prism.languages[lang], + }; + + var def = {}; + def[tagName] = { + pattern: RegExp( + /(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace( + /__/g, + function () { + return tagName; + } + ), + 'i' + ), + lookbehind: true, + greedy: true, + inside: inside, + }; + + Prism.languages.insertBefore('markup', 'cdata', def); + }, +}); +Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', { + /** + * Adds an pattern to highlight languages embedded in HTML attributes. + * + * An example of an inlined language is CSS with `style` attributes. + * + * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as + * case insensitive. + * @param {string} lang The language key. + * @example + * addAttribute('style', 'css'); + */ + value: function (attrName, lang) { + Prism.languages.markup.tag.inside['special-attr'].push({ + pattern: RegExp( + /(^|["'\s])/.source + + '(?:' + + attrName + + ')' + + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, + 'i' + ), + lookbehind: true, + inside: { + 'attr-name': /^[^\s=]+/, + 'attr-value': { + pattern: /=[\s\S]+/, + inside: { + value: { + pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/, + lookbehind: true, + alias: [lang, 'language-' + lang], + inside: Prism.languages[lang], + }, + punctuation: [ + { + pattern: /^=/, + alias: 'attr-equals', + }, + /"|'/, + ], + }, + }, + }, + }); + }, +}); + +Prism.languages.html = Prism.languages.markup; +Prism.languages.mathml = Prism.languages.markup; +Prism.languages.svg = Prism.languages.markup; + +Prism.languages.xml = Prism.languages.extend('markup', {}); +Prism.languages.ssml = Prism.languages.xml; +Prism.languages.atom = Prism.languages.xml; +Prism.languages.rss = Prism.languages.xml; |
