月度归档: 2025 年 5 月

30 篇文章

DokuWiki 重新解析和嵌入语法
核心概念 在 DokuWiki 的解析系统中,重新解析是指当插件或特殊语法捕获了一段文本后,需要手动创建新的解析器实例来重新处理这段文本中的 wiki 语法。 为什么需要重新解析 解析器的单次遍历设计 DokuWiki 的词法分析器采用单次遍历设计。在主解析循环中: Lexer.php:142-154 一旦文本被某个模式匹配和消费,就不会再回到解析…
DokuWiki 在模版中包含页面渲染输出
核心问题:在模板中包含页面渲染输出 用户最初询问如何在 DokuWiki 模板代码中引用包含一个页面的渲染输出 HTML。答案是使用 tpl_include_page() 函数 ,该函数内部调用 p_wiki_xhtml() 来获取页面的 HTML 渲染输出。 页面隐藏机制 用户希望被包含的页面对用户隐藏但仍可被包含。DokuWiki 通过 isH…
DokuWiki 插件开发要点总结
DokuWiki 插件开发要点总结表格(含日志、调试、缓存) 主题 说明 建议与注意事项 语法类型 块级语法 vs 内联语法 块级:使用 addEntryPattern / addExitPattern;内联:用 addSpecialPattern 块级语法 可跨行,常以两个连续换行符(空行)断开段落或块 注意保留换行,避免影响下一个语法块匹配 内…
markdowku 插件中各个文件的作用
块级元素文件 syntax/headeratx.php 实现 ATX 风格的标题语法(使用 # 符号),支持六个级别的标题。该文件负责识别这种格式的标题并将其转换为 DokuWiki 的标题格式。 headeratx.php:1-4 syntax/headersetext.php 实现 Setext 风格的标题语法(使用下划线),支持两个级别的标题…
在 DokuWiki 的指令遍历期间删除标签

如何识别和删除段落说明 在 DokuWiki 中,段落由两个特定的指令表示: p_open- 打开一个段落 p_close- 结束段落 遍历指令时,您可以检查这些指令类型并跳过它们: // Get instructions $instructions = p_get_instructions($text); // Create a filtered…
在 DokuWiki 的 render 阶段修改指令
您的问题是关于在 DokuWiki 插件的 render() 方法中获取并修改指令的示例。 在 DokuWiki 中,通常 render() 方法接收的是已经处理过的数据,而不是原始指令。但是,有几种方法可以在渲染阶段获取和修改指令: 1. 使用 nest() 方法处理修改后的指令 最直接的方法是使用 nest() 方法,它允许您传入一组指令并执行…
DokuWiki 的中间过程指令
在 DokuWiki 中,解析过程会生成一系列中间指令(instructions),这些指令随后被传递给渲染器来生成最终输出。这些指令是 Parser 和 Renderer 之间的桥梁。 指令的基本结构 DokuWiki 的指令通常是一个数组,包含三个元素: 指令名称(如 p_open、cdata 等) 参数数组 文本在原始文档中的位置 从代码中可…
10 种 DokuWiki 语法处理方法示例与总结
1. 自动嵌套语法处理(使用getAllowedTypes()和UNMATCHED状态) 这种方法通过声明允许的语法类型,让DokuWiki自动处理嵌套语法。 class syntax_plugin_example extends \dokuwiki\Extension\SyntaxPlugin { public function getAllow…
Dokuwiki 命名空间排序分页
根据您之前的讨论和DokuWiki的代码结构,我将为您实现一个按日期排序并分页显示命名空间下页面的功能。这个功能可以通过两种方式实现:自定义action方法或自定义语法插件。 最佳实现方式:自定义Action方法 对于这种功能,自定义Action方法是更合适的选择,原因如下: 这是一个页面级别的功能,需要处理整个页面的显示 需要处理URL参数(如页…
Dokuwiki 在页面中设置变量,然后在模版中判断变量
您的问题是关于如何将 DokuWiki 的特定页面设置为 landing page,并控制导航元素的显示。 是的,您可以在页面中设置特殊变量,然后在模板的 main.php 中检测这些变量来控制导航的显示。DokuWiki 提供了几种方法来实现这一点: 方法一:使用页面元数据 您可以在页面中添加特殊的元数据标记,然后在模板中检测这些元数据: 在您想…