summaryrefslogtreecommitdiff
path: root/program/lib/enriched.inc
blob: e3abd8c4fa186d623af7025907159761331e7564 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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 = 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.='&gt;'.$line.'<br>';
		$body=$a[1].'<span class="quotes">'.$quoted.'</span>'.$a[3];
	}

	return $body;
}

function enriched_to_html($body){
	$body = str_replace('<<','&lt;',$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;
}

?>