Skip to content

Commit

Permalink
Better Nesting in JSX attributes
Browse files Browse the repository at this point in the history
Credit @jquense
  • Loading branch information
vkbansal committed Dec 29, 2015
1 parent d9b351f commit 971dda7
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions components/prism-jsx.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,23 @@
var javascript = Prism.util.clone(Prism.languages.javascript);

Prism.languages.jsx = Prism.languages.extend('markup', javascript);
Prism.languages.jsx.tag.pattern= /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i;
Prism.languages.jsx.tag.pattern= /<\/?[\w\.:-]+\s*(?:\s+[\w\.:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i;

Prism.languages.jsx.tag.inside['attr-value'].pattern = /=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i;

var jsxExpression = Prism.util.clone(Prism.languages.jsx);

delete jsxExpression.punctuation

jsxExpression = Prism.languages.insertBefore('jsx', 'operator', {
'punctuation': /=(?={)|[{}[\];(),.:]/
}, { jsx: jsxExpression });

Prism.languages.insertBefore('inside', 'attr-value',{
'script': {
// Allow for one level of nesting
pattern: /=(\{(?:\{[^}]*\}|[^}])+\})/i,
inside: {
'function' : Prism.languages.javascript.function,
'punctuation': /[={}[\];(),.:]/,
'keyword': Prism.languages.javascript.keyword,
'boolean': Prism.languages.javascript.boolean
},
inside: jsxExpression,
'alias': 'language-javascript'
}
}, Prism.languages.jsx.tag);
Expand Down

0 comments on commit 971dda7

Please sign in to comment.