From 3c0d6339bb12bd7fbf65ba7a79078e39737b4387 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 24 Mar 2024 17:50:27 +0100 Subject: make sure we preserve linefeeds in the actual content of lists and tables also add tests --- include/bbcode.php | 25 ++++++++++++++++--------- tests/unit/includes/BBCodeTest.php | 12 ++++++++++++ vendor/composer/installed.php | 12 ++++++------ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index aa1257a56..1ced24ec3 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -1060,8 +1060,8 @@ function bb_fix_lf($match) { // be converted to '
' and turn your neatly crafted tables into a whole lot of // empty space. - $new_content = str_replace(["\n\r", "\n", "\r"], '', $match[1]); - return str_replace($match[1], $new_content, $match[0]); + $new_content = preg_replace("/\]\s+\[/",'][', $match[1]); + return str_replace($match[1], trim($new_content, "\r\n"), $match[0]); } function bbtopoll($s) { @@ -1554,6 +1554,20 @@ function bbcode($text, $options = []) { $text = preg_replace_callback("/\[checklist\](.*?)\[\/checklist\]/ism", 'bb_checklist', $text); } + + if (strpos($text,'[/table]') !== false) { + $text = str_replace(["[/table]\r", "[/table]\n"], '[/table]', $text); + + $text = preg_replace_callback("/\[table\](.*?)\[\/table\]/ism",'bb_fix_lf',$text); + $text = preg_replace("/\[table\](.*?)\[\/table\]/sm", '$1
', $text); + + $text = preg_replace_callback("/\[table border=1\](.*?)\[\/table\]/ism",'bb_fix_lf',$text); + $text = preg_replace("/\[table border=1\](.*?)\[\/table\]/sm", '$1
', $text); + + $text = preg_replace_callback("/\[table border=0\](.*?)\[\/table\]/ism",'bb_fix_lf',$text); + $text = preg_replace("/\[table border=0\](.*?)\[\/table\]/sm", '$1
', $text); + } + if (strpos($text,'[th]') !== false) { $text = preg_replace("/\[th\](.*?)\[\/th\]/sm", '$1', $text); } @@ -1566,13 +1580,6 @@ function bbcode($text, $options = []) { $text = preg_replace("/\[tr\](.*?)\[\/tr\]/sm", '$1', $text); } - if (strpos($text,'[/table]') !== false) { - $text = preg_replace_callback("/\[table\](.*?)\[\/table\]/ism",'bb_fix_lf',$text); - $text = preg_replace("/\[table\](.*?)\[\/table\]/sm", '$1
', $text); - $text = preg_replace("/\[table border=1\](.*?)\[\/table\]/sm", '$1
', $text); - $text = preg_replace("/\[table border=0\](.*?)\[\/table\]/sm", '$1
', $text); - } - $text = str_replace('[hr]', '
', $text); // This is actually executed in prepare_body() diff --git a/tests/unit/includes/BBCodeTest.php b/tests/unit/includes/BBCodeTest.php index fedd2df06..a6c798992 100644 --- a/tests/unit/includes/BBCodeTest.php +++ b/tests/unit/includes/BBCodeTest.php @@ -111,13 +111,25 @@ class BBCodeTest extends UnitTestCase { "some text\n[list]\n[*] item1\n[*] item2\n[/list]\nsome more text", 'some text
some more text' ], + 'list with linebreaks \n in text' => [ + "some text\n[list]\n[*] item1\nsome text[*] item2\nsome text[/list]\nsome more text", + 'some text
some more text' + ], 'list with linebreaks \r' => [ "some text\r[list]\r[*] item1\r[*] item2\r[/list]\rsome more text", 'some text
some more text' ], + 'list with linebreaks \r in text' => [ + "some text\r[list]\r[*] item1\rsome text\r[*] item2\rsome text\r[/list]\rsome more text", + 'some text
some more text' + ], 'list with linebreaks \r\n' => [ "some text\r\n[list]\r\n[*] item1\r\n[*] item2\r\n[/list]\r\nsome more text", 'some text
some more text' + ], + 'list with linebreaks \r\n in text' => [ + "some text\r\n[list]\r\n[*] item1\r\nsome text[*] item2\r\nsome text[/list]\r\nsome more text", + 'some text
some more text' ] ]; } diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 4386e70b5..dd4bccc71 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => 'zotlabs/hubzilla', - 'pretty_version' => 'dev-9.0RC', - 'version' => 'dev-9.0RC', - 'reference' => 'a18e873d08e733225c70b0ace31c3cbb025ff906', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'a0cfe22501dc9daa7dd8cff86803cf494a1f5ec3', 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -338,9 +338,9 @@ 'dev_requirement' => false, ), 'zotlabs/hubzilla' => array( - 'pretty_version' => 'dev-9.0RC', - 'version' => 'dev-9.0RC', - 'reference' => 'a18e873d08e733225c70b0ace31c3cbb025ff906', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'a0cfe22501dc9daa7dd8cff86803cf494a1f5ec3', 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), -- cgit v1.2.3