ancarda / gemtext-parser
将 Gemtext (text/gemini) 转换为 HTML 的解析器
1.0
2022-04-16 22:51 UTC
Requires
- php: ^8.0
Requires (Dev)
- ancarda/coverage-enforcer: ^1.0
- infection/infection: ^0.26.6
- phpstan/phpstan: ^1.5
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-strict-rules: ^1.1
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
README
Gemtext (text/gemini) 解析器和 HTML 编码器
此包实现了符合以下规范的 PHP 解析器:[Gemtext (text/gemini)](https://gemini.circumlunar.space/docs/gemtext.gmi)
有用链接
- 源代码:https://git.sr.ht/~ancarda/gemtext-parser/
- 问题跟踪:https://todo.sr.ht/~ancarda/gemtext-parser/
- 邮件列表:https://lists.sr.ht/~ancarda/gemtext-parser/
使用方法
所有底层类都是围绕 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>
的函数来创建轻量级中间件。这个函数将被插入到 encode
和 parse
之间,如下所示
$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; } } } };