Subversion Repositories Sites.obs-saisons.fr

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 aurelien 1
<?php
2
//=======================================================================
3
// File:	jpgraph_ttf.inc.php
4
// Description:	Handling of TTF fonts
5
// Created: 	2006-11-19
6
// Ver:		$Id: jpgraph_ttf.inc.php 1080 2008-09-19 16:06:46Z ljp $
7
//
8
// Copyright (c) Aditus Consulting. All rights reserved.
9
//========================================================================
10
 
11
// TTF Font families
12
DEFINE("FF_COURIER",10);
13
DEFINE("FF_VERDANA",11);
14
DEFINE("FF_TIMES",12);
15
DEFINE("FF_COMIC",14);
16
DEFINE("FF_ARIAL",15);
17
DEFINE("FF_GEORGIA",16);
18
DEFINE("FF_TREBUCHE",17);
19
 
20
// Gnome Vera font
21
// Available from http://www.gnome.org/fonts/
22
DEFINE("FF_VERA",19);
23
DEFINE("FF_VERAMONO",20);
24
DEFINE("FF_VERASERIF",21);
25
 
26
// Chinese font
27
DEFINE("FF_SIMSUN",30);
28
DEFINE("FF_CHINESE",31);
29
DEFINE("FF_BIG5",31);
30
 
31
// Japanese font
32
DEFINE("FF_MINCHO",40);
33
DEFINE("FF_PMINCHO",41);
34
DEFINE("FF_GOTHIC",42);
35
DEFINE("FF_PGOTHIC",43);
36
 
37
// Hebrew fonts
38
DEFINE("FF_DAVID",44);
39
DEFINE("FF_MIRIAM",45);
40
DEFINE("FF_AHRON",46);
41
 
42
// Dejavu-fonts http://sourceforge.net/projects/dejavu
43
DEFINE("FF_DV_SANSSERIF",47);
44
DEFINE("FF_DV_SERIF",48);
45
DEFINE("FF_DV_SANSSERIFMONO",49);
46
DEFINE("FF_DV_SERIFCOND",50);
47
DEFINE("FF_DV_SANSSERIFCOND",51);
48
 
49
// Extra fonts
50
// Download fonts from
51
// http://www.webfontlist.com
52
// http://www.webpagepublicity.com/free-fonts.html
53
 
54
DEFINE("FF_SPEEDO",50);		// This font is also known as Bauer (Used for gauge fascia)
55
DEFINE("FF_DIGITAL",51);	// Digital readout font
56
DEFINE("FF_COMPUTER",52);	// The classic computer font
57
DEFINE("FF_CALCULATOR",53);	// Triad font
58
 
59
// Limits for TTF fonts
60
DEFINE('_FF_FIRST',10);
61
DEFINE('_FF_LAST',53);
62
 
63
// Older deprecated fonts
64
DEFINE("FF_BOOK",91);    // Deprecated fonts from 1.9
65
DEFINE("FF_HANDWRT",92); // Deprecated fonts from 1.9
66
 
67
// TTF Font styles
68
DEFINE("FS_NORMAL",9001);
69
DEFINE("FS_BOLD",9002);
70
DEFINE("FS_ITALIC",9003);
71
DEFINE("FS_BOLDIT",9004);
72
DEFINE("FS_BOLDITALIC",9004);
73
 
74
//Definitions for internal font
75
DEFINE("FF_FONT0",1);
76
DEFINE("FF_FONT1",2);
77
DEFINE("FF_FONT2",4);
78
 
79
 
