diff --git a/assets/css/ak.css b/assets/css/ak.css index 003b9a4..751cc94 100644 --- a/assets/css/ak.css +++ b/assets/css/ak.css @@ -1,39 +1,43 @@ /* * Background mIRC colours */ -.ba {background-color: #FFFFFF} -.bb {background-color: #000000} -.bc {background-color: #00007F} -.bd {background-color: #009300} -.be {background-color: #FF0000} -.bf {background-color: #7f0000} -.bg {background-color: #9C009C} -.bh {background-color: #FC7F00} -.bi {background-color: #FFFF00} -.bj {background-color: #00FC00} -.bk {background-color: #009393} -.bl {background-color: #00FFFF} -.bm {background-color: #0000FC} -.bn {background-color: #FF00FF} -.bo {background-color: #7F7F7F} -.bp {background-color: #D2D2D2} +.ba {background-color: #FFFFFF} +.bb {background-color: #000000} +.bc {background-color: #00007F} +.bd {background-color: #009300} +.be {background-color: #FF0000} +.bf {background-color: #7f0000} +.bg {background-color: #9C009C} +.bh {background-color: #FC7F00} +.bi {background-color: #FFFF00} +.bj {background-color: #00FC00} +.bk {background-color: #009393} +.bl {background-color: #00FFFF} +.bm {background-color: #0000FC} +.bn {background-color: #FF00FF} +.bo {background-color: #7F7F7F} +.bp {background-color: #D2D2D2} /* * Foreground mIRC colours */ -.fa {color: #FFFFFF} -.fb {color: #000000} -.fc {color: #00007F} -.fd {color: #009300} -.fe {color: #FF0000} -.ff {color: #7F0000} -.fg {color: #9C009C} -.fh {color: #FC7F00} -.fi {color: #FFFF00} -.fj {color: #00FC00} -.fk {color: #009393} -.fl {color: #00FFFF} -.fm {color: #0000FC} -.fn {color: #FF00FF} -.fo {color: #7F7F7F} -.fp {color: #D2D2D2} +.fa {color: #FFFFFF} +.fb {color: #000000} +.fc {color: #00007F} +.fd {color: #009300} +.fe {color: #FF0000} +.ff {color: #7F0000} +.fg {color: #9C009C} +.fh {color: #FC7F00} +.fi {color: #FFFF00} +.fj {color: #00FC00} +.fk {color: #009393} +.fl {color: #00FFFF} +.fm {color: #0000FC} +.fn {color: #FF00FF} +.fo {color: #7F7F7F} +.fp {color: #D2D2D2} + +/* + * vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0 + */ diff --git a/assets/css/help.css b/assets/css/help.css index 2c15baf..8474fe9 100644 --- a/assets/css/help.css +++ b/assets/css/help.css @@ -1,3 +1,13 @@ +@font-face { + font-family: 'FixedsysExcelsior301Regular'; + font-style: normal; + src: url('../fonts/fsex300-webfont.eot'); + src: url('../fonts/fsex300-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/fsex300-webfont.woff') format('woff'), + url('../fonts/fsex300-webfont.ttf') format('truetype'), + url('../fonts/fsex300-webfont.svg#FixedsysExcelsior301Regular') format('svg'); +} + body { background: #000000; background-image: url('../images/tile.jpg'); @@ -40,3 +50,7 @@ p { pre { color: white; } + +/* + * vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0 + */ diff --git a/assets/css/sally.css b/assets/css/sally.css index 596d576..5ed3336 100644 --- a/assets/css/sally.css +++ b/assets/css/sally.css @@ -1,188 +1,205 @@ -textarea,input[type=text],body { - margin:0; - font-family: 'FixedsysExcelsior301Regular'; - font-size: 12pt; - font-weight: 100; - line-height: 11pt; - color: #6d6b6d; - -webkit-font-smoothing: antialiased !important; +@font-face { + font-family: 'FixedsysExcelsior301Regular'; + font-style: normal; + src: url('../fonts/fsex300-webfont.eot'); + src: url('../fonts/fsex300-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/fsex300-webfont.woff') format('woff'), + url('../fonts/fsex300-webfont.ttf') format('truetype'), + url('../fonts/fsex300-webfont.svg#FixedsysExcelsior301Regular') format('svg'); } body { - background-color: #000000 !important; -} -@font-face { - font-family: 'FixedsysExcelsior301Regular'; - src: url('../fonts/fsex300-webfont.eot'); - src: url('../fonts/fsex300-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/fsex300-webfont.woff') format('woff'), - url('../fonts/fsex300-webfont.ttf') format('truetype'), - url('../fonts/fsex300-webfont.svg#FixedsysExcelsior301Regular') format('svg'); - font-style: normal; + background-color: #000000 !important; + transition: 0.1s linear; } -a {display: block} -a:link, a:visited {text-decoration: none; color: #6b6760} -a:hover { text-decoration: underline } - -.faded { color: #404040; } -.rapper, .block { - float: left; - height:auto; - width:auto; - background-color: #000000; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; +/* {{{ Element styles */ +a { + display: block; } -.rapper { - white-space:pre-wrap; - word-wrap: break-word; +a:link, a:visited { + color: #6B6760; + text-decoration: none; } -#ui_rapper .block { - width: 100px; +a:hover { + text-decoration: underline; } -.block { - padding:4px; +span { + display: inline-block; + line-height: 15px; + min-width: 8px; } -.block:nth-child(n+2) { - padding-left: 30px; +textarea { + background: #001100; + border: 1px solid #333333; + color: #00FF00; + font-family: 'FixedsysExcelsior301Regular'; + font-size: 12pt; + height: 300px; + outline: 0; + width: 37vw; } -#textarea_mode { padding: 4px; } -.tool { - cursor: pointer; +textarea, input[type=text], body { + color: #6D6B6D; + font-family: 'FixedsysExcelsior301Regular'; + line-height: 11pt; + font-size: 12pt; + font-weight: 100; + margin: 0; + -webkit-font-smoothing: antialiased !important; } -.hidden { - visibility: hidden; +/* }}} */ +/* {{{ BODY class styles */ +body.grid div { + border-left: 1px solid #444444; } -.tool.radio { - margin: 0 8px 0 0; +body.grid span { + border-bottom: 1px solid #444444; + border-right: 1px solid #444444; } -.tool.radio.focused { - color: #000; - - background-color: #6d6d6d; - box-shadow: none; +body.grid .tool { + border: 1px solid #444444; } -.transparent { - background-color: transparent; - background-image: url(../images/gray-dither.gif); - background-size: 8px 8px; +body.grid #brush_wrapper > div:first-child, +body.grid #canvas_wrapper > div:first-child, +body.grid #letters_wrapper > div:first-child, +body.grid #palette_wrapper > div:first-child { + border-top: 1px solid #444444; } - -@media (-webkit-min-device-pixel-ratio: 2) { - .transparent { - background-size: 4px 4px; - } +body.loading { + opacity: 0; } -span,a { min-width: 8px; line-height: 15px; display: inline-block; } -.rapper { cursor: crosshair; } -body.grid span { border-right: 1px solid #444; border-bottom: 1px solid #444; } -body.grid div { border-left: 1px solid #444; } -body.grid #canvas_rapper > div:first-child, -body.grid #palette_rapper > div:first-child, -body.grid #letters_rapper > div:first-child, -body.grid #brush_rapper > div:first-child { border-top: 1px solid #444; } -body.grid .tool { border: 1px solid #444; } -.ed { color: #fff; } -.locked { border-bottom: 1px solid; color: #bbb; text-decoration: none; } -.tool.locked.focused { box-shadow: 0 0; } -.focused { box-shadow: inset 0 0px 2px #fff; border-color: #fff; } +/* }}} */ +/* {{{ Class styles */ .ba.focused { box-shadow: inset 0 0px 2px #000, inset 0 0px 2px #000; border-color: #000; } -.tool.focused, .ed.focused { color: white; text-decoration: underline; } -.focused { box-shadow: inset 1px 0 2px white, inset -1px 0 2px white, inset 0 1px 2px white, inset 0 -1px 2px white; } -.faba.focused, .fbba.focused, .fcba.focused, .fdba.focused, .feba.focused, .ffba.focused, .fgba.focused, .fhba.focused, -.fiba.focused, .fjba.focused, .fkba.focused, .flba.focused, .fmba.focused, .fnba.focused, .foba.focused, .fpba.focused - { box-shadow: inset 1px 0 2px #888, inset -1px 0 2px #888, inset 0 1px 2px #888, inset 0 -1px 2px #888; } -body.loading { opacity: 0; } -body { transition: 0.1s linear; } -#import_textarea { font-size: 9pt; } -textarea { font-size:12pt; width: 37vw; height: 300px; background: #333; color: #0f0; border: 0; font-family: 'FixedsysExcelsior301Regular'; outline: 0; border: 1px solid #333; background:#010;} -#import_rapper { display: none; } -#canvas_rapper { - white-space: pre; - box-shadow: 0 0 2px rgba(255,255,255,0.3); - margin: 3px; -} - -#ui_rapper { clear:both; float: left; width: 100vw; } -#workspace_rapper { width: 100%; } - -.loading .vertical #ui_rapper { clear: none } -.vertical #ui_rapper { width: 320px; float: left; clear: none; } -.vertical .rapper, .vertical .block { float: left; } -.vertical #canvas_rapper, -.vertical #canvas_rapper div, -.vertical #tools_rapper, -.vertical #palette_rapper, -.vertical #brush_container { display: inline-block; float: left; } -.vertical #workspace_rapper { width: auto; position: relative; float: left; } -.vertical #palette_rapper { margin-right: 10px; } -.vertical #tools_block { min-width: 100%; } - -#secret_rapper { float: left; clear: right; } -#secret_rapper span { float: left; } -.vertical #secret_rapper { margin-right: 10px; } -.vertical #secret_rapper span { float: left; clear: both; } - -#tools_block > * { - cursor: crosshair; -} -#brush_rapper, #letters_rapper { - cursor: crosshair; -} -.dropper #canvas_rapper { - cursor: url(../images/dropper.gif) 0 15, auto; -} -.bucket #canvas_rapper { - cursor: url(../images/bucket.png) 3 15, auto; -} -#brush_rapper { - border: 1px solid; - display: inline-block; - margin-bottom: 13px; - float: left; -} -#letters_rapper { - display: inline-block; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} +.block:nth-child(n+2) { padding-left: 30px; } +.block { padding:4px; } +.bucket #canvas_wrapper { cursor: url(../images/bucket.png) 3 15, auto; } .close { position: absolute; top: 20px; right: 20px; z-index: 2; padding: 10px; background: black; cursor: pointer; } -#experimental_palette_toggle.focused { box-shadow: none; } -#cursor_input { position: fixed; top: 0; right: 0; width:30px; opacity: 0; font-size: 16px; } -.selector_el { - border: 1px dashed #fff !important; - padding-top: 1px; - position:absolute; - margin-top: -1px; - top:-999px;left:-999px; -} -.selector_el.dragging { - color: #0f0; -} -.selector_el.creating div { - display: none; +.dropper #canvas_wrapper { cursor: url(../images/dropper.gif) 0 15, auto; } +.ed { color: #fff; } +.ed.focused { color: white; text-decoration: underline; } +.faded { color: #404040; } +.focused { box-shadow: inset 0 0px 2px #fff; border-color: #fff; } +.focused { box-shadow: inset 1px 0 2px white, inset -1px 0 2px white, inset 0 1px 2px white, inset 0 -1px 2px white; } +.hidden { visibility: hidden; } +.loading .vertical #ui_wrapper { clear: none } +.locked { border-bottom: 1px solid; color: #bbb; text-decoration: none; } +.selector_el.creating div { display: none; } +.selector_el.dragging { color: #0f0; } +.tool { cursor: pointer; } +.tool.focused { color: white; text-decoration: underline; } +.tool.locked.focused { box-shadow: 0 0; } +.tool.radio { margin: 0 8px 0 0; } +.vertical .wrapper, .vertical .block { float: left; } +.vertical #brush_container { display: inline-block; float: left; } +.vertical #canvas_wrapper, +.vertical #canvas_wrapper div, +.vertical #palette_wrapper, +.vertical #palette_wrapper { margin-right: 10px; } +.vertical #secret_wrapper { margin-right: 10px; } +.vertical #secret_wrapper span { float: left; clear: both; } +.vertical #tools_block { min-width: 100%; } +.vertical #tools_wrapper, +.vertical #ui_wrapper { width: 320px; float: left; clear: none; } +.vertical #workspace_wrapper { width: auto; position: relative; float: left; } +.wrapper { cursor: crosshair; } + +.block { + background-color: #000000; + float: left; + height: auto; + user-select: none; + width: auto; + -webkit-user-select: none; + -moz-user-select: none; } .custom { - float: left; - margin-right: 5px; - margin-bottom: 5px; + float: left; + margin-bottom: 5px; + margin-right: 5px; } -@keyframes rainbow { - 0% { color: hsl(0,100%,50%) } - 33% { color: hsl(90,100%,50%) } - 50% { color: #fff } - 66% { color: hsl(320,100%,50%) } - 100% { color: hsl(360,100%,50%) } +.faba.focused, .fbba.focused, .fcba.focused, .fdba.focused, .feba.focused, .ffba.focused, .fgba.focused, .fhba.focused, +.fiba.focused, .fjba.focused, .fkba.focused, .flba.focused, .fmba.focused, .fnba.focused, .foba.focused, .fpba.focused { + box-shadow: inset 1px 0 2px #888888, inset -1px 0 2px #888888, inset 0 1px 2px #888888, inset 0 -1px 2px #888888; } - -.panke #load_el, -.panke #import_textarea, +.panke #add_custom_el, .panke #doc_el, .panke #export_button, +.panke #format_el, .panke #grid_el, +.panke #import_textarea, +.panke #load_el, .panke #save_el, -.panke #vertical_checkbox, -.panke #add_custom_el, -.panke #format_el { } +.panke #vertical_checkbox { } +.selector_el { + border: 1px dashed #fff !important; + left: -999px; + margin-top: -1px; + padding-top: 1px; + position: absolute; + top: -999px; +} +.tool.radio.focused { + background-color: #6D6D6D; + box-shadow: none; + color: #000000; +} +.transparent { + background-color: transparent; + background-image: url(../images/gray-dither.gif); + background-size: 8px 8px; +} +@media (-webkit-min-device-pixel-ratio: 2) { + .transparent { + background-size: 4px 4px; + } +} +.wrapper { + background-color: #000000; + float: left; + height: auto; + user-select: none; + white-space: pre-wrap; + width: auto; + word-wrap: break-word; + -webkit-user-select: none; + -moz-user-select: none; +} +/* }}} */ +/* {{{ Id styles */ +#brush_wrapper, #letters_wrapper { cursor: crosshair; } +#cursor_input { position: fixed; top: 0; right: 0; width:30px; opacity: 0; font-size: 16px; } +#experimental_palette_toggle.focused { box-shadow: none; } +#import_wrapper { display: none; } +#import_textarea { font-size: 9pt; } +#secret_wrapper { float: left; clear: right; } +#secret_wrapper span { float: left; } +#textarea_mode { padding: 4px; } +#tools_block > * { cursor: crosshair; } +#ui_wrapper .block { width: 100px; } +#ui_wrapper { clear:both; float: left; width: 100vw; } +#workspace_wrapper { width: 100%; } + +#brush_wrapper { + border: 1px solid; + display: inline-block; + float: left; + margin-bottom: 13px; +} +#canvas_wrapper { + box-shadow: 0 0 2px rgba(255,255,255,0.3); + margin: 3px; + white-space: pre; +} + +#letters_wrapper { + display: inline-block; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} +/* }}} */ + +/* + * vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0 + */ diff --git a/assets/html/help.html b/assets/html/help.html index 2fd03bf..ebb9ec0 100644 --- a/assets/html/help.html +++ b/assets/html/help.html @@ -6,7 +6,6 @@ - asciiblaster v1.0.6 documentation @@ -39,6 +38,8 @@ encode to, assuming UTF-8, 2-3 bytes in total vs. one (1) byte for those part of the initial set (e.g. 0-9, A-Z, a-z, etc.)

+ Internet Explorer is explicitly unsupported.
+
Repeating patterns of alternating back- and foreground colours, and vice versa, are encoded using a single (1) byte in mIRC format (video reverse) and as such save space, especially with large numbers of repetitions or alternations. diff --git a/assets/js/app.js b/assets/js/app.js index b3179ce..33c69b2 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -17,10 +17,10 @@ function init () { bind() } function build () { - canvas.append(canvas_rapper) - brush.append(brush_rapper) - palette.append(palette_rapper) - letters.append(letters_rapper) + canvas.append(canvas_wrapper) + brush.append(brush_wrapper) + palette.append(palette_wrapper) + letters.append(letters_wrapper) letters.repaint("Basic Latin") controls.circle.focus() @@ -30,7 +30,7 @@ function build () { brush.build() // controls.grid.use() - canvas.resize_rapper() + canvas.resize_wrapper() } function bind () { canvas.bind() diff --git a/assets/js/clipboard.js b/assets/js/clipboard.js index 930bf52..b93e346 100644 --- a/assets/js/clipboard.js +++ b/assets/js/clipboard.js @@ -19,8 +19,8 @@ var clipboard = (function () { if (! clipboard.importing) { clipboard.export_data() } } }, - show: function () { import_rapper.style.display = "block"; clipboard.visible = true; changed = false }, - hide: function () { import_rapper.style.display = "none"; clipboard.visible = false }, + show: function () { import_wrapper.style.display = "block"; clipboard.visible = true; changed = false }, + hide: function () { import_wrapper.style.display = "none"; clipboard.visible = false }, focus: function () { if (! clipboard.importing) { import_textarea.focus() diff --git a/assets/js/matrix.js b/assets/js/matrix.js index c3caf43..2dfb85c 100644 --- a/assets/js/matrix.js +++ b/assets/js/matrix.js @@ -58,8 +58,8 @@ Matrix.prototype.demolish = function (){ this.forEach(function(lex){ lex.demolish() }) - while (this.rapper && this.rapper.firstChild) { - this.rapper.removeChild(this.rapper.firstChild); + while (this.wrapper && this.wrapper.firstChild) { + this.wrapper.removeChild(this.wrapper.firstChild); } this.aa.forEach(function(row){ row.length = 0 @@ -122,15 +122,15 @@ Matrix.prototype.build = function(){ lex.build() }) } -Matrix.prototype.append = function(rapper){ - rapper = this.rapper = rapper || this.rapper - if (! this.rapper) return +Matrix.prototype.append = function(wrapper){ + wrapper = this.wrapper = wrapper || this.wrapper + if (! this.wrapper) return this.aa.forEach(function(row, y){ var div = document.createElement("div") row.forEach(function(lex, x) { div.appendChild(lex.span) }) - rapper.appendChild( div ) + wrapper.appendChild( div ) }) } Matrix.prototype.region = function(w,h,x,y) { @@ -164,7 +164,7 @@ Matrix.prototype.resize = function(w,h){ h = h || canvas.h var div, row, lex var f = this.f, old_h = this.aa.length, old_w = this.aa[0].length - var rapper = this.rapper + var wrapper = this.wrapper w = max(w, 1) h = max(h, 1) if (h < old_h) { @@ -180,7 +180,7 @@ Matrix.prototype.resize = function(w,h){ else if (h > old_h) { for (var y = old_h; y < h; y++) { div = document.createElement("div") - rapper.appendChild( div ) + wrapper.appendChild( div ) this.aa[y] = new Array (w) for (var x = 0; x < w; x++) { lex = this.aa[y][x] = f(x,y) @@ -211,11 +211,11 @@ Matrix.prototype.resize = function(w,h){ this.h = h this.bind && this.bind() this.focus_clamp() - if (this.rapper && this.rapper.parentNode != document.body) { - this.resize_rapper() + if (this.wrapper && this.wrapper.parentNode != document.body) { + this.resize_wrapper() } } -Matrix.prototype.resize_rapper = function(){ +Matrix.prototype.resize_wrapper = function(){ var cell = canvas.aa[0][0].span var cw = cell.offsetWidth var ch = cell.offsetHeight @@ -223,10 +223,10 @@ Matrix.prototype.resize_rapper = function(){ var width = cw * this.aa[0].length var height = ch * this.aa.length if (canvas.grid) { width++; height++ } - this.rapper.parentNode.style.height = "" - this.rapper.style.width = - this.rapper.parentNode.style.width = (width) + "px" - this.rapper.style.top = "" + this.wrapper.parentNode.style.height = "" + this.wrapper.style.width = + this.wrapper.parentNode.style.width = (width) + "px" + this.wrapper.style.top = "" } Matrix.prototype.ascii = function () { var lines = this.aa.map(function(row, y){ diff --git a/assets/js/ui/brush.js b/assets/js/ui/brush.js index 7389f3f..285bc82 100644 --- a/assets/js/ui/brush.js +++ b/assets/js/ui/brush.js @@ -113,14 +113,14 @@ var custom = (function(){ exports.clone = function (){ var new_brush = brush.clone() - var rapper = document.createElement("div") - rapper.className = "custom" - new_brush.append(rapper) - custom_rapper.appendChild(rapper) + var wrapper = document.createElement("div") + wrapper.className = "custom" + new_brush.append(wrapper) + custom_wrapper.appendChild(wrapper) // store in localstorage? - rapper.addEventListener("click", function(e){ + wrapper.addEventListener("click", function(e){ if (e.shiftKey) { - rapper.parentNode.removeChild(rapper) + wrapper.parentNode.removeChild(wrapper) delete new_brush } else { // load this brush diff --git a/assets/js/ui/controls.js b/assets/js/ui/controls.js index 4997bbe..37c9813 100644 --- a/assets/js/ui/controls.js +++ b/assets/js/ui/controls.js @@ -122,9 +122,9 @@ var controls = (function(){ state = typeof state == "boolean" ? state : ! document.body.classList.contains("grid") document.body.classList[ state ? "add" : "remove" ]('grid') letters.grid = palette.grid = canvas.grid = state - canvas.resize_rapper() - palette.resize_rapper() - letters.resize_rapper() + canvas.resize_wrapper() + palette.resize_wrapper() + letters.resize_wrapper() if (! selection.hidden) selection.reposition() this.update( state ) } diff --git a/assets/js/ui/paletters.js b/assets/js/ui/paletters.js index 3eda70e..26bac3a 100644 --- a/assets/js/ui/paletters.js +++ b/assets/js/ui/paletters.js @@ -192,14 +192,14 @@ var palette = (function(){ brush.char = lex.char brush.opacity = lex.opacity brush.generate() - brush_rapper.style.borderColor = css_reverse_lookup[fillColor] + brush_wrapper.style.borderColor = css_reverse_lookup[fillColor] return }) }) } - brush_rapper.style.borderColor = css_reverse_lookup[fillColor] + brush_wrapper.style.borderColor = css_reverse_lookup[fillColor] return palette diff --git a/assets/text/TODO b/assets/text/TODO index a0f5952..a6ba9b2 100644 --- a/assets/text/TODO +++ b/assets/text/TODO @@ -1,8 +1,7 @@ -1) bug: fix @ IE8? -2) feature: {bold,italic,underline} attributes -3) feature: draw w/ keyboard instead of [LR]MB -4) feature: {line,measuring} tool -5) feature: status bar w/ position, etc. -6) feature: zoom {in,out} (esp. on Android) -7) reimplement: ANSI (maybe,) {save,upload} as PNG & gallery, cutoff (print line #(s) affected, tunably,) shaders (maybe) -8) releases: merge w/ MiRCARTools (into asciiblaster,) provide signed release APK +1) feature: {bold,italic,underline} attributes +2) feature: draw w/ keyboard instead of [LR]MB +3) feature: {line,measuring} tool +4) feature: status bar w/ position, etc. +5) feature: zoom {in,out} (esp. on Android) +6) reimplement: ANSI (maybe,) {save,upload} as PNG & gallery, cutoff (print line #(s) affected, tunably,) shaders (maybe) +7) releases: merge w/ MiRCARTools (into asciiblaster,) provide signed release APK diff --git a/index.html b/index.html index 20a4de7..e12d9e1 100644 --- a/index.html +++ b/index.html @@ -13,26 +13,26 @@ - -
-
+ +
+
- -
+ +
-
-
+
+
.
-
-
+
+
-
+
x fg
x bg
@@ -43,8 +43,8 @@
- -
+ +
square
circle
cross
@@ -72,12 +72,12 @@ x vertical
-
+
ascii *mirc -