Merge pull request #7198 from MrPetovan/task/6861-to-plaintext

Simplify BBCode::toPlaintext and HTML::toPlaintext
This commit is contained in:
Philipp 2019-05-28 07:49:25 +02:00 committed by GitHub
commit be3d7759f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 30 deletions

View file

@ -355,7 +355,7 @@ class BBCode extends BaseObject
*/ */
public static function toPlaintext($text, $keep_urls = true) public static function toPlaintext($text, $keep_urls = true)
{ {
$naked_text = preg_replace('/\[(.+?)\]\s*/','', $text); $naked_text = preg_replace('/\[.+?\]/','', $text);
if (!$keep_urls) { if (!$keep_urls) {
$naked_text = preg_replace('#https?\://[^\s<]+[^\s\.\)]#i', '', $naked_text); $naked_text = preg_replace('#https?\://[^\s<]+[^\s\.\)]#i', '', $naked_text);
} }

View file

@ -567,7 +567,13 @@ class HTML
return $urls; 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); $message = str_replace("\r", "", $html);
@ -578,15 +584,9 @@ class HTML
@$doc->loadHTML($message); @$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 = $doc->saveHTML();
$message = str_replace(["\n<", ">\n", "\r", "\n", "\xC3\x82\xC2\xA0"], ["<", ">", "<br>", " ", ""], $message); // Remove eventual UTF-8 BOM
$message = preg_replace('= [\s]*=i', " ", $message); $message = str_replace("\xC3\x82\xC2\xA0", "", $message);
// Collecting all links // Collecting all links
$urls = self::collectURLs($message); $urls = self::collectURLs($message);
@ -596,18 +596,6 @@ class HTML
self::tagToBBCode($doc, 'html', [], '', ''); self::tagToBBCode($doc, 'html', [], '', '');
self::tagToBBCode($doc, 'body', [], '', ''); 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) { if ($compact) {
self::tagToBBCode($doc, 'blockquote', [], "»", "«"); self::tagToBBCode($doc, 'blockquote', [], "»", "«");
} else { } else {
@ -621,8 +609,6 @@ class HTML
self::tagToBBCode($doc, 'div', [], "\r", "\r"); self::tagToBBCode($doc, 'div', [], "\r", "\r");
self::tagToBBCode($doc, 'p', [], "\n", "\n"); 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, 'li', [], "\n* ", "\n");
self::tagToBBCode($doc, 'hr', [], "\n" . str_repeat("-", 70) . "\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, 'h5', [], "\n\n*", "*\n");
self::tagToBBCode($doc, 'h6', [], "\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) { if (!$compact) {
self::tagToBBCode($doc, 'img', ['src' => '/(.+)/'], ' [img]$1', '[/img] '); self::tagToBBCode($doc, 'img', ['src' => '/(.+)/'], ' [img]$1', '[/img] ');
} else { } else {

View file

@ -159,6 +159,12 @@ class Babel extends BaseModule
'title' => L10n::t('HTML::toPlaintext'), 'title' => L10n::t('HTML::toPlaintext'),
'content' => '<pre>' . $text . '</pre>' 'content' => '<pre>' . $text . '</pre>'
]; ];
$text = Text\HTML::toPlaintext($html, 0, true);
$results[] = [
'title' => L10n::t('HTML::toPlaintext'),
'content' => '<pre>' . $text . '</pre>'
];
} }
} }