diff --git a/_test/tests/inc/parser/parser_links.test.php b/_test/tests/inc/parser/parser_links.test.php index cbcfcb87b..9af197cf2 100644 --- a/_test/tests/inc/parser/parser_links.test.php +++ b/_test/tests/inc/parser/parser_links.test.php @@ -153,6 +153,35 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser { $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() { $this->P->addMode('externallink',new Externallink()); // See issue #936. Should NOT generate a link! diff --git a/inc/Parsing/ParserMode/Externallink.php b/inc/Parsing/ParserMode/Externallink.php index e5e6dd646..530d5dbba 100644 --- a/inc/Parsing/ParserMode/Externallink.php +++ b/inc/Parsing/ParserMode/Externallink.php @@ -23,8 +23,10 @@ class Externallink extends AbstractMode $this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; } - $this->patterns[] = '(?<=\s)(?i)www?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; - $this->patterns[] = '(?<=\s)(?i)ftp?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])'; + $this->patterns[] = '(?patterns[] = '(?