Skip to content
Snippets Groups Projects
Commit 2642f263 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Support left/right justification

Part of issue/request #922

I don't know if we really want separate cycling/selection of foreground
and background colors (most foreground colors aren't good combos for
most background colors) or the separate cycling/selection of the upper,
mid, and lower parts of the border. These are doable, but I'm not sure
the majority of the results would look good.
parent 76f74740
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment