aboutsummaryrefslogtreecommitdiffstats
path: root/include/quoteconvert.php
diff options
context:
space:
mode:
authorAlexander Kampmann <programmer@nurfuerspam.de>2012-03-01 11:49:22 +0100
committerAlexander Kampmann <programmer@nurfuerspam.de>2012-03-01 11:49:22 +0100
commitdd9432903ddb3e12381881da44fb84afff832d52 (patch)
treeb499e77cd4faf8157c2e048fb8242bc2ca2720cc /include/quoteconvert.php
parente0c659b34b8992111bcc64d3f0eea75dfa193412 (diff)
parentbd2c8c92f1b30d8f811bd4aab0fe3a2c5496ec61 (diff)
downloadvolse-hubzilla-dd9432903ddb3e12381881da44fb84afff832d52.tar.gz
volse-hubzilla-dd9432903ddb3e12381881da44fb84afff832d52.tar.bz2
volse-hubzilla-dd9432903ddb3e12381881da44fb84afff832d52.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'include/quoteconvert.php')
-rw-r--r--include/quoteconvert.php132
1 files changed, 132 insertions, 0 deletions
diff --git a/include/quoteconvert.php b/include/quoteconvert.php
new file mode 100644
index 000000000..3aee93234
--- /dev/null
+++ b/include/quoteconvert.php
@@ -0,0 +1,132 @@
+<?php
+function convertquote($body, $reply)
+{
+ // Convert Quotes
+ $arrbody = explode("\n", trim($body));
+ $arrlevel = array();
+
+ for ($i = 0; $i < count($arrbody); $i++) {
+ $quotelevel = 0;
+ $quoteline = $arrbody[$i];
+
+ while ((strlen($quoteline)>0) and ((substr($quoteline, 0, 1) == '>')
+ or (substr($quoteline, 0, 1) == ' '))) {
+ if (substr($quoteline, 0, 1) == '>')
+ $quotelevel++;
+
+ $quoteline = ltrim(substr($quoteline, 1));
+ }
+
+ //echo $quotelevel.'*'.$quoteline."\r\n";
+
+ $arrlevel[$i] = $quotelevel;
+ $arrbody[$i] = $quoteline;
+ }
+
+ $quotelevel = 0;
+ $previousquote = 0;
+ $arrbodyquoted = array();
+
+ for ($i = 0; $i < count($arrbody); $i++) {
+
+ $previousquote = $quotelevel;
+ $quotelevel = $arrlevel[$i];
+ $currline = $arrbody[$i];
+
+ while ($previousquote < $quotelevel) {
+ if ($sender != '') {
+ $quote = "[quote title=$sender]";
+ $sender = '';
+ } else
+ $quote = "[quote]";
+
+ $arrbody[$i] = $quote.$arrbody[$i];
+ $previousquote++;
+ }
+
+ while ($previousquote > $quotelevel) {
+ $arrbody[$i] = '[/quote]'.$arrbody[$i];
+ $previousquote--;
+ }
+
+ $arrbodyquoted[] = $arrbody[$i];
+ }
+ while ($quotelevel > 0) {
+ $arrbodyquoted[] = '[/quote]';
+ $quotelevel--;
+ }
+
+ $body = implode("\n", $arrbodyquoted);
+
+ if (strlen($body) > 0)
+ $body = $body."\n\n";
+
+ if ($reply)
+ $body = removetofu($body);
+
+ return($body);
+}
+
+function removetofu($message)
+{
+ $message = trim($message);
+
+ do {
+ $oldmessage = $message;
+ $message = preg_replace('=\[/quote\][\s](.*?)\[quote\]=i', '$1', $message);
+ $message = str_replace("[/quote][quote]", "", $message);
+ } while ($message != $oldmessage);
+
+ $quotes = array();
+
+ $startquotes = 0;
+
+ $start = 0;
+
+ while(($pos = strpos($message, '[quote', $start)) > 0) {
+ $quotes[$pos] = -1;
+ $start = $pos + 7;
+ $startquotes++;
+ }
+
+ $endquotes = 0;
+ $start = 0;
+
+ while(($pos = strpos($message, '[/quote]', $start)) > 0) {
+ $start = $pos + 7;
+ $endquotes++;
+ }
+
+ while ($endquotes < $startquotes) {
+ $message .= '[/quote]';
+ ++$endquotes;
+ }
+
+ $start = 0;
+
+ while(($pos = strpos($message, '[/quote]', $start)) > 0) {
+ $quotes[$pos] = 1;
+ $start = $pos + 7;
+ }
+
+ if (strtolower(substr($message, -8)) != '[/quote]')
+ return($message);
+
+ krsort($quotes);
+
+ $quotelevel = 0;
+ $quotestart = 0;
+ foreach ($quotes as $index => $quote) {
+ $quotelevel += $quote;
+
+ if (($quotelevel == 0) and ($quotestart == 0))
+ $quotestart = $index;
+ }
+
+ if ($quotestart != 0) {
+ $message = trim(substr($message, 0, $quotestart))."\n[collapsed]\n".substr($message, $quotestart+7, -8).'[/collapsed]';
+ }
+
+ return($message);
+}
+?>