UNPKG

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
"use strict"; 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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