* Calendar/CalDAV: fixed wrong line-defolding, if folding occured in whitespace

reverting r29794, as it "eat" to much whitespace
This commit is contained in:
Ralf Becker 2011-05-26 15:35:51 +00:00
parent b58159ac8a
commit efc0c255e7

View File

@ -620,7 +620,7 @@ class Horde_iCalendar {
// old formats force folding at whitespace which must therefore be preserved // old formats force folding at whitespace which must therefore be preserved
$vCal = preg_replace('/[\r\n]+([ \t])/', '\1', $vCal); $vCal = preg_replace('/[\r\n]+([ \t])/', '\1', $vCal);
} else { } else {
$vCal = preg_replace('/[\r\n]+[ \t]+/', '', $vCal); $vCal = preg_replace('/[\r\n]+[ \t]/', '', $vCal);
} }
$isDate = false; $isDate = false;
@ -692,10 +692,10 @@ class Horde_iCalendar {
$value = $GLOBALS['egw']->translation->convert($value, $value = $GLOBALS['egw']->translation->convert($value,
empty($charset) ? ($this->isOldFormat() ? 'iso-8859-1' : 'utf-8') : $charset); empty($charset) ? ($this->isOldFormat() ? 'iso-8859-1' : 'utf-8') : $charset);
} }
// Get timezone info for date fields from $params. // Get timezone info for date fields from $params.
$tzid = isset($params['TZID']) ? trim($params['TZID'], '\"') : false; $tzid = isset($params['TZID']) ? trim($params['TZID'], '\"') : false;
switch ($tag) { switch ($tag) {
case 'VERSION': // already processed case 'VERSION': // already processed
break; break;
@ -705,12 +705,12 @@ class Horde_iCalendar {
case 'LAST-MODIFIED': case 'LAST-MODIFIED':
$this->setAttribute($tag, $this->_parseDateTime($value, $tzid), $params); $this->setAttribute($tag, $this->_parseDateTime($value, $tzid), $params);
break; break;
case 'BDAY': case 'BDAY':
case 'X-SYNCJE-ANNIVERSARY': case 'X-SYNCJE-ANNIVERSARY':
$this->setAttribute($tag, $value, $params, true, $this->_parseDate($value)); $this->setAttribute($tag, $value, $params, true, $this->_parseDate($value));
break; break;
case 'DTEND': case 'DTEND':
case 'DTSTART': case 'DTSTART':
case 'DTSTAMP': case 'DTSTAMP':
@ -729,7 +729,7 @@ class Horde_iCalendar {
$this->setAttribute($tag, $this->_parseDateTime($ts[0], $tzid), $params); $this->setAttribute($tag, $this->_parseDateTime($ts[0], $tzid), $params);
} }
break; break;
case 'TRIGGER': case 'TRIGGER':
if (isset($params['VALUE'])) { if (isset($params['VALUE'])) {
if ($params['VALUE'] == 'DATE-TIME') { if ($params['VALUE'] == 'DATE-TIME') {
@ -741,13 +741,13 @@ class Horde_iCalendar {
$this->setAttribute($tag, $this->_parseDuration($value), $params); $this->setAttribute($tag, $this->_parseDuration($value), $params);
} }
break; break;
// Comma or semicolon seperated dates. // Comma or semicolon seperated dates.
case 'EXDATE': case 'EXDATE':
case 'RDATE': case 'RDATE':
$dates = array(); $dates = array();
preg_match_all('/[;,]([^;,]*)/', ';' . $value, $values); preg_match_all('/[;,]([^;,]*)/', ';' . $value, $values);
foreach ($values[1] as $value) { foreach ($values[1] as $value) {
if ((isset($params['VALUE']) if ((isset($params['VALUE'])
&& $params['VALUE'] == 'DATE') || (!isset($params['VALUE']) && $isDate)) { && $params['VALUE'] == 'DATE') || (!isset($params['VALUE']) && $isDate)) {
@ -758,12 +758,12 @@ class Horde_iCalendar {
} }
$this->setAttribute($tag, isset($dates[0]) ? $dates[0] : null, $params, true, $dates); $this->setAttribute($tag, isset($dates[0]) ? $dates[0] : null, $params, true, $dates);
break; break;
// Duration fields. // Duration fields.
case 'DURATION': case 'DURATION':
$this->setAttribute($tag, $this->_parseDuration($value), $params); $this->setAttribute($tag, $this->_parseDuration($value), $params);
break; break;
// Period of time fields. // Period of time fields.
case 'FREEBUSY': case 'FREEBUSY':
$periods = array(); $periods = array();
@ -771,16 +771,16 @@ class Horde_iCalendar {
foreach ($values[1] as $value) { foreach ($values[1] as $value) {
$periods[] = $this->_parsePeriod($value); $periods[] = $this->_parsePeriod($value);
} }
$this->setAttribute($tag, isset($periods[0]) ? $periods[0] : null, $params, true, $periods); $this->setAttribute($tag, isset($periods[0]) ? $periods[0] : null, $params, true, $periods);
break; break;
// UTC offset fields. // UTC offset fields.
case 'TZOFFSETFROM': case 'TZOFFSETFROM':
case 'TZOFFSETTO': case 'TZOFFSETTO':
$this->setAttribute($tag, $this->_parseUtcOffset($value), $params); $this->setAttribute($tag, $this->_parseUtcOffset($value), $params);
break; break;
// Integer fields. // Integer fields.
case 'PERCENT-COMPLETE': case 'PERCENT-COMPLETE':
case 'PRIORITY': case 'PRIORITY':
@ -788,7 +788,7 @@ class Horde_iCalendar {
case 'SEQUENCE': case 'SEQUENCE':
$this->setAttribute($tag, intval($value), $params); $this->setAttribute($tag, intval($value), $params);
break; break;
// Geo fields. // Geo fields.
case 'GEO': case 'GEO':
if ($this->isOldFormat()) { if ($this->isOldFormat()) {
@ -802,18 +802,18 @@ class Horde_iCalendar {
} }
$this->setAttribute($tag, $value, $params); $this->setAttribute($tag, $value, $params);
break; break;
// Recursion fields. # add more flexibility // Recursion fields. # add more flexibility
#case 'EXRULE': #case 'EXRULE':
#case 'RRULE': #case 'RRULE':
# $this->setAttribute($tag, trim($value), $params); # $this->setAttribute($tag, trim($value), $params);
# break; # break;
// Binary fields. // Binary fields.
case 'PHOTO': case 'PHOTO':
$this->setAttribute($tag, $value, $params); $this->setAttribute($tag, $value, $params);
break; break;
// ADR, ORG and N are lists seperated by unescaped semicolons // ADR, ORG and N are lists seperated by unescaped semicolons
// with a specific number of slots. // with a specific number of slots.
case 'ADR': case 'ADR':
@ -825,7 +825,7 @@ class Horde_iCalendar {
$value = str_replace(array('\\n', '\\N', '\\;', '\\:'), $value = str_replace(array('\\n', '\\N', '\\;', '\\:'),
array("\n", "\n", ';', ':'), array("\n", "\n", ';', ':'),
$value); $value);
// Split by unescaped semicolons: // Split by unescaped semicolons:
$values = preg_split('/(?<!\\\\);/', $value); $values = preg_split('/(?<!\\\\);/', $value);
$value = str_replace('\\;', ';', $value); $value = str_replace('\\;', ';', $value);
@ -834,7 +834,7 @@ class Horde_iCalendar {
$values = str_replace('\\,', ',', $values); $values = str_replace('\\,', ',', $values);
$this->setAttribute($tag, trim($value), $params, true, $values); $this->setAttribute($tag, trim($value), $params, true, $values);
break; break;
// CATEGORIES is a lists seperated by unescaped commas // CATEGORIES is a lists seperated by unescaped commas
// with a unspecific number of slots. // with a unspecific number of slots.
case 'CATEGORIES': case 'CATEGORIES':
@ -844,7 +844,7 @@ class Horde_iCalendar {
$value = str_replace(array('\\n', '\\N', '\\,', '\\:'), $value = str_replace(array('\\n', '\\N', '\\,', '\\:'),
array("\n", "\n", ',', ':'), array("\n", "\n", ',', ':'),
$value); $value);
// Split by unescaped commas: // Split by unescaped commas:
$values = preg_split('/(?<!\\\\),/', $value); $values = preg_split('/(?<!\\\\),/', $value);
$value = str_replace('\\;', ';', $value); $value = str_replace('\\;', ';', $value);
@ -853,7 +853,7 @@ class Horde_iCalendar {
$values = str_replace('\\,', ',', $values); $values = str_replace('\\,', ',', $values);
$this->setAttribute($tag, trim($value), $params, true, $values); $this->setAttribute($tag, trim($value), $params, true, $values);
break; break;
// String fields. // String fields.
default: default:
if ($this->isOldFormat()) { if ($this->isOldFormat()) {
@ -863,14 +863,14 @@ class Horde_iCalendar {
$value = str_replace(array('\\n', '\\N', '\\;', '\\:'), $value = str_replace(array('\\n', '\\N', '\\;', '\\:'),
array("\n", "\n", ';', ':'), array("\n", "\n", ';', ':'),
$value); $value);
// Split by unescaped semicolons: // Split by unescaped semicolons:
$values = preg_split('/(?<!\\\\);/', $value); $values = preg_split('/(?<!\\\\);/', $value);
$value = str_replace('\\;', ';', $value); $value = str_replace('\\;', ';', $value);
$values = str_replace('\\;', ';', $values); $values = str_replace('\\;', ';', $values);
$value = str_replace('\\,', ',', $value); $value = str_replace('\\,', ',', $value);
$values = str_replace('\\,', ',', $values); $values = str_replace('\\,', ',', $values);
$this->setAttribute($tag, trim($value), $params, true, $values); $this->setAttribute($tag, trim($value), $params, true, $values);
} else { } else {
$value = trim($value); $value = trim($value);
// As of rfc 2426 2.4.2 semicolon, comma, and colon // As of rfc 2426 2.4.2 semicolon, comma, and colon
@ -879,7 +879,7 @@ class Horde_iCalendar {
$value = str_replace(array('\\n', '\\N', '\\;', '\\:', '\\\\'), $value = str_replace(array('\\n', '\\N', '\\;', '\\:', '\\\\'),
array("\n", "\n", ';', ':', '\\'), array("\n", "\n", ';', ':', '\\'),
$value); $value);
// Split by unescaped commas. // Split by unescaped commas.
$values = preg_split('/(?<!\\\\),/', $value); $values = preg_split('/(?<!\\\\),/', $value);
$value = str_replace('\\,', ',', $value); $value = str_replace('\\,', ',', $value);
@ -890,7 +890,7 @@ class Horde_iCalendar {
} }
} }
} }
return true; return true;
} }
@ -1243,7 +1243,7 @@ class Horde_iCalendar {
case 'BASE64': case 'BASE64':
$params_str .= ';ENCODING=' . $params['ENCODING']; $params_str .= ';ENCODING=' . $params['ENCODING'];
// using native php wordwrap to speed up encoding of images // using native php wordwrap to speed up encoding of images
$result .= wordwrap($name . $params_str . ':' . $this->_newline . ' ' . $result .= wordwrap($name . $params_str . ':' . $this->_newline . ' ' .
$this->_base64Encode($value),75,$this->_newline . ' ',true) . $this->_newline; $this->_base64Encode($value),75,$this->_newline . ' ',true) . $this->_newline;
/* /*
$attr_string = $name . $params_str . ':' . $this->_newline . ' ' . $this->_base64Encode($value); $attr_string = $name . $params_str . ':' . $this->_newline . ' ' . $this->_base64Encode($value);