80
//===================================================
81
// CLASS LanguageConv
82
// Description:
83
// Converts variouscharacter encoding into proper
84
// UTF-8 depending on how the library have been configured.
85
//===================================================
86
class LanguageConv {
87
    var $g2312 = null ;
88
 
89
    function Convert($aTxt,$aFF) {
90
	if( LANGUAGE_GREEK ) {
91
	    if( GREEK_FROM_WINDOWS ) {
92
		$unistring = LanguageConv::gr_win2uni($aTxt);
93
	    } else  {
94
		$unistring = LanguageConv::gr_iso2uni($aTxt);
95
	    }
96
	    return $unistring;
97
	} elseif( LANGUAGE_CYRILLIC ) {
98
	    if( CYRILLIC_FROM_WINDOWS && (!defined('CYRILLIC_LANGUAGE_CHARSET') || stristr(CYRILLIC_LANGUAGE_CHARSET, 'windows-1251')) ) {
99
		$aTxt = convert_cyr_string($aTxt, "w", "k");
100
	    }
101
	    if( !defined('CYRILLIC_LANGUAGE_CHARSET') || stristr(CYRILLIC_LANGUAGE_CHARSET, 'koi8-r') || stristr(CYRILLIC_LANGUAGE_CHARSET, 'windows-1251')) {
102
		$isostring = convert_cyr_string($aTxt, "k", "i");
103
		$unistring = LanguageConv::iso2uni($isostring);
104
	    }
105
	    else {
106
		$unistring = $aTxt;
107
	    }
108
	    return $unistring;
109
	}
110
	elseif( $aFF === FF_SIMSUN ) {
111
	    // Do Chinese conversion
112
	    if( $this->g2312 == null ) {
113
		include_once 'jpgraph_gb2312.php' ;
114
		$this->g2312 = new GB2312toUTF8();
115
	    }
116
	    return $this->g2312->gb2utf8($aTxt);
117
	}
118
	elseif( $aFF === FF_CHINESE ) {
119
	    if( !function_exists('iconv') ) {
120
		JpGraphError::RaiseL(25006);
121
//('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).');
122
	    }
123
	    return iconv('BIG5','UTF-8',$aTxt);
124
	}
125
	elseif( ASSUME_EUCJP_ENCODING &&
126
		($aFF == FF_MINCHO || $aFF == FF_GOTHIC || $aFF == FF_PMINCHO || $aFF == FF_PGOTHIC) ) {
127
	    if( !function_exists('mb_convert_encoding') ) {
128
		JpGraphError::RaiseL(25127);
129
	    }
130
	    return mb_convert_encoding($aTxt, 'UTF-8','EUC-JP');
131
	}
132
	elseif( $aFF == FF_DAVID || $aFF == FF_MIRIAM || $aFF == FF_AHRON ) {
133
	    return $this->heb_iso2uni($aTxt);
134
	}
135
	else
136
	    return $aTxt;
137
    }
138
 
139
    // Translate iso encoding to unicode
140
    function iso2uni ($isoline){
141
	$uniline='';
142
	for ($i=0; $i < strlen($isoline); $i++){
143
	    $thischar = substr($isoline,$i,1);
144
	    $charcode = ord($thischar);
145
	    $uniline .= ($charcode>175) ? "&#" . (1040+($charcode-176)). ";" : $thischar;
146
	}
147
	return $uniline;
148
    }
149
 
150
    // Translate greek iso encoding to unicode
151
    function gr_iso2uni ($isoline) {
152
	$uniline='';
153
	for ($i=0; $i < strlen($isoline); $i++)	{
154
	    $thischar=substr($isoline,$i,1);
155
	    $charcode=ord($thischar);
156
	    $uniline.=($charcode>179 && $charcode!=183 && $charcode!=187 && $charcode!=189) ? "&#" . (900+($charcode-180)). ";" : $thischar;
157
	}
158
	return $uniline;
159
    }
160
 
161
    // Translate greek win encoding to unicode
162
    function gr_win2uni ($winline) {
163
	$uniline='';
164
	$n = strlen($winline);
165
	for ($i=0; $i < $n; $i++) {
166
	    $thischar=substr($winline,$i,1);
167
	    $charcode=ord($thischar);
168
	    if ($charcode==161 || $charcode==162) {
169
		$uniline.="&#" . (740+$charcode). ";";
170
	    }
171
	    else {
172
		$uniline.=(($charcode>183 && $charcode!=187 && $charcode!=189) || $charcode==180) ? "&#" . (900+($charcode-180)). ";" : $thischar;
173
	    }
174
	}
175
	return $uniline;
176
    }
177
 
178
    function heb_iso2uni($isoline) {
179
	$isoline = hebrev($isoline);
180
	$o = '';
181
 
182
	$n = strlen($isoline);
183
	for($i=0; $i < $n; $i++) {
184
	    $c=ord( substr($isoline,$i,1) );
185
	    $o .= ($c > 223) && ($c < 251) ? '&#'.(1264+$c).';' : chr($c);
186
	}
187
	return utf8_encode($o);
188
    }
189
}
190
 
191
//=================================================================
192
// CLASS TTF
193
// Description: Handle TTF font names and loading of font files
194
//=================================================================
195
class TTF {
196
    var $font_files,$style_names;
197
 
198
//---------------
199
// CONSTRUCTOR
200
    function TTF() {
201
 
202
	// String names for font styles to be used in error messages
203
	$this->style_names=array(FS_NORMAL	=>'normal',
204
				 FS_BOLD	=>'bold',
205
				 FS_ITALIC	=>'italic',
206
				 FS_BOLDITALIC	=>'bolditalic');
207
 
208
	// File names for available fonts
209
	$this->font_files=array(
210
	    FF_COURIER => array(FS_NORMAL	=>'cour.ttf',
211
				FS_BOLD		=>'courbd.ttf',
212
				FS_ITALIC	=>'couri.ttf',
213
				FS_BOLDITALIC	=>'courbi.ttf' ),
214
	    FF_GEORGIA => array(FS_NORMAL	=>'georgia.ttf',
215
				FS_BOLD		=>'georgiab.ttf',
216
				FS_ITALIC	=>'georgiai.ttf',
217
				FS_BOLDITALIC	=>'' ),
218
	    FF_TREBUCHE	=>array(FS_NORMAL	=>'trebuc.ttf',
219
				FS_BOLD		=>'trebucbd.ttf',
220
				FS_ITALIC	=>'trebucit.ttf',
221
				FS_BOLDITALIC	=>'trebucbi.ttf' ),
222
	    FF_VERDANA 	=> array(FS_NORMAL	=>'verdana.ttf',
223
				FS_BOLD		=>'verdanab.ttf',
224
				FS_ITALIC	=>'verdanai.ttf',
225
				FS_BOLDITALIC	=>'' ),
226
	    FF_TIMES =>   array(FS_NORMAL	=>'times.ttf',
227
				FS_BOLD		=>'timesbd.ttf',
228
				FS_ITALIC	=>'timesi.ttf',
229
				FS_BOLDITALIC	=>'timesbi.ttf' ),
230
	    FF_COMIC =>   array(FS_NORMAL	=>'comic.ttf',
231
				FS_BOLD		=>'comicbd.ttf',
232
				FS_ITALIC	=>'',
233
				FS_BOLDITALIC	=>'' ),
234
	    FF_ARIAL =>   array(FS_NORMAL	=>'arial.ttf',
235
				FS_BOLD		=>'arialbd.ttf',
236
				FS_ITALIC	=>'ariali.ttf',
237
				FS_BOLDITALIC	=>'arialbi.ttf' ) ,
238
	    FF_VERA =>    array(FS_NORMAL	=>'Vera.ttf',
239
				FS_BOLD		=>'VeraBd.ttf',
240
				FS_ITALIC	=>'VeraIt.ttf',
241
				FS_BOLDITALIC	=>'VeraBI.ttf' ),
242
	    FF_VERAMONO	=> array(FS_NORMAL	=>'VeraMono.ttf',
243
				 FS_BOLD	=>'VeraMoBd.ttf',
244
				 FS_ITALIC	=>'VeraMoIt.ttf',
245
				 FS_BOLDITALIC	=>'VeraMoBI.ttf' ),
246
	    FF_VERASERIF=>  array(FS_NORMAL	=>'VeraSe.ttf',
247
				  FS_BOLD	=>'VeraSeBd.ttf',
248
				  FS_ITALIC	=>'',
249
				  FS_BOLDITALIC	=>'' ) ,
250
 
251
	    /* Chinese fonts */
252
	    FF_SIMSUN 	=>  array(FS_NORMAL	=>'simsun.ttc',
253
				  FS_BOLD	=>'simhei.ttf',
254
				  FS_ITALIC	=>'',
255
				  FS_BOLDITALIC	=>'' ),
256
	    FF_CHINESE 	=>  array(FS_NORMAL	=>CHINESE_TTF_FONT,
257
				  FS_BOLD	=>'',
258
				  FS_ITALIC	=>'',
259
				  FS_BOLDITALIC	=>'' ),
260
 
261
	    /* Japanese fonts */
262
 	    FF_MINCHO 	=>  array(FS_NORMAL	=>MINCHO_TTF_FONT,
263
				  FS_BOLD	=>'',
264
				  FS_ITALIC	=>'',
265
				  FS_BOLDITALIC	=>'' ),
266
 	    FF_PMINCHO 	=>  array(FS_NORMAL	=>PMINCHO_TTF_FONT,
267
				  FS_BOLD	=>'',
268
				  FS_ITALIC	=>'',
269
				  FS_BOLDITALIC	=>'' ),
270
 	    FF_GOTHIC  	=>   array(FS_NORMAL	=>GOTHIC_TTF_FONT,
271
				  FS_BOLD	=>'',
272
				  FS_ITALIC	=>'',
273
				  FS_BOLDITALIC	=>'' ),
274
 	    FF_PGOTHIC 	=>  array(FS_NORMAL	=>PGOTHIC_TTF_FONT,
275
				  FS_BOLD	=>'',
276
				  FS_ITALIC	=>'',
277
				  FS_BOLDITALIC	=>'' ),
278
 	    FF_MINCHO 	=>  array(FS_NORMAL	=>PMINCHO_TTF_FONT,
279
				  FS_BOLD	=>'',
280
				  FS_ITALIC	=>'',
281
				  FS_BOLDITALIC	=>'' ),
282
 
283
	    /* Hebrew fonts */
284
	    FF_DAVID 	=>  array(FS_NORMAL	=>'DAVIDNEW.TTF',
285
				  FS_BOLD	=>'',
286
				  FS_ITALIC	=>'',
287
				  FS_BOLDITALIC	=>'' ),
288
 
289
	    FF_MIRIAM 	=>  array(FS_NORMAL	=>'MRIAMY.TTF',
290
				  FS_BOLD	=>'',
291
				  FS_ITALIC	=>'',
292
				  FS_BOLDITALIC	=>'' ),
293
 
294
	    FF_AHRON 	=>  array(FS_NORMAL	=>'ahronbd.ttf',
295
				  FS_BOLD	=>'',
296
				  FS_ITALIC	=>'',
297
				  FS_BOLDITALIC	=>'' ),
298
 
299
	    /* Dejavu fonts */
300
 	    FF_DV_SANSSERIF => array(FS_NORMAL	=>'DejaVuSans.ttf',
301
				  FS_BOLD	=>'DejaVuSans-Bold.ttf',
302
				  FS_ITALIC	=>'DejaVuSans-Oblique.ttf',
303
				  FS_BOLDITALIC	=>'DejaVuSans-BoldOblique.ttf' ),
304
 
305
 	    FF_DV_SANSSERIFMONO => array(FS_NORMAL	=>'DejaVuSansMono.ttf',
306
				  FS_BOLD	=>'DejaVuSansMono-Bold.ttf',
307
				  FS_ITALIC	=>'DejaVuSansMono-Oblique.ttf',
308
				  FS_BOLDITALIC	=>'DejaVuSansMono-BoldOblique.ttf' ),
309
 
310
 	    FF_DV_SANSSERIFCOND => array(FS_NORMAL	=>'DejaVuSansCondensed.ttf',
311
				  FS_BOLD	=>'DejaVuSansCondensed-Bold.ttf',
312
				  FS_ITALIC	=>'DejaVuSansCondensed-Oblique.ttf',
313
				  FS_BOLDITALIC	=>'DejaVuSansCondensed-BoldOblique.ttf' ),
314
 
315
 	    FF_DV_SERIF => array(FS_NORMAL	=>'DejaVuSerif.ttf',
316
				  FS_BOLD	=>'DejaVuSerif-Bold.ttf',
317
				  FS_ITALIC	=>'DejaVuSerif-Italic.ttf',
318
				  FS_BOLDITALIC	=>'DejaVuSerif-BoldItalic.ttf' ),
319
 
320
 	    FF_DV_SERIFCOND => array(FS_NORMAL	=>'DejaVuSerifCondensed.ttf',
321
				  FS_BOLD	=>'DejaVuSerifCondensed-Bold.ttf',
322
				  FS_ITALIC	=>'DejaVuSerifCondensed-Italic.ttf',
323
				  FS_BOLDITALIC	=>'DejaVuSerifCondensed-BoldItalic.ttf' ),
324
 
325
	    /* Misc fonts */
326
 	    FF_DIGITAL =>   array(FS_NORMAL	=>'DIGIRU__.TTF',
327
				  FS_BOLD	=>'Digirtu_.ttf',
328
				  FS_ITALIC	=>'Digir___.ttf',
329
				  FS_BOLDITALIC	=>'DIGIRT__.TTF' ),
330
 	    FF_SPEEDO =>    array(FS_NORMAL	=>'Speedo.ttf',
331
				  FS_BOLD	=>'',
332
				  FS_ITALIC	=>'',
333
				  FS_BOLDITALIC	=>'' ),
334
 	    FF_COMPUTER  =>  array(FS_NORMAL	=>'COMPUTER.TTF',
335
				  FS_BOLD	=>'',
336
				  FS_ITALIC	=>'',
337
				  FS_BOLDITALIC	=>'' ),
338
 	    FF_CALCULATOR =>array(FS_NORMAL	=>'Triad_xs.ttf',
339
				  FS_BOLD	=>'',
340
				  FS_ITALIC	=>'',
341
				  FS_BOLDITALIC	=>'' ),
342
	    );
343
    }
344
 
345
//---------------
346
// PUBLIC METHODS
347
    // Create the TTF file from the font specification
348
    function File($family,$style=FS_NORMAL) {
349
 
350
	if( $family == FF_HANDWRT || $family==FF_BOOK ) {
351
	    JpGraphError::RaiseL(25045);//('Font families FF_HANDWRT and FF_BOOK are no longer available due to copyright problem with these fonts. Fonts can no longer be distributed with JpGraph. Please download fonts from http://corefonts.sourceforge.net/');
352
	}
353
 
354
	$fam = @$this->font_files[$family];
355
	if( !$fam ) {
356
	    JpGraphError::RaiseL(25046,$family);//("Specified TTF font family (id=$family) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/");
357
	}
358
	$f = @$fam[$style];
359
 
360
	if( $f==='' )
361
	    JpGraphError::RaiseL(25047,$this->style_names[$style],$this->font_files[$family][FS_NORMAL]);//('Style "'.$this->style_names[$style].'" is not available for font family '.$this->font_files[$family][FS_NORMAL].'.');
362
	if( !$f ) {
363
	    JpGraphError::RaiseL(25048,$fam);//("Unknown font style specification [$fam].");
364
	}
365
 
366
	if ($family >= FF_MINCHO && $family <= FF_PGOTHIC) {
367
	    $f = MBTTF_DIR.$f;
368
	} else {
369
	    $f = TTF_DIR.$f;
370
	}
371
 
372
	if( file_exists($f) === false || is_readable($f) === false ) {
373
	    JpGraphError::RaiseL(25049,$f);//("Font file \"$f\" is not readable or does not exist.");
374
	}
375
	return $f;
376
    }
377
} // Class
378
 
379
?>