create Entity namespace

This commit is contained in:
yggverse 2024-06-23 19:22:56 +03:00
parent c23877166c
commit 207f785d7f
3 changed files with 212 additions and 0 deletions

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

@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Entity;
class Code
{
/*
* Helper method
*
* Detect line given is escaped by previous iteration
*/
public static function escaped(string $line, bool &$status): bool
{
if (preg_match('/^```/m', $line))
{
$status = !($status); // toggle
}
return $status;
}
}

67
src/Entity/Line.php Normal file
View file

@ -0,0 +1,67 @@
<?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 getEscaped(): 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;
}
}

122
src/Entity/Link.php Normal file
View file

@ -0,0 +1,122 @@
<?php
declare(strict_types=1);
namespace Yggverse\Gemtext\Entity;
class Link
{
private string $_address;
private ?string $_alt;
private ?string $_date;
public function __construct(
string $address,
?string $alt = null,
?string $date = null
) {
$this->setAddress(
$address
);
$this->setAlt(
$alt
);
$this->setDate(
$date
);
}
public function setAddress(
string $address
): void
{
$address = trim(
$address
);
if (empty($address))
{
throw new \Exception(
_('Address required')
);
}
$this->_address = $address;
}
public function getAddress(): string
{
return $this->_address;
}
public function setAlt(
?string $alt
): void
{
if ($alt)
{
$alt = trim(
$alt
);
}
$this->_alt = $alt;
}
public function getAlt(): ?string
{
return $this->_alt;
}
public function setDate(
?string $date
): void
{
if ($date)
{
$date = trim(
$date
);
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/'))
{
throw new \Exception(
_('Date does not match format YYYY-MM-DD')
);
}
}
$this->_date = $date;
}
public function getDate(): ?string
{
return $this->_date;
}
public function toString(): string
{
$parts = [
'=>',
$this->getAddress()
];
if ($date = $this->getDate())
{
$parts[] = $date;
}
if ($alt = $this->getAlt())
{
$parts[] = $alt;
}
return implode(
' ',
$parts
);
}
}