jscpd
Version:
Copy/paste detector for programming code, support JavaScript, CoffeeScript, PHP, Ruby, Python, Less, Go, Java, Yaml, C#, C++, C languages
110 lines (89 loc) • 3.32 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var CodeMirror, TokenizerBase, TokenizerCodeMirror, fs, logger, vm,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
vm = require("vm");
fs = require("fs");
TokenizerBase = require('./TokenizerBase');
logger = require('winston');
CodeMirror = require("codemirror/addon/runmode/runmode.node.js");
CodeMirror.loadMode = function(name) {
var err, error, filename, modeDef;
filename = require.resolve("codemirror/mode/" + name + "/" + name + ".js");
modeDef = null;
try {
modeDef = fs.readFileSync(filename, "utf8");
} catch (error) {
err = error;
throw new Error(name + " mode isn't shipped with CodeMirror");
}
return vm.runInNewContext(modeDef, {
CodeMirror: CodeMirror
});
};
CodeMirror.loadMode('xml');
CodeMirror.loadMode('clike');
TokenizerCodeMirror = (function(superClass) {
extend(TokenizerCodeMirror, superClass);
function TokenizerCodeMirror() {
this.tokenize = bind(this.tokenize, this);
return TokenizerCodeMirror.__super__.constructor.apply(this, arguments);
}
TokenizerCodeMirror.type = null;
TokenizerCodeMirror.prototype.setType = function(type) {
return this.type = type;
};
TokenizerCodeMirror.prototype.loadType = function(type) {
var e, error;
try {
CodeMirror.loadMode(type);
} catch (error) {
e = error;
if (e.code === 'MODULE_NOT_FOUND') {
logger.debug("" + e);
}
}
return this;
};
TokenizerCodeMirror.prototype.tokenize = function(code) {
this.tokens = [];
this.loadType(this.type);
CodeMirror.runMode(code, this.type, (function(_this) {
return function(value, tokenType, lineNumber) {
if (!lineNumber) {
return;
}
tokenType = _this.isEmptyToken(value) ? 'empty' : tokenType;
tokenType = tokenType != null ? tokenType : 'default';
return _this.tokens.push([tokenType, value, lineNumber]);
};
})(this));
return this;
};
TokenizerCodeMirror.prototype.getType = function() {
return this.type;
};
TokenizerCodeMirror.prototype.generateMap = function() {
var currentMap, i, len, lineNumber, ref, ref1, tokensPositions, type, value;
currentMap = "";
tokensPositions = [];
ref = this.tokens;
for (i = 0, len = ref.length; i < len; i++) {
ref1 = ref[i], type = ref1[0], value = ref1[1], lineNumber = ref1[2];
if (!(this.validToken(type))) {
continue;
}
tokensPositions.push(lineNumber);
currentMap = currentMap + this.createMap(type, value);
}
return {
tokensPositions: tokensPositions,
currentMap: currentMap
};
};
return TokenizerCodeMirror;
})(TokenizerBase);
module.exports = TokenizerCodeMirror;
}).call(this);