diff options
Diffstat (limited to 'program/lib/enriched.inc')
-rw-r--r-- | program/lib/enriched.inc | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/program/lib/enriched.inc b/program/lib/enriched.inc new file mode 100644 index 000000000..2435a8233 --- /dev/null +++ b/program/lib/enriched.inc @@ -0,0 +1,114 @@ +<?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 = eregi_replace($find,$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; +} + +?>
\ No newline at end of file |