|
1 | 1 | (function (Prism) {
|
2 | 2 |
|
3 | 3 | // Allow only one line break
|
4 |
| - var inner = /\\.|[^\\\n\r_]|(?:\r?\n|\r)(?!\r?\n|\r)/.source; |
| 4 | + var inner = /(?:\\.|[^\\\n\r]|(?:\r?\n|\r)(?!\r?\n|\r))/.source; |
5 | 5 |
|
6 | 6 | /**
|
7 | 7 | * This function is intended for the creation of the bold or italic pattern.
|
|
124 | 124 | // __strong__
|
125 | 125 |
|
126 | 126 | // allow one nested instance of italic text using the same delimiter
|
127 |
| - pattern: createInline(/__(?:<inner>|_(?:<inner>)+_)+__/.source, true), |
| 127 | + pattern: createInline(/__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__/.source, true), |
128 | 128 | lookbehind: true,
|
129 | 129 | greedy: true,
|
130 | 130 | inside: {
|
|
141 | 141 | // _em_
|
142 | 142 |
|
143 | 143 | // allow one nested instance of bold text using the same delimiter
|
144 |
| - pattern: createInline(/_(?:<inner>|__(?:<inner>)+__)+_/.source, true), |
| 144 | + pattern: createInline(/_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_/.source, true), |
145 | 145 | lookbehind: true,
|
146 | 146 | greedy: true,
|
147 | 147 | inside: {
|
|
156 | 156 | 'strike': {
|
157 | 157 | // ~~strike through~~
|
158 | 158 | // ~strike~
|
159 |
| - |
160 |
| - // extra _ is because the inner pattern intentionally doesn't include it because of bold and italic |
161 |
| - pattern: createInline(/(~~?)(?:<inner>|_)+?\2/.source, false), |
| 159 | + pattern: createInline(/(~~?)(?:(?!~)<inner>)+?\2/.source, false), |
162 | 160 | lookbehind: true,
|
163 | 161 | greedy: true,
|
164 | 162 | inside: {
|
|
172 | 170 | },
|
173 | 171 | 'url': {
|
174 | 172 | // [example](http://example.com "Optional title")
|
| 173 | + // [example][id] |
175 | 174 | // [example] [id]
|
176 |
| - pattern: /!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/, |
| 175 | + pattern: createInline(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[(?:(?!\])<inner>)+\])/.source, false), |
| 176 | + lookbehind: true, |
| 177 | + greedy: true, |
177 | 178 | inside: {
|
178 | 179 | 'variable': {
|
179 |
| - pattern: /(!?\[)[^\]]+(?=\]$)/, |
| 180 | + pattern: /(\[)[^\]]+(?=\]$)/, |
180 | 181 | lookbehind: true
|
181 | 182 | },
|
| 183 | + 'content': { |
| 184 | + pattern: /(^!?\[)[^\]]+(?=\])/, |
| 185 | + lookbehind: true, |
| 186 | + inside: {} // see below |
| 187 | + }, |
182 | 188 | 'string': {
|
183 | 189 | pattern: /"(?:\\.|[^"\\])*"(?=\)$)/
|
184 | 190 | }
|
185 | 191 | }
|
186 | 192 | }
|
187 | 193 | });
|
188 | 194 |
|
189 |
| - ['bold', 'italic', 'strike'].forEach(function (token) { |
| 195 | + ['url', 'bold', 'italic', 'strike'].forEach(function (token) { |
190 | 196 | ['url', 'bold', 'italic', 'strike'].forEach(function (inside) {
|
191 | 197 | if (token !== inside) {
|
192 | 198 | Prism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];
|
|
0 commit comments