用户工具

站点工具


学习

语法插件

语法插件是扩展DokuWiki语法的插件。为了理解在DokuWiki中注册新语法需要什么,您应该阅读解析器是如何工作的。

简介

语法插件示例需要:

  • 类名 syntax_plugin_example
  • 继承 DokuWiki_Syntax_Plugin
  • 存储在文件中 lib/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()的结果自动填充。

继承函数

  • See common plugin functions for inherited functions available to all plugins. e.g. localisation, configuration and introspection.

语法类型

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>”时。

快速摘要

modes

  • 每个DokuWiki语法,包括你的插件,都有自己的模式。
  • 相似的模式被组合成模式类型。
  • 模式的“allowedTypes”控制在模式自身语法中嵌套时识别的其他DokuWiki语法。所有属于允许类型的模式都将被允许。
  • 模式的“类型”让其他模式知道是否可以在其语法中允许此模式。

handle

render

学习.txt · 最后更改: 2020/03/15 15:56 (外部编辑)