Merge pull request #2433 from splitbrain/issue2399

Fixed broken link rendering for external links at start of line
This commit is contained in:
Andreas Gohr 2020-10-13 13:10:58 +02:00 committed by GitHub
commit 206d3a69f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 2 deletions

View File

@ -153,6 +153,35 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
} }
function testExternalWWWLinkStartOfLine() {
// Regression test for issue #2399
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('externallink',array('http://www.google.com', 'www.google.com')),
array('cdata',array(' Bar')),
array('p_close',array()),
array('document_end',array()),
);
$instructions = p_get_instructions("www.google.com Bar");
$this->assertEquals(array_map('stripByteIndex',$instructions),$calls);
}
function testExternalWWWLinkInRoundBrackets() {
$this->P->addMode('externallink',new ExternalLink());
$this->P->parse("Foo (www.google.com) Bar");
$calls = array (
array('document_start',array()),
array('p_open',array()),
array('cdata',array("\n".'Foo (')),
array('externallink',array('http://www.google.com', 'www.google.com')),
array('cdata',array(') Bar')),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
}
function testExternalWWWLinkInPath() { function testExternalWWWLinkInPath() {
$this->P->addMode('externallink',new Externallink()); $this->P->addMode('externallink',new Externallink());
// See issue #936. Should NOT generate a link! // See issue #936. Should NOT generate a link!

View File

@ -23,8 +23,10 @@ class Externallink extends AbstractMode
$this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; $this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
} }
$this->patterns[] = '(?<=\s)(?i)www?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; $this->patterns[] = '(?<![/\\\\])\b(?i)www?(?-i)\.['.$host.']+?\.'.
$this->patterns[] = '(?<=\s)(?i)ftp?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; '['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
$this->patterns[] = '(?<![/\\\\])\b(?i)ftp?(?-i)\.['.$host.']+?\.'.
'['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
} }
/** @inheritdoc */ /** @inheritdoc */