jscpd
Version:
Copy/paste detector for programming code, support JavaScript, CoffeeScript, PHP, Ruby, Python, Less, Go, Java, Yaml, C#, C++, C, Puppet, Twig languages
112 lines • 8.43 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var prismjs_1 = require("prismjs");
var loadLanguages = require('prismjs/components/');
var ignore = {
ignore: [
{
pattern: /(jscpd:ignore-start)[\s\S]*?(?=jscpd:ignore-end)/,
lookbehind: true,
greedy: true
},
{
pattern: /jscpd:ignore-start/,
greedy: false
},
{
pattern: /jscpd:ignore-end/,
greedy: false
}
]
};
var punctuation = {
new_line: /\n/,
empty: /\s+/
};
prismjs_1.languages.markup.script.inside = __assign({}, ignore, prismjs_1.languages.markup.script.inside, punctuation);
prismjs_1.languages.markup.style.inside = __assign({}, ignore, prismjs_1.languages.markup.style.inside, punctuation);
function initLanguages(langs) {
loadLanguages(langs);
Object.keys(prismjs_1.languages).forEach(function (lang) {
prismjs_1.languages[lang] =
typeof prismjs_1.languages[lang] === 'object' ? __assign({}, ignore, prismjs_1.languages[lang], punctuation) : prismjs_1.languages[lang];
});
}
exports.initLanguages = initLanguages;
function tokenize(code, language) {
var length = 0;
var line = 1;
var column = 1;
initLanguages([language]);
var tokens = [];
prismjs_1.tokenize(code, prismjs_1.languages[language]).forEach(function (t) { return (tokens = tokens.concat(createTokens(t, language))); });
function sanitizeLangName(name) {
return name.replace('language-', '');
}
function createTokenFromString(token, lang) {
return [
{
format: lang,
type: 'default',
value: token,
length: token.length
}
];
}
function createTokenFromFlatToken(token, lang) {
return [
{
format: lang,
type: token.type,
value: token.content,
length: token.length
}
];
}
function createTokens(token, lang) {
if (token instanceof prismjs_1.Token && typeof token.content === 'string') {
return createTokenFromFlatToken(token, lang);
}
if (token instanceof prismjs_1.Token && Array.isArray(token.content)) {
var res_1 = [];
token.content.forEach(function (t) { return (res_1 = res_1.concat(createTokens(t, token.alias ? sanitizeLangName(token.alias) : lang))); });
return res_1;
}
return createTokenFromString(token, lang);
}
function calculateLocation(token) {
var result = token;
var lines = result.value.split('\n');
var newLines = lines.length - 1;
var start = {
line: line,
column: column
};
column = newLines !== 0 ? lines[lines.length - 1].length + 1 : column + lines[lines.length - 1].length;
var end = {
line: line + newLines,
column: column
};
result.loc = { start: start, end: end };
result.range = [length, length + result.length];
length += result.length;
line += newLines;
return result;
}
return tokens.map(calculateLocation).filter(function (t) {
return t.format !== 'important' && t.format !== 'property' && t.format !== 'url';
});
}
exports.tokenize = tokenize;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5pemVyL3ByaXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBd0c7QUFHeEcsSUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFckQsSUFBTSxNQUFNLEdBQUc7SUFDYixNQUFNLEVBQUU7UUFDTjtZQUNFLE9BQU8sRUFBRSxrREFBa0Q7WUFDM0QsVUFBVSxFQUFFLElBQUk7WUFDaEIsTUFBTSxFQUFFLElBQUk7U0FDYjtRQUNEO1lBQ0UsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixNQUFNLEVBQUUsS0FBSztTQUNkO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLE1BQU0sRUFBRSxLQUFLO1NBQ2Q7S0FDRjtDQUNvQixDQUFDO0FBRXhCLElBQU0sV0FBVyxHQUFHO0lBQ2xCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsS0FBSyxFQUFFLEtBQUs7Q0FDUyxDQUFDO0FBRXZCLG1CQUFTLENBQUMsTUFBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLGdCQUNsQyxNQUFNLEVBQ0wsbUJBQVMsQ0FBQyxNQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFDdkMsV0FBVyxDQUNmLENBQUM7QUFDRCxtQkFBUyxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxnQkFDakMsTUFBTSxFQUNMLG1CQUFTLENBQUMsTUFBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ3RDLFdBQVcsQ0FDZixDQUFDO0FBRUYsU0FBZ0IsYUFBYSxDQUFDLEtBQWU7SUFDM0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7UUFDakMsbUJBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixPQUFPLG1CQUFTLENBQUMsSUFBSSxDQUFDLEtB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
;