docs: public String readLine(String initial) {
          this.before = initial == null ? "" : initial;
          this.after = "";
          this.printedError = null;
  
          if (initial != null && initial.length() > 0 &&
                  !lineValidator.validate(initial, e -> {})) {
              throw new IllegalArgumentException("Invalid initial value: " + initial);
          }
  
          terminal.formatln("%s: %s", message, before);
  
          try {
              for (; ; ) {
                  Char c = terminal.read();
                  if (c == null) {
                      throw new IOException("End of input.");
                  }
  
                  int ch = c.asInteger();
  
                  if (ch == Char.CR || ch == Char.LF) {
                      String line = before + after;
                      if (lineValidator.validate(line, this::printAbove)) {
                          return line;
                      }
                      continue;
                  }
  
                  handleInterrupt(ch, c);
  
                  if (handleTab(ch) ||
                      handleBackSpace(ch) ||
                      handleControl(c)) {
                      continue;
                  }
  
                  if (charValidator.validate(c, this::printAbove)) {
                      before = before + c.toString();
                      printInputLine();
                  }
              }
          } catch (IOException e) {
              throw new UncheckedIOException(e);
          }
      }