Skip to content
This repository has been archived by the owner on Aug 26, 2022. It is now read-only.

Commit

Permalink
Fix bug 1538693: Update Prism to version 1.16 (#5313)
Browse files Browse the repository at this point in the history
Resolves [bug 1538693](https://bugzilla.mozilla.org/show_bug.cgi?id=1538693).

<!--
# ------------------------ >8 ------------------------
Remove everything below this line from the commit message
-->

<details><summary>
<h2>Kuma affecting changes:</h2>
<table><td>
📝 <strong>Note:</strong> See <a href="https://github.com/PrismJS/prism/releases/tag/v1.16.0">PrismJS/prism@v1.16.0</a> for a full list of changes.
</td></table></summary>

### Updated components

* __C__
	* Improve C language (PrismJS/prism#1697) PrismJS/prism@7eccea5c
* __C-like__
	* Simplify function pattern of C-like language (PrismJS/prism#1552) PrismJS/prism@b520e1b6
* __C/C++/Java__
	* Operator fixes (PrismJS/prism#1528) PrismJS/prism@7af8f8be
* __CSS__
	* Fix tokenizing !important (PrismJS/prism#1585) PrismJS/prism@c1d6cb85
	* Added the comma to the list of CSS punctuation PrismJS/prism@7ea2ff28
	* CSS: Comma punctuation (PrismJS/prism#1632) PrismJS/prism@1b812386
	* Reuse CSS selector pattern in CSS Extras (PrismJS/prism#1637) PrismJS/prism@e2f2fd19
	* Fixed CSS extra variable (PrismJS/prism#1649) PrismJS/prism@9de47d3a
	* Identify CSS units and variables (PrismJS/prism#1450) PrismJS/prism@5fcee966
	* Allow multiline CSS at-rules (PrismJS/prism#1676) PrismJS/prism@4f6f3c7d
	* CSS: Highlight attribute selector (PrismJS/prism#1671) PrismJS/prism@245b59d4
	* CSS: Selectors can contain any string (PrismJS/prism#1638) PrismJS/prism@a2d445d0
	* CSS extras: Highlighting for pseudo class arguments (PrismJS/prism#1650) PrismJS/prism@70a40414
* __Java__
	* Add Java 10 support (PrismJS/prism#1549) PrismJS/prism@8c981a22
	* Added module keywords to Java. (PrismJS/prism#1655) PrismJS/prism@6e250a5f
	* Improve Java (PrismJS/prism#1474) PrismJS/prism@81bd8f0b
* __JavaScript__
	* Fix regex for `catch` and `finally` (PrismJS/prism#1527) PrismJS/prism@ebd1b9a6
	* Highlighting of supposed classes and functions (PrismJS/prism#1482) PrismJS/prism@c40f6047
	* Added support for JS BigInt literals (PrismJS/prism#1542) PrismJS/prism@2b62e57b
	* Fixed lowercase supposed class names (PrismJS/prism#1544) PrismJS/prism@a47c05ad
	* Fixes regex for JS examples (PrismJS/prism#1591) PrismJS/prism@b41fb8f1
	* Improve regex detection in JS (PrismJS/prism#1473) PrismJS/prism@2a4758ab
	* Identify JavaScript function parameters (PrismJS/prism#1446) PrismJS/prism@0cc8c56a
	* Improved JavaScript parameter recognization (PrismJS/prism#1722) PrismJS/prism@57a92035
	* Make `undefined` a keyword in JS (PrismJS/prism#1740) PrismJS/prism@d9fa29a8
	* Fix `function-variable` in JS (PrismJS/prism#1739) PrismJS/prism@bfbea4d6
	* Improved JS constant pattern (PrismJS/prism#1737) PrismJS/prism@7bcec584
	* Improved JS function pattern (PrismJS/prism#1736) PrismJS/prism@8378ac83
	* JS: Fixed variables named "async" (PrismJS/prism#1738) PrismJS/prism@3560c643
	* JS: Keyword fix (PrismJS/prism#1808) PrismJS/prism@f2d8e1c7
* __JSON__ / __JSONP__
	* Fix bugs in JSON language (PrismJS/prism#1479) PrismJS/prism@74fe81c6
	* Adds support for comments in JSON (PrismJS/prism#1595) PrismJS/prism@8720b3e6
	* Cleaned up JSON (PrismJS/prism#1596) PrismJS/prism@da474c77
	* Added `keyword` alias to JSON's `null` (PrismJS/prism#1733) PrismJS/prism@eee06649
	* Fix JSONP support (PrismJS/prism#1745) PrismJS/prism@b5041cf9
	* Fixed JSON/JSONP examples (PrismJS/prism#1765) PrismJS/prism@ae4842db
* __Markup__
	* Decouple XML from Markup (PrismJS/prism#1603) PrismJS/prism@0030a4ef
	* Fix for markup attributes (PrismJS/prism#1752) PrismJS/prism@c3862a24
	* Markup: Added support for CSS and JS inside of CDATAs (PrismJS/prism#1660) PrismJS/prism@57127701
	* Markup `addInline` improvements (PrismJS/prism#1798) PrismJS/prism@af67c32e
* __Rust__
	* Add missing keywords (PrismJS/prism#1634) PrismJS/prism@3590edde

### Updated plugins

* Better class name detection for plugins (PrismJS/prism#1772) PrismJS/prism@c9762c6f
* __Line Numbers__
	* Added inheritance for the `line-numbers` class (PrismJS/prism#1799) PrismJS/prism@14be7489

### Other changes

* __Core__
	* `insertBefore` now correctly updates references (PrismJS/prism#1531) PrismJS/prism@9dfec340
	* Invoke `callback` after `after-highlight` hook (PrismJS/prism#1588) PrismJS/prism@bfbe4464
	* Improve `Prism.util.type` performance (PrismJS/prism#1545) PrismJS/prism@2864fe24
	* Remove unused `insertBefore` overload (PrismJS/prism#1631) PrismJS/prism@39686e12
	* Ignore duplicates in insertBefore (PrismJS/prism#1628) PrismJS/prism@d33d259c
	* Remove the Prism.tokenize language parameter (PrismJS/prism#1654) PrismJS/prism@fbf0b094
	* Call `insert-before` hook properly (PrismJS/prism#1709) PrismJS/prism@393ab164
	* Improved languages.DFS and util.clone (PrismJS/prism#1506) PrismJS/prism@152a68ef
	* Core: Avoid redeclaring variables in util.clone (PrismJS/prism#1778) PrismJS/prism@b06f532f
	* Made prism-core a little more editor friendly (PrismJS/prism#1776) PrismJS/prism@bac09f0a
	* Applied Array.isArray (PrismJS/prism#1804) PrismJS/prism@11d0f75e

</details>

---

review?(@jwhitlock)
  • Loading branch information
ExE-Boss authored and Schalk Neethling committed Mar 27, 2019
1 parent bc11177 commit 7e31be1
Show file tree
Hide file tree
Showing 13 changed files with 333 additions and 186 deletions.
3 changes: 2 additions & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"dependencies": {
"html5shiv": "3.6.2",
"jquery": "2.2.0",
"prism": "1.15.0",
"prism": "1.16.0",
"selectivizr": "https://github.com/keithclark/selectivizr.git#1.0.2"
},
"install": {
Expand All @@ -20,6 +20,7 @@
"bower_components/prism/components/prism-clike.js",
"bower_components/prism/components/prism-javascript.js",
"bower_components/prism/components/prism-json.js",
"bower_components/prism/components/prism-jsonp.js",
"bower_components/prism/components/prism-css-extras.js",
"bower_components/prism/components/prism-rust.js",
"bower_components/prism/plugins/line-highlight/prism-line-highlight.js",
Expand Down
1 change: 1 addition & 0 deletions kuma/settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -1051,6 +1051,7 @@ def pipeline_one_scss(slug, **kwargs):
"js/libs/prism/prism-clike.js",
"js/libs/prism/prism-javascript.js",
"js/libs/prism/prism-json.js",
"js/libs/prism/prism-jsonp.js",
"js/libs/prism/prism-css-extras.js",
"js/libs/prism/prism-rust.js",
"js/libs/prism/prism-line-highlight.js",
Expand Down
2 changes: 1 addition & 1 deletion kuma/static/js/libs/prism/prism-clike.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Prism.languages.clike = {
},
'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
'boolean': /\b(?:true|false)\b/,
'function': /[a-z0-9_]+(?=\()/i,
'function': /\w+(?=\()/,
'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,
'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
'punctuation': /[{}[\];(),.:]/
Expand Down
162 changes: 79 additions & 83 deletions kuma/static/js/libs/prism/prism-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,28 @@ var _self = (typeof window !== 'undefined')
* @author Lea Verou http://lea.verou.me
*/

var Prism = (function(){
var Prism = (function (_self){

// Private helper vars
var lang = /\blang(?:uage)?-([\w-]+)\b/i;
var uniqueId = 0;

var _ = _self.Prism = {
var _ = {
manual: _self.Prism && _self.Prism.manual,
disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
util: {
encode: function (tokens) {
if (tokens instanceof Token) {
return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
} else if (_.util.type(tokens) === 'Array') {
} else if (Array.isArray(tokens)) {
return tokens.map(_.util.encode);
} else {
return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
}
},

type: function (o) {
return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
return Object.prototype.toString.call(o).slice(8, -1);
},

objId: function (obj) {
Expand All @@ -44,41 +44,44 @@ var _ = _self.Prism = {
},

// Deep clone a language definition (e.g. to extend it)
clone: function (o, visited) {
var type = _.util.type(o);
clone: function deepClone(o, visited) {
var clone, id, type = _.util.type(o);
visited = visited || {};

switch (type) {
case 'Object':
if (visited[_.util.objId(o)]) {
return visited[_.util.objId(o)];
id = _.util.objId(o);
if (visited[id]) {
return visited[id];
}
var clone = {};
visited[_.util.objId(o)] = clone;
clone = {};
visited[id] = clone;

for (var key in o) {
if (o.hasOwnProperty(key)) {
clone[key] = _.util.clone(o[key], visited);
clone[key] = deepClone(o[key], visited);
}
}

return clone;

case 'Array':
if (visited[_.util.objId(o)]) {
return visited[_.util.objId(o)];
id = _.util.objId(o);
if (visited[id]) {
return visited[id];
}
var clone = [];
visited[_.util.objId(o)] = clone;
clone = [];
visited[id] = clone;

o.forEach(function (v, i) {
clone[i] = _.util.clone(v, visited);
clone[i] = deepClone(v, visited);
});

return clone;
}

return o;
default:
return o;
}
}
},

Expand All @@ -96,72 +99,68 @@ var _ = _self.Prism = {
/**
* Insert a token before another token in a language literal
* As this needs to recreate the object (we cannot actually insert before keys in object literals),
* we cannot just provide an object, we need anobject and a key.
* we cannot just provide an object, we need an object and a key.
* @param inside The key (or language id) of the parent
* @param before The key to insert before. If not provided, the function appends instead.
* @param before The key to insert before.
* @param insert Object with the key/value pairs to insert
* @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
*/
insertBefore: function (inside, before, insert, root) {
root = root || _.languages;
var grammar = root[inside];

if (arguments.length == 2) {
insert = arguments[1];

for (var newToken in insert) {
if (insert.hasOwnProperty(newToken)) {
grammar[newToken] = insert[newToken];
}
}

return grammar;
}

var ret = {};

for (var token in grammar) {

if (grammar.hasOwnProperty(token)) {

if (token == before) {

for (var newToken in insert) {

if (insert.hasOwnProperty(newToken)) {
ret[newToken] = insert[newToken];
}
}
}

ret[token] = grammar[token];
// Do not insert token which also occur in insert. See #1525
if (!insert.hasOwnProperty(token)) {
ret[token] = grammar[token];
}
}
}

var old = root[inside];
root[inside] = ret;

// Update references in other language definitions
_.languages.DFS(_.languages, function(key, value) {
if (value === root[inside] && key != inside) {
if (value === old && key != inside) {
this[key] = ret;
}
});

return root[inside] = ret;
return ret;
},

// Traverse a language definition with Depth First Search
DFS: function(o, callback, type, visited) {
DFS: function DFS(o, callback, type, visited) {
visited = visited || {};

var objId = _.util.objId;

for (var i in o) {
if (o.hasOwnProperty(i)) {
callback.call(o, i, o[i], type || i);

if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
visited[_.util.objId(o[i])] = true;
_.languages.DFS(o[i], callback, null, visited);
var property = o[i],
propertyType = _.util.type(property);

if (propertyType === 'Object' && !visited[objId(property)]) {
visited[objId(property)] = true;
DFS(property, callback, null, visited);
}
else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
visited[_.util.objId(o[i])] = true;
_.languages.DFS(o[i], callback, i, visited);
else if (propertyType === 'Array' && !visited[objId(property)]) {
visited[objId(property)] = true;
DFS(property, callback, i, visited);
}
}
}
Expand Down Expand Up @@ -222,33 +221,37 @@ var _ = _self.Prism = {
code: code
};

var insertHighlightedCode = function (highlightedCode) {
env.highlightedCode = highlightedCode;

_.hooks.run('before-insert', env);

env.element.innerHTML = env.highlightedCode;

_.hooks.run('after-highlight', env);
_.hooks.run('complete', env);
callback && callback.call(env.element);
}

_.hooks.run('before-sanity-check', env);

if (!env.code || !env.grammar) {
if (env.code) {
_.hooks.run('before-highlight', env);
env.element.textContent = env.code;
_.hooks.run('after-highlight', env);
}
if (!env.code) {
_.hooks.run('complete', env);
return;
}

_.hooks.run('before-highlight', env);

if (!env.grammar) {
insertHighlightedCode(_.util.encode(env.code));
return;
}

if (async && _self.Worker) {
var worker = new Worker(_.filename);

worker.onmessage = function(evt) {
env.highlightedCode = evt.data;

_.hooks.run('before-insert', env);

env.element.innerHTML = env.highlightedCode;

callback && callback.call(env.element);
_.hooks.run('after-highlight', env);
_.hooks.run('complete', env);
insertHighlightedCode(evt.data);
};

worker.postMessage(JSON.stringify({
Expand All @@ -258,16 +261,7 @@ var _ = _self.Prism = {
}));
}
else {
env.highlightedCode = _.highlight(env.code, env.grammar, env.language);

_.hooks.run('before-insert', env);

env.element.innerHTML = env.highlightedCode;

callback && callback.call(element);

_.hooks.run('after-highlight', env);
_.hooks.run('complete', env);
insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
}
},

Expand All @@ -284,8 +278,6 @@ var _ = _self.Prism = {
},

matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) {
var Token = _.Token;

for (var token in grammar) {
if(!grammar.hasOwnProperty(token) || !grammar[token]) {
continue;
Expand Down Expand Up @@ -411,7 +403,7 @@ var _ = _self.Prism = {
}
},

tokenize: function(text, grammar, language) {
tokenize: function(text, grammar) {
var strarr = [text];

var rest = grammar.rest;
Expand Down Expand Up @@ -451,24 +443,28 @@ var _ = _self.Prism = {
callback(env);
}
}
}
},

Token: Token
};

var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
_self.Prism = _;

function Token(type, content, alias, matchedStr, greedy) {
this.type = type;
this.content = content;
this.alias = alias;
// Copy of the full string this token was created from
this.length = (matchedStr || "").length|0;
this.greedy = !!greedy;
};
}

Token.stringify = function(o, language, parent) {
if (typeof o == 'string') {
return o;
}

if (_.util.type(o) === 'Array') {
if (Array.isArray(o)) {
return o.map(function(element) {
return Token.stringify(element, language, o);
}).join('');
Expand All @@ -485,7 +481,7 @@ Token.stringify = function(o, language, parent) {
};

if (o.alias) {
var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
var aliases = Array.isArray(o.alias) ? o.alias : [o.alias];
Array.prototype.push.apply(env.classes, aliases);
}

Expand All @@ -502,7 +498,7 @@ Token.stringify = function(o, language, parent) {
if (!_self.document) {
if (!_self.addEventListener) {
// in Node.js
return _self.Prism;
return _;
}

if (!_.disableWorkerMessageHandler) {
Expand All @@ -520,7 +516,7 @@ if (!_self.document) {
}, false);
}

return _self.Prism;
return _;
}

//Get current script and highlight
Expand All @@ -543,9 +539,9 @@ if (script) {
}
}

return _self.Prism;
return _;

})();
})(_self);

if (typeof module !== 'undefined' && module.exports) {
module.exports = Prism;
Expand Down
Loading

0 comments on commit 7e31be1

Please sign in to comment.