X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fbb2diaspora.php;h=4a82635e57f065246adc702dc8d9d49b042ede47;hb=dafc84390db4b57e5958f1af386c778b481c7d04;hp=70d4bec9afd7f6371f56c4ad8efe4f957e3dc43b;hpb=58a9c652de09817b9c5d5132de51b8690ed32d53;p=friendica.git
diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php
old mode 100755
new mode 100644
index 70d4bec9af..4a82635e57
--- a/include/bb2diaspora.php
+++ b/include/bb2diaspora.php
@@ -1,10 +1,11 @@
is_valid()) {
- if($ph->getWidth() > 600 || $ph->getHeight() > 600) {
- $ph->scaleImage(600);
- $new_width = $ph->getWidth();
- $new_height = $ph->getHeight();
- logger('scale_diaspora_image: ' . $new_width . 'w ' . $new_height . 'h' . 'match: ' . $mtch[0], LOGGER_DEBUG);
- $s = str_replace($mtch[0],'[img=' . $new_width . 'x' . $new_height. ']' . $mtch[1] . '[/img]'
- . "\n" . (($include_link)
- ? '[url=' . $mtch[1] . ']' . t('view full size') . '[/url]' . "\n"
- : ''),$s);
- logger('scale_diaspora_image: new string: ' . $s, LOGGER_DEBUG);
- }
- }
- }
- }
- }
- return $s;
-}
-
function stripdcode_br_cb($s) {
return '[code]' . str_replace('
', "\n\t", $s[1]) . '[/code]';
}
+function diaspora_ul($s) {
+ // Replace "[*]" followed by any number (including zero) of
+ // spaces by "* " to match Diaspora's list format
+ if( strpos($s[0], "[list]") === 0 )
+ return '
' . preg_replace("/\[\*\]( *)/", "* ", $s[1]) . '
';
+ elseif( strpos($s[0], "[ul]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "* ", $s[1]) . '
';
+ else
+ return $s[0];
+}
+
+
+function diaspora_ol($s) {
+ // A hack: Diaspora will create a properly-numbered ordered list even
+ // if you use '1.' for each element of the list, like:
+ // 1. First element
+ // 1. Second element
+ // 1. Third element
+ if( strpos($s[0], "[list=1]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ elseif( strpos($s[0], "[list=i]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ elseif( strpos($s[0], "[list=I]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ elseif( strpos($s[0], "[list=a]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ elseif( strpos($s[0], "[list=A]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ elseif( strpos($s[0], "[ol]") === 0 )
+ return '' . preg_replace("/\[\*\]( *)/", "1. ", $s[1]) . '
';
+ else
+ return $s[0];
+}
+
function bb2diaspora($Text,$preserve_nl = false) {
+ // bbcode() will convert "[*]" into "" with no closing ""
+ // Markdownify() is unable to handle these, as it makes each new
+ // "" into a deeper nested element until it crashes. So pre-format
+ // the lists as Diaspora lists before sending the $Text to bbcode()
+ //
+ // Note that to get nested lists to work for Diaspora, we would need
+ // to define the closing tag for the list elements. So nested lists
+ // are going to be flattened out in Diaspora for now
+/* $endlessloop = 0;
+ while ((((strpos($Text, "[/list]") !== false) && (strpos($Text, "[list") !== false)) ||
+ ((strpos($Text, "[/ol]") !== false) && (strpos($Text, "[ol]") !== false)) ||
+ ((strpos($Text, "[/ul]") !== false) && (strpos($Text, "[ul]") !== false))) && (++$endlessloop < 20)) {
+ $Text = preg_replace_callback("/\[list\](.*?)\[\/list\]/is", 'diaspora_ul', $Text);
+ $Text = preg_replace_callback("/\[list=1\](.*?)\[\/list\]/is", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=i\](.*?)\[\/list\]/s",'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=I\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=a\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=A\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[ul\](.*?)\[\/ul\]/is", 'diaspora_ul', $Text);
+ $Text = preg_replace_callback("/\[ol\](.*?)\[\/ol\]/is", 'diaspora_ol', $Text);
+ }
+*/
+ // Convert it to HTML - don't try oembed
+ $Text = bbcode($Text, $preserve_nl, false);
+
+ // Now convert HTML to Markdown
+ $md = new Markdownify(false, false, false);
+ $Text = $md->parseString($Text);
+
+ // If the text going into bbcode() has a plain URL in it, i.e.
+ // with no [url] tags around it, it will come out of parseString()
+ // looking like: , which gets removed by strip_tags().
+ // So take off the angle brackets of any such URL
+ $Text = preg_replace("//is", "http$1", $Text);
+
+ // Remove all unconverted tags
+ $Text = strip_tags($Text);
+
+/*
$ev = bbtoevent($Text);
// Replace any html brackets with HTML Entities to prevent executing HTML or script
@@ -108,12 +152,17 @@ function bb2diaspora($Text,$preserve_nl = false) {
$Text = str_replace(">", ">", $Text);
// If we find any event code, turn it into an event.
- // After we're finished processing the bbcode we'll
+ // After we're finished processing the bbcode we'll
// replace all of the event code with a reformatted version.
-
if($preserve_nl)
$Text = str_replace(array("\n","\r"), array('',''),$Text);
+ else
+ // Remove the "return" character, as Diaspora uses only the "newline"
+ // character, so having the "return" character can cause signature
+ // failures
+ $Text = str_replace("\r", "", $Text);
+
// Set up the parameters for a URL search string
$URLSearchString = "^\[\]";
@@ -128,7 +177,7 @@ function bb2diaspora($Text,$preserve_nl = false) {
// new javascript markdown processor to handle links with images as the link "text"
// It is not optimal and may be removed if this ability is restored in the future
- $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism",
+ $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism",
'![' . t('image/photo') . '](' . '$2' . ')' . "\n" . '[' . t('link') . '](' . '$1' . ')', $Text);
$Text = preg_replace("/\[bookmark\]([$URLSearchString]*)\[\/bookmark\]/ism", '[$1]($1)', $Text);
@@ -145,7 +194,7 @@ function bb2diaspora($Text,$preserve_nl = false) {
// Perform MAIL Search
$Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '[$1](mailto:$1)', $Text);
$Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '[$2](mailto:$1)', $Text);
-
+
$Text = str_replace('*', '\\*', $Text);
$Text = str_replace('_', '\\_', $Text);
@@ -154,48 +203,55 @@ function bb2diaspora($Text,$preserve_nl = false) {
// Check for bold text
$Text = preg_replace("(\[b\](.*?)\[\/b\])is",'**$1**',$Text);
- // Check for Italics text
+ // Check for italics text
$Text = preg_replace("(\[i\](.*?)\[\/i\])is",'_$1_',$Text);
- // Check for Underline text
-// $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'$1',$Text);
+ // Check for underline text
+ // Replace with italics since Diaspora doesn't have underline
+ $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'_$1_',$Text);
// Check for strike-through text
-// $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'$1',$Text);
+ $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'**[strike]**$1**[/strike]**',$Text);
// Check for over-line text
// $Text = preg_replace("(\[o\](.*?)\[\/o\])is",'$1',$Text);
// Check for colored text
-// $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text);
+ // Remove color since Diaspora doesn't support it
+ $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text);
// Check for sized text
-// $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text);
+ // Remove it since Diaspora doesn't support sizes very well
+ $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text);
// Check for list text
-// $Text = preg_replace("/\[list\](.*?)\[\/list\]/is", '' ,$Text);
-// $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/is", '' ,$Text);
-// $Text = preg_replace("/\[list=i\](.*?)\[\/list\]/s",'' ,$Text);
-// $Text = preg_replace("/\[list=I\](.*?)\[\/list\]/s", '' ,$Text);
-// $Text = preg_replace("/\[list=a\](.*?)\[\/list\]/s", '' ,$Text);
-// $Text = preg_replace("/\[list=A\](.*?)\[\/list\]/s", '' ,$Text);
+ $Text = preg_replace_callback("/\[list\](.*?)\[\/list\]/is", 'diaspora_ul', $Text);
+ $Text = preg_replace_callback("/\[ul\](.*?)\[\/ul\]/is", 'diaspora_ul', $Text);
+ $Text = preg_replace_callback("/\[list=1\](.*?)\[\/list\]/is", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=i\](.*?)\[\/list\]/s",'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=I\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=a\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[list=A\](.*?)\[\/list\]/s", 'diaspora_ol', $Text);
+ $Text = preg_replace_callback("/\[ol\](.*?)\[\/ol\]/is", 'diaspora_ol', $Text);
// $Text = preg_replace("/\[li\](.*?)\[\/li\]/s", '$1' ,$Text);
-// $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '$1 | ' ,$Text);
-// $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '$1
' ,$Text);
-// $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '' ,$Text);
+ // Just get rid of table tags since Diaspora doesn't support tables
+ $Text = preg_replace("/\[th\](.*?)\[\/th\]/s", '$1' ,$Text);
+ $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '$1' ,$Text);
+ $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '$1' ,$Text);
+ $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '$1' ,$Text);
-// $Text = preg_replace("/\[table border=1\](.*?)\[\/table\]/s", '' ,$Text);
+ $Text = preg_replace("/\[table border=(.*?)\](.*?)\[\/table\]/s", '$2' ,$Text);
// $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '' ,$Text);
-
+
// $Text = str_replace("[*]", "", $Text);
// Check for font change text
// $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","$2",$Text);
- $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripdcode_br_cb',$Text);
+ $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripdcode_br_cb',$Text);
// Check for [code] text
$Text = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/is","\t$2\n", $Text);
@@ -204,10 +260,11 @@ function bb2diaspora($Text,$preserve_nl = false) {
// Declare the format for [quote] layout
- // $QuoteLayout = '$1
';
+ // $QuoteLayout = '$1
';
// Check for [quote] text
$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is",">$1\n\n", $Text);
-
+ $Text = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/is",">$2\n\n", $Text);
+
// Images
// html5 video and audio
@@ -217,13 +274,13 @@ function bb2diaspora($Text,$preserve_nl = false) {
$Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '$1', $Text);
// $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '', $Text);
-
+
// [img=widthxheight]image source[/img]
// $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '
', $Text);
- $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
- $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
- $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
+ $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
+ $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
+ $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text);
$Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", 'http://www.youtube.com/watch?v=$1', $Text);
$Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'http://vimeo.com/$1',$Text);
@@ -241,7 +298,7 @@ function bb2diaspora($Text,$preserve_nl = false) {
if(x($ev,'desc') && x($ev,'start')) {
$sub = format_event_diaspora($ev);
-
+
$Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",$sub,$Text);
$Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",'',$Text);
$Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text);
@@ -251,13 +308,23 @@ function bb2diaspora($Text,$preserve_nl = false) {
$Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
- $Text = preg_replace('/\[(.*?)\]\((.*?)\\\\_(.*?)\)/ism','[$1]($2_$3)',$Text);
-
+ $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text);
+*/
+
+ // Remove any leading or trailing whitespace, as this will mess up
+ // the Diaspora signature verification and cause the item to disappear
+ $Text = trim($Text);
+
call_hooks('bb2diaspora',$Text);
return $Text;
}
+function unescape_underscores_in_links($m) {
+ $y = str_replace('\\_','_', $m[2]);
+ return('[' . $m[1] . '](' . $y . ')');
+}
+
function format_event_diaspora($ev) {
$a = get_app();