source: node_modules/prismjs/components/prism-markup.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 4.6 KB
Line 
1Prism.languages.markup = {
2 'comment': {
3 pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
4 greedy: true
5 },
6 'prolog': {
7 pattern: /<\?[\s\S]+?\?>/,
8 greedy: true
9 },
10 'doctype': {
11 // https://www.w3.org/TR/xml/#NT-doctypedecl
12 pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
13 greedy: true,
14 inside: {
15 'internal-subset': {
16 pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
17 lookbehind: true,
18 greedy: true,
19 inside: null // see below
20 },
21 'string': {
22 pattern: /"[^"]*"|'[^']*'/,
23 greedy: true
24 },
25 'punctuation': /^<!|>$|[[\]]/,
26 'doctype-tag': /^DOCTYPE/i,
27 'name': /[^\s<>'"]+/
28 }
29 },
30 'cdata': {
31 pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
32 greedy: true
33 },
34 'tag': {
35 pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
36 greedy: true,
37 inside: {
38 'tag': {
39 pattern: /^<\/?[^\s>\/]+/,
40 inside: {
41 'punctuation': /^<\/?/,
42 'namespace': /^[^\s>\/:]+:/
43 }
44 },
45 'special-attr': [],
46 'attr-value': {
47 pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
48 inside: {
49 'punctuation': [
50 {
51 pattern: /^=/,
52 alias: 'attr-equals'
53 },
54 {
55 pattern: /^(\s*)["']|["']$/,
56 lookbehind: true
57 }
58 ]
59 }
60 },
61 'punctuation': /\/?>/,
62 'attr-name': {
63 pattern: /[^\s>\/]+/,
64 inside: {
65 'namespace': /^[^\s>\/:]+:/
66 }
67 }
68
69 }
70 },
71 'entity': [
72 {
73 pattern: /&[\da-z]{1,8};/i,
74 alias: 'named-entity'
75 },
76 /&#x?[\da-f]{1,8};/i
77 ]
78};
79
80Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
81 Prism.languages.markup['entity'];
82Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
83
84// Plugin to make entity title show the real entity, idea by Roman Komarov
85Prism.hooks.add('wrap', function (env) {
86
87 if (env.type === 'entity') {
88 env.attributes['title'] = env.content.replace(/&amp;/, '&');
89 }
90});
91
92Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
93 /**
94 * Adds an inlined language to markup.
95 *
96 * An example of an inlined language is CSS with `<style>` tags.
97 *
98 * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
99 * case insensitive.
100 * @param {string} lang The language key.
101 * @example
102 * addInlined('style', 'css');
103 */
104 value: function addInlined(tagName, lang) {
105 var includedCdataInside = {};
106 includedCdataInside['language-' + lang] = {
107 pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
108 lookbehind: true,
109 inside: Prism.languages[lang]
110 };
111 includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
112
113 var inside = {
114 'included-cdata': {
115 pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
116 inside: includedCdataInside
117 }
118 };
119 inside['language-' + lang] = {
120 pattern: /[\s\S]+/,
121 inside: Prism.languages[lang]
122 };
123
124 var def = {};
125 def[tagName] = {
126 pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),
127 lookbehind: true,
128 greedy: true,
129 inside: inside
130 };
131
132 Prism.languages.insertBefore('markup', 'cdata', def);
133 }
134});
135Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
136 /**
137 * Adds an pattern to highlight languages embedded in HTML attributes.
138 *
139 * An example of an inlined language is CSS with `style` attributes.
140 *
141 * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as
142 * case insensitive.
143 * @param {string} lang The language key.
144 * @example
145 * addAttribute('style', 'css');
146 */
147 value: function (attrName, lang) {
148 Prism.languages.markup.tag.inside['special-attr'].push({
149 pattern: RegExp(
150 /(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
151 'i'
152 ),
153 lookbehind: true,
154 inside: {
155 'attr-name': /^[^\s=]+/,
156 'attr-value': {
157 pattern: /=[\s\S]+/,
158 inside: {
159 'value': {
160 pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
161 lookbehind: true,
162 alias: [lang, 'language-' + lang],
163 inside: Prism.languages[lang]
164 },
165 'punctuation': [
166 {
167 pattern: /^=/,
168 alias: 'attr-equals'
169 },
170 /"|'/
171 ]
172 }
173 }
174 }
175 });
176 }
177});
178
179Prism.languages.html = Prism.languages.markup;
180Prism.languages.mathml = Prism.languages.markup;
181Prism.languages.svg = Prism.languages.markup;
182
183Prism.languages.xml = Prism.languages.extend('markup', {});
184Prism.languages.ssml = Prism.languages.xml;
185Prism.languages.atom = Prism.languages.xml;
186Prism.languages.rss = Prism.languages.xml;
Note: See TracBrowser for help on using the repository browser.