diff --git a/exec/load/meme_lib.js b/exec/load/meme_lib.js index e24be7d07375fa55deaf7fb615afde216e3db72b..e6b16ca9f914d8dbc9ebe6fa013ec978d00336e1 100755 --- a/exec/load/meme_lib.js +++ b/exec/load/meme_lib.js @@ -14,6 +14,11 @@ var BORDER_ORNATE2 = 7; var BORDER_ORNATE3 = 8; var BORDER_COUNT = 9; +var JUSTIFY_CENTER = 0; +var JUSTIFY_LEFT = 1; +var JUSTIFY_RIGHT = 2; +var JUSTIFY_COUNT = 3; + // We don't have String.repeat() in ES5 function repeat(ch, length) { @@ -118,16 +123,19 @@ function bottom_border(border, width) return str + "\x01N\r\n"; } -function generate(attr, border, text) +function generate(width, attr, border, text, justify) { - var width = 39; var msg = attr + top_border(border, width); var array = word_wrap(text, width - 4).split("\n"); for (var i in array) { var line = truncsp(array[i]); if (!line && i >= array.length - 1) break; - var margin = Math.floor((width - line.length) / 2); + var margin = 2; + if (justify == JUSTIFY_CENTER) + margin = Math.floor((width - line.length) / 2); + else if (justify == JUSTIFY_RIGHT) + margin = width - (line.length + 2); msg += attr + mid_border(border, width, margin, line); } msg += attr + bottom_border(border, width); diff --git a/exec/postmeme.js b/exec/postmeme.js index 83a20d4f09c1bcc652402a9e4c9c31fa8f1b30e6..36766fdea70545b10a7d313706dbe3721d813a7c 100755 --- a/exec/postmeme.js +++ b/exec/postmeme.js @@ -6,6 +6,8 @@ // border (default: 0) // random (default: false) // max_length (default: 500) +// width (default: 39) +// justify (default: center) "use strict"; require("key_defs.js", "KEY_LEFT"); @@ -17,8 +19,8 @@ var lib = load({}, "meme_lib.js"); function choose(border) { - console.mnemonics(format("Style: ~Color, ~@Next@, ~@Previous@, or ~@Quit@ [%u]: ", (border % lib.BORDER_COUNT) + 1)); - var ch = console.getkeys("C" + KEY_LEFT + KEY_RIGHT + "\r" + console.next_key + console.prev_key + console.quit_key, lib.BORDER_COUNT); + console.mnemonics(format("~Border, ~Color, ~Justify, ~@Quit@, or [Select]: ")); + var ch = console.getkeys("BCJ" + KEY_LEFT + KEY_RIGHT + "\r" + console.next_key + console.prev_key + console.quit_key, lib.BORDER_COUNT); if (typeof ch == "number") return ch - 1; switch (ch) { @@ -27,7 +29,9 @@ function choose(border) case '\r': return true; case 'C': - return 'C'; + case 'J': + case 'B': + return ch; case KEY_UP: case KEY_LEFT: case console.prev_key: @@ -50,6 +54,7 @@ var attr = [ "\x01H\x01W\x016", "\x01N\x01K\x017", ]; +var justify = options.justify || 0; var border = options.border || 0; var color = options.color || 0; if (options.random) { @@ -58,8 +63,13 @@ if (options.random) { } var msg; while (!js.terminated) { - msg = lib.generate(attr[color % attr.length], border % lib.BORDER_COUNT, text); + msg = lib.generate(options.width || 39, attr[color % attr.length], border % lib.BORDER_COUNT, text, justify % lib.JUSTIFY_COUNT); console.clear(); + console.attributes = WHITE | HIGH; + console.print(format("Meme \x01N\x01C(border \x01H%u \x01N\x01Cof \x01H%u\x01N\x01C, color \x01H%u\x01N\x01C of \x01H%u\x01N\x01C):" + , (border % lib.BORDER_COUNT) + 1, lib.BORDER_COUNT + , (color % attr.length) + 1, attr.length)); + console.newline(2); print(msg); var ch = choose(border); if (ch === false) @@ -70,6 +80,10 @@ while (!js.terminated) { border = ch; else if (ch === 'C') ++color; + else if (ch === 'J') + ++justify; + else if (ch === 'B') + ++border; else if (ch == console.next_key && border < lib.BORDER_COUNT - 1) ++border; else if (ch == console.prev_key && border > 0)