#!/usr/bin/env node
|
|
(function () {
|
|
var DEFAULT_LEN, ROO, BUBBLE_TOP_CHAR,
|
|
textToRoo;
|
|
|
|
DEFAULT_LEN = 35;
|
|
BUBBLE_TOP_CHAR = "-";
|
|
|
|
roo = `
|
|
\\ /)/)
|
|
\\ (ø.ø)
|
|
\\ ( />
|
|
__/ _\\ //
|
|
'~( '~ )//
|
|
_\\ '}/
|
|
\\"--~(/`;
|
|
|
|
function lineify(maxLen) {
|
|
function bar([word, ...words], [line, ...lines]) {
|
|
if (!word) return [pad(line), ...lines];
|
|
word = word.trim();
|
|
if (!line) return bar(words, [word, ...lines]);
|
|
return bar(words, (word.length + line.length < maxLen)
|
|
? [[line, word].join(" "), ...lines]
|
|
: [word, pad(line), ...lines]);
|
|
}
|
|
function pad(line) {
|
|
return line + new Array(maxLen - line.length).fill(" ").join("");
|
|
}
|
|
return (s => bar(s.split(" "), [""]).reverse());
|
|
}
|
|
|
|
function rooify(text) {
|
|
var textLines, finalOutput, bubbleHeader;
|
|
finalOutput = "";
|
|
textLines = lineify(DEFAULT_LEN)(text);
|
|
bubbleHeader = new Array(DEFAULT_LEN+2).fill(BUBBLE_TOP_CHAR).join("");
|
|
finalOutput += "/" + bubbleHeader + "\\\n";
|
|
textLines.forEach(l => finalOutput += "| " + l + " |\n");
|
|
finalOutput += "\\" + bubbleHeader + "/";
|
|
finalOutput += roo;
|
|
return finalOutput;
|
|
}
|
|
|
|
if (process.stdin.isTTY) {
|
|
textToRoo = process.argv.splice(2).join(" ");
|
|
console.log(rooify(textToRoo));
|
|
} else {
|
|
textToRoo = "";
|
|
process.stdin.on('data', b => textToRoo += b.toString());
|
|
process.stdin.on('end', _ => console.log(rooify(textToRoo)));
|
|
process.stdin.resume();
|
|
}
|
|
}());
|