///|
let default_message = "Hello from MoonBit!"
///|
fn message_from_args(args : Array[String]) -> String {
let words = Array::new()
for i in 1.. Array[String] {
let lines = message.split("\n").map(line => line.to_owned()).to_array()
if lines.is_empty() {
[""]
} else {
lines
}
}
///|
fn max_line_width(lines : Array[String]) -> Int {
let mut width = 0
for line in lines {
let line_width = line.char_length()
if line_width > width {
width = line_width
}
}
width
}
///|
fn pad_to_width(line : String, width : Int) -> String {
line + " ".repeat(width - line.char_length())
}
///|
fn write_bubble_line(
buf : StringBuilder,
left : String,
line : String,
right : String,
width : Int,
) -> Unit {
buf.write_string(left)
buf.write_string(" ")
buf.write_string(pad_to_width(line, width))
buf.write_string(" ")
buf.write_string(right)
buf.write_string("\n")
}
///|
fn render_cowsay(message : String) -> String {
let lines = split_lines(message)
let width = max_line_width(lines)
let buf = StringBuilder()
buf.write_string(" ")
buf.write_string("_".repeat(width + 2))
buf.write_string("\n")
if lines.length() == 1 {
write_bubble_line(buf, "<", lines[0], ">", width)
} else {
for i in 0.. {
try! @miniio.stderr.write_text("cowsay failed: \{e}\n")
@miniio.exit(1)
}
}
}