Skip to content

Commit

Permalink
Merge pull request #1489 from natanfelles/cli_strlen
Browse files Browse the repository at this point in the history
Add CLI::strlen()
  • Loading branch information
lonnieezell authored Nov 16, 2018
2 parents fb60b92 + 1ebfcda commit f7de7fd
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
33 changes: 30 additions & 3 deletions system/CLI/CLI.php
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,33 @@ public static function color(string $text, string $foreground, string $backgroun

//--------------------------------------------------------------------

/**
* Get the number of characters in string having encoded characters
* and ignores styles set by the color() function
*
* @param string $string
*
* @return integer
*/
public static function strlen(string $string): int
{
foreach (static::$foreground_colors as $color)
{
$string = strtr($string, ["\033[" . $color . 'm' => '']);
}

foreach (static::$background_colors as $color)
{
$string = strtr($string, ["\033[" . $color . 'm' => '']);
}

$string = strtr($string, ["\033[4m" => '', "\033[0m" => '']);

return mb_strlen($string);
}

//--------------------------------------------------------------------

/**
* Attempts to determine the width of the viewable CLI window.
* This only works on *nix-based systems, so return a sane default
Expand Down Expand Up @@ -833,7 +860,7 @@ public static function table(array $tbody, array $thead = [])
foreach ($table_rows[$row] as $col)
{
// Sets the size of this column in the current row
$all_cols_lengths[$row][$column] = mb_strlen($col);
$all_cols_lengths[$row][$column] = static::strlen($col);

// If the current column does not have a value among the larger ones
// or the value of this is greater than the existing one
Expand All @@ -855,7 +882,7 @@ public static function table(array $tbody, array $thead = [])
$column = 0;
foreach ($table_rows[$row] as $col)
{
$diff = $max_cols_lengths[$column] - mb_strlen($col);
$diff = $max_cols_lengths[$column] - static::strlen($col);
if ($diff)
{
$table_rows[$row][$column] = $table_rows[$row][$column] . str_repeat(' ', $diff);
Expand All @@ -875,7 +902,7 @@ public static function table(array $tbody, array $thead = [])
$cols = '+';
foreach ($table_rows[$row] as $col)
{
$cols .= str_repeat('-', mb_strlen($col) + 2) . '+';
$cols .= str_repeat('-', static::strlen($col) + 2) . '+';
}
$table .= $cols . PHP_EOL;
}
Expand Down
6 changes: 6 additions & 0 deletions tests/system/CLI/CLITest.php
Original file line number Diff line number Diff line change
Expand Up @@ -377,4 +377,10 @@ public function tableProvider()
],
];
}

public function testStrlen()
{
$this->assertEquals(18, mb_strlen(CLI::color('success', 'green')));
$this->assertEquals(7, CLI::strlen(CLI::color('success', 'green')));
}
}

0 comments on commit f7de7fd

Please sign in to comment.