update namespace

This commit is contained in:
yggverse 2024-06-24 03:04:09 +03:00
parent 921458f25c
commit 76a34e4ea8
5 changed files with 151 additions and 117 deletions

69
src/Entity/Code.php Normal file
View file

@ -0,0 +1,69 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Entity;
class Code
{
public const TAG = '```';
private ?string $_alt;
private bool $_inline;
public function __construct(
?string $alt = null,
bool $inline = false
) {
$this->setAlt(
$alt
);
$this->setInline(
$inline
);
}
public function setAlt(
?string $alt
): void
{
if ($alt)
{
$alt = trim(
$alt
);
}
$this->_alt = $alt;
}
public function getAlt(): ?string
{
return $this->_alt;
}
public function setInline(
bool $inline
): void
{
$this->_inline = $inline;
}
public function isInline(): bool
{
return $this->_inline;
}
public function toString(): string
{
if ($this->_inline)
{
return $this->_alt ? self::TAG . $this->_alt . self::TAG
: self::TAG;
}
return self::TAG;
}
}

View file

@ -1,67 +0,0 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Entity;
class Line
{
private string $_data;
private bool $_escaped;
private ?int $_number;
public function __construct(
string $data = '',
bool $escaped = false,
?int $number = null
) {
$this->setData(
$data
);
$this->setEscaped(
$escaped
);
$this->setNumber(
$number
);
}
public function getData(): string
{
return $this->_data;
}
public function setData(
string $data
): void
{
$this->_data = $data;
}
public function isEscaped(): bool
{
return $this->_escaped;
}
public function setEscaped(
bool $escaped
): void
{
$this->_escaped = $escaped;
}
public function getNumber(): ?int
{
return $this->_number;
}
public function setNumber(
?int $number
): void
{
$this->_number = $number;
}
}

76
src/Parser/Code.php Normal file
View file

@ -0,0 +1,76 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Parser;
class Code
{
public static function match(
string $line,
array &$matches = []
): bool
{
// Multiple format resolver
// https://geminiprotocol.net/docs/gemtext.gmi#preformatted-text
switch (true)
{
// Inline ^```preformatted```
case preg_match(
'/^(?<tag>[`]{3})(?<inline>[^`]+)(?<close>[`]{3})$/m',
$line,
$matches
):
return true;
// Multiline with optional alt support
case preg_match(
'/^(?<tag>[`]{3})(?<alt>[^`]+)$/m',
$line,
$matches
):
return true;
}
return false;
}
public static function getAlt(
string $line
): ?string
{
$matches = [];
if (self::match($line, $matches))
{
if (isset($matches['alt']))
{
$alt = trim(
$matches['alt']
);
if ($alt)
{
return $alt;
}
}
}
return null;
}
public static function isInline(
string $line
): bool
{
$matches = [];
if (self::match($line, $matches))
{
return isset($matches['inline']);
}
return false;
}
}

View file

@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Parser\Line;
class Code
{
public static function match(
\Yggverse\Gemtext\Entity\Line $line,
array &$matches = [],
bool &$inline = false
): bool
{
// Multiple format resolver
// https://geminiprotocol.net/docs/gemtext.gmi#preformatted-text
switch (true)
{
// Inline ^```preformatted```
case preg_match(
'/^[`]{3}\s*((?<code>[^`]+))?[`]{3}$/m',
$line->getData(),
$matches
):
// Toggle escaped status
return $inline = true;
// Multiline with optional alt support
case preg_match(
'/^[`]{3}\s*(?<alt>[^`]+)$/m',
$line->getData(),
$matches
):
return true;
}
return false;
}
}

View file

@ -2,29 +2,24 @@
declare(strict_types=1);
namespace Yggverse\Gemtext\Parser\Line;
namespace Yggverse\Gemtext\Parser;
class Link
{
public static function match(
\Yggverse\Gemtext\Entity\Line $line,
string $line,
array &$matches = []
): bool
{
if ($line->isEscaped())
{
return false;
}
return (bool) preg_match(
'/^=>\s*(?<address>[^\s]+)(\s(?<date>\d{4}-\d{2}-\d{2}))?(\s(?<alt>.+))?$/m',
$line->getData(),
$line,
$matches
);
}
public static function getAddress(
\Yggverse\Gemtext\Entity\Line $line
string $line
): ?string
{
$matches = [];
@ -48,7 +43,7 @@ class Link
}
public static function getDate(
\Yggverse\Gemtext\Entity\Line $line
string $line
): ?string
{
$matches = [];
@ -72,7 +67,7 @@ class Link
}
public static function getAlt(
\Yggverse\Gemtext\Entity\Line $line
string $line
): ?string
{
$matches = [];