123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- 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'
- },
- {
- pattern: /^(\s*)["']|["']$/,
- lookbehind: true
- }
- ]
- }
- },
- '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;
|