Skip to content

Commit

Permalink
Fix for markup attributes (#1752)
Browse files Browse the repository at this point in the history
This fixes some issues related to markup (XML/HTML) attributes. See the PR for more detail.
  • Loading branch information
RunDevelopment committed Feb 28, 2019
1 parent 5fd7577 commit c3862a2
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 18 deletions.
6 changes: 3 additions & 3 deletions components/prism-markup.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Prism.languages.markup = {
'doctype': /<!DOCTYPE[\s\S]+?>/i,
'cdata': /<!\[CDATA\[[\s\S]*?]]>/i,
'tag': {
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
greedy: true,
inside: {
'tag': {
Expand All @@ -15,12 +15,12 @@ Prism.languages.markup = {
}
},
'attr-value': {
pattern: /=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,
pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
inside: {
'punctuation': [
/^=/,
{
pattern: /(^|[^\\])["']/,
pattern: /^(\s*)["']|["']$/,
lookbehind: true
}
]
Expand Down
2 changes: 1 addition & 1 deletion components/prism-markup.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions prism.js
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ Prism.languages.markup = {
'doctype': /<!DOCTYPE[\s\S]+?>/i,
'cdata': /<!\[CDATA\[[\s\S]*?]]>/i,
'tag': {
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
greedy: true,
inside: {
'tag': {
Expand All @@ -568,12 +568,12 @@ Prism.languages.markup = {
}
},
'attr-value': {
pattern: /=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,
pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
inside: {
'punctuation': [
/^=/,
{
pattern: /(^|[^\\])["']/,
pattern: /^(\s*)["']|["']$/,
lookbehind: true
}
]
Expand Down
46 changes: 35 additions & 11 deletions tests/languages/markup/tag_attribute_feature.test
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
bar
baz">
<div foo:bar=42>
<div foo="=\"=">
<div foo = 42 bar = "42">
<div foo="=\"bar=baz/>

----------------------------------------------------

Expand Down Expand Up @@ -61,12 +62,12 @@ baz">
["attr-name", [
"class"
]],
["attr-value", [
["punctuation", "="],
["punctuation", "\""],
"foo\r\nbar\r\nbaz",
["punctuation", "\""]
]],
["attr-value", [
["punctuation", "="],
["punctuation", "\""],
"foo\r\nbar\r\nbaz",
["punctuation", "\""]
]],
["punctuation", ">"]
]],

Expand All @@ -91,20 +92,43 @@ baz">
["punctuation", "<"],
"div"
]],
["attr-name", [
"foo"
["attr-name", ["foo"]],
["attr-value", [
["punctuation", "="],
" 42"
]],
["attr-name", ["bar"]],
["attr-value", [
["punctuation", "="],
["punctuation", "\""],
"=\\\"=",
"42",
["punctuation", "\""]
]],
["punctuation", ">"]
]],

["tag", [
["tag", [
["punctuation", "<"],
"div"
]],
["attr-name", ["foo"]],
["attr-value", [
["punctuation", "="],
["punctuation", "\""],
"=\\",
["punctuation", "\""]
]],
["attr-name", ["bar"]],
["attr-value", [
["punctuation", "="],
"baz/"
]],
["punctuation", ">"]
]]
]

----------------------------------------------------

Checks for single-quoted, double-quoted and unquoted attributes, attributes without value and
namespaced attributes.
namespaced attributes.

0 comments on commit c3862a2

Please sign in to comment.