Fixed HTML highlighting bugs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
diff --git a/components/prism-markup.js b/components/prism-markup.js
index 8fbb95d..c9e9a6f 100644
--- a/components/prism-markup.js
+++ b/components/prism-markup.js
@@ -4,7 +4,7 @@ Prism.languages.markup = {
'doctype': /<!DOCTYPE.+?>/,
'cdata': /<!\[CDATA\[[\w\W]+?]]>/i,
'tag': {
- pattern: /<\/?[\w:-]+\s*[\w\W]*?>/gi,
+ pattern: /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*>/gi,
inside: {
'tag': {
pattern: /^<\/?[\w:-]+/i,
@@ -14,9 +14,9 @@ Prism.languages.markup = {
}
},
'attr-value': {
- pattern: /=(('|")[\w\W]*?(\2)|[^\s>]+)/gi,
+ pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,
inside: {
- 'punctuation': /=/g
+ 'punctuation': /=|>/g
}
},
'punctuation': /\/?>/g,
diff --git a/components/prism-markup.min.js b/components/prism-markup.min.js
index bee2965..157ee42 100644
--- a/components/prism-markup.min.js
+++ b/components/prism-markup.min.js
@@ -1 +1 @@
-Prism.languages.markup={comment:/<!--[\w\W]*?--(>|>)/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]+?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*[\w\W]*?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(('|")[\w\W]*?(\2)|[^\s>]+)/gi,inside:{punctuation:/=/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});
\ No newline at end of file
+Prism.languages.markup={comment:/<!--[\w\W]*?--(>|>)/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]+?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});
\ No newline at end of file
diff --git a/examples.html b/examples.html
index 9094064..4ef0142 100644
--- a/examples.html
+++ b/examples.html
@@ -121,6 +121,9 @@ And i'm not</code></pre>
</body>
</html></code></pre>
+
+ <h2>Invalid HTML</h2>
+ <pre><code><l </ul></code></pre>
</section>
<section class="language-css">
diff --git a/prism.js b/prism.js
index 4e9383f..6dcc241 100644
--- a/prism.js
+++ b/prism.js
@@ -364,7 +364,7 @@ Prism.languages.markup = {
'doctype': /<!DOCTYPE.+?>/,
'cdata': /<!\[CDATA\[[\w\W]+?]]>/i,
'tag': {
- pattern: /<\/?[\w:-]+\s*[\w\W]*?>/gi,
+ pattern: /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*>/gi,
inside: {
'tag': {
pattern: /^<\/?[\w:-]+/i,
@@ -374,9 +374,9 @@ Prism.languages.markup = {
}
},
'attr-value': {
- pattern: /=(('|")[\w\W]*?(\2)|[^\s>]+)/gi,
+ pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,
inside: {
- 'punctuation': /=/g
+ 'punctuation': /=|>/g
}
},
'punctuation': /\/?>/g,