]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #7198 from MrPetovan/task/6861-to-plaintext
authorPhilipp <admin+Github@philipp.info>
Tue, 28 May 2019 05:49:25 +0000 (07:49 +0200)
committerGitHub <noreply@github.com>
Tue, 28 May 2019 05:49:25 +0000 (07:49 +0200)
 Simplify BBCode::toPlaintext and HTML::toPlaintext

src/Content/Text/BBCode.php
src/Content/Text/HTML.php
src/Module/Debug/Babel.php

index e417b38a467b8cbb8ed096a8f9d153e3cb5ce10a..c4735b9e936cf3decc4c463b558ef7f0060cb811 100644 (file)
@@ -355,7 +355,7 @@ class BBCode extends BaseObject
         */
        public static function toPlaintext($text, $keep_urls = true)
        {
-               $naked_text = preg_replace('/\[(.+?)\]\s*/','', $text);
+               $naked_text = preg_replace('/\[.+?\]/','', $text);
                if (!$keep_urls) {
                        $naked_text = preg_replace('#https?\://[^\s<]+[^\s\.\)]#i', '', $naked_text);
                }
index 47463bdd091d1b665c07a116bcdaf042ffc843c4..4be217b3e43dd213175f6f2aba258fc1e8ce6e1d 100644 (file)
@@ -567,7 +567,13 @@ class HTML
                return $urls;
        }
 
-       public static function toPlaintext($html, $wraplength = 75, $compact = false)
+       /**
+        * @param string $html
+        * @param int    $wraplength Ensures individual lines aren't longer than this many characters. Doesn't break words.
+        * @param bool   $compact    True: Completely strips image tags; False: Keeps image URLs
+        * @return string
+        */
+       public static function toPlaintext(string $html, $wraplength = 75, $compact = false)
        {
                $message = str_replace("\r", "", $html);
 
@@ -578,15 +584,9 @@ class HTML
 
                @$doc->loadHTML($message);
 
-               $xpath = new DOMXPath($doc);
-               $list = $xpath->query("//pre");
-               foreach ($list as $node) {
-                       $node->nodeValue = str_replace("\n", "\r", $node->nodeValue);
-               }
-
                $message = $doc->saveHTML();
-               $message = str_replace(["\n<", ">\n", "\r", "\n", "\xC3\x82\xC2\xA0"], ["<", ">", "<br>", " ", ""], $message);
-               $message = preg_replace('= [\s]*=i', " ", $message);
+               // Remove eventual UTF-8 BOM
+               $message = str_replace("\xC3\x82\xC2\xA0", "", $message);
 
                // Collecting all links
                $urls = self::collectURLs($message);
@@ -596,18 +596,6 @@ class HTML
                self::tagToBBCode($doc, 'html', [], '', '');
                self::tagToBBCode($doc, 'body', [], '', '');
 
-               // MyBB-Auszeichnungen
-               /*
-                 self::node2BBCode($doc, 'span', array('style'=>'text-decoration: underline;'), '_', '_');
-                 self::node2BBCode($doc, 'span', array('style'=>'font-style: italic;'), '/', '/');
-                 self::node2BBCode($doc, 'span', array('style'=>'font-weight: bold;'), '*', '*');
-
-                 self::node2BBCode($doc, 'strong', array(), '*', '*');
-                 self::node2BBCode($doc, 'b', array(), '*', '*');
-                 self::node2BBCode($doc, 'i', array(), '/', '/');
-                 self::node2BBCode($doc, 'u', array(), '_', '_');
-                */
-
                if ($compact) {
                        self::tagToBBCode($doc, 'blockquote', [], "»", "«");
                } else {
@@ -621,8 +609,6 @@ class HTML
                self::tagToBBCode($doc, 'div', [], "\r", "\r");
                self::tagToBBCode($doc, 'p', [], "\n", "\n");
 
-               //self::node2BBCode($doc, 'ul', array(), "\n[list]", "[/list]\n");
-               //self::node2BBCode($doc, 'ol', array(), "\n[list=1]", "[/list]\n");
                self::tagToBBCode($doc, 'li', [], "\n* ", "\n");
 
                self::tagToBBCode($doc, 'hr', [], "\n" . str_repeat("-", 70) . "\n", "");
@@ -637,12 +623,6 @@ class HTML
                self::tagToBBCode($doc, 'h5', [], "\n\n*", "*\n");
                self::tagToBBCode($doc, 'h6', [], "\n\n*", "*\n");
 
-               // Problem: there is no reliable way to detect if it is a link to a tag or profile
-               //self::node2BBCode($doc, 'a', array('href'=>'/(.+)/'), ' $1 ', ' ', true);
-               //self::node2BBCode($doc, 'a', array('href'=>'/(.+)/', 'rel'=>'oembed'), ' $1 ', '', true);
-               //self::node2BBCode($doc, 'img', array('alt'=>'/(.+)/'), '$1', '');
-               //self::node2BBCode($doc, 'img', array('title'=>'/(.+)/'), '$1', '');
-               //self::node2BBCode($doc, 'img', array(), '', '');
                if (!$compact) {
                        self::tagToBBCode($doc, 'img', ['src' => '/(.+)/'], ' [img]$1', '[/img] ');
                } else {
index 1ce1ac4c6e92ab5f91db0235244c45c15ca6479a..be10da7ea47557e47b64c38f32c1fffc4333680e 100644 (file)
@@ -159,6 +159,12 @@ class Babel extends BaseModule
                                                'title'   => L10n::t('HTML::toPlaintext'),
                                                'content' => '<pre>' . $text . '</pre>'
                                        ];
+
+                                       $text = Text\HTML::toPlaintext($html, 0, true);
+                                       $results[] = [
+                                               'title'   => L10n::t('HTML::toPlaintext'),
+                                               'content' => '<pre>' . $text . '</pre>'
+                                       ];
                        }
                }