<?php
namespace nur;

/**
 * Class out: des outils pour afficher des valeurs sur la sortie standard
 *
 * Cette classe offre des outils simples pour faciliter l'affichage de valeurs
 * de type string, comme une version glorifiée de la commande <pre>echo</pre>
 *
 * @see \nur\co
 * @see \nur\v\vo
 */
class out {
  private static final function _print(?string $prefix, string $sep, array $values, ?string $suffix): void {
    if ($prefix !== null) echo $prefix;
    echo implode($sep, $values);
    if ($suffix !== null) echo $suffix;
  }

  /** écrire une suite de valeurs collées les unes aux autres */
  static final function write(...$values): void {
    self::_print(null, "", $values, null);
  }

  /**
   * afficher une suite de valeurs collées les unes aux autres suivies d'un saut
   * à la ligne
   */
  static final function wnl(...$values): void {
    self::_print(null, "", $values, "\n");
  }

  /** écrire une suite de valeurs séparées par des espaces */
  static final function print(...$values): void {
    self::_print(null, " ", $values, null);
  }

  /**
   * afficher une suite de valeurs séparées par des espaces suivies d'un saut à
   * la ligne
   */
  static final function pnl(...$values): void {
    self::_print(null, " ", $values, "\n");
  }

  const INDENT_STRING = "  ";

  static final function indent(int $level, ...$values): void {
    $indent = str_repeat(static::INDENT_STRING, $level);
    self::_print($indent, " ", $values, null);
  }

  static final function inl(int $level, ...$values): void {
    $indent = str_repeat(static::INDENT_STRING, $level);
    self::_print($indent, " ", $values, "\n");
  }
}