diff --git a/src/Abstract/Entity/Browser/Container/Page/Content/Markup.php b/src/Abstract/Entity/Browser/Container/Page/Content/Markup.php index 7b2a5fc7..a875571a 100644 --- a/src/Abstract/Entity/Browser/Container/Page/Content/Markup.php +++ b/src/Abstract/Entity/Browser/Container/Page/Content/Markup.php @@ -9,8 +9,6 @@ use \GtkLabel; use \Yggverse\Yoda\Entity\Browser\Container\Page\Content; -use \Yggverse\Net\Address; - abstract class Markup { public GtkLabel $gtk; @@ -126,25 +124,4 @@ abstract class Markup abstract public function set( string $value ): void; - - // Tools - protected function _url( - string $link - ): ?string - { - $address = new Address( - $link - ); - - if ($address->isRelative()) - { - $address->toAbsolute( - new Address( - $this->content->page->navbar->request->getValue() - ) - ); - } - - return $address->get(); - } } diff --git a/src/Entity/Browser/Container/Page/Content/Gemtext.php b/src/Entity/Browser/Container/Page/Content/Gemtext.php index bec3abea..35eb164f 100644 --- a/src/Entity/Browser/Container/Page/Content/Gemtext.php +++ b/src/Entity/Browser/Container/Page/Content/Gemtext.php @@ -10,15 +10,7 @@ use \GdkEvent; use \GtkLabel; use \Pango; -use \Yggverse\Yoda\Model\Gtk\Pango\Markup; - -use \Yggverse\Gemtext\Document; -use \Yggverse\Gemtext\Entity\Code; -use \Yggverse\Gemtext\Entity\Header; -use \Yggverse\Gemtext\Entity\Link; -use \Yggverse\Gemtext\Entity\Listing; -use \Yggverse\Gemtext\Entity\Quote; -use \Yggverse\Gemtext\Entity\Text; +use \Yggverse\Yoda\Model\Gtk\Pango\Markup\Gemtext as Markup; # use \Yggverse\Gemtext\Parser\Link as LinkParser; @@ -26,177 +18,15 @@ class Gemtext extends \Yggverse\Yoda\Abstract\Entity\Browser\Container\Page\Cont { public function set( string $source, - string | null &$title = null, - bool $preformatted = false + string | null &$title = null ): void { - $document = new Document( - $this->_source = $source - ); - - $line = []; - - foreach ($document->getEntities() as $entity) - { - switch (true) - { - case $entity instanceof Code: - - if ($entity->isInline()) - { - $line[] = Markup::code( - $entity->getAlt() - ); - } - - else - { - $line[] = $preformatted ? Markup::tag(Markup::TAG_CODE, true) - : Markup::tag(Markup::TAG_CODE, false); - - $preformatted = !($preformatted); // toggle - } - - break; - - case $entity instanceof Header: - - if ($preformatted) - { - $line[] = Markup::pre( - $entity->toString() - ); - } - - else - { - switch ($entity->getLevel()) - { - case 1: // # - - $line[] = Markup::h1( - $entity->getText() - ); - - // Find and return document title by first # tag - if (empty($title)) - { - $title = $entity->getText(); - } - - break; - - case 2: // ## - - $line[] = Markup::h2( - $entity->getText() - ); - - break; - - case 3: // ### - - $line[] = Markup::h3( - $entity->getText() - ); - - break; - default: - - throw new Exception; - } - } - - break; - - case $entity instanceof Link: - - if ($preformatted) - { - $line[] = Markup::pre( - $entity->toString() - ); - } - - else - { - $line[] = Markup::h3( - $this->_url( - $entity->getAddress() - ), - $entity->getAddress(), - $entity->getAlt() ? $entity->getAlt() - : $entity->getAddress() // @TODO date - ); - } - - break; - - case $entity instanceof Listing: - - if ($preformatted) - { - $line[] = Markup::pre( - $entity->toString() - ); - } - - else - { - $line[] = Markup::list( - $entity->getItem() - ); - } - - break; - - case $entity instanceof Quote: - - if ($preformatted) - { - $line[] = Markup::pre( - $entity->toString() - ); - } - - else - { - $line[] = Markup::quote( - $entity->getText() - ); - } - - break; - - case $entity instanceof Text: - - if ($preformatted) - { - $line[] = Markup::pre( - $entity->toString() - ); - } - - else - { - $line[] = Markup::text( - $entity->getData(), - $this->content->page->gtk->get_allocated_width() - ); - } - - break; - - default: - - throw new Exception; - } - } - $this->gtk->set_markup( - implode( - PHP_EOL, - $line + Markup::format( + $this->_source = $source, + $this->content->page->navbar->request->getValue(), + $this->content->page->gtk->get_allocated_width(), + $title ) ); } diff --git a/src/Entity/Browser/Container/Page/Content/Plain.php b/src/Entity/Browser/Container/Page/Content/Plain.php index abed3023..b3c8d16c 100644 --- a/src/Entity/Browser/Container/Page/Content/Plain.php +++ b/src/Entity/Browser/Container/Page/Content/Plain.php @@ -4,10 +4,7 @@ declare(strict_types=1); namespace Yggverse\Yoda\Entity\Browser\Container\Page\Content; -use \GdkEvent; -use \GtkLabel; - -use \Yggverse\Yoda\Model\Gtk\Pango\Markup; +use \Yggverse\Yoda\Model\Gtk\Pango\Markup\Plain as Markup; class Plain extends \Yggverse\Yoda\Abstract\Entity\Browser\Container\Page\Content\Markup { @@ -16,7 +13,7 @@ class Plain extends \Yggverse\Yoda\Abstract\Entity\Browser\Container\Page\Conten ): void { $this->gtk->set_markup( - Markup::code( // @TODO + Markup::format( $this->_source = $source ) ); diff --git a/src/Model/Gtk/Pango/Markup.php b/src/Model/Gtk/Pango/Markup.php deleted file mode 100644 index 72378264..00000000 --- a/src/Model/Gtk/Pango/Markup.php +++ /dev/null @@ -1,8 +0,0 @@ -getEntities() as $entity) + { + switch (true) + { + case $entity instanceof Code: + + if ($entity->isInline()) + { + $line[] = self::code( + $entity->getAlt() + ); + } + + else + { + $line[] = $preformatted ? self::tag(self::TAG_CODE, true) + : self::tag(self::TAG_CODE, false); + + $preformatted = !($preformatted); // toggle + } + + break; + + case $entity instanceof Header: + + if ($preformatted) + { + $line[] = self::pre( + $entity->toString() + ); + } + + else + { + switch ($entity->getLevel()) + { + case 1: // # + + $line[] = self::h1( + $entity->getText() + ); + + // Find title by first # tag + if (is_null($title)) + { + $title = $entity->getText(); + } + + break; + + case 2: // ## + + $line[] = self::h2( + $entity->getText() + ); + + break; + + case 3: // ### + + $line[] = self::h3( + $entity->getText() + ); + + break; + default: + + throw new Exception; + } + } + + break; + + case $entity instanceof Link: + + if ($preformatted) + { + $line[] = self::pre( + $entity->toString() + ); + } + + else + { + $line[] = self::h3( + self::_url( + $entity->getAddress(), + $request + ), + $entity->getAddress(), + $entity->getAlt() ? $entity->getAlt() + : $entity->getAddress() // @TODO date + ); + } + + break; + + case $entity instanceof Listing: + + if ($preformatted) + { + $line[] = self::pre( + $entity->toString() + ); + } + + else + { + $line[] = self::list( + $entity->getItem() + ); + } + + break; + + case $entity instanceof Quote: + + if ($preformatted) + { + $line[] = self::pre( + $entity->toString() + ); + } + + else + { + $line[] = self::quote( + $entity->getText() + ); + } + + break; + + case $entity instanceof Text: + + if ($preformatted) + { + $line[] = self::pre( + $entity->toString() + ); + } + + else + { + $line[] = self::text( + $entity->getData(), + $width + ); + } + + break; + + default: + + throw new Exception; + } + } + + return implode( + PHP_EOL, + $line + ); + } + + private static function _url( + string $link, + string $base + ): ?string + { + $address = new Address( + $link + ); + + if ($address->isRelative()) + { + $address->toAbsolute( + new Address( + $base + ) + ); + } + + return $address->get(); + } +} \ No newline at end of file diff --git a/src/Model/Gtk/Pango/Markup/Plain.php b/src/Model/Gtk/Pango/Markup/Plain.php new file mode 100644 index 00000000..f80aafd8 --- /dev/null +++ b/src/Model/Gtk/Pango/Markup/Plain.php @@ -0,0 +1,17 @@ +