UNPKG

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
// 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);