语法插件是扩展DokuWiki语法的插件。为了理解在DokuWiki中注册新语法需要什么,您应该阅读解析器是如何工作的。
语法插件示例需要:
syntax_plugin_examplelib/plugins/example/syntax.php
此外,还需 plugin.info.txt 文件。有关插件及其文件以及如何创建更多语法组件的详细信息,请参阅插件文件结构。
该类至少需要实现以下函数:
getType() 应返回此插件定义的语法类型(见下文)getSort() 返回一个数字,用于确定添加模式的顺序,另请参阅解析器、添加模式的顺序和getSort list。?connectTo($mode) 此函数继承自Doku_Parser_Mode 2)。这里是注册与语法匹配所需的正则表达式的位置.handle($match, $state, $pos, Doku_Handler $handler) 准备匹配的语法以便在渲染器中使用render($mode, Doku_Renderer $renderer, $data) 呈现内容需要时可以重写以下附加方法:
getPType() 定义如何针对段落处理此语法. 返回:normal — 默认值,如果方法未被重写,将使用该值)插件输出将位于段落(或另一个块元素)内,段落将不在其中block — 打开的段落将在插件输出之前关闭,插件输出不会以段落开头stack — 打开的段落将在插件输出之前关闭,插件输出将包装其他段落getAllowedTypes() (默认值: array()) 应该返回一个模式类型数组,该数组可以嵌套在插件自己的标记中。accepts($mode) 此函数用于告诉解析器插件是否在自己的标记中接受语法模式 $mode 。默认行为是根据继承的属性allowedModes持有的模式数组测试$mode。此数组还填充了getAllowedTypes()中给定的模式类型中的模式。可以根据需要定义其他函数。建议在自定义函数前面加下划线,以避免与将来的插件规范增强功能发生名称冲突。
allowedModes 初始值,一个空数组,继承自 Doku_Parser_Mode。包含允许在插件自身语法模式中出现的其他语法模式的列表(即属于可以嵌套在插件自身标记中的任何其他DokuWiki标记的模式)。通常,它由accepts()函数使用getAllowedTypes()的结果自动填充。DokuWiki使用不同的语法类型来确定哪些语法可以嵌套。你可以在表格中设置文本格式。要将插件集成到这个系统中,需要指定它是哪种类型,以及哪些类型可以嵌套在其中。以下类型当前可用:
| 模式 | 在模式中使用… | 说明 |
|---|---|---|
| container | listblock, table, quote, hr | 容器是一种复杂的模式,可以包含许多其他模式——hr打破了这一原则,但不应该在表/列表中使用它们,所以将它们放在这里 |
| baseonly | header | 某些模式仅允许在基本模式中使用 |
| formatting | strong, emphasis, underline, monospace, subscript, superscript, deleted, footnote | 设置文本样式的模式–脚注的行为类似于设置样式 |
| substition | 'acronym', 'smiley', 'wordblock', 'entity', 'camelcaselink', 'internallink', 'media', 'externallink', 'linebreak', 'emaillink', 'windowssharelink', 'filelink', 'notoc', 'nocache', 'multiplyentity', 'quotes', 'rss' | 标记被简单替换的模式-它们不能包含任何其他模式 |
| protected | 'preformatted', 'code', 'file', 'php', 'html' | 具有开始和结束标记但不应应用其他模式的模式 |
| disabled | unformatted | 在此模式中,不应应用wiki标记,但不保留行尾和空白 |
| paragraphs | eol | 用于标记段落边界 |
要了解每种类型的含义以及在其中注册的其他格式类,请阅读inc/parser/parser.php中的注释。
本教程的目标是解释DokuWiki语法插件中涉及的概念,并完成编写自己的插件所涉及的步骤。
对于那些真的不耐烦开始的人,获取一个语法插件框架的副本。这是一个简单的插件,输出“Hello World!”当它在wiki页面上遇到“<TEST>”时。