Fix some editing issues
This commit is contained in:
parent
3d2bc7ef48
commit
c16b9aa6f0
2
kilo
2
kilo
@ -17,7 +17,7 @@ set_error_handler(static function (int $no, $str, $file, $line, $context) {
|
||||
'message' => $str,
|
||||
'file' => $file,
|
||||
'line' => $line,
|
||||
'context' => $context,
|
||||
// 'context' => $context,
|
||||
], TRUE);
|
||||
file_put_contents('kilo.log', $msg, FILE_APPEND);
|
||||
|
||||
|
@ -188,7 +188,6 @@ class Editor {
|
||||
|
||||
if ($at === $this->numRows)
|
||||
{
|
||||
$row->idx = $this->numRows;
|
||||
$this->rows[] = $row;
|
||||
}
|
||||
else
|
||||
@ -206,17 +205,15 @@ class Editor {
|
||||
}
|
||||
}
|
||||
|
||||
$this->rows[$at]->update();
|
||||
|
||||
$this->dirty++;
|
||||
|
||||
// Re-tokenize the file
|
||||
if ($updateSyntax && $this->syntax->filetype === 'PHP')
|
||||
{
|
||||
$this->refreshPHPSyntax();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->rows[$at]->update();
|
||||
}
|
||||
|
||||
$this->dirty++;
|
||||
}
|
||||
|
||||
protected function deleteRow(int $at): void
|
||||
@ -270,33 +267,30 @@ class Editor {
|
||||
{
|
||||
if ($this->cursorX === 0)
|
||||
{
|
||||
$this->insertRow($this->cursorY, '', FALSE);
|
||||
$this->insertRow($this->cursorY, '');
|
||||
}
|
||||
else
|
||||
{
|
||||
$row = $this->rows[$this->cursorY];
|
||||
$chars = $row->chars;
|
||||
$newRowChars = substr($chars, $this->cursorX);
|
||||
$row->chars = substr($chars, 0, $this->cursorX);
|
||||
$newChars = substr($chars, 0, $this->cursorX);
|
||||
|
||||
// Truncate the previous row
|
||||
$row->chars = $newChars;
|
||||
$row->update();
|
||||
|
||||
// Add a new row, with the contents from the cursor to the end of the line
|
||||
$this->insertRow($this->cursorY + 1, $newRowChars, FALSE);
|
||||
$this->insertRow($this->cursorY + 1, substr($chars, $this->cursorX), FALSE);
|
||||
}
|
||||
|
||||
// Update the (now previous) row
|
||||
if ($this->syntax->filetype !== 'PHP')
|
||||
{
|
||||
$row->update();
|
||||
}
|
||||
}
|
||||
$this->cursorY++;
|
||||
$this->cursorX = 0;
|
||||
|
||||
// Re-tokenize the file
|
||||
if ($this->syntax->filetype === 'PHP')
|
||||
{
|
||||
$this->refreshPHPSyntax();
|
||||
}
|
||||
|
||||
$this->cursorY++;
|
||||
$this->cursorX = 0;
|
||||
}
|
||||
|
||||
protected function deleteChar(): void
|
||||
@ -323,7 +317,7 @@ class Editor {
|
||||
// Re-tokenize the file
|
||||
if ($this->syntax->filetype === 'PHP')
|
||||
{
|
||||
$this->syntax->tokens = get_php_tokens($this->rowsToString());
|
||||
$this->refreshPHPSyntax();
|
||||
}
|
||||
}
|
||||
|
||||
|
41
src/Row.php
41
src/Row.php
@ -9,7 +9,7 @@ namespace Kilo;
|
||||
class Row {
|
||||
use MagicProperties;
|
||||
|
||||
public string $chars = '';
|
||||
private string $chars = '';
|
||||
public string $render = '';
|
||||
|
||||
public array $hl = [];
|
||||
@ -183,11 +183,23 @@ class Row {
|
||||
case 'rsize':
|
||||
return strlen($this->render);
|
||||
|
||||
case 'chars':
|
||||
return $this->chars;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
public function __set(string $key, $value): void
|
||||
{
|
||||
if ($key === 'chars')
|
||||
{
|
||||
$this->chars = $value;
|
||||
$this->update();
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->chars . "\n";
|
||||
@ -232,6 +244,8 @@ class Row {
|
||||
{
|
||||
$idx = 0;
|
||||
|
||||
$this->render = '';
|
||||
|
||||
for ($i = 0; $i < $this->size; $i++)
|
||||
{
|
||||
if ($this->chars[$i] === "\t")
|
||||
@ -379,7 +393,28 @@ class Row {
|
||||
// Keywords
|
||||
if ($prevSep)
|
||||
{
|
||||
foreach ($keywords1 as $k)
|
||||
$findKeywords = function (array $keywords, int $syntaxType) use (&$i): void
|
||||
{
|
||||
foreach ($keywords as $k)
|
||||
{
|
||||
$klen = strlen($k);
|
||||
$nextCharOffset = $i + $klen;
|
||||
$isEndOfLine = $nextCharOffset >= $this->rsize;
|
||||
$nextChar = ($isEndOfLine) ? "\0" : $this->render[$nextCharOffset];
|
||||
|
||||
if (substr($this->render, $i, $klen) === $k && is_separator($nextChar))
|
||||
{
|
||||
array_replace_range($this->hl, $i, $klen, $syntaxType);
|
||||
$i += $klen - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$findKeywords($keywords1, Highlight::KEYWORD1);
|
||||
$findKeywords($keywords2, Highlight::KEYWORD2);
|
||||
|
||||
/* foreach ($keywords1 as $k)
|
||||
{
|
||||
$klen = strlen($k);
|
||||
$nextCharOffset = $i + $klen;
|
||||
@ -407,7 +442,7 @@ class Row {
|
||||
$i += $klen - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
$prevSep = is_separator($char);
|
||||
|
Loading…
Reference in New Issue
Block a user