(function(){ var char_color = '\x03'; var regexp_color = /(^[\d]{1,2})?(?:,([\d]{1,2}))?/; var style_chars = { '\x02': 'bold', '\x1d': 'italic', '\x1f': 'underline', '\x0f': 'reset', '\x16': 'inverse' }; var Style = function(style){ this.b = style.b; this.i = style.i; this.u = style.u; this.fg = style.fg; this.bg = style.bg; }; var style_fns = {}; style_fns.bold = function(style){ style.b = !style.b }; style_fns.italic = function(style){ style.i = !style.i }; style_fns.underline = function(style){ style.u = !style.u }; style_fns.inverse = function(style){ var tmp = style.fg; style.fg = style.bg; style.bg = tmp; }; style_fns.reset = function(style, base_style){ style.b = base_style.b; style.i = base_style.i; style.u = base_style.u; style.fg = base_style.fg; style.bg = base_style.bg; }; var colorcode_to_json = function(string, opts){ opts = opts || {}; var d = colorcode_to_json.defaults; var base_style = { b: "b" in opts ? opts.b : d.b, i: "i" in opts ? opts.i : d.i, u: "u" in opts ? opts.u : d.u, fg: "fg" in opts ? opts.fg : d.fg, bg: "bg" in opts ? opts.bg : d.bg }; var lines_in = string.split(/\r?\n/); var lines_out = []; var w = 0, h = 0; for (var i=0; i