widget/reply: formatting syntax for unordered lists
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 15 May 2021 21:51:24 +0000 (23:51 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 17 May 2021 18:53:38 +0000 (20:53 +0200)
More complicated block formatting replacing paragraphs by list items.
Keep to consecutive regular expressions and html herding while possible
instead of complicated code nesting or parsers.

upload.inc.php

index 4f5c5fe564e85b3c133bf53e82630ac249e90915..b4a056d2c091dccce553d148cb9a76a59db7f44f 100644 (file)
@@ -57,12 +57,13 @@ function messagehtml($input)
                '{<([^>\s|]+)[\s|]([^>]+)>}'   => '<a href="$1">$2</a>', # hyperlink
                "/\r\n?/" => "\n",        # unix newlines
                "/  +\n/" => "<br />",    # trailing spaces for hard line break
-               "/\n/"    => "</p>\n<p>", # newlines start paragraphs
+               "/^[-*] (.*)$\n?/m"            => '<li>$1</li>',         # list item
+               "/^(.+)$\n?/m"                 => "<p>$1</p>\n",         # paragraph
+               "{^<p>(<li>.*</li>)(?:</p>\n)?}m" => "<ul>$1</ul>\n",    # list container
                '/_(?<!\w_)(.+?)_(?!\w)/'      => '<em>$1</em>',         # italic
                '/\*(?<!\w\*)(.+?)\*(?!\w)/'   => '<strong>$1</strong>', # bold
                '/~(?<!\w~)(.+?)~(?!\w)/'      => '<s>$1</s>',           # stricken
                '/`(?<!\w`)(.+?)`(?!\w)/'      => '<code>$1</code>',     # monospace
        ];
-       $html = preg_replace(array_keys($markup), array_values($markup), htmlspecialchars($input));
-       return "<p>$html</p>";
+       return preg_replace(array_keys($markup), array_values($markup), htmlspecialchars($input));
 }