spanmanager.js
来自「AJAX_aptana_update 关于AJAX的Eclipse插件。可以在这」· JavaScript 代码 · 共 262 行
JS
262 行
/** * @author Kevin Lindsey */var entityMap = { "<": "<", "&": "&", ">": ">"};/** * SpanManager * * @param {String} source */function SpanManager(source){ this.source = source; this.styles = {}; this.styleValues = []; this.code = []; this.indents = []; this.lastPosition = 0; this.currentColorId = -1; this.currentBold = false; this.currentItalic = false; this.currnetIndent = 0; this.currentSpan = [];}/** * addLexeme * * @param {Lexeme} text * @param {ColorizationStyle} style */SpanManager.prototype.addLexeme = function(lexeme, style){ // handle text between lexemes (typically whitespace) if (this.lastPosition < lexeme.offset) { var s = this.source.substring(this.lastPosition, lexeme.offset) + ""; var self = this; var indent = 0; s = s.replace( /^\t+/mg, function (a) { var count = a.length; self.indents[count] = (count * 2) + "em"; indent = count; return ""; } ); this.addText(s); if (indent > 0) { this.setIndent(indent); } } this.lastPosition = lexeme.offset + lexeme.length; // get lexeme text var text = lexeme.getText() + ""; // entitize text = text.replace( /[<&>]/g, function (a) { return entityMap[a]; } ); // add lexeme text in new style this.addText(text, style);};/** * addText * * @param {String} text */SpanManager.prototype.addText = function(text, style){ this.currentSpan.push(text); if (style) { var color = style.getForegroundColor(); var id = this.getColorClassName(color); var bold = style.isBold(); var italic = style.isItalic(); if (this.currentColorId == -1) { this.currentColorId = id; this.currentBold = bold; this.currentItalic = italic; } else if (id != this.current || bold != this.currentBold || italic != this.currentItalic) { // remove last item from span buffer since it's in a different style this.currentSpan.pop(); this.emit(); // reset state this.currentColorId = id; this.currentBold = bold; this.currentItalic = italic; this.currentIndent = 0; this.currentSpan = [text]; } }};/** * emit */SpanManager.prototype.emit = function(){ if (this.currentSpan.length > 0) { // calculate CSS classes var classes = ["c" + this.currentColorId]; if (this.currentIndent > 0) { classes.push("i" + this.currentIndent); } if (this.currentBold) { classes.push("b"); } if (this.currentItalic) { classes.push("i"); } // calculate span text var buffer = this.currentSpan.join(""); var span = "<span class='" + classes.join(" ") + "'>" + buffer + "</span>"; // add to code buffer this.code.push(span); this.currentSpan = []; this.currentColorId = -1; }};/** * setIndent * * @param {Number} indent */SpanManager.prototype.setIndent = function(indent){ this.emit(); this.currentIndent = indent;};/** * getColorClassName * * @param {Color} color * @return {Number} */SpanManager.prototype.getColorClassName = function (color){ var rgb = "rgb(" + [color.getRed(), color.getGreen(), color.getBlue()].join(",") + ")"; if (this.styles.hasOwnProperty(rgb) == false) { this.styles[rgb] = this.styleValues.length; this.styleValues.push(rgb); } return this.styles[rgb];};/** * getCode * * @return {String} */SpanManager.prototype.getCode = function(){ this.emit(); return this.code.join("");};/** * getCSS * * @return {String} */SpanManager.prototype.getCSS = function(){ // open style element (container for our CSS) var css = ["<style>"]; // add code class css.push(".code{font-size: 8pt;}"); // add color classes for (var i = 0; i < this.styleValues.length; i++) { css.push(".c" + i + "{color: " + this.styleValues[i] + "}"); } // add indentation classes if (this.indents.length > 1) { for (var i = 1; i < this.indents.length; i++) { css.push(".i" + i + "{margin-left: " + this.indents[i] + "}"); } } // add bold class css.push(".b{font-weight: bold}"); // add italic class css.push(".i{font-style: italic}"); // class style element css.push("</style>"); return css.join("\r\n");};/** * getHTML * * @return {String} */SpanManager.prototype.getHTML = function(){ var css = this.getCSS(); var code = this.getCode(); return css + "\r\n<pre class='code'>" + code + "</pre>";};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?