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