mediawiki / parser-hooks
在 MediaWiki 上添加 OOP 和声明式解析器钩子接口
Requires
- php: >=7.2
- param-processor/param-processor: ^1.3.2
README
声明式创建 MediaWiki 解析器钩子的 OOP 接口。
这是一个用于 MediaWiki 扩展的 PHP 库。它本身并不添加或增强您的维基功能。
平台兼容性和发布状态
列出的 PHP 和 MediaWiki 版本范围是已知 ParserHooks 可以工作的版本。它也可能与更近期的 PHP 和 MediaWiki 版本兼容,但这不能保证。最小要求的增加用粗体表示。有关更改的详细列表,请参阅 发布说明。
安装
您可以使用 Composer 下载并安装此包以及其依赖项。或者,您可以直接克隆 git 仓库并自行处理加载。
Composer
要将此包作为本地、项目特定的依赖项添加到项目中,只需将 mediawiki/parser-hooks
依赖项添加到您的项目 composer.json
文件中。下面是一个仅定义对 ParserHooks 1.6 依赖的最小 composer.json
文件示例:
{
"require": {
"mediawiki/parser-hooks": "~1.6"
}
}
手动
通过 git 或其他方式获取 ParserHooks 代码。还要获取所有依赖项。您可以在 composer.json 文件的 "require" 部分中找到依赖项列表。加载所有依赖项并加载 ParserHooks 库,通过包含其入口点:ParserHooks.php。
用法
所有类都位于 ParserHooks 命名空间中,该命名空间被映射到 src/ 目录。
一般概念
该库提供的声明式 OOP 接口允许您单独定义解析器钩子的签名及其处理程序。库使用此定义中指定的参数通过 ParamProcessor 库进行参数处理。这意味着您为解析函数编写的处理程序不需要关心解析函数的名称或如何处理其参数。它有一个 "sizes" 参数,它接受正整数的数组?您的处理程序将始终接收到一个实际的整数数组,无需进行任何解析、验证、默认值等。
HookDefinition
HookDefinition 类的实例代表解析器钩子的签名。它定义了解析器钩子的名称和它接受的参数(包括它们的类型、默认值等)。它不定义任何行为,因此是纯声明性的。此类实例用于处理实际的解析器钩子,但也可以用于其他上下文。例如,您可以将这些定义提供给根据它们生成解析器钩子文档的工具。
参数定义是 ParamProcessor\ParamDefinition 对象。有关如何指定这些参数,请参阅 ParamProcessor 文档。
HookHandler
您的解析器钩子实际行为是在 HookHandler 的实现中实现的。这些实现有一个 handle 方法,该方法接收一个 Parser 和一个 ParamProcssor\ProcessingResult,并应返回一个字符串。
整合一切
此库还提供了两个额外的类,FunctionRunner 和 HookRegistrant。前者负责根据 HookDefinition 调用 ParamProcessor 库。后者负责将 HookDefinition 对象定义的解析器钩子注册到 MediaWiki 解析器对象。
$awesomeHookDefinition = new HookDefinition( 'awesome', [ /* ... */ ] ); $anotherHookDefinition = new HookDefinition( 'another', [ /* ... */ ] ); $awesomeHookHandler = new AwesomeHookHandler( /* ... */ ); $anotherHookHandler = new AnotherHookHandler( /* ... */ ); $hookRegistrant = new HookRegistrant( $mediaWikiParser ); $hookRegistrant->registerFunctionHandler( $awesomeHookDefinition, $awesomeHookHandler ); $hookRegistrant->registerFunctionHandler( $anotherHookDefinition, $anotherHookHandler );
如果您想使用相同的钩子,但具有不同的默认行为,可以在上述代码之上进行以下操作以避免任何形式的重复
$hookRegistrant->registerFunctionHandler( $extraAwesomeHookDefinition, $awesomeHookHandler );
其中 $extraAwesomeHookDefinition 是 $awesomeHookDefinition 的一个变体。
解析器函数和标签钩子
要注册解析器函数,请使用 HookRegistrant::registerFunctionHandler。
$hookRegistrant->registerFunctionHandler( $awesomeHookDefinition, $awesomeHookHandler );
要注册标签钩子,请使用 HookRegistrant::registerHookHandler。
$hookRegistrant->registerHookHandler( $awesomeHookDefinition, $awesomeHookHandler );
这两个函数接受完全相同的参数,因此一旦创建了 HookDefinition 和 HookHandler,就可以将它们注册为解析器函数和标签钩子,无需额外工作。
测试
此库附带了一套 PHPUnit 测试,涵盖了所有非平凡代码。您可以使用根目录中找到的 PHPUnit 配置文件运行这些测试。测试还可以通过 TravisCI 运行,因为根目录中也提供了一个 TravisCI 配置文件。
您可以使用此命令运行 MediaWiki 安装中 tests/phpunit
目录的测试
php phpunit.php --wiki wikiName -c ../../extensions/ParserHooks/
作者
ParserHooks 由 Jeroen De Dauw 编写,这是一个作为支持 SubPageList MediaWiki 扩展 的爱好项目。
发行说明
1.6.1 (2020-01-14)
- 更新了翻译
1.6 (2019-07-14)
- 添加了对 PHP 7.2、7.3 和 7.4 的支持
- 添加了对 MediaWiki 1.31、1.32 和 1.33 的支持
- 不再支持 PHP 7.1 及更早版本
- 不再支持 MediaWiki 1.30 及更早版本
- 更新了翻译
1.5 (2016-03-05)
- 现在在 Special:Version 上显示许可证
- 更新了翻译
- 进行了微小的样式改进
- 确保扩展与 PHP 7 和 MediaWiki 至少 1.27 版本兼容
1.4 (2014-07-05)
- 更改了 PHPUnit 引导,以便可以通过 MediaWiki 测试运行器运行测试
- 更新了 CI 配置,以测试针对多个 MediaWiki 版本的代码
- 更新了翻译
1.3 (2014-06-25)
- 更新了翻译
- 更改了类加载为 PSR-4
- 将使用的 Validator 版本更新到 2.x >= 2.0.4
1.2.1 (2013-11-22)
- 将使用的 Validator 版本从 1.0 alpha 更新到 1.0.0.1 稳定版或更高版本
1.2 (2013-09-30)
- 修复了 FunctionRunner 中的参数处理错误
- 添加了对标签钩子处理的系统测试
1.1 (2013-09-25)
- 添加了 HookRunner 和 HookRegistrant::registerHook
- 添加了 HookRegistrant::registerFunctionHandler 和 HookRegistrant::registerHookHandler
- 修复了 FunctionRunner 中的参数处理错误
- 改进了 HookRegistrantTest
您可以在 发布博客文章 中阅读
1.0.1 (2013-09-22)
- 改进了 HookDefinition 文档
- 在 HookDefinition 中添加了额外的类型检查
- 为 HookDefinition 添加了额外的测试
- 添加了 coveralls.io 支持
- 添加了 PHPUnit 文件白名单(以生成更准确、更快的覆盖率报告)
1.0 (2013-07-14)
- 初始发布 (博客文章)