Improved the processing of HTML lacking paragraphs
authorAlexander Ebert <ebert@woltlab.com>
Mon, 24 Jun 2019 16:57:26 +0000 (18:57 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 24 Jun 2019 16:57:26 +0000 (18:57 +0200)
wcfsetup/install/files/lib/system/html/input/node/HtmlInputNodeProcessor.class.php

index 2fc4735c7862351a70da1ece800e9f854671caf1..d11fbd676d0a9a11c3185e077d21d045044503b4 100644 (file)
@@ -73,6 +73,19 @@ class HtmlInputNodeProcessor extends AbstractHtmlNodeProcessor {
                'a', 'kbd', 'woltlab-quote', 'woltlab-spoiler', 'pre', 'sub', 'sup'
        ];
        
+       /**
+        * list of tag names that represent inline content in the HTML 5 standard
+        * @var string[]
+        */
+       public static $inlineElements = [
+               'a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',
+               'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed',
+               'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'map', 'mark', 'meter',
+               'noscript', 'object', 'output', 'picture', 'progress', 'q', 'ruby', 's',
+               'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup',
+               'svg', 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr',
+       ];
+       
        /**
         * list of embedded content grouped by type
         * @var array
@@ -228,6 +241,9 @@ class HtmlInputNodeProcessor extends AbstractHtmlNodeProcessor {
                        if ($node->nodeType === XML_ELEMENT_NODE && $node->nodeName === 'woltlab-metacode-marker') {
                                $node = $appendToPreviousParagraph($node);
                        }
+                       else if ($node->nodeType === XML_ELEMENT_NODE && in_array($node->nodeName, self::$inlineElements)) {
+                               $node = $appendToPreviousParagraph($node);
+                       }
                        else if ($node->nodeType === XML_TEXT_NODE) {
                                // text node contains only a line break
                                if ($node->textContent === "\n" || $node->textContent === "\r\n") {