Skip to content

Commit

Permalink
Core: Minor improvements (#1973)
Browse files Browse the repository at this point in the history
This makes some minor improvements to Prism Core like refactoring and style clean up.
  • Loading branch information
RunDevelopment committed Aug 31, 2019
1 parent 174ed10 commit 2d858e0
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 47 deletions.
55 changes: 32 additions & 23 deletions components/prism-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,25 @@ var Prism = (function (_self){
var lang = /\blang(?:uage)?-([\w-]+)\b/i;
var uniqueId = 0;

/**
* Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
*
* If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
*
* @param {Element} element
* @returns {string}
*/
function getLanguage(element) {
while (element && !lang.test(element.className)) {
element = element.parentNode;
}
if (element) {
return (element.className.match(lang) || [, 'none'])[1].toLowerCase();
}
return 'none';
}


var _ = {
manual: _self.Prism && _self.Prism.manual,
disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
Expand Down Expand Up @@ -189,27 +208,16 @@ var _ = {

highlightElement: function(element, async, callback) {
// Find language
var language = 'none', grammar, parent = element;

while (parent && !lang.test(parent.className)) {
parent = parent.parentNode;
}

if (parent) {
language = (parent.className.match(lang) || [,'none'])[1].toLowerCase();
grammar = _.languages[language];
}
var language = getLanguage(element);
var grammar = _.languages[language];

// Set language on the element, if not present
element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;

if (element.parentNode) {
// Set language on the parent, for styling
parent = element.parentNode;

if (/pre/i.test(parent.nodeName)) {
parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
}
// Set language on the parent, for styling
var parent = element.parentNode;
if (parent && parent.nodeName.toLowerCase() === 'pre') {
parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
}

var code = element.textContent;
Expand All @@ -221,7 +229,7 @@ var _ = {
code: code
};

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

_.hooks.run('before-insert', env);
Expand All @@ -237,6 +245,7 @@ var _ = {

if (!env.code) {
_.hooks.run('complete', env);
callback && callback.call(env.element);
return;
}

Expand Down Expand Up @@ -300,8 +309,8 @@ var _ = {

if (greedy && !pattern.pattern.global) {
// Without the global flag, lastIndex won't work
var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];
pattern.pattern = RegExp(pattern.pattern.source, flags + 'g');
}

pattern = pattern.pattern || pattern;
Expand Down Expand Up @@ -455,7 +464,7 @@ function Token(type, content, alias, matchedStr, greedy) {
this.content = content;
this.alias = alias;
// Copy of the full string this token was created from
this.length = (matchedStr || "").length|0;
this.length = (matchedStr || '').length|0;
this.greedy = !!greedy;
}

Expand Down Expand Up @@ -518,13 +527,13 @@ if (!_self.document) {
}

//Get current script and highlight
var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
var script = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop();

if (script) {
_.filename = script.src;

if (!_.manual && !script.hasAttribute('data-manual')) {
if(document.readyState !== "loading") {
if(document.readyState !== 'loading') {
if (window.requestAnimationFrame) {
window.requestAnimationFrame(_.highlightAll);
} else {
Expand Down
2 changes: 1 addition & 1 deletion components/prism-core.min.js

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

55 changes: 32 additions & 23 deletions prism.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,25 @@ var Prism = (function (_self){
var lang = /\blang(?:uage)?-([\w-]+)\b/i;
var uniqueId = 0;

/**
* Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
*
* If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
*
* @param {Element} element
* @returns {string}
*/
function getLanguage(element) {
while (element && !lang.test(element.className)) {
element = element.parentNode;
}
if (element) {
return (element.className.match(lang) || [, 'none'])[1].toLowerCase();
}
return 'none';
}


var _ = {
manual: _self.Prism && _self.Prism.manual,
disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
Expand Down Expand Up @@ -194,27 +213,16 @@ var _ = {

highlightElement: function(element, async, callback) {
// Find language
var language = 'none', grammar, parent = element;

while (parent && !lang.test(parent.className)) {
parent = parent.parentNode;
}

if (parent) {
language = (parent.className.match(lang) || [,'none'])[1].toLowerCase();
grammar = _.languages[language];
}
var language = getLanguage(element);
var grammar = _.languages[language];

// Set language on the element, if not present
element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;

if (element.parentNode) {
// Set language on the parent, for styling
parent = element.parentNode;

if (/pre/i.test(parent.nodeName)) {
parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
}
// Set language on the parent, for styling
var parent = element.parentNode;
if (parent && parent.nodeName.toLowerCase() === 'pre') {
parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
}

var code = element.textContent;
Expand All @@ -226,7 +234,7 @@ var _ = {
code: code
};

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

_.hooks.run('before-insert', env);
Expand All @@ -242,6 +250,7 @@ var _ = {

if (!env.code) {
_.hooks.run('complete', env);
callback && callback.call(env.element);
return;
}

Expand Down Expand Up @@ -305,8 +314,8 @@ var _ = {

if (greedy && !pattern.pattern.global) {
// Without the global flag, lastIndex won't work
var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];
pattern.pattern = RegExp(pattern.pattern.source, flags + 'g');
}

pattern = pattern.pattern || pattern;
Expand Down Expand Up @@ -460,7 +469,7 @@ function Token(type, content, alias, matchedStr, greedy) {
this.content = content;
this.alias = alias;
// Copy of the full string this token was created from
this.length = (matchedStr || "").length|0;
this.length = (matchedStr || '').length|0;
this.greedy = !!greedy;
}

Expand Down Expand Up @@ -523,13 +532,13 @@ if (!_self.document) {
}

//Get current script and highlight
var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
var script = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop();

if (script) {
_.filename = script.src;

if (!_.manual && !script.hasAttribute('data-manual')) {
if(document.readyState !== "loading") {
if(document.readyState !== 'loading') {
if (window.requestAnimationFrame) {
window.requestAnimationFrame(_.highlightAll);
} else {
Expand Down

0 comments on commit 2d858e0

Please sign in to comment.