|
|
|
<?php
|
|
|
|
/*
|
|
|
|
File: read_enriched.inc
|
|
|
|
Author: Ryo Chijiiwa
|
|
|
|
License: GPL (part of IlohaMail)
|
|
|
|
Purpose: functions for handling text/enriched messages
|
|
|
|
Reference: RFC 1523, 1896
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
function enriched_convert_newlines($str){
|
|
|
|
//remove single newlines, convert N newlines to N-1
|
|
|
|
|
|
|
|
$str = str_replace("\r\n","\n",$str);
|
|
|
|
$len = strlen($str);
|
|
|
|
|
|
|
|
$nl = 0;
|
|
|
|
$out = '';
|
|
|
|
for($i=0;$i<$len;$i++){
|
|
|
|
$c = $str[$i];
|
|
|
|
if (ord($c)==10) $nl++;
|
|
|
|
if ($nl && ord($c)!=10) $nl = 0;
|
|
|
|
if ($nl!=1) $out.=$c;
|
|
|
|
else $out.=' ';
|
|
|
|
}
|
|
|
|
return $out;
|
|
|
|
}
|
|
|
|
|
|
|
|
function enriched_convert_formatting($body){
|
|
|
|
$a=array('<bold>'=>'<b>','</bold>'=>'</b>','<italic>'=>'<i>',
|
|
|
|
'</italic>'=>'</i>','<fixed>'=>'<tt>','</fixed>'=>'</tt>',
|
|
|
|
'<smaller>'=>'<font size=-1>','</smaller>'=>'</font>',
|
|
|
|
'<bigger>'=>'<font size=+1>','</bigger>'=>'</font>',
|
|
|
|
'<underline>'=>'<span style="text-decoration: underline">',
|
|
|
|
'</underline>'=>'</span>',
|
|
|
|
'<flushleft>'=>'<span style="text-align:left">',
|
|
|
|
'</flushleft>'=>'</span>',
|
|
|
|
'<flushright>'=>'<span style="text-align:right">',
|
|
|
|
'</flushright>'=>'</span>',
|
|
|
|
'<flushboth>'=>'<span style="text-align:justified">',
|
|
|
|
'</flushboth>'=>'</span>',
|
|
|
|
'<indent>'=>'<span style="padding-left: 20px">',
|
|
|
|
'</indent>'=>'</span>',
|
|
|
|
'<indentright>'=>'<span style="padding-right: 20px">',
|
|
|
|
'</indentright>'=>'</span>');
|
|
|
|
|
|
|
|
while(list($find,$replace)=each($a)){
|
|
|
|
$body = preg_replace('#'.$find.'#i', $replace, $body);
|
|
|
|
}
|
|
|
|
return $body;
|
|
|
|
}
|
|
|
|
|
|
|
|
function enriched_font($body){
|
|
|
|
$pattern = '/(.*)\<fontfamily\>\<param\>(.*)\<\/param\>(.*)\<\/fontfamily\>(.*)/ims';
|
|
|
|
while(preg_match($pattern,$body,$a)){
|
|
|
|
//print_r($a);
|
|
|
|
if (count($a)!=5) continue;
|
|
|
|
$body=$a[1].'<span style="font-family: '.$a[2].'">'.$a[3].'</span>'.$a[4];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $body;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function enriched_color($body){
|
|
|
|
$pattern = '/(.*)\<color\>\<param\>(.*)\<\/param\>(.*)\<\/color\>(.*)/ims';
|
|
|
|
while(preg_match($pattern,$body,$a)){
|
|
|
|
//print_r($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].'<span style="color: '.$color.'">'.$a[3].'</span>'.$a[4];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $body;
|
|
|
|
}
|
|
|
|
|
|
|
|
function enriched_excerpt($body){
|
|
|
|
|
|
|
|
$pattern = '/(.*)\<excerpt\>(.*)\<\/excerpt\>(.*)/i';
|
|
|
|
while(preg_match($pattern,$body,$a)){
|
|
|
|
//print_r($a);
|
|
|
|
if (count($a)!=4) continue;
|
|
|
|
$quoted = '';
|
|
|
|
$lines = explode('<br>',$a[2]);
|
|
|
|
foreach($lines as $n=>$line) $quoted.='>'.$line.'<br>';
|
|
|
|
$body=$a[1].'<span class="quotes">'.$quoted.'</span>'.$a[3];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $body;
|
|
|
|
}
|
|
|
|
|
|
|
|
function enriched_to_html($body){
|
|
|
|
$body = str_replace('<<','<',$body);
|
|
|
|
$body = enriched_convert_newlines($body);
|
|
|
|
$body = str_replace("\n", '<br>', $body);
|
|
|
|
$body = enriched_convert_formatting($body);
|
|
|
|
$body = enriched_color($body);
|
|
|
|
$body = enriched_font($body);
|
|
|
|
$body = enriched_excerpt($body);
|
|
|
|
//$body = nl2br($body);
|
|
|
|
return $body;
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|