1 | Prism.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 |
|
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
|
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 |
|
80 | Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
|
81 | Prism.languages.markup['entity'];
|
82 | Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
|
83 |
|
84 |
|
85 | Prism.hooks.add('wrap', function (env) {
|
86 |
|
87 | if (env.type === 'entity') {
|
88 | env.attributes['title'] = env.content.replace(/&/, '&');
|
89 | }
|
90 | });
|
91 |
|
92 | Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
|
93 | |
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
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 | });
|
135 | Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
|
136 | |
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 |
|
144 |
|
145 |
|
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 |
|
179 | Prism.languages.html = Prism.languages.markup;
|
180 | Prism.languages.mathml = Prism.languages.markup;
|
181 | Prism.languages.svg = Prism.languages.markup;
|
182 |
|
183 | Prism.languages.xml = Prism.languages.extend('markup', {});
|
184 | Prism.languages.ssml = Prism.languages.xml;
|
185 | Prism.languages.atom = Prism.languages.xml;
|
186 | Prism.languages.rss = Prism.languages.xml;
|