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 | ]
|
56 | }
|
57 | },
|
58 | 'punctuation': /\/?>/,
|
59 | 'attr-name': {
|
60 | pattern: /[^\s>\/]+/,
|
61 | inside: {
|
62 | 'namespace': /^[^\s>\/:]+:/
|
63 | }
|
64 | }
|
65 |
|
66 | }
|
67 | },
|
68 | 'entity': [
|
69 | {
|
70 | pattern: /&[\da-z]{1,8};/i,
|
71 | alias: 'named-entity'
|
72 | },
|
73 | /&#x?[\da-f]{1,8};/i
|
74 | ]
|
75 | };
|
76 |
|
77 | Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
|
78 | Prism.languages.markup['entity'];
|
79 | Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
|
80 |
|
81 |
|
82 | Prism.hooks.add('wrap', function (env) {
|
83 |
|
84 | if (env.type === 'entity') {
|
85 | env.attributes['title'] = env.content.replace(/&/, '&');
|
86 | }
|
87 | });
|
88 |
|
89 | Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
|
90 | |
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 | value: function addInlined(tagName, lang) {
|
102 | var includedCdataInside = {};
|
103 | includedCdataInside['language-' + lang] = {
|
104 | pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
|
105 | lookbehind: true,
|
106 | inside: Prism.languages[lang]
|
107 | };
|
108 | includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
|
109 |
|
110 | var inside = {
|
111 | 'included-cdata': {
|
112 | pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
|
113 | inside: includedCdataInside
|
114 | }
|
115 | };
|
116 | inside['language-' + lang] = {
|
117 | pattern: /[\s\S]+/,
|
118 | inside: Prism.languages[lang]
|
119 | };
|
120 |
|
121 | var def = {};
|
122 | def[tagName] = {
|
123 | pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),
|
124 | lookbehind: true,
|
125 | greedy: true,
|
126 | inside: inside
|
127 | };
|
128 |
|
129 | Prism.languages.insertBefore('markup', 'cdata', def);
|
130 | }
|
131 | });
|
132 | Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
|
133 | |
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 |
|
144 | value: function (attrName, lang) {
|
145 | Prism.languages.markup.tag.inside['special-attr'].push({
|
146 | pattern: RegExp(
|
147 | /(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
|
148 | 'i'
|
149 | ),
|
150 | lookbehind: true,
|
151 | inside: {
|
152 | 'attr-name': /^[^\s=]+/,
|
153 | 'attr-value': {
|
154 | pattern: /=[\s\S]+/,
|
155 | inside: {
|
156 | 'value': {
|
157 | pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
|
158 | lookbehind: true,
|
159 | alias: [lang, 'language-' + lang],
|
160 | inside: Prism.languages[lang]
|
161 | },
|
162 | 'punctuation': [
|
163 | {
|
164 | pattern: /^=/,
|
165 | alias: 'attr-equals'
|
166 | },
|
167 | /"|'/
|
168 | ]
|
169 | }
|
170 | }
|
171 | }
|
172 | });
|
173 | }
|
174 | });
|
175 |
|
176 | Prism.languages.html = Prism.languages.markup;
|
177 | Prism.languages.mathml = Prism.languages.markup;
|
178 | Prism.languages.svg = Prism.languages.markup;
|
179 |
|
180 | Prism.languages.xml = Prism.languages.extend('markup', {});
|
181 | Prism.languages.ssml = Prism.languages.xml;
|
182 | Prism.languages.atom = Prism.languages.xml;
|
183 | Prism.languages.rss = Prism.languages.xml;
|