Browse Source

add new tags word wrap support

PHP-GTK3
yggverse 4 months ago
parent
commit
66b94ee7d3
  1. 47
      src/Abstract/Model/Gtk/Pango/Markup.php
  2. 3
      src/Interface/Model/Gtk/Pango/Markup.php
  3. 3
      src/Model/Gtk/Pango/Markup/Gemtext.php

47
src/Abstract/Model/Gtk/Pango/Markup.php

@ -82,24 +82,33 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup @@ -82,24 +82,33 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup
): string
{
return sprintf(
'* %s', // @TODO
'<span>%s</span>', // @TODO
self::_wrap(
htmlspecialchars(
$value
sprintf(
'* %s',
$value
)
),
self::TAG_LIST,
$width
)
);
}
public static function quote(
string $value
string $value,
int $width = self::WRAP_WIDTH
): string
{
return sprintf(
'<i>%s</i>',
htmlspecialchars(
$value
self::_wrap(
htmlspecialchars(
$value
),
self::TAG_QUOTE,
$width
)
);
}
@ -113,6 +122,7 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup @@ -113,6 +122,7 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup
htmlspecialchars(
$value
),
self::TAG_TEXT,
$width
);
}
@ -131,8 +141,12 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup @@ -131,8 +141,12 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup
bool $close
): string
{
if (in_array($const, [self::TAG_CODE]))
{
if (in_array($const, [
self::TAG_CODE,
self::TAG_LIST,
self::TAG_QUOTE,
self::TAG_TEXT
])) {
return sprintf(
$close ? '</%s>' : '<%s>',
$const
@ -145,6 +159,7 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup @@ -145,6 +159,7 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup
// @TODO optimization wanted, wordwrap / set_line_wrap not solution
protected static function _wrap(
string $string,
string $tag,
int $width,
string $break = PHP_EOL,
int $line = 1,
@ -163,9 +178,21 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup @@ -163,9 +178,21 @@ class Markup implements \Yggverse\Yoda\Interface\Model\Gtk\Pango\Markup
if (isset($words[$line]))
{
$label->set_markup(
implode(
' ' , $words[$line]
) . ' ' . $word
sprintf(
'%s%s%s',
self::tag(
$tag,
false
),
implode(
' ' , $words[$line]
) . ' ' . $word,
self::tag(
$tag,
true
)
)
);
if ($label->get_layout()->get_pixel_size()['width'] > $width)

3
src/Interface/Model/Gtk/Pango/Markup.php

@ -12,6 +12,9 @@ interface Markup @@ -12,6 +12,9 @@ interface Markup
{
public const ENCODING = 'UTF-8';
public const TAG_CODE = 'tt';
public const TAG_QUOTE = 'i';
public const TAG_TEXT = 'span';
public const TAG_LIST = 'span';
public const WRAP_WIDTH = 320;
public static function code(

3
src/Model/Gtk/Pango/Markup/Gemtext.php

@ -157,7 +157,8 @@ class Gemtext extends \Yggverse\Yoda\Abstract\Model\Gtk\Pango\Markup @@ -157,7 +157,8 @@ class Gemtext extends \Yggverse\Yoda\Abstract\Model\Gtk\Pango\Markup
else
{
$line[] = self::quote(
$entity->getText()
$entity->getText(),
$width
);
}

Loading…
Cancel
Save