From f216edae611a9a1677577709a8b2e33f231b6a7d Mon Sep 17 00:00:00 2001 From: Lars Paulsen Date: Thu, 21 Jun 2018 21:20:36 +0200 Subject: [PATCH 1/3] Fixed broken link rendering for external links at start of line External links at the start of line like 'www.example.com' were not rendered as links any more. The issue was introduced with PR #1988. Fixes #2399. --- _test/tests/inc/parser/parser_links.test.php | 29 ++++++++++++++++++++ inc/Parsing/ParserMode/Externallink.php | 4 +-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/_test/tests/inc/parser/parser_links.test.php b/_test/tests/inc/parser/parser_links.test.php index cbcfcb87b..110ff8e66 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 Doku_Parser_Mode_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 747574595..f01d61cb7 100644 --- a/inc/Parsing/ParserMode/Externallink.php +++ b/inc/Parsing/ParserMode/Externallink.php @@ -23,8 +23,8 @@ 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[] = '(? Date: Mon, 9 Mar 2020 20:42:56 -0400 Subject: [PATCH 2/3] Fix php styling of too long regexp --- inc/Parsing/ParserMode/Externallink.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/inc/Parsing/ParserMode/Externallink.php b/inc/Parsing/ParserMode/Externallink.php index f01d61cb7..098ea5230 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[] = '(?patterns[] = '(?patterns[] = '(?patterns[] = '(? Date: Mon, 9 Mar 2020 20:55:58 -0400 Subject: [PATCH 3/3] Fix ExternalLink tests --- _test/tests/inc/parser/parser_links.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_test/tests/inc/parser/parser_links.test.php b/_test/tests/inc/parser/parser_links.test.php index 110ff8e66..9af197cf2 100644 --- a/_test/tests/inc/parser/parser_links.test.php +++ b/_test/tests/inc/parser/parser_links.test.php @@ -168,7 +168,7 @@ class TestOfDoku_Parser_Links extends TestOfDoku_Parser { } function testExternalWWWLinkInRoundBrackets() { - $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); + $this->P->addMode('externallink',new ExternalLink()); $this->P->parse("Foo (www.google.com) Bar"); $calls = array ( array('document_start',array()),