40 lines
852 B
PHP
40 lines
852 B
PHP
<?php
|
|
|
|
namespace NoccyLabs\TermBuf\Renderer;
|
|
|
|
use NoccyLabs\TermBuf\TerminalBuffer;
|
|
|
|
class TerminalRenderer
|
|
{
|
|
|
|
|
|
public function render(TerminalBuffer $buffer)
|
|
{
|
|
|
|
$lines = $buffer->getLines();
|
|
$cols = $buffer->getColumns();
|
|
|
|
$this->clearScreen();
|
|
for ($line = 0; $line < $lines; $line++) {
|
|
for ($column = 0; $column < $cols; $column++) {
|
|
$this->renderChar($line, $column, $buffer->bufferGetRaw($line, $column));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private function clearScreen()
|
|
{
|
|
echo "\e[H\e[2J";
|
|
}
|
|
|
|
private function renderChar(int $line, int $column, array $raw)
|
|
{
|
|
[ $char, $attrs ] = $raw;
|
|
if ($char === ' ') return;
|
|
$attr = join(";", $attrs)??"0";
|
|
printf("\e[%d;%dH\e[%sm%s", $line + 1, $column + 1, $attr, $char);
|
|
}
|
|
|
|
}
|