///|
fn already_mbitified(lines : Iter[StringView]) -> Bool {
  for line in lines; indent = None {
    if line.is_blank() {
      continue indent
    }
    let start_trimmed = line.trim_start()
    if !start_trimmed.has_prefix("#|") {
      return false
    }
    let current_indent = line.length() - start_trimmed.length()
    match indent {
      None => continue Some(current_indent)
      Some(i) if i != current_indent => return false
      _ => ()
    }
  }
  true
}

///|
pub fn mbtify(
  text : String,
  indent? : Int = 0,
  force? : Bool = false,
) -> String? {
  let lines = text.split("\n").to_array()
  if !force && already_mbitified(lines.iter()) {
    return None
  }
  let indent = " ".repeat(indent)
  Some(lines.iter().map(line => "\{indent}#|\{line}").join("\n"))
}

///|
pub fn dismbtify(text : String) -> String? {
  let output = StringBuilder::new()
  for line in text.split("\n"); indent = None {
    if line.is_blank() {
      output..write_view(line).write_char('\n')
      continue indent
    }
    let start_trimmed = line.trim_start()
    if !start_trimmed.has_prefix("#|") {
      return None
    }
    let current_indent = line.length() - start_trimmed.length()
    output..write_view(start_trimmed[2:]).write_char('\n')
    match indent {
      None => continue Some(current_indent)
      Some(i) if i != current_indent => return None
      _ => ()
    }
  }
  Some(output.to_string())
}