php-termbuf/src/Renderer/TerminalRenderer.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);
}
}