====== 语法插件 ====== 语法插件是扩展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页面上遇到“”时。 ==== 快速摘要 ==== === modes === * 每个DokuWiki语法,包括你的插件,都有自己的模式。 * 相似的模式被组合成模式类型。 * 模式的“allowedTypes”控制在模式自身语法中嵌套时识别的其他DokuWiki语法。所有属于允许类型的模式都将被允许。 * 模式的“类型”让其他模式知道是否可以在其语法中允许此模式。 === handle === === render ===