// Generated by CoffeeScript 1.9.3 var AnsiPainter, object, styles, tags, tools, hasProp = {}.hasOwnProperty, slice = [].slice; tools = require('./tools'); tags = require('./ansiPainter/tags'); styles = require('./ansiPainter/styles'); object = require('utila').object; module.exports = AnsiPainter = (function() { var self; function AnsiPainter() {} AnsiPainter.tags = tags; AnsiPainter.prototype.paint = function(s) { return this._replaceSpecialStrings(this._renderDom(this._parse(s))); }; AnsiPainter.prototype._replaceSpecialStrings = function(str) { return str.replace(/&sp;/g, ' ').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&'); }; AnsiPainter.prototype._parse = function(string, injectFakeRoot) { if (injectFakeRoot == null) { injectFakeRoot = true; } if (injectFakeRoot) { string = '' + string + ''; } return tools.toDom(string); }; AnsiPainter.prototype._renderDom = function(dom) { var parentStyles; parentStyles = { bg: 'none', color: 'none' }; return this._renderChildren(dom, parentStyles); }; AnsiPainter.prototype._renderChildren = function(children, parentStyles) { var child, n, ret; ret = ''; for (n in children) { if (!hasProp.call(children, n)) continue; child = children[n]; ret += this._renderNode(child, parentStyles); } return ret; }; AnsiPainter.prototype._renderNode = function(node, parentStyles) { if (node.type === 'text') { return this._renderTextNode(node, parentStyles); } else { return this._renderTag(node, parentStyles); } }; AnsiPainter.prototype._renderTextNode = function(node, parentStyles) { return this._wrapInStyle(node.data, parentStyles); }; AnsiPainter.prototype._wrapInStyle = function(str, style) { return styles.color(style.color) + styles.bg(style.bg) + str + styles.none(); }; AnsiPainter.prototype._renderTag = function(node, parentStyles) { var currentStyles, tagStyles; tagStyles = this._getStylesForTagName(node.name); currentStyles = this._mixStyles(parentStyles, tagStyles); return this._renderChildren(node.children, currentStyles); }; AnsiPainter.prototype._mixStyles = function() { var final, i, key, len, style, styles, val; styles = 1 <= arguments.length ? slice.call(arguments, 0) : []; final = {}; for (i = 0, len = styles.length; i < len; i++) { style = styles[i]; for (key in style) { if (!hasProp.call(style, key)) continue; val = style[key]; if ((final[key] == null) || val !== 'inherit') { final[key] = val; } } } return final; }; AnsiPainter.prototype._getStylesForTagName = function(name) { if (tags[name] == null) { throw Error("Unkown tag name `" + name + "`"); } return tags[name]; }; self = AnsiPainter; AnsiPainter.getInstance = function() { if (self._instance == null) { self._instance = new self; } return self._instance; }; AnsiPainter.paint = function(str) { return self.getInstance().paint(str); }; AnsiPainter.strip = function(s) { return s.replace(/\x1b\[[0-9]+m/g, ''); }; return AnsiPainter; })();