【问题标题】:How to parse and chage content of external link in dokuwiki plugin如何在 dokuwiki 插件中解析和更改外部链接的内容
【发布时间】:2014-02-17 16:51:41
【问题描述】:

我试图在我的插件中这样做。

function getType(){ return 'substition'; }
function getSort(){ return 299; } 
function connectTo($mode) { 
  $this->Lexer->addSpecialPattern('@.+?@',$mode,'plugin_externallink');
}

function render($mode, &$renderer, $data) {
  print_r($data);
}

但是 patten 什么都不匹配。

这是标记示例:

[[http://@testDomain@/test|testDomain]]

【问题讨论】:

  • 有一件重要的事情需要注意,DokuWiki 词法分析器是顺序的。您不能在链接中匹配 @.+?@ 之类的内容,因为内部链接模式已经占用了整个 [[something]] 块。这不是优先级问题,只是因为它将在输入字符串中更早地匹配。

标签: parsing wiki dokuwiki


【解决方案1】:

恐怕[[ ]] 的内容是由internallink mode 或外部链接处理的。

这些模式未配置为接受任何其他模式(因为在此处实现了accepts 其中doesn't accept anything)。

你可以做的是:

  • 匹配整个模式。即:不仅仅是@..@ 里面的内容,还有[[ ]] 里面的内容
  • 定义一个小于internallink (300) 和外部链接 (330) 之一的优先级。 (因此,299 已经可以了)

要处理它,您可能需要依赖 internallink methodrenderer

【讨论】:

  • 作为整个模式,你的意思是这样的\[\[@.+?@\]\]
  • 可能更像\[\[.*@.+?@.*\]\](或者可能是[^[]*而不是.*)。您可能还想加入一些前瞻技巧
猜你喜欢
  • 2017-04-28
  • 2021-02-14
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多