remove files
This commit is contained in:
parent
53be570c16
commit
04f69115c9
|
@ -1,33 +0,0 @@
|
||||||
class HighlightLines {
|
|
||||||
constructor(rangeStr) {
|
|
||||||
this.highlights = this.convertRangeToHash(rangeStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
convertRangeToHash(rangeStr) {
|
|
||||||
let hash = {};
|
|
||||||
if( !rangeStr ) {
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
let ranges = rangeStr.split(",").map(function(range) {
|
|
||||||
return range.trim();
|
|
||||||
});
|
|
||||||
|
|
||||||
for(let range of ranges) {
|
|
||||||
let startFinish = range.split('-');
|
|
||||||
let start = parseInt(startFinish[0], 10);
|
|
||||||
let end = parseInt(startFinish[1] || start, 10);
|
|
||||||
|
|
||||||
for( let j = start, k = end; j<=k; j++ ) {
|
|
||||||
hash[j] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
isHighlighted(lineNumber) {
|
|
||||||
return !!this.highlights[lineNumber];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = HighlightLines;
|
|
|
@ -1,68 +0,0 @@
|
||||||
const HighlightLines = require("./HighlightLines");
|
|
||||||
|
|
||||||
class HighlightLinesGroup {
|
|
||||||
constructor(str, delimiter) {
|
|
||||||
this.init(str, delimiter);
|
|
||||||
}
|
|
||||||
|
|
||||||
init(str = "", delimiter = " ") {
|
|
||||||
this.str = str;
|
|
||||||
this.delimiter = delimiter;
|
|
||||||
|
|
||||||
let split = str.split(this.delimiter);
|
|
||||||
this.highlights = new HighlightLines(split.length === 1 ? split[0] : "");
|
|
||||||
this.highlightsAdd = new HighlightLines(split.length === 2 ? split[0] : "");
|
|
||||||
this.highlightsRemove = new HighlightLines(split.length === 2 ? split[1] : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
isHighlighted(lineNumber) {
|
|
||||||
return this.highlights.isHighlighted(lineNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
isHighlightedAdd(lineNumber) {
|
|
||||||
return this.highlightsAdd.isHighlighted(lineNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
isHighlightedRemove(lineNumber) {
|
|
||||||
return this.highlightsRemove.isHighlighted(lineNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
hasTagMismatch(line) {
|
|
||||||
let startCount = line.split("<span").length;
|
|
||||||
let endCount = line.split("</span").length;
|
|
||||||
if( startCount !== endCount ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
splitLineMarkup(line, before, after) {
|
|
||||||
|
|
||||||
// skip line highlighting if there is an uneven number of <span> or </span> on the line.
|
|
||||||
// for example, we can’t wrap <span> with <span><span></span>
|
|
||||||
if(this.hasTagMismatch(line)) {
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
return before + line + after;
|
|
||||||
}
|
|
||||||
|
|
||||||
getLineMarkup(lineNumber, line, extraClasses = []) {
|
|
||||||
let extraClassesStr = (extraClasses.length ? " " + extraClasses.join(" ") : "");
|
|
||||||
|
|
||||||
if (this.isHighlighted(lineNumber)) {
|
|
||||||
return this.splitLineMarkup(line, `<mark class="highlight-line highlight-line-active${extraClassesStr}">`, `</mark>`);
|
|
||||||
}
|
|
||||||
if (this.isHighlightedAdd(lineNumber)) {
|
|
||||||
return this.splitLineMarkup(line, `<ins class="highlight-line highlight-line-add${extraClassesStr}">`, `</ins>`);
|
|
||||||
}
|
|
||||||
if (this.isHighlightedRemove(lineNumber)) {
|
|
||||||
return this.splitLineMarkup(line, `<del class="highlight-line highlight-line-remove${extraClassesStr}">`, `</del>`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.splitLineMarkup( line, `<span class="highlight-line${extraClassesStr}">`, `</span>`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = HighlightLinesGroup;
|
|
|
@ -1,42 +0,0 @@
|
||||||
const Prism = require("prismjs");
|
|
||||||
const PrismLoader = require("prismjs/components/index.js");
|
|
||||||
// Avoid "Language does not exist: " console logs
|
|
||||||
PrismLoader.silent = true;
|
|
||||||
|
|
||||||
const PrismAlias = require("./PrismNormalizeAlias");
|
|
||||||
|
|
||||||
module.exports = function(language) {
|
|
||||||
let diffRemovedRawName = language;
|
|
||||||
if(language.startsWith("diff-")) {
|
|
||||||
diffRemovedRawName = language.substr("diff-".length);
|
|
||||||
}
|
|
||||||
// aliasing should ignore diff-
|
|
||||||
let aliasedName = PrismAlias(diffRemovedRawName);
|
|
||||||
|
|
||||||
if(!Prism.languages[ aliasedName ]) {
|
|
||||||
PrismLoader(aliasedName);
|
|
||||||
}
|
|
||||||
if(!Prism.languages[ aliasedName ]) {
|
|
||||||
throw new Error(`"${language}" is not a valid Prism.js language for eleventy-plugin-syntaxhighlight`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!language.startsWith("diff-")) {
|
|
||||||
return Prism.languages[ aliasedName ];
|
|
||||||
}
|
|
||||||
|
|
||||||
// language has diff- prefix
|
|
||||||
let fullLanguageName = `diff-${aliasedName}`;
|
|
||||||
|
|
||||||
if(!Prism.languages.diff) {
|
|
||||||
PrismLoader("diff");
|
|
||||||
// Bundled Plugin
|
|
||||||
require("prismjs/plugins/diff-highlight/prism-diff-highlight");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store into with aliased keys
|
|
||||||
// ts -> diff-typescript
|
|
||||||
// js -> diff-javascript
|
|
||||||
Prism.languages[ fullLanguageName ] = Prism.languages.diff;
|
|
||||||
|
|
||||||
return Prism.languages[ fullLanguageName ];
|
|
||||||
};
|
|
|
@ -1,42 +0,0 @@
|
||||||
const Prism = require("prismjs");
|
|
||||||
|
|
||||||
const HARDCODED_ALIASES = {
|
|
||||||
njk: "jinja2",
|
|
||||||
nunjucks: "jinja2",
|
|
||||||
};
|
|
||||||
|
|
||||||
// This was added to make `ts` resolve to `typescript` correctly.
|
|
||||||
// The Prism loader doesn’t seem to always handle aliasing correctly.
|
|
||||||
module.exports = function(language) {
|
|
||||||
try {
|
|
||||||
// Careful this is not public API stuff:
|
|
||||||
// https://github.com/PrismJS/prism/issues/2146
|
|
||||||
const PrismComponents = require("prismjs/components.json");
|
|
||||||
let langs = PrismComponents.languages;
|
|
||||||
|
|
||||||
// Manual override
|
|
||||||
if(HARDCODED_ALIASES[language]) {
|
|
||||||
language = HARDCODED_ALIASES[language];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(langs[ language ]) {
|
|
||||||
return language;
|
|
||||||
}
|
|
||||||
for(let langName in langs) {
|
|
||||||
if(Array.isArray(langs[langName].alias)) {
|
|
||||||
for(let alias of langs[langName].alias) {
|
|
||||||
if(alias === language) {
|
|
||||||
return langName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(langs[langName].alias === language) {
|
|
||||||
return langName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
// Couldn’t find the components file, aliases may not resolve correctly
|
|
||||||
// See https://github.com/11ty/eleventy-plugin-syntaxhighlight/issues/19
|
|
||||||
}
|
|
||||||
|
|
||||||
return language;
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
function attributeEntryToString(attribute, context) {
|
|
||||||
let [key, value] = attribute;
|
|
||||||
|
|
||||||
if (typeof value === "function") { // Callback must return a string or a number
|
|
||||||
value = value(context); // Run the provided callback and store the result
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof value !== "string" && typeof value !== "number") {
|
|
||||||
throw new Error(
|
|
||||||
`Attribute "${key}" must have, or evaluate to, a value of type string or number, not "${typeof value}".`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return `${key}="${value}"`;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ## Usage
|
|
||||||
* The function `getAttributes` is used to convert an object, `attributes`, with HTML attributes as keys and the values as the corresponding HTML attribute's values.
|
|
||||||
* If it is falsey, an empty string will be returned.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
getAttributes({
|
|
||||||
tabindex: 0,
|
|
||||||
'data-language': function (context) { return context.language; },
|
|
||||||
'data-otherStuff': 'value'
|
|
||||||
}) // => ' tabindex="0" data-language="JavaScript" data-otherStuff="value"'
|
|
||||||
```
|
|
||||||
*
|
|
||||||
* @param {{[s: string]: string | number}} attributes An object with key-value pairs that represent attributes.
|
|
||||||
* @param {object} context An object with the current context.
|
|
||||||
* @param {string} context.content The code to parse and highlight.
|
|
||||||
* @param {string} context.language The language for the current instance.
|
|
||||||
* @param {object} context.options The options passed to the syntax highlighter.
|
|
||||||
* @returns {string} A string containing the above HTML attributes preceded by a single space.
|
|
||||||
*/
|
|
||||||
function getAttributes(attributes, context = {}) {
|
|
||||||
let langClass = context.language ? `language-${context.language}` : "";
|
|
||||||
|
|
||||||
if (!attributes) {
|
|
||||||
return langClass ? ` class="${langClass}"` : "";
|
|
||||||
} else if (typeof attributes === "object") {
|
|
||||||
if(!("class" in attributes) && langClass) {
|
|
||||||
// class attribute should be first in order
|
|
||||||
let tempAttrs = { class: langClass };
|
|
||||||
for(let key in attributes) {
|
|
||||||
tempAttrs[key] = attributes[key];
|
|
||||||
}
|
|
||||||
attributes = tempAttrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
const formattedAttributes = Object.entries(attributes).map(
|
|
||||||
entry => attributeEntryToString(entry, context)
|
|
||||||
);
|
|
||||||
|
|
||||||
return formattedAttributes.length ? ` ${formattedAttributes.join(" ")}` : "";
|
|
||||||
} else if (typeof attributes === "string") {
|
|
||||||
throw new Error("Syntax highlighter plugin custom attributes on <pre> and <code> must be an object. Received: " + JSON.stringify(attributes));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = getAttributes;
|
|
Loading…
Reference in New Issue