|
| Author: Ryo Chijiiwa (IlohaMail) |
+-----------------------------------------------------------------------+
*/
/**
* Class for Enriched to HTML conversion
*
* @package Framework
* @subpackage Utils
*/
class rcube_enriched
{
protected static function convert_newlines($body)
{
// remove single newlines, convert N newlines to N-1
$body = str_replace("\r\n", "\n", $body);
$len = strlen($body);
$nl = 0;
$out = '';
for ($i=0; $i<$len; $i++) {
$c = $body[$i];
if (ord($c) == 10)
$nl++;
if ($nl && ord($c) != 10)
$nl = 0;
if ($nl != 1)
$out .= $c;
else
$out .= ' ';
}
return $out;
}
protected static function convert_formatting($body)
{
$replace = array(
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', ''=> '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
'' => '', '' => '',
);
return str_ireplace(array_keys($replace), array_values($replace), $body);
}
protected static function convert_font($body)
{
$pattern = '/(.*)\\(.*)\<\/param\>(.*)\<\/fontfamily\>(.*)/ims';
while (preg_match($pattern, $body, $a)) {
if (count($a) != 5)
continue;
$body = $a[1].''.$a[3].''.$a[4];
}
return $body;
}
protected static function convert_color($body)
{
$pattern = '/(.*)\\(.*)\<\/param\>(.*)\<\/color\>(.*)/ims';
while (preg_match($pattern, $body, $a)) {
if (count($a) != 5)
continue;
// extract color (either by name, or ####,####,####)
if (strpos($a[2],',')) {
$rgb = explode(',',$a[2]);
$color = '#';
for ($i=0; $i<3; $i++)
$color .= substr($rgb[$i], 0, 2); // just take first 2 bytes
}
else {
$color = $a[2];
}
// put it all together
$body = $a[1].''.$a[3].''.$a[4];
}
return $body;
}
protected static function convert_excerpt($body)
{
$pattern = '/(.*)\(.*)\<\/excerpt\>(.*)/i';
while (preg_match($pattern, $body, $a)) {
if (count($a) != 4)
continue;
$quoted = '';
$lines = explode('
', $a[2]);
foreach ($lines as $n => $line)
$quoted .= '>'.$line.'
';
$body = $a[1].''.$quoted.''.$a[3];
}
return $body;
}
public static function to_html($body)
{
$body = str_replace('<<','<',$body);
$body = self::convert_newlines($body);
$body = str_replace("\n", '
', $body);
$body = self::convert_formatting($body);
$body = self::convert_color($body);
$body = self::convert_font($body);
$body = self::convert_excerpt($body);
//$body = nl2br($body);
return $body;
}
}