2014-02-17 3 views
0

Я пытался сделать это как в моем плагине.Как разобрать и заархивировать содержимое внешней ссылки в плагине dokuwiki

function getType(){ return 'substition'; } 
function getSort(){ return 299; } 
function connectTo($mode) { 
    $this->Lexer->addSpecialPattern('@[email protected]',$mode,'plugin_externallink'); 
} 

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

, но patten ничего не соответствует.

Вот пример разметки:

[[http://@[email protected]/test|testDomain]] 
+1

Существует одна важная вещь, чтобы отметить, лексер DokuWiki является последовательным. Вы не можете сопоставить что-то вроде '@. +? @' внутри ссылки, потому что шаблон интернационализации уже будет уничтожать весь блок' [[something]] '. Это не вопрос приоритета, а только потому, что он будет соответствовать ранее в строке ввода. – Cilyan

ответ

1

Я боюсь, что содержание [[ ]] обрабатывается либо internallink mode или внешней ссылке.

Эти режимы не настроены на прием любого другого режима (из-за реализации accepts, который doesn't accept anything здесь).

Что вы можете сделать, это:

  • Матч весь узор. т.е. не только то, что находится внутри @[email protected], но и что находится внутри [[ ]]
  • Определите приоритет, меньший, чем один из internallink (300) и один из внешних (330). (Следовательно, 299 уже отлично)

Чтобы справиться с этим, вы можете затем хотите, чтобы полагаться на internallinkmethod из renderer

+0

Как весь шаблон вы имеете в виду что-то вроде этого '\ [\ [@. +? @ \] \]'? –

+1

может быть скорее нечто вроде '\ [\ [. * @. +? @. * \] \]' (Или, может быть, '[^ [] *' вместо '. *'). Вы также можете включить некоторые фоновые трюки – gturri

Смежные вопросы