Skip to content
Snippets Groups Projects
Commit 43b96014 authored by Andreas Gohr's avatar Andreas Gohr
Browse files

Merge branch 'issue829' of git://github.com/LarsGit223/dokuwiki into pull-request-1987

* 'issue829' of git://github.com/LarsGit223/dokuwiki:
  Corrected internal link pattern to properly handle included square brackets. Fixes #829.
parents fb8e820c 9bda387a
No related branches found
No related tags found
No related merge requests found
<?php
require_once 'parser.inc.php';
/**
* Tests for the implementation of link syntax
*
* @group parser_links
*/
class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
function testExternalLinkSimple() {
......@@ -274,6 +279,36 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testInternalLinkCodeFollows() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[wiki:internal:link|Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('cdata',array("\n".'Foo ')),
array('internallink',array('wiki:internal:link','Test')),
array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testInternalLinkCodeFollows2() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[wiki:internal:link|[Square brackets in title] Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('cdata',array("\n".'Foo ')),
array('internallink',array('wiki:internal:link','[Square brackets in title] Test')),
array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testExternalInInternalLink() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[http://www.google.com|Google]] Bar");
......@@ -289,6 +324,36 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testExternalInInternalLink2() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar");
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('cdata',array("\n".'Foo ')),
array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')),
array('cdata',array(' Bar')),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testExternalInInternalLink2CodeFollows() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('cdata',array("\n".'Foo ')),
array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')),
array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testInterwikiLink() {
$this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
$this->P->parse("Foo [[iw>somepage|Some Page]] Bar");
......
......@@ -903,7 +903,7 @@ class Doku_Parser_Mode_internallink extends Doku_Parser_Mode {
function connectTo($mode) {
// Word boundaries?
$this->Lexer->addSpecialPattern("\[\[(?:(?:[^[\]]*?\[.*?\])|.*?)\]\]",$mode,'internallink');
$this->Lexer->addSpecialPattern("\[\[.*?\]\](?!\])",$mode,'internallink');
}
function getSort() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment