| | 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 $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; } }