aboutsummaryrefslogtreecommitdiffstats
path: root/include/quoteconvert.php
diff options
context:
space:
mode:
authorTobias Hößl <tobias@hoessl.eu>2012-02-28 21:19:02 +0000
committerTobias Hößl <tobias@hoessl.eu>2012-02-28 21:19:02 +0000
commit3d249f0eddb058f74b33d8205202b17ab7555aa6 (patch)
tree112e38aa464e5830832ff92a93e10f2566cbe27e /include/quoteconvert.php
parent36a1a43f06dc2a0d55463c83154cce55fa3948ad (diff)
parent733f830be4b554c83361e877a5f1108767a815fc (diff)
downloadvolse-hubzilla-3d249f0eddb058f74b33d8205202b17ab7555aa6.tar.gz
volse-hubzilla-3d249f0eddb058f74b33d8205202b17ab7555aa6.tar.bz2
volse-hubzilla-3d249f0eddb058f74b33d8205202b17ab7555aa6.zip
Merge remote 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);
+}
+?>