X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fbbcode.php;h=9a43cdb305e140222650bcfdd9dd97f307da934b;hb=8abdbb799a44795bf53a558f29b495147d88c04f;hp=b3c3fa45ab41b15caab77b158103a8b53cc98d55;hpb=d94e8787147292a4e8c11c566b2da64e17c4e0ab;p=friendica.git diff --git a/include/bbcode.php b/include/bbcode.php index b3c3fa45ab..9a43cdb305 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -1,5 +1,7 @@ ' . generate_map(str_replace('/',' ', $match[1])) . '', $match[0]); + return str_replace($match[0], '
' . generate_map(str_replace('/', ' ', $match[1])) . '
', $match[0]); } function bb_map_location($match) { // the extra space in the following line is intentional @@ -53,18 +55,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) { } if ($simplehtml == 7) { - $title2 = $data["title"]; - - $test1 = trim(html_entity_decode($data["text"],ENT_QUOTES,'UTF-8')); - $test2 = trim(html_entity_decode($data["title"],ENT_QUOTES,'UTF-8')); - - // If the link description is similar to the text above then don't add the link description - if (($data["title"] != "") AND ((strpos($test1,$test2) !== false) OR - (similar_text($test1,$test2) / strlen($data["title"])) > 0.9)) { - $title2 = $data["url"]; - } - $text = sprintf('%s
', - $data["url"], $data["title"], $title2); + $text = style_url_for_mastodon($data["url"]); } elseif (($simplehtml != 4) AND ($simplehtml != 0)) { $text = sprintf('%s
', $data["url"], $data["title"]); } else { @@ -97,7 +88,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) { } } } - return $data["text"] . $text . $data["after"]; + return trim($data["text"].' '.$text.' '.$data["after"]); } function bb_remove_share_information($Text, $plaintext = false, $nolink = false) { @@ -140,11 +131,11 @@ function bb_remove_share_information($Text, $plaintext = false, $nolink = false) } function bb_cleanstyle($st) { - return "" . $st[2] . ""; + return "" . $st[2] . ""; } function bb_cleanclass($st) { - return "" . $st[2] . ""; + return "" . $st[2] . ""; } function cleancss($input) { @@ -165,7 +156,55 @@ function cleancss($input) { } } - return($cleaned); + return $cleaned; +} + +/** + * @brief Converts [url] BBCodes in a format that looks fine on Mastodon. (callback function) + * @param array $match Array with the matching values + * @return string reformatted link including HTML codes + */ +function bb_style_url($match) { + $url = $match[1]; + + if (isset($match[2]) AND ($match[1] != $match[2])) { + return $match[0]; + } + + $parts = parse_url($url); + if (!isset($parts['scheme'])) { + return $match[0]; + } + + return style_url_for_mastodon($url); +} + +/** + * @brief Converts [url] BBCodes in a format that looks fine on Mastodon and GNU Social. + * @param string $url URL that is about to be reformatted + * @return string reformatted link including HTML codes + */ +function style_url_for_mastodon($url) { + $styled_url = $url; + + $parts = parse_url($url); + $scheme = $parts['scheme'].'://'; + $styled_url = str_replace($scheme, '', $styled_url); + + $html = ''. + ''; + + if (strlen($styled_url) > 30) { + $html .= '%s'. + ''; + + $ellipsis = substr($styled_url, 0, 30); + $rest = substr($styled_url, 30); + return sprintf($html, $url, $scheme, $ellipsis, $rest); + } else { + $html .= '%s'; + return sprintf($html, $url, $scheme, $styled_url); + } } function stripcode_br_cb($s) { @@ -224,9 +263,9 @@ function bb_unspacefy_and_trim($st) { } function bb_find_open_close($s, $open, $close, $occurence = 1) { - if ($occurence < 1) { - $occurence = 1; - } + if ($occurence < 1) { + $occurence = 1; + } $start_pos = -1; for ($i = 1; $i <= $occurence; $i++) { @@ -542,85 +581,94 @@ function bb_ShareAttributes($share, $simplehtml) { ); break; } - return($text); + + return $text; } function GetProfileUsername($profile, $username, $compact = false, $getnetwork = false) { $twitter = preg_replace("=https?://twitter.com/(.*)=ism", "$1@twitter.com", $profile); if ($twitter != $profile) { - if ($getnetwork) - return(NETWORK_TWITTER); - elseif ($compact) - return($twitter); - else - return($username." (".$twitter.")"); + if ($getnetwork) { + return NETWORK_TWITTER; + } elseif ($compact) { + return $twitter; + } else { + return ($username . " (" . $twitter . ")"); + } } $appnet = preg_replace("=https?://alpha.app.net/(.*)=ism", "$1@alpha.app.net", $profile); if ($appnet != $profile) { - if ($getnetwork) - return(NETWORK_APPNET); - elseif ($compact) - return($appnet); - else - return($username." (".$appnet.")"); + if ($getnetwork) { + return NETWORK_APPNET; + } elseif ($compact) { + return $appnet; + } else { + return ($username . " (" . $appnet . ")"); + } } $gplus = preg_replace("=https?://plus.google.com/(.*)=ism", "$1@plus.google.com", $profile); if ($gplus != $profile) { - if ($getnetwork) - return(NETWORK_GPLUS); - elseif ($compact) - return($gplususername." (".$username.")"); - else - return($username." (".$gplus.")"); + if ($getnetwork) { + return NETWORK_GPLUS; + } elseif ($compact) { + return ($gplususername . " (" . $username . ")"); + } else { + return ($username . " (" . $gplus . ")"); + } } $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2@$1", $profile); if ($friendica != $profile) { - if ($getnetwork) - return(NETWORK_DFRN); - elseif ($compact) - return($friendica); - else - return($username." (".$friendica.")"); + if ($getnetwork) { + return NETWORK_DFRN; + } elseif ($compact) { + return $friendica; + } else { + return ($username . " (" . $friendica . ")"); + } } $diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2@$1", $profile); if ($diaspora != $profile) { - if ($getnetwork) - return(NETWORK_DIASPORA); - elseif ($compact) - return($diaspora); - else - return($username." (".$diaspora.")"); + if ($getnetwork) { + return NETWORK_DIASPORA; + } elseif ($compact) { + return $diaspora; + } else { + return ($username . " (" . $diaspora . ")"); + } } $red = preg_replace("=https?://(.*)/channel/(.*)=ism", "$2@$1", $profile); if ($red != $profile) { - if ($getnetwork) + if ($getnetwork) { // red is identified as Diaspora - friendica can't connect directly to it - return(NETWORK_DIASPORA); - elseif ($compact) - return($red); - else - return($username." (".$red.")"); + return NETWORK_DIASPORA; + } elseif ($compact) { + return $red; + } else { + return ($username . " (" . $red . ")"); + } } $StatusnetHost = preg_replace("=https?://(.*)/user/(.*)=ism", "$1", $profile); if ($StatusnetHost != $profile) { $StatusnetUser = preg_replace("=https?://(.*)/user/(.*)=ism", "$2", $profile); if ($StatusnetUser != $profile) { + /// @TODO Some hosts run on https, not just http and sometimes http is disabled, let's support both here $UserData = fetch_url("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser); $user = json_decode($UserData); if ($user) { - if ($getnetwork) - return(NETWORK_STATUSNET); - elseif ($compact) - return($user->screen_name."@".$StatusnetHost); - else - return($username." (".$user->screen_name."@".$StatusnetHost.")"); + if ($getnetwork) { + return NETWORK_STATUSNET; + } elseif ($compact) { + return ($user->screen_name . "@" . $StatusnetHost); + } else { + return ($username . " (" . $user->screen_name . "@" . $StatusnetHost . ")"); + } } } } @@ -630,16 +678,17 @@ function GetProfileUsername($profile, $username, $compact = false, $getnetwork = if ($rest == "") { $pumpio = preg_replace("=https?://([\.\w]+)/([\.\w]+)(.*)=ism", "$2@$1", $profile); if ($pumpio != $profile) { - if ($getnetwork) - return(NETWORK_PUMPIO); - elseif ($compact) - return($pumpio); - else - return($username." (".$pumpio.")"); + if ($getnetwork) { + return NETWORK_PUMPIO; + } elseif ($compact) { + return $pumpio; + } else { + return ($username . " (" . $pumpio . ")"); + } } } - return($username); + return $username; } function bb_DiasporaLinks($match) { @@ -649,7 +698,7 @@ function bb_DiasporaLinks($match) { function bb_RemovePictureLinks($match) { $text = Cache::get($match[1]); - if (is_null($text)){ + if (is_null($text)) { $a = get_app(); $stamp1 = microtime(true); @@ -690,20 +739,22 @@ function bb_RemovePictureLinks($match) { } Cache::set($match[1],$text); } - return($text); + + return $text; } function bb_expand_links($match) { - if (($match[3] == "") OR ($match[2] == $match[3]) OR stristr($match[2], $match[3])) - return ($match[1]."[url]".$match[2]."[/url]"); - else - return ($match[1].$match[3]." [url]".$match[2]."[/url]"); + if (($match[3] == "") OR ($match[2] == $match[3]) OR stristr($match[2], $match[3])) { + return ($match[1] . "[url]" . $match[2] . "[/url]"); + } else { + return ($match[1] . $match[3] . " [url]" . $match[2] . "[/url]"); + } } function bb_CleanPictureLinksSub($match) { $text = Cache::get($match[1]); - if (is_null($text)){ + if (is_null($text)) { $a = get_app(); $stamp1 = microtime(true); @@ -745,18 +796,20 @@ function bb_CleanPictureLinksSub($match) { } Cache::set($match[1],$text); } - return($text); + + return $text; } function bb_CleanPictureLinks($text) { $text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_CleanPictureLinksSub', $text); - return ($text); + return $text; } function bb_highlight($match) { - if (in_array(strtolower($match[1]),['php','css','mysql','sql','abap','diff','html','perl','ruby', - 'vbscript','avrc','dtd','java','xml','cpp','python','javascript','js','sh'])) - return text_highlight($match[2],strtolower($match[1])); + if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby', + 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh'])) { + return text_highlight($match[2], strtolower($match[1])); + } return $match[0]; } @@ -865,7 +918,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Handle attached links or videos $Text = bb_attachment($Text, $simplehtml, $tryoembed); - $Text = str_replace(array("\r","\n"), array('
','
'), $Text); + $Text = str_replace(array("\r","\n"), array('
', '
'), $Text); if ($preserve_nl) { $Text = str_replace(array("\n", "\r"), array('', ''), $Text); @@ -926,7 +979,14 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // if the HTML is used to generate plain text, then don't do this search, but replace all URL of that kind to text // if ($simplehtml != 7) { if (!$forplaintext) { - $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text); + if ($simplehtml != 7) { + $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1$2', $Text); + } else { + $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2[/url]', $Text); + + $Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text); + $Text = preg_replace_callback("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text); + } } else { $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism", " $1 ", $Text); $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text); @@ -1120,15 +1180,14 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Shared content $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism", - function ($match) use ($simplehtml){ - return(bb_ShareAttributes($match, $simplehtml)); + function ($match) use ($simplehtml) { + return bb_ShareAttributes($match, $simplehtml); }, $Text); $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); $Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); //$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism", '
' . t('Encrypted content') . '
', $Text); - // Try to Oembed if ($tryoembed) { $Text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4))\[\/video\]/ism", '', $Text); @@ -1198,7 +1257,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Summary (e.g. title) is required, earlier revisions only required description (in addition to // start which is always required). Allow desc with a missing summary for compatibility. - if((x($ev, 'desc') || x($ev, 'summary')) && x($ev, 'start')) { + if ((x($ev, 'desc') || x($ev, 'summary')) && x($ev, 'start')) { $sub = format_event_html($ev, $simplehtml); $Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/ism", '', $Text);