|
|
- #!/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();
- }
- }());
|