Added multiline parsing

This commit is contained in:
2023-05-19 11:16:50 -04:00
parent 60a7ebb231
commit 806d1be9cf
12 changed files with 440 additions and 31 deletions

View File

@ -3,12 +3,19 @@ namespace ProVM\Common\Implement;
use Exception;
use ProVM\Common\Define\Log;
use ProVM\Logview\Exception\Parse\EmptyException;
use ProVM\Logview\Exception\Parse\EmptyLineException;
use ProVM\Logview\Log as LogContent;
use ProVM\Common\Define\Parser as Definition;
use function Safe\fopen;
use function Safe\{fopen, fclose};
abstract class Parser implements Definition
{
public function isMultiline(string $filename): bool
{
return false;
}
public function total(string $filename): int
{
try {
@ -24,8 +31,31 @@ abstract class Parser implements Definition
return 0;
}
}
public function parse(string $content): Log
public function parse(mixed &$file_handler): Log
{
$content = fgets($file_handler);
if (!$content) {
$meta_data = stream_get_meta_data($file_handler);
throw new EmptyException($meta_data['uri'], ftell($file_handler));
}
if (trim($content) === '') {
$meta_data = stream_get_meta_data($file_handler);
throw new EmptyLineException($meta_data['uri'], ftell($file_handler));
}
return new LogContent($content);
}
public function advance(mixed &$file_handler, int $offset): void
{
if ($offset === 0) {
return;
}
$cnt = 0;
while(!feof($file_handler)) {
fgets($file_handler);
$cnt ++;
if ($cnt >= $offset) {
break;
}
}
}
}