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,
|
'message' => $str,
|
||||||
'file' => $file,
|
'file' => $file,
|
||||||
'line' => $line,
|
'line' => $line,
|
||||||
'context' => $context,
|
// 'context' => $context,
|
||||||
], TRUE);
|
], TRUE);
|
||||||
file_put_contents('kilo.log', $msg, FILE_APPEND);
|
file_put_contents('kilo.log', $msg, FILE_APPEND);
|
||||||
|
|
||||||
|
@ -188,7 +188,6 @@ class Editor {
|
|||||||
|
|
||||||
if ($at === $this->numRows)
|
if ($at === $this->numRows)
|
||||||
{
|
{
|
||||||
$row->idx = $this->numRows;
|
|
||||||
$this->rows[] = $row;
|
$this->rows[] = $row;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -206,17 +205,15 @@ class Editor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->rows[$at]->update();
|
||||||
|
|
||||||
|
$this->dirty++;
|
||||||
|
|
||||||
// Re-tokenize the file
|
// Re-tokenize the file
|
||||||
if ($updateSyntax && $this->syntax->filetype === 'PHP')
|
if ($updateSyntax && $this->syntax->filetype === 'PHP')
|
||||||
{
|
{
|
||||||
$this->refreshPHPSyntax();
|
$this->refreshPHPSyntax();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->rows[$at]->update();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->dirty++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function deleteRow(int $at): void
|
protected function deleteRow(int $at): void
|
||||||
@ -270,33 +267,30 @@ class Editor {
|
|||||||
{
|
{
|
||||||
if ($this->cursorX === 0)
|
if ($this->cursorX === 0)
|
||||||
{
|
{
|
||||||
$this->insertRow($this->cursorY, '', FALSE);
|
$this->insertRow($this->cursorY, '');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$row = $this->rows[$this->cursorY];
|
$row = $this->rows[$this->cursorY];
|
||||||
$chars = $row->chars;
|
$chars = $row->chars;
|
||||||
$newRowChars = substr($chars, $this->cursorX);
|
$newChars = substr($chars, 0, $this->cursorX);
|
||||||
$row->chars = 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
|
// 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
|
// Re-tokenize the file
|
||||||
if ($this->syntax->filetype === 'PHP')
|
if ($this->syntax->filetype === 'PHP')
|
||||||
{
|
{
|
||||||
$this->refreshPHPSyntax();
|
$this->refreshPHPSyntax();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->cursorY++;
|
|
||||||
$this->cursorX = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function deleteChar(): void
|
protected function deleteChar(): void
|
||||||
@ -323,7 +317,7 @@ class Editor {
|
|||||||
// Re-tokenize the file
|
// Re-tokenize the file
|
||||||
if ($this->syntax->filetype === 'PHP')
|
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 {
|
class Row {
|
||||||
use MagicProperties;
|
use MagicProperties;
|
||||||
|
|
||||||
public string $chars = '';
|
private string $chars = '';
|
||||||
public string $render = '';
|
public string $render = '';
|
||||||
|
|
||||||
public array $hl = [];
|
public array $hl = [];
|
||||||
@ -183,11 +183,23 @@ class Row {
|
|||||||
case 'rsize':
|
case 'rsize':
|
||||||
return strlen($this->render);
|
return strlen($this->render);
|
||||||
|
|
||||||
|
case 'chars':
|
||||||
|
return $this->chars;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __set(string $key, $value): void
|
||||||
|
{
|
||||||
|
if ($key === 'chars')
|
||||||
|
{
|
||||||
|
$this->chars = $value;
|
||||||
|
$this->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function __toString(): string
|
public function __toString(): string
|
||||||
{
|
{
|
||||||
return $this->chars . "\n";
|
return $this->chars . "\n";
|
||||||
@ -232,6 +244,8 @@ class Row {
|
|||||||
{
|
{
|
||||||
$idx = 0;
|
$idx = 0;
|
||||||
|
|
||||||
|
$this->render = '';
|
||||||
|
|
||||||
for ($i = 0; $i < $this->size; $i++)
|
for ($i = 0; $i < $this->size; $i++)
|
||||||
{
|
{
|
||||||
if ($this->chars[$i] === "\t")
|
if ($this->chars[$i] === "\t")
|
||||||
@ -379,7 +393,28 @@ class Row {
|
|||||||
// Keywords
|
// Keywords
|
||||||
if ($prevSep)
|
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);
|
$klen = strlen($k);
|
||||||
$nextCharOffset = $i + $klen;
|
$nextCharOffset = $i + $klen;
|
||||||
@ -407,7 +442,7 @@ class Row {
|
|||||||
$i += $klen - 1;
|
$i += $klen - 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
}
|
}
|
||||||
|
|
||||||
$prevSep = is_separator($char);
|
$prevSep = is_separator($char);
|
||||||
|
Loading…
Reference in New Issue
Block a user