38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
|
(function(Prism) {
|
||
|
|
||
|
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.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+|(?:\{\{?[^}]*\}?\})))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?>/i;
|
||
|
|
||
|
Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i;
|
||
|
|
||
|
Prism.languages.insertBefore('inside', 'attr-name', {
|
||
|
'spread': {
|
||
|
pattern: /\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/,
|
||
|
inside: {
|
||
|
'punctuation': /\.{3}|[{}.]/,
|
||
|
'attr-value': /\w+/
|
||
|
}
|
||
|
}
|
||
|
}, Prism.languages.jsx.tag);
|
||
|
|
||
|
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: jsxExpression,
|
||
|
'alias': 'language-javascript'
|
||
|
}
|
||
|
}, Prism.languages.jsx.tag);
|
||
|
|
||
|
}(Prism));
|