mirror of
https://github.com/YGGverse/gemini-php.git
synced 2025-03-13 06:01:58 +00:00
drop Gtk3/Pango class from future release
This commit is contained in:
parent
325ac1eb8c
commit
639f384f29
24
README.md
24
README.md
@ -109,30 +109,6 @@ var_dump(
|
||||
);
|
||||
```
|
||||
|
||||
## GTK3
|
||||
|
||||
### Pango
|
||||
|
||||
Converter to GTK3-compatible Pango format
|
||||
|
||||
#### Pango::fromGemtext
|
||||
|
||||
``` php
|
||||
$pango = \Yggverse\Gemini\Pango::fromGemtext(
|
||||
$gemtext
|
||||
);
|
||||
```
|
||||
|
||||
#### Pango::fromGemtextBody
|
||||
|
||||
``` php
|
||||
$pango = \Yggverse\Gemini\Pango::fromGemtextBody(
|
||||
new \Yggverse\Gemini\Gemtext\Body(
|
||||
$gemtext
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
## DokuWiki
|
||||
|
||||
Toolkit provides DokuWiki API for Gemini.
|
||||
|
@ -1,225 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yggverse\Gemini\Gtk3;
|
||||
|
||||
class Pango
|
||||
{
|
||||
public static function fromGemtext(
|
||||
string $gemtext
|
||||
): string
|
||||
{
|
||||
return self::fromGemtextBody(
|
||||
new \Yggverse\Gemini\Gemtext\Body(
|
||||
$gemtext
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public static function fromGemtextBody(
|
||||
\Yggverse\Gemini\Gemtext\Body $body
|
||||
): string
|
||||
{
|
||||
$lines = $body->getLines();
|
||||
|
||||
$raw = [];
|
||||
|
||||
$escaped = [];
|
||||
|
||||
// Code
|
||||
$code = $body->getCode();
|
||||
|
||||
if (count($code) % 2 == 0) // make sure tags has pairs
|
||||
{
|
||||
$i = 1;
|
||||
|
||||
foreach ($code as $index => $capture)
|
||||
{
|
||||
// Replace code tags
|
||||
if ($i % 2 == 0)
|
||||
{
|
||||
$lines[$index] = '</tt>';
|
||||
|
||||
// Skip code format inside the tags by raw registry
|
||||
foreach (array_slice($lines, $offset, $index - $offset) as $start => $line)
|
||||
{
|
||||
$raw[$start + $offset] = $line;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if ($capture)
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<b>%s</b><tt>',
|
||||
self::escape(
|
||||
$capture
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$lines[$index] = '<tt>';
|
||||
}
|
||||
|
||||
$offset = $index + 1;
|
||||
}
|
||||
|
||||
$escaped[] = $index;
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
// H1
|
||||
foreach ($body->getH1() as $index => $value)
|
||||
{
|
||||
if (!isset($raw[$index]))
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<span size="xx-large">%s</span>',
|
||||
self::escape(
|
||||
$value
|
||||
)
|
||||
);
|
||||
|
||||
$escaped[] = $index;
|
||||
}
|
||||
}
|
||||
|
||||
// H2
|
||||
foreach ($body->getH2() as $index => $value)
|
||||
{
|
||||
if (!isset($raw[$index]))
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<span size="x-large">%s</span>',
|
||||
self::escape(
|
||||
$value
|
||||
)
|
||||
);
|
||||
|
||||
$escaped[] = $index;
|
||||
}
|
||||
}
|
||||
|
||||
// H3
|
||||
foreach ($body->getH3() as $index => $value)
|
||||
{
|
||||
if (!isset($raw[$index]))
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<span size="large">%s</span>',
|
||||
self::escape(
|
||||
$value
|
||||
)
|
||||
);
|
||||
|
||||
$escaped[] = $index;
|
||||
}
|
||||
}
|
||||
|
||||
// Quote
|
||||
foreach ($body->getQuote() as $index => $value)
|
||||
{
|
||||
if (!isset($raw[$index]))
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<i>%s</i>',
|
||||
self::escape(
|
||||
$value
|
||||
)
|
||||
);
|
||||
|
||||
$escaped[] = $index;
|
||||
}
|
||||
}
|
||||
|
||||
// Links
|
||||
foreach ($body->getLinks() as $index => $line)
|
||||
{
|
||||
if (!isset($raw[$index]))
|
||||
{
|
||||
$link = new \Yggverse\Gemini\Gemtext\Link(
|
||||
$line
|
||||
);
|
||||
|
||||
if (!$address = $link->getAddress())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$alt = $link->getAlt())
|
||||
{
|
||||
if (!$alt = $link->getDate())
|
||||
{
|
||||
$alt = urldecode(
|
||||
$address
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($alt == $address)
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<a href="%s">%s</a>',
|
||||
self::escape(
|
||||
$address
|
||||
),
|
||||
self::escape(
|
||||
$alt
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$lines[$index] = sprintf(
|
||||
'<a href="%s" title="%s">%s</a>',
|
||||
self::escape(
|
||||
$address
|
||||
),
|
||||
self::escape(
|
||||
urldecode(
|
||||
$address
|
||||
)
|
||||
),
|
||||
self::escape(
|
||||
$alt
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$escaped[] = $index;
|
||||
}
|
||||
}
|
||||
|
||||
// Escape special chars for non escaped lines
|
||||
foreach ($body->getLines() as $index => $value)
|
||||
{
|
||||
if (!in_array($index, $escaped))
|
||||
{
|
||||
$lines[$index] = self::escape(
|
||||
$value
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return implode(
|
||||
PHP_EOL,
|
||||
$lines
|
||||
);
|
||||
}
|
||||
|
||||
public static function escape(
|
||||
string $value
|
||||
): string
|
||||
{
|
||||
return htmlspecialchars(
|
||||
$value
|
||||
);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user