ancarda/gemtext-parser

将 Gemtext (text/gemini) 转换为 HTML 的解析器

1.0 2022-04-16 22:51 UTC

This package is auto-updated.

Last update: 2024-09-19 15:09:16 UTC


README

Gemtext (text/gemini) 解析器和 HTML 编码器

License Latest Stable Version Total Downloads builds.sr.ht status

此包实现了符合以下规范的 PHP 解析器:[Gemtext (text/gemini)](https://gemini.circumlunar.space/docs/gemtext.gmi)

有用链接

使用方法

所有底层类都是围绕 Generator 构建的,这使得插入中间件变得容易,同时保持内存使用低。

不幸的是,Generators 的实际使用可能有些复杂。因此,提供了一个工具类 SimpleTransformer,它可以抽象化这一过程,如果您只想快速轻松地将 Gemtext 转换为 HTML。

以下是使用低级(Generator)API 将 Gemtext 转换为 HTML 的示例

<?php

$parser  = new Ancarda\Gemini\Gemtext\Parser;
$encoder = new Ancarda\Gemini\Gemtext\Encoder\HTML;

$nodes = $parser->parse(explode("\n", $gemtext));

$html = implode("\n", iterator_to_array($encoder->encode($nodes)));

以下是高级工具类,它抽象化了这一过程

<?php

$transformer = new \Ancarda\Gemini\Gemtext\Util\SimpleTransformer;

echo $transformer->transform($gemText);

管道化

您可以通过创建一个接受并返回 Generator<Node> 的函数来创建轻量级中间件。这个函数将被插入到 encodeparse 之间,如下所示

$encoder->encode($middleware($parser->parse(explode("\n", $gemtext))));

在此,中间件的 __invoke 方法接受并返回 Generator<Node>。中间件可以进行修改、注入新节点、删除某些节点等。例如

<?php

$reverse_paragraphs = new class {
    public function __invoke(Generator $nodes): Generator
    {
        foreach ($nodes as $node) {
            if ($node instanceof Paragraph) {
                yield new Paragraph(strrev($node->getText()));
            } else {
                yield $node;
            }
        }
    }
};