##// END OF EJS Templates
PDF: update rfpdf (#61)....
Toshi MARUYAMA -
r5127:22e8d9b94962
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,448
1
2 #============================================================+
3 # File name : barcode.rb
4 # Begin : 2002-07-31
5 # Last Update : 2005-01-02
6 # Author : Karim Mribti [barcode@mribti.com]
7 # Version : 1.1 [0.0.8a (original code)]
8 # License : GNU LGPL (Lesser General Public License) 2.1
9 # http://www.gnu.org/copyleft/lesser.txt
10 # Source Code : http://www.mribti.com/barcode/
11 #
12 # Description : Generic Barcode Render Class for PHP using
13 # the GD graphics library.
14 #
15 # NOTE:
16 # This version contains changes by Nicola Asuni:
17 # - porting to Ruby
18 # - code style and formatting
19 # - automatic php documentation in PhpDocumentor Style
20 # (www.phpdoc.org)
21 # - minor bug fixing
22 # - $mCharSet and $mChars variables were added here
23 #============================================================+
24
25 #
26 # Barcode Render Class for PHP using the GD graphics library.
27 # @author Karim Mribti, Nicola Asuni
28 # @name BarcodeObject
29 # @package com.tecnick.tcpdf
30 # @@version 0.0.8a 2001-04-01 (original code)
31 # @since 2001-03-25
32 # @license http://www.gnu.org/copyleft/lesser.html LGPL
33 #
34
35 # Styles
36 # Global
37
38 #
39 # option: generate barcode border
40 #
41 define("BCS_BORDER", 1);
42
43 #
44 # option: use transparent background
45 #
46 define("BCS_TRANSPARENT", 2);
47
48 #
49 # option: center barcode
50 #
51 define("BCS_ALIGN_CENTER", 4);
52
53 #
54 # option: align left
55 #
56 define("BCS_ALIGN_LEFT", 8);
57
58 #
59 # option: align right
60 #
61 define("BCS_ALIGN_RIGHT", 16);
62
63 #
64 # option: generate JPEG image
65 #
66 define("BCS_IMAGE_JPEG", 32);
67
68 #
69 # option: generate PNG image
70 #
71 define("BCS_IMAGE_PNG", 64);
72
73 #
74 # option: draw text
75 #
76 define("BCS_DRAW_TEXT", 128);
77
78 #
79 # option: stretch text
80 #
81 define("BCS_STRETCH_TEXT", 256);
82
83 #
84 # option: reverse color
85 #
86 define("BCS_REVERSE_COLOR", 512);
87
88 #
89 # option: draw check
90 # (only for I25 code)
91 #
92 define("BCS_I25_DRAW_CHECK", 2048);
93
94 #
95 # set default background color
96 #
97 define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF);
98
99 #
100 # set default foreground color
101 #
102 define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000);
103
104 #
105 # set default style options
106 #
107 define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG);
108
109 #
110 # set default width
111 #
112 define("BCD_DEFAULT_WIDTH", 460);
113
114 #
115 # set default height
116 #
117 define("BCD_DEFAULT_HEIGHT", 120);
118
119 #
120 # set default font
121 #
122 define("BCD_DEFAULT_FONT", 5);
123
124 #
125 # st default horizontal resolution
126 #
127 define("BCD_DEFAULT_XRES", 2);
128
129 # Margins
130
131 #
132 # set default margin
133 #
134 define("BCD_DEFAULT_MAR_Y1", 0);
135
136 #
137 # set default margin
138 #
139 define("BCD_DEFAULT_MAR_Y2", 0);
140
141 #
142 # set default text offset
143 #
144 define("BCD_DEFAULT_TEXT_OFFSET", 2);
145
146 # For the I25 Only
147
148 #
149 # narrow bar option
150 # (only for I25 code)
151 #
152 define("BCD_I25_NARROW_BAR", 1);
153
154 #
155 # wide bar option
156 # (only for I25 code)
157 #
158 define("BCD_I25_WIDE_BAR", 2);
159
160 # For the C39 Only
161
162 #
163 # narrow bar option
164 # (only for c39 code)
165 #
166 define("BCD_C39_NARROW_BAR", 1);
167
168 #
169 # wide bar option
170 # (only for c39 code)
171 #
172 define("BCD_C39_WIDE_BAR", 2);
173
174 # For Code 128
175
176 #
177 # set type 1 bar
178 # (only for c128 code)
179 #
180 define("BCD_C128_BAR_1", 1);
181
182 #
183 # set type 2 bar
184 # (only for c128 code)
185 #
186 define("BCD_C128_BAR_2", 2);
187
188 #
189 # set type 3 bar
190 # (only for c128 code)
191 #
192 define("BCD_C128_BAR_3", 3);
193
194 #
195 # set type 4 bar
196 # (only for c128 code)
197 #
198 define("BCD_C128_BAR_4", 4);
199
200 #
201 # Barcode Render Class for PHP using the GD graphics library.
202 # @author Karim Mribti, Nicola Asuni
203 # @name BarcodeObject
204 # @package com.tecnick.tcpdf
205 # @@version 0.0.8a 2001-04-01 (original code)
206 # @since 2001-03-25
207 # @license http://www.gnu.org/copyleft/lesser.html LGPL
208 #
209 class BarcodeObject {
210 #
211 # @var Image width in pixels.
212 # @access protected
213 #
214 protected $mWidth;
215
216 #
217 # @var Image height in pixels.
218 # @access protected
219 #
220 protected $mHeight;
221
222 #
223 # @var Numeric code for Barcode style.
224 # @access protected
225 #
226 protected $mStyle;
227
228 #
229 # @var Background color.
230 # @access protected
231 #
232 protected $mBgcolor;
233
234 #
235 # @var Brush color.
236 # @access protected
237 #
238 protected $mBrush;
239
240 #
241 # @var Image object.
242 # @access protected
243 #
244 protected $mImg;
245
246 #
247 # @var Numeric code for character font.
248 # @access protected
249 #
250 protected $mFont;
251
252 #
253 # @var Error message.
254 # @access protected
255 #
256 protected $mError;
257
258 #
259 # @var Character Set.
260 # @access protected
261 #
262 protected $mCharSet;
263
264 #
265 # @var Allowed symbols.
266 # @access protected
267 #
268 protected $mChars;
269
270 #
271 # Class Constructor.
272 # @param int $Width Image width in pixels.
273 # @param int $Height Image height in pixels.
274 # @param int $Style Barcode style.
275 #
276 def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE)
277 @mWidth = $Width;
278 @mHeight = $Height;
279 @mStyle = $Style;
280 @mFont = BCD_DEFAULT_FONT;
281 @mImg = ImageCreate(@mWidth, @mHeight);
282 $dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR;
283 $dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR;
284 @mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16,
285 ($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF);
286 @mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16,
287 ($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF);
288 if (!(@mStyle & BCS_TRANSPARENT))
289 ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor);
290 end
291 end
292
293 #
294 # Class Destructor.
295 # Destroy image object.
296 #
297 def __destructor()
298 @DestroyObject();
299 end
300
301 #
302 # Returns the image object.
303 # @return object image.
304 # @author Nicola Asuni
305 # @since 1.5.2
306 #
307 def getImage()
308 return @mImg;
309 end
310
311 #
312 # Abstract method used to draw the barcode image.
313 # @param int $xres Horizontal resolution.
314 #
315 def DrawObject($xres) {
316 # there is not implementation neded, is simply the asbsract function.#
317 return false;
318 end
319
320 #
321 # Draws the barcode border.
322 # @access protected
323 #
324 protected function DrawBorder()
325 ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush);
326 end
327
328 #
329 # Draws the alphanumeric code.
330 # @param int $Font Font type.
331 # @param int $xPos Horiziontal position.
332 # @param int $yPos Vertical position.
333 # @param int $Char Alphanumeric code to write.
334 # @access protected
335 #
336 protected function DrawChar($Font, $xPos, $yPos, $Char)
337 ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
338 end
339
340 #
341 # Draws a character string.
342 # @param int $Font Font type.
343 # @param int $xPos Horiziontal position.
344 # @param int $yPos Vertical position.
345 # @param int $Char string to write.
346 # @access protected
347 #
348 protected function DrawText($Font, $xPos, $yPos, $Char)
349 ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
350 end
351
352 #
353 # Draws a single barcode bar.
354 # @param int $xPos Horiziontal position.
355 # @param int $yPos Vertical position.
356 # @param int $xSize Horizontal size.
357 # @param int $xSize Vertical size.
358 # @return bool trur in case of success, false otherwise.
359 # @access protected
360 #
361 protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize)
362 if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth &&
363 $yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight)
364 for ($i=0;$i<$xSize;$i++)
365 ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush);
366 end
367 return true;
368 end
369 return false;
370 end
371
372 #
373 # Returns the current error message.
374 # @return string error message.
375 #
376 def GetError()
377 return @mError;
378 end
379
380 #
381 # Returns the font height.
382 # @param int $font font type.
383 # @return int font height.
384 #
385 def GetFontHeight($font)
386 return ImageFontHeight($font);
387 end
388
389 #
390 # Returns the font width.
391 # @param int $font font type.
392 # @return int font width.
393 #
394 def GetFontWidth($font)
395 return ImageFontWidth($font);
396 end
397
398 #
399 # Set font type.
400 # @param int $font font type.
401 #
402 def SetFont($font)
403 @mFont = $font;
404 end
405
406 #
407 # Returns barcode style.
408 # @return int barcode style.
409 #
410 def GetStyle()
411 return @mStyle;
412 end
413
414 #
415 # Set barcode style.
416 # @param int $Style barcode style.
417 #
418 def SetStyle ($Style)
419 @mStyle = $Style;
420 end
421
422 #
423 # Flush the barcode image.
424 #
425 def FlushObject()
426 if ((@mStyle & BCS_BORDER))
427 @DrawBorder();
428 end
429 if (@mStyle & BCS_IMAGE_PNG)
430 Header("Content-Type: image/png");
431 ImagePng(@mImg);
432 elsif (@mStyle & BCS_IMAGE_JPEG)
433 Header("Content-Type: image/jpeg");
434 ImageJpeg(@mImg);
435 end
436 end
437
438 #
439 # Destroy the barcode image.
440 #
441 def DestroyObject()
442 ImageDestroy(@mImg);
443 end
444 }
445
446 #============================================================+
447 # END OF FILE
448 #============================================================+
@@ -0,0 +1,393
1
2 #============================================================+
3 # File name : c128aobject.rb
4 # Begin : 2002-07-31
5 # Last Update : 2004-12-29
6 # Author : Karim Mribti [barcode@mribti.com]
7 # Version : 0.0.8a 2001-04-01 (original code)
8 # License : GNU LGPL (Lesser General Public License) 2.1
9 # http://www.gnu.org/copyleft/lesser.txt
10 # Source Code : http://www.mribti.com/barcode/
11 #
12 # Description : Code 128-A Barcode Render Class for PHP using
13 # the GD graphics library.
14 # Code 128-A is a continuous, multilevel and
15 # include all upper case alphanumeric characters
16 # and ASCII control characters.
17 #
18 # NOTE:
19 # This version contains changes by Nicola Asuni:
20 # - porting to Ruby
21 # - code style and formatting
22 # - automatic php documentation in PhpDocumentor Style
23 # (www.phpdoc.org)
24 # - minor bug fixing
25 #============================================================+
26
27 #
28 # Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
29 # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
30 # @author Karim Mribti, Nicola Asuni
31 # @name BarcodeObject
32 # @package com.tecnick.tcpdf
33 # @@version 0.0.8a 2001-04-01 (original code)
34 # @since 2001-03-25
35 # @license http://www.gnu.org/copyleft/lesser.html LGPL
36 #
37
38 #
39 # Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
40 # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
41 # @author Karim Mribti, Nicola Asuni
42 # @name BarcodeObject
43 # @package com.tecnick.tcpdf
44 # @@version 0.0.8a 2001-04-01 (original code)
45 # @since 2001-03-25
46 # @license http://www.gnu.org/copyleft/lesser.html LGPL
47 #
48 class C128AObject extends BarcodeObject {
49
50 #
51 # Class Constructor.
52 # @param int $Width Image width in pixels.
53 # @param int $Height Image height in pixels.
54 # @param int $Style Barcode style.
55 # @param int $Value value to print on barcode.
56 #
57 def __construct($Width, $Height, $Style, $Value)
58 parent::__construct($Width, $Height, $Style);
59 @mValue = $Value;
60 @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
61 @mCharSet = array (
62 "212222", # 00#
63 "222122", # 01#
64 "222221", # 02#
65 "121223", # 03#
66 "121322", # 04#
67 "131222", # 05#
68 "122213", # 06#
69 "122312", # 07#
70 "132212", # 08#
71 "221213", # 09#
72 "221312", # 10#
73 "231212", # 11#
74 "112232", # 12#
75 "122132", # 13#
76 "122231", # 14#
77 "113222", # 15#
78 "123122", # 16#
79 "123221", # 17#
80 "223211", # 18#
81 "221132", # 19#
82 "221231", # 20#
83 "213212", # 21#
84 "223112", # 22#
85 "312131", # 23#
86 "311222", # 24#
87 "321122", # 25#
88 "321221", # 26#
89 "312212", # 27#
90 "322112", # 28#
91 "322211", # 29#
92 "212123", # 30#
93 "212321", # 31#
94 "232121", # 32#
95 "111323", # 33#
96 "131123", # 34#
97 "131321", # 35#
98 "112313", # 36#
99 "132113", # 37#
100 "132311", # 38#
101 "211313", # 39#
102 "231113", # 40#
103 "231311", # 41#
104 "112133", # 42#
105 "112331", # 43#
106 "132131", # 44#
107 "113123", # 45#
108 "113321", # 46#
109 "133121", # 47#
110 "313121", # 48#
111 "211331", # 49#
112 "231131", # 50#
113 "213113", # 51#
114 "213311", # 52#
115 "213131", # 53#
116 "311123", # 54#
117 "311321", # 55#
118 "331121", # 56#
119 "312113", # 57#
120 "312311", # 58#
121 "332111", # 59#
122 "314111", # 60#
123 "221411", # 61#
124 "431111", # 62#
125 "111224", # 63#
126 "111422", # 64#
127 "121124", # 65#
128 "121421", # 66#
129 "141122", # 67#
130 "141221", # 68#
131 "112214", # 69#
132 "112412", # 70#
133 "122114", # 71#
134 "122411", # 72#
135 "142112", # 73#
136 "142211", # 74#
137 "241211", # 75#
138 "221114", # 76#
139 "413111", # 77#
140 "241112", # 78#
141 "134111", # 79#
142 "111242", # 80#
143 "121142", # 81#
144 "121241", # 82#
145 "114212", # 83#
146 "124112", # 84#
147 "124211", # 85#
148 "411212", # 86#
149 "421112", # 87#
150 "421211", # 88#
151 "212141", # 89#
152 "214121", # 90#
153 "412121", # 91#
154 "111143", # 92#
155 "111341", # 93#
156 "131141", # 94#
157 "114113", # 95#
158 "114311", # 96#
159 "411113", # 97#
160 "411311", # 98#
161 "113141", # 99#
162 "114131", # 100#
163 "311141", # 101#
164 "411131" # 102#
165 );
166 end
167
168 #
169 # Returns the character index.
170 # @param char $char character.
171 # @return int character index or -1 in case of error.
172 # @access private
173 #
174 def GetCharIndex($char)
175 for ($i=0;$i<64;$i++)
176 if (@mChars[$i] == $char)
177 return $i;
178 end
179 end
180 return -1;
181 end
182
183 #
184 # Returns the bar size.
185 # @param int $xres Horizontal resolution.
186 # @param char $char Character.
187 # @return int barcode size.
188 # @access private
189 #
190 def GetBarSize($xres, $char)
191 switch ($char)
192 case '1'
193 $cVal = BCD_C128_BAR_1;
194
195 case '2'
196 $cVal = BCD_C128_BAR_2;
197
198 case '3'
199 $cVal = BCD_C128_BAR_3;
200
201 case '4'
202 $cVal = BCD_C128_BAR_4;
203
204 default
205 $cVal = 0;
206 end
207 end
208 return $cVal# $xres;
209 end
210
211 #
212 # Returns barcode size.
213 # @param int $xres Horizontal resolution.
214 # @return barcode size.
215 # @access private
216 #
217 def GetSize($xres)
218 $len = @mValue.length;
219
220 if ($len == 0) {
221 @mError = "Null value";
222 return false;
223 end
224 $ret = 0;
225 for ($i=0;$i<$len;$i++)
226 if (($id = GetCharIndex(@mValue[$i])) == -1)
227 @mError = "C128A not include the char '".@mValue[$i]."'";
228 return false;
229 else
230 $cset = @mCharSet[$id];
231 $ret += GetBarSize($xres, $cset[0]);
232 $ret += GetBarSize($xres, $cset[1]);
233 $ret += GetBarSize($xres, $cset[2]);
234 $ret += GetBarSize($xres, $cset[3]);
235 $ret += GetBarSize($xres, $cset[4]);
236 $ret += GetBarSize($xres, $cset[5]);
237 end
238 end
239
240 # length of Check character#
241 $cset = GetCheckCharValue();
242 $CheckSize = 0;
243 for ($i=0;$i<6;$i++)
244 $CheckSize += GetBarSize($cset[$i], $xres);
245 end
246 $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
247 $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
248 return $StartSize + $ret + $CheckSize + $StopSize;
249 end
250
251 #
252 # Returns the check-char value.
253 # @return string.
254 # @access private
255 #
256 def GetCheckCharValue()
257 $len = @mValue.length;
258 $sum = 103; # 'A' type;
259 for ($i=0;$i<$len;$i++)
260 $sum += GetCharIndex(@mValue[$i])# ($i+1);
261 end
262 $check = $sum % 103;
263 return @mCharSet[$check];
264 end
265
266 #
267 # Draws the start code.
268 # @param int $DrawPos Drawing position.
269 # @param int $yPos Vertical position.
270 # @param int $ySize Vertical size.
271 # @param int $xres Horizontal resolution.
272 # @return int drawing position.
273 # @access private
274 #
275 def DrawStart($DrawPos, $yPos, $ySize, $xres)
276 # Start code is '211412'#
277 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
278 $DrawPos += GetBarSize('2', $xres);
279 $DrawPos += GetBarSize('1', $xres);
280 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
281 $DrawPos += GetBarSize('1', $xres);
282 $DrawPos += GetBarSize('4', $xres);
283 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
284 $DrawPos += GetBarSize('1', $xres);
285 $DrawPos += GetBarSize('2', $xres);
286 return $DrawPos;
287 end
288
289 #
290 # Draws the stop code.
291 # @param int $DrawPos Drawing position.
292 # @param int $yPos Vertical position.
293 # @param int $ySize Vertical size.
294 # @param int $xres Horizontal resolution.
295 # @return int drawing position.
296 # @access private
297 #
298 def DrawStop($DrawPos, $yPos, $ySize, $xres)
299 # Stop code is '2331112'#
300 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
301 $DrawPos += GetBarSize('2', $xres);
302 $DrawPos += GetBarSize('3', $xres);
303 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
304 $DrawPos += GetBarSize('3', $xres);
305 $DrawPos += GetBarSize('1', $xres);
306 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
307 $DrawPos += GetBarSize('1', $xres);
308 $DrawPos += GetBarSize('1', $xres);
309 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
310 $DrawPos += GetBarSize('2', $xres);
311 return $DrawPos;
312 end
313
314 #
315 # Draws the check-char code.
316 # @param int $DrawPos Drawing position.
317 # @param int $yPos Vertical position.
318 # @param int $ySize Vertical size.
319 # @param int $xres Horizontal resolution.
320 # @return int drawing position.
321 # @access private
322 #
323 def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
324 $cset = GetCheckCharValue();
325 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
326 $DrawPos += GetBarSize($cset[0], $xres);
327 $DrawPos += GetBarSize($cset[1], $xres);
328 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
329 $DrawPos += GetBarSize($cset[2], $xres);
330 $DrawPos += GetBarSize($cset[3], $xres);
331 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
332 $DrawPos += GetBarSize($cset[4], $xres);
333 $DrawPos += GetBarSize($cset[5], $xres);
334 return $DrawPos;
335 end
336
337 #
338 # Draws the barcode object.
339 # @param int $xres Horizontal resolution.
340 # @return bool true in case of success.
341 #
342 def DrawObject($xres)
343 $len = @mValue.length;
344 if (($size = GetSize($xres))==0)
345 return false;
346 end
347
348 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
349 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
350 else $sPos = 0;
351
352 # Total height of bar code -Bars only-#
353 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
354 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
355
356 # Draw text#
357 if (@mStyle & BCS_DRAW_TEXT)
358 if (@mStyle & BCS_STRETCH_TEXT)
359 for ($i=0;$i<$len;$i++)
360 @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
361 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
362 else# Center#
363 $text_width = GetFontWidth(@mFont)# @mValue.length;
364 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
365 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
366 end
367 end
368
369 $cPos = 0;
370 $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
371 do {
372 $c = GetCharIndex(@mValue[$cPos]);
373 $cset = @mCharSet[$c];
374 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
375 $DrawPos += GetBarSize($cset[0], $xres);
376 $DrawPos += GetBarSize($cset[1], $xres);
377 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
378 $DrawPos += GetBarSize($cset[2], $xres);
379 $DrawPos += GetBarSize($cset[3], $xres);
380 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
381 $DrawPos += GetBarSize($cset[4], $xres);
382 $DrawPos += GetBarSize($cset[5], $xres);
383 $cPos += 1;
384 end while ($cPos<$len);
385 $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
386 $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
387 return true;
388 end
389 }
390
391 #============================================================+
392 # END OF FILE
393 #============================================================+
@@ -0,0 +1,393
1
2 #============================================================+
3 # File name : c128bobject.rb
4 # Begin : 2002-07-31
5 # Last Update : 2004-12-29
6 # Author : Karim Mribti [barcode@mribti.com]
7 # Version : 0.0.8a 2001-04-01 (original code)
8 # License : GNU LGPL (Lesser General Public License) 2.1
9 # http://www.gnu.org/copyleft/lesser.txt
10 # Source Code : http://www.mribti.com/barcode/
11 #
12 # Description : Code 128-B Barcode Render Class for PHP using
13 # the GD graphics library.
14 # Code 128-B is a continuous, multilevel and full
15 # ASCII code.
16 #
17 # NOTE:
18 # This version contains changes by Nicola Asuni:
19 # - porting to Ruby
20 # - code style and formatting
21 # - automatic php documentation in PhpDocumentor Style
22 # (www.phpdoc.org)
23 # - minor bug fixing
24 #============================================================+
25
26 #
27 # Code 128-B Barcode Render Class for PHP using the GD graphics library.<br>
28 # Code 128-B is a continuous, multilevel and full ASCII code.
29 # @author Karim Mribti, Nicola Asuni
30 # @name BarcodeObject
31 # @package com.tecnick.tcpdf
32 # @@version 0.0.8a 2001-04-01 (original code)
33 # @since 2001-03-25
34 # @license http://www.gnu.org/copyleft/lesser.html LGPL
35 #
36
37 #
38 # Code 128-B Barcode Render Class for PHP using the GD graphics library.<br>
39 # Code 128-B is a continuous, multilevel and full ASCII code.
40 # @author Karim Mribti, Nicola Asuni
41 # @name BarcodeObject
42 # @package com.tecnick.tcpdf
43 # @@version 0.0.8a 2001-04-01 (original code)
44 # @since 2001-03-25
45 # @license http://www.gnu.org/copyleft/lesser.html LGPL
46 #
47 class C128BObject extends BarcodeObject {
48
49 #
50 # Class Constructor.
51 # @param int $Width Image width in pixels.
52 # @param int $Height Image height in pixels.
53 # @param int $Style Barcode style.
54 # @param int $Value value to print on barcode.
55 #
56 def __construct($Width, $Height, $Style, $Value)
57 parent::__construct($Width, $Height, $Style);
58 @mValue = $Value;
59 @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{ }~";
60 @mCharSet = array (
61 "212222", # 00#
62 "222122", # 01#
63 "222221", # 02#
64 "121223", # 03#
65 "121322", # 04#
66 "131222", # 05#
67 "122213", # 06#
68 "122312", # 07#
69 "132212", # 08#
70 "221213", # 09#
71 "221312", # 10#
72 "231212", # 11#
73 "112232", # 12#
74 "122132", # 13#
75 "122231", # 14#
76 "113222", # 15#
77 "123122", # 16#
78 "123221", # 17#
79 "223211", # 18#
80 "221132", # 19#
81 "221231", # 20#
82 "213212", # 21#
83 "223112", # 22#
84 "312131", # 23#
85 "311222", # 24#
86 "321122", # 25#
87 "321221", # 26#
88 "312212", # 27#
89 "322112", # 28#
90 "322211", # 29#
91 "212123", # 30#
92 "212321", # 31#
93 "232121", # 32#
94 "111323", # 33#
95 "131123", # 34#
96 "131321", # 35#
97 "112313", # 36#
98 "132113", # 37#
99 "132311", # 38#
100 "211313", # 39#
101 "231113", # 40#
102 "231311", # 41#
103 "112133", # 42#
104 "112331", # 43#
105 "132131", # 44#
106 "113123", # 45#
107 "113321", # 46#
108 "133121", # 47#
109 "313121", # 48#
110 "211331", # 49#
111 "231131", # 50#
112 "213113", # 51#
113 "213311", # 52#
114 "213131", # 53#
115 "311123", # 54#
116 "311321", # 55#
117 "331121", # 56#
118 "312113", # 57#
119 "312311", # 58#
120 "332111", # 59#
121 "314111", # 60#
122 "221411", # 61#
123 "431111", # 62#
124 "111224", # 63#
125 "111422", # 64#
126 "121124", # 65#
127 "121421", # 66#
128 "141122", # 67#
129 "141221", # 68#
130 "112214", # 69#
131 "112412", # 70#
132 "122114", # 71#
133 "122411", # 72#
134 "142112", # 73#
135 "142211", # 74#
136 "241211", # 75#
137 "221114", # 76#
138 "413111", # 77#
139 "241112", # 78#
140 "134111", # 79#
141 "111242", # 80#
142 "121142", # 81#
143 "121241", # 82#
144 "114212", # 83#
145 "124112", # 84#
146 "124211", # 85#
147 "411212", # 86#
148 "421112", # 87#
149 "421211", # 88#
150 "212141", # 89#
151 "214121", # 90#
152 "412121", # 91#
153 "111143", # 92#
154 "111341", # 93#
155 "131141", # 94#
156 "114113", # 95#
157 "114311", # 96#
158 "411113", # 97#
159 "411311", # 98#
160 "113141", # 99#
161 "114131", # 100#
162 "311141", # 101#
163 "411131" # 102#
164 );
165 end
166
167 #
168 # Returns the character index.
169 # @param char $char character.
170 # @return int character index or -1 in case of error.
171 # @access private
172 #
173 def GetCharIndex($char)
174 for ($i=0;$i<95;$i++)
175 if (@mChars[$i] == $char)
176 return $i;
177 end
178 end
179 return -1;
180 end
181
182 #
183 # Returns the bar size.
184 # @param int $xres Horizontal resolution.
185 # @param char $char Character.
186 # @return int barcode size.
187 # @access private
188 #
189 def GetBarSize($xres, $char)
190 switch ($char)
191 case '1'
192 $cVal = BCD_C128_BAR_1;
193
194 case '2'
195 $cVal = BCD_C128_BAR_2;
196
197 case '3'
198 $cVal = BCD_C128_BAR_3;
199
200 case '4'
201 $cVal = BCD_C128_BAR_4;
202
203 default
204 $cVal = 0;
205 end
206 end
207 return $cVal# $xres;
208 end
209
210 #
211 # Returns barcode size.
212 # @param int $xres Horizontal resolution.
213 # @return barcode size.
214 # @access private
215 #
216 def GetSize($xres)
217 $len = @mValue.length;
218
219 if ($len == 0) {
220 @mError = "Null value";
221 return false;
222 end
223 $ret = 0;
224 for ($i=0;$i<$len;$i++)
225 if (($id = GetCharIndex(@mValue[$i])) == -1)
226 @mError = "C128B not include the char '".@mValue[$i]."'";
227 return false;
228 else
229 $cset = @mCharSet[$id];
230 $ret += GetBarSize($xres, $cset[0]);
231 $ret += GetBarSize($xres, $cset[1]);
232 $ret += GetBarSize($xres, $cset[2]);
233 $ret += GetBarSize($xres, $cset[3]);
234 $ret += GetBarSize($xres, $cset[4]);
235 $ret += GetBarSize($xres, $cset[5]);
236 end
237 end
238 # length of Check character#
239 $cset = GetCheckCharValue();
240 $CheckSize = 0;
241 for ($i=0;$i<6;$i++)
242 $CheckSize += GetBarSize($cset[$i], $xres);
243 end
244
245 $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
246 $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
247
248 return $StartSize + $ret + $CheckSize + $StopSize;
249 end
250
251 #
252 # Returns the check-char value.
253 # @return string.
254 # @access private
255 #
256 def GetCheckCharValue()
257 $len = @mValue.length;
258 $sum = 104; # 'B' type;
259 for ($i=0;$i<$len;$i++)
260 $sum += GetCharIndex(@mValue[$i])# ($i+1);
261 end
262 $check = $sum % 103;
263 return @mCharSet[$check];
264 end
265
266 #
267 # Draws the start code.
268 # @param int $DrawPos Drawing position.
269 # @param int $yPos Vertical position.
270 # @param int $ySize Vertical size.
271 # @param int $xres Horizontal resolution.
272 # @return int drawing position.
273 # @access private
274 #
275 def DrawStart($DrawPos, $yPos, $ySize, $xres)
276 # Start code is '211214'#
277 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres), $ySize);
278 $DrawPos += GetBarSize('2', $xres);
279 $DrawPos += GetBarSize('1', $xres);
280 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize);
281 $DrawPos += GetBarSize('1', $xres);
282 $DrawPos += GetBarSize('2', $xres);
283 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres), $ySize);
284 $DrawPos += GetBarSize('1', $xres);
285 $DrawPos += GetBarSize('4', $xres);
286 return $DrawPos;
287 end
288
289 #
290 # Draws the stop code.
291 # @param int $DrawPos Drawing position.
292 # @param int $yPos Vertical position.
293 # @param int $ySize Vertical size.
294 # @param int $xres Horizontal resolution.
295 # @return int drawing position.
296 # @access private
297 #
298 def DrawStop($DrawPos, $yPos, $ySize, $xres)
299 # Stop code is '2331112'#
300 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
301 $DrawPos += GetBarSize('2', $xres);
302 $DrawPos += GetBarSize('3', $xres);
303 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
304 $DrawPos += GetBarSize('3', $xres);
305 $DrawPos += GetBarSize('1', $xres);
306 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
307 $DrawPos += GetBarSize('1', $xres);
308 $DrawPos += GetBarSize('1', $xres);
309 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
310 $DrawPos += GetBarSize('2', $xres);
311 return $DrawPos;
312 end
313
314 #
315 # Draws the check-char code.
316 # @param int $DrawPos Drawing position.
317 # @param int $yPos Vertical position.
318 # @param int $ySize Vertical size.
319 # @param int $xres Horizontal resolution.
320 # @return int drawing position.
321 # @access private
322 #
323 def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
324 $cset = GetCheckCharValue();
325 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
326 $DrawPos += GetBarSize($cset[0], $xres);
327 $DrawPos += GetBarSize($cset[1], $xres);
328 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
329 $DrawPos += GetBarSize($cset[2], $xres);
330 $DrawPos += GetBarSize($cset[3], $xres);
331 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
332 $DrawPos += GetBarSize($cset[4], $xres);
333 $DrawPos += GetBarSize($cset[5], $xres);
334 return $DrawPos;
335 end
336
337 #
338 # Draws the barcode object.
339 # @param int $xres Horizontal resolution.
340 # @return bool true in case of success.
341 #
342 def DrawObject($xres)
343 $len = @mValue.length;
344 if (($size = GetSize($xres))==0)
345 return false;
346 end
347
348 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
349 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
350 else $sPos = 0;
351
352 # Total height of bar code -Bars only-#
353 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
354 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
355
356 # Draw text#
357 if (@mStyle & BCS_DRAW_TEXT)
358 if (@mStyle & BCS_STRETCH_TEXT)
359 for ($i=0;$i<$len;$i++)
360 @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
361 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
362 else# Center#
363 $text_width = GetFontWidth(@mFont)# @mValue.length;
364 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
365 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
366 end
367 end
368
369 $cPos = 0;
370 $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
371 do {
372 $c = GetCharIndex(@mValue[$cPos]);
373 $cset = @mCharSet[$c];
374 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
375 $DrawPos += GetBarSize($cset[0], $xres);
376 $DrawPos += GetBarSize($cset[1], $xres);
377 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
378 $DrawPos += GetBarSize($cset[2], $xres);
379 $DrawPos += GetBarSize($cset[3], $xres);
380 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
381 $DrawPos += GetBarSize($cset[4], $xres);
382 $DrawPos += GetBarSize($cset[5], $xres);
383 $cPos += 1;
384 end while ($cPos<$len);
385 $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
386 $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
387 return true;
388 end
389 }
390
391 #============================================================+
392 # END OF FILE
393 #============================================================+
@@ -0,0 +1,414
1
2 #============================================================+
3 # File name : c128cobject.rb
4 # Begin : 2002-07-31
5 # Last Update : 2004-12-29
6 # Author : Karim Mribti [barcode@mribti.com]
7 # : Sam Michaels [swampgas@swampgas.org]
8 # : Nicola Asuni [info@tecnick.com]
9 # Version : 0.0.8a 2001-04-01 (original code)
10 # License : GNU LGPL (Lesser General Public License) 2.1
11 # http://www.gnu.org/copyleft/lesser.txt
12 # Source Code : http://www.mribti.com/barcode/
13 #
14 # Description : Code 128-C Barcode Render Class for PHP using
15 # the GD graphics library.
16 # Code 128-C is numeric only and provides the
17 # most efficiency.
18 #
19 # NOTE:
20 # This version contains changes by Nicola Asuni:
21 # - porting to Ruby
22 # - code style and formatting
23 # - automatic php documentation in PhpDocumentor Style
24 # (www.phpdoc.org)
25 # - minor bug fixing
26 #============================================================+
27
28 #
29 # Code 128-C Barcode Render Class for PHP using the GD graphics library.<br>
30 # Code 128-C is numeric only and provides the most efficiency.
31 # @author Karim Mribti, Nicola Asuni
32 # @name BarcodeObject
33 # @package com.tecnick.tcpdf
34 # @@version 0.0.8a 2001-04-01 (original code)
35 # @since 2001-03-25
36 # @license http://www.gnu.org/copyleft/lesser.html LGPL
37 #
38
39 #
40 # Code 128-C Barcode Render Class for PHP using the GD graphics library.<br>
41 # Code 128-C is numeric only and provides the most efficiency.
42 # @author Karim Mribti, Nicola Asuni
43 # @name BarcodeObject
44 # @package com.tecnick.tcpdf
45 # @@version 0.0.8a 2001-04-01 (original code)
46 # @since 2001-03-25
47 # @license http://www.gnu.org/copyleft/lesser.html LGPL
48 #
49 class C128CObject extends BarcodeObject {
50
51 #
52 # Class Constructor.
53 # @param int $Width Image width in pixels.
54 # @param int $Height Image height in pixels.
55 # @param int $Style Barcode style.
56 # @param int $Value value to print on barcode.
57 #
58 def __construct($Width, $Height, $Style, $Value)
59 parent::__construct($Width, $Height, $Style);
60 @mValue = $Value;
61 @mChars = array (
62 "00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
63 "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
64 "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
65 "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
66 "40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
67 "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
68 "60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
69 "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
70 "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
71 "90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
72 );
73 @mCharSet = array (
74 "212222", # 00#
75 "222122", # 01#
76 "222221", # 02#
77 "121223", # 03#
78 "121322", # 04#
79 "131222", # 05#
80 "122213", # 06#
81 "122312", # 07#
82 "132212", # 08#
83 "221213", # 09#
84 "221312", # 10#
85 "231212", # 11#
86 "112232", # 12#
87 "122132", # 13#
88 "122231", # 14#
89 "113222", # 15#
90 "123122", # 16#
91 "123221", # 17#
92 "223211", # 18#
93 "221132", # 19#
94 "221231", # 20#
95 "213212", # 21#
96 "223112", # 22#
97 "312131", # 23#
98 "311222", # 24#
99 "321122", # 25#
100 "321221", # 26#
101 "312212", # 27#
102 "322112", # 28#
103 "322211", # 29#
104 "212123", # 30#
105 "212321", # 31#
106 "232121", # 32#
107 "111323", # 33#
108 "131123", # 34#
109 "131321", # 35#
110 "112313", # 36#
111 "132113", # 37#
112 "132311", # 38#
113 "211313", # 39#
114 "231113", # 40#
115 "231311", # 41#
116 "112133", # 42#
117 "112331", # 43#
118 "132131", # 44#
119 "113123", # 45#
120 "113321", # 46#
121 "133121", # 47#
122 "313121", # 48#
123 "211331", # 49#
124 "231131", # 50#
125 "213113", # 51#
126 "213311", # 52#
127 "213131", # 53#
128 "311123", # 54#
129 "311321", # 55#
130 "331121", # 56#
131 "312113", # 57#
132 "312311", # 58#
133 "332111", # 59#
134 "314111", # 60#
135 "221411", # 61#
136 "431111", # 62#
137 "111224", # 63#
138 "111422", # 64#
139 "121124", # 65#
140 "121421", # 66#
141 "141122", # 67#
142 "141221", # 68#
143 "112214", # 69#
144 "112412", # 70#
145 "122114", # 71#
146 "122411", # 72#
147 "142112", # 73#
148 "142211", # 74#
149 "241211", # 75#
150 "221114", # 76#
151 "413111", # 77#
152 "241112", # 78#
153 "134111", # 79#
154 "111242", # 80#
155 "121142", # 81#
156 "121241", # 82#
157 "114212", # 83#
158 "124112", # 84#
159 "124211", # 85#
160 "411212", # 86#
161 "421112", # 87#
162 "421211", # 88#
163 "212141", # 89#
164 "214121", # 90#
165 "412121", # 91#
166 "111143", # 92#
167 "111341", # 93#
168 "131141", # 94#
169 "114113", # 95#
170 "114311", # 96#
171 "411113", # 97#
172 "411311", # 98#
173 "113141", # 99#
174 );
175 end
176
177 #
178 # Returns the character index.
179 # @param char $char character.
180 # @return int character index or -1 in case of error.
181 # @access private
182 #
183 def GetCharIndex($char)
184 for ($i=0;$i<100;$i++)
185 if (@mChars[$i] == $char)
186 return $i;
187 end
188 end
189 return -1;
190 end
191
192 #
193 # Returns the bar size.
194 # @param int $xres Horizontal resolution.
195 # @param char $char Character.
196 # @return int barcode size.
197 # @access private
198 #
199 def GetBarSize($xres, $char)
200 switch ($char)
201 case '1'
202 $cVal = BCD_C128_BAR_1;
203
204 case '2'
205 $cVal = BCD_C128_BAR_2;
206
207 case '3'
208 $cVal = BCD_C128_BAR_3;
209
210 case '4'
211 $cVal = BCD_C128_BAR_4;
212
213 default
214 $cVal = 0;
215 end
216 end
217 return $cVal# $xres;
218 end
219
220 #
221 # Returns barcode size.
222 # @param int $xres Horizontal resolution.
223 # @return barcode size.
224 # @access private
225 #
226 def GetSize($xres)
227 $len = @mValue.length;
228
229 if ($len == 0) {
230 @mError = "Null value";
231 return false;
232 end
233 $ret = 0;
234
235 for ($i=0;$i<$len;$i++)
236 if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
237 @mError = "Code-128C is numeric only";
238 return false;
239 end
240 end
241
242 if (($len%2) != 0)
243 @mError = "The length of barcode value must be even. You must pad the number with zeros.";
244 return false;
245 end
246
247 for ($i=0;$i<$len;$i+=2)
248 $id = GetCharIndex(@mValue[$i].@mValue[$i+1]);
249 $cset = @mCharSet[$id];
250 $ret += GetBarSize($xres, $cset[0]);
251 $ret += GetBarSize($xres, $cset[1]);
252 $ret += GetBarSize($xres, $cset[2]);
253 $ret += GetBarSize($xres, $cset[3]);
254 $ret += GetBarSize($xres, $cset[4]);
255 $ret += GetBarSize($xres, $cset[5]);
256 end
257 # length of Check character#
258 $cset = GetCheckCharValue();
259 $CheckSize = 0;
260 for ($i=0;$i<6;$i++)
261 $CheckSize += GetBarSize($cset[$i], $xres);
262 end
263
264 $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
265 $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
266 return $StartSize + $ret + $CheckSize + $StopSize;
267 end
268
269 #
270 # Returns the check-char value.
271 # @return string.
272 # @access private
273 #
274 def GetCheckCharValue()
275 $len = @mValue.length;
276 $sum = 105; # 'C' type;
277 $m = 0;
278 for ($i=0;$i<$len;$i+=2)
279 $m += 1;
280 $sum += GetCharIndex(@mValue[$i].@mValue[$i+1])# $m;
281 end
282 $check = $sum % 103;
283 return @mCharSet[$check];
284 end
285
286 #
287 # Draws the start code.
288 # @param int $DrawPos Drawing position.
289 # @param int $yPos Vertical position.
290 # @param int $ySize Vertical size.
291 # @param int $xres Horizontal resolution.
292 # @return int drawing position.
293 # @access private
294 #
295 def DrawStart($DrawPos, $yPos, $ySize, $xres)
296 # Start code is '211232'#
297 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
298 $DrawPos += GetBarSize('2', $xres);
299 $DrawPos += GetBarSize('1', $xres);
300 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
301 $DrawPos += GetBarSize('1', $xres);
302 $DrawPos += GetBarSize('2', $xres);
303 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
304 $DrawPos += GetBarSize('3', $xres);
305 $DrawPos += GetBarSize('2', $xres);
306 return $DrawPos;
307 end
308
309 #
310 # Draws the stop code.
311 # @param int $DrawPos Drawing position.
312 # @param int $yPos Vertical position.
313 # @param int $ySize Vertical size.
314 # @param int $xres Horizontal resolution.
315 # @return int drawing position.
316 # @access private
317 #
318 def DrawStop($DrawPos, $yPos, $ySize, $xres)
319 # Stop code is '2331112'#
320 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
321 $DrawPos += GetBarSize('2', $xres);
322 $DrawPos += GetBarSize('3', $xres);
323 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
324 $DrawPos += GetBarSize('3', $xres);
325 $DrawPos += GetBarSize('1', $xres);
326 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
327 $DrawPos += GetBarSize('1', $xres);
328 $DrawPos += GetBarSize('1', $xres);
329 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
330 $DrawPos += GetBarSize('2', $xres);
331 return $DrawPos;
332 end
333
334 #
335 # Draws the check-char code.
336 # @param int $DrawPos Drawing position.
337 # @param int $yPos Vertical position.
338 # @param int $ySize Vertical size.
339 # @param int $xres Horizontal resolution.
340 # @return int drawing position.
341 # @access private
342 #
343 def DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
344 $cset = GetCheckCharValue();
345 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
346 $DrawPos += GetBarSize($cset[0], $xres);
347 $DrawPos += GetBarSize($cset[1], $xres);
348 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
349 $DrawPos += GetBarSize($cset[2], $xres);
350 $DrawPos += GetBarSize($cset[3], $xres);
351 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
352 $DrawPos += GetBarSize($cset[4], $xres);
353 $DrawPos += GetBarSize($cset[5], $xres);
354 return $DrawPos;
355 end
356
357 #
358 # Draws the barcode object.
359 # @param int $xres Horizontal resolution.
360 # @return bool true in case of success.
361 #
362 def DrawObject($xres)
363 $len = @mValue.length;
364 if (($size = GetSize($xres))==0)
365 return false;
366 end
367
368 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
369 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
370 else $sPos = 0;
371
372 # Total height of bar code -Bars only-#
373 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
374 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
375
376 # Draw text#
377 if (@mStyle & BCS_DRAW_TEXT)
378 if (@mStyle & BCS_STRETCH_TEXT)
379 for ($i=0;$i<$len;$i++)
380 @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
381 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
382 else# Center#
383 $text_width = GetFontWidth(@mFont) * @mValue.length;
384 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
385 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
386 end
387 end
388
389 $cPos = 0;
390 $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
391 do {
392 $c = GetCharIndex(@mValue[$cPos].@mValue[$cPos+1]);
393 $cset = @mCharSet[$c];
394 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
395 $DrawPos += GetBarSize($cset[0], $xres);
396 $DrawPos += GetBarSize($cset[1], $xres);
397 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
398 $DrawPos += GetBarSize($cset[2], $xres);
399 $DrawPos += GetBarSize($cset[3], $xres);
400 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
401 $DrawPos += GetBarSize($cset[4], $xres);
402 $DrawPos += GetBarSize($cset[5], $xres);
403 $cPos += 2;
404 end while ($cPos<$len);
405 $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
406 $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
407 return true;
408 end
409 }
410
411 #============================================================+
412 # END OF FILE
413 #============================================================+
414
@@ -0,0 +1,281
1
2 #============================================================+
3 # File name : c39object.rb
4 # Begin : 2002-07-31
5 # Last Update : 2004-12-29
6 # Author : Karim Mribti [barcode@mribti.com]
7 # : Nicola Asuni [info@tecnick.com]
8 # Version : 0.0.8a 2001-04-01 (original code)
9 # License : GNU LGPL (Lesser General Public License) 2.1
10 # http://www.gnu.org/copyleft/lesser.txt
11 # Source Code : http://www.mribti.com/barcode/
12 #
13 # Description : Code 39 Barcode Render Class for PHP using
14 # the GD graphics library.
15 # Code 39 is an alphanumeric bar code that can
16 # encode decimal number, case alphabet and some
17 # special symbols.
18 #
19 # NOTE:
20 # This version contains changes by Nicola Asuni:
21 # - porting to Ruby
22 # - code style and formatting
23 # - automatic php documentation in PhpDocumentor Style
24 # (www.phpdoc.org)
25 # - minor bug fixing
26 #============================================================+
27
28 #
29 # Code 39 Barcode Render Class.<br>
30 # Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
31 # @author Karim Mribti, Nicola Asuni
32 # @name BarcodeObject
33 # @package com.tecnick.tcpdf
34 # @@version 0.0.8a 2001-04-01 (original code)
35 # @since 2001-03-25
36 # @license http://www.gnu.org/copyleft/lesser.html LGPL
37 #
38
39 #
40 # Code 39 Barcode Render Class.<br>
41 # Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
42 # @author Karim Mribti, Nicola Asuni
43 # @name BarcodeObject
44 # @package com.tecnick.tcpdf
45 # @@version 0.0.8a 2001-04-01 (original code)
46 # @since 2001-03-25
47 # @license http://www.gnu.org/copyleft/lesser.html LGPL
48 #
49 class C39Object extends BarcodeObject {
50
51 #
52 # Class Constructor.
53 # @param int $Width Image width in pixels.
54 # @param int $Height Image height in pixels.
55 # @param int $Style Barcode style.
56 # @param int $Value value to print on barcode.
57 #
58 def __construct($Width, $Height, $Style, $Value)
59 parent::__construct($Width, $Height, $Style);
60 @mValue = $Value;
61 @mChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#$/+%";
62 @mCharSet = array (
63 # 0 # "000110100",
64 # 1 # "100100001",
65 # 2 # "001100001",
66 # 3 # "101100000",
67 # 4 # "000110001",
68 # 5 # "100110000",
69 # 6 # "001110000",
70 # 7 # "000100101",
71 # 8 # "100100100",
72 # 9 # "001100100",
73 # A # "100001001",
74 # B # "001001001",
75 # C # "101001000",
76 # D # "000011001",
77 # E # "100011000",
78 # F # "001011000",
79 # G # "000001101",
80 # H # "100001100",
81 # I # "001001100",
82 # J # "000011100",
83 # K # "100000011",
84 # L # "001000011",
85 # M # "101000010",
86 # N # "000010011",
87 # O # "100010010",
88 # P # "001010010",
89 # Q # "000000111",
90 # R # "100000110",
91 # S # "001000110",
92 # T # "000010110",
93 # U # "110000001",
94 # V # "011000001",
95 # W # "111000000",
96 # X # "010010001",
97 # Y # "110010000",
98 # Z # "011010000",
99 # - # "010000101",
100 # . # "110000100",
101 # SP# "011000100",
102 /*# # "010010100",
103 # $ # "010101000",
104 # / # "010100010",
105 # + # "010001010",
106 # % # "000101010"
107 );
108 end
109
110 #
111 # Returns the character index.
112 # @param char $char character.
113 # @return int character index or -1 in case of error.
114 # @access private
115 #
116 def GetCharIndex($char)
117 for ($i=0;$i<44;$i++)
118 if (@mChars[$i] == $char)
119 return $i;
120 end
121 end
122 return -1;
123 end
124
125 #
126 # Returns barcode size.
127 # @param int $xres Horizontal resolution.
128 # @return barcode size.
129 # @access private
130 #
131 def GetSize($xres)
132 $len = @mValue.length;
133
134 if ($len == 0) {
135 @mError = "Null value";
136 return false;
137 end
138
139 for ($i=0;$i<$len;$i++)
140 if (GetCharIndex(@mValue[$i]) == -1 || @mValue[$i] == '*')
141 # The asterisk is only used as a start and stop code#
142 @mError = "C39 not include the char '".@mValue[$i]."'";
143 return false;
144 end
145 end
146
147 # Start, Stop is 010010100 == '*' #
148 $StartSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3;
149 $StopSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3;
150 $CharSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; # Same for all chars#
151
152 return $CharSize# $len + $StartSize + $StopSize + # Space between chars# BCD_C39_NARROW_BAR# $xres# ($len-1);
153 end
154
155 #
156 # Draws the start code.
157 # @param int $DrawPos Drawing position.
158 # @param int $yPos Vertical position.
159 # @param int $ySize Vertical size.
160 # @param int $xres Horizontal resolution.
161 # @return int drawing position.
162 # @access private
163 #
164 def DrawStart($DrawPos, $yPos, $ySize, $xres)
165 # Start code is '*'#
166 $narrow = BCD_C39_NARROW_BAR# $xres;
167 $wide = BCD_C39_WIDE_BAR# $xres;
168 @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
169 $DrawPos += $narrow;
170 $DrawPos += $wide;
171 @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
172 $DrawPos += $narrow;
173 $DrawPos += $narrow;
174 @DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
175 $DrawPos += $wide;
176 $DrawPos += $narrow;
177 @DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
178 $DrawPos += $wide;
179 $DrawPos += $narrow;
180 @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize);
181 $DrawPos += $narrow;
182 $DrawPos += $narrow; # Space between chars#
183 return $DrawPos;
184 end
185
186 #
187 # Draws the stop code.
188 # @param int $DrawPos Drawing position.
189 # @param int $yPos Vertical position.
190 # @param int $ySize Vertical size.
191 # @param int $xres Horizontal resolution.
192 # @return int drawing position.
193 # @access private
194 #
195 def DrawStop($DrawPos, $yPos, $ySize, $xres)
196 # Stop code is '*'#
197 $narrow = BCD_C39_NARROW_BAR# $xres;
198 $wide = BCD_C39_WIDE_BAR# $xres;
199 @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
200 $DrawPos += $narrow;
201 $DrawPos += $wide;
202 @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize);
203 $DrawPos += $narrow;
204 $DrawPos += $narrow;
205 @DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
206 $DrawPos += $wide;
207 $DrawPos += $narrow;
208 @DrawSingleBar($DrawPos, $yPos, $wide , $ySize);
209 $DrawPos += $wide;
210 $DrawPos += $narrow;
211 @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize);
212 $DrawPos += $narrow;
213 return $DrawPos;
214 end
215
216 #
217 # Draws the barcode object.
218 # @param int $xres Horizontal resolution.
219 # @return bool true in case of success.
220 #
221 def DrawObject($xres)
222 $len = @mValue.length;
223
224 $narrow = BCD_C39_NARROW_BAR# $xres;
225 $wide = BCD_C39_WIDE_BAR# $xres;
226
227 if (($size = GetSize($xres))==0)
228 return false;
229 end
230
231 $cPos = 0;
232 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
233 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
234 else $sPos = 0;
235
236 # Total height of bar code -Bars only-#
237 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
238 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
239
240 # Draw text#
241 if (@mStyle & BCS_DRAW_TEXT)
242 if (@mStyle & BCS_STRETCH_TEXT)
243 for ($i=0;$i<$len;$i++)
244 @DrawChar(@mFont, $sPos+($narrow*6+$wide*3)+($size/$len)*$i,
245 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]);
246 else# Center#
247 $text_width = GetFontWidth(@mFont)# @mValue.length;
248 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+($narrow*6+$wide*3),
249 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
250 end
251 end
252
253 $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
254 do {
255 $c = GetCharIndex(@mValue[$cPos]);
256 $cset = @mCharSet[$c];
257 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[0] == '0') ? $narrow : $wide , $ysize);
258 $DrawPos += ($cset[0] == '0') ? $narrow : $wide;
259 $DrawPos += ($cset[1] == '0') ? $narrow : $wide;
260 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[2] == '0') ? $narrow : $wide , $ysize);
261 $DrawPos += ($cset[2] == '0') ? $narrow : $wide;
262 $DrawPos += ($cset[3] == '0') ? $narrow : $wide;
263 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[4] == '0') ? $narrow : $wide , $ysize);
264 $DrawPos += ($cset[4] == '0') ? $narrow : $wide;
265 $DrawPos += ($cset[5] == '0') ? $narrow : $wide;
266 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[6] == '0') ? $narrow : $wide , $ysize);
267 $DrawPos += ($cset[6] == '0') ? $narrow : $wide;
268 $DrawPos += ($cset[7] == '0') ? $narrow : $wide;
269 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[8] == '0') ? $narrow : $wide , $ysize);
270 $DrawPos += ($cset[8] == '0') ? $narrow : $wide;
271 $DrawPos += $narrow; # Space between chars#
272 $cPos += 1;
273 end while ($cPos<$len);
274 $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
275 return true;
276 end
277 }
278
279 #============================================================+
280 # END OF FILE
281 #============================================================+
@@ -0,0 +1,216
1
2 #============================================================+
3 # File name : i25aobject.rb
4 # Begin : 2002-07-31
5 # Last Update : 2004-12-29
6 # Author : Karim Mribti [barcode@mribti.com]
7 # : Nicola Asuni [info@tecnick.com]
8 # Version : 0.0.8a 2001-04-01 (original code)
9 # License : GNU LGPL (Lesser General Public License) 2.1
10 # http://www.gnu.org/copyleft/lesser.txt
11 # Source Code : http://www.mribti.com/barcode/
12 #
13 # Description : I25 Barcode Render Class for PHP using
14 # the GD graphics library.
15 # Interleaved 2 of 5 is a numeric only bar code
16 # with a optional check number.
17 #
18 # NOTE:
19 # This version contains changes by Nicola Asuni:
20 # - porting to Ruby
21 # - code style and formatting
22 # - automatic php documentation in PhpDocumentor Style
23 # (www.phpdoc.org)
24 # - minor bug fixing
25 #============================================================+
26
27 #
28 # I25 Barcode Render Class for PHP using the GD graphics library.<br<
29 # Interleaved 2 of 5 is a numeric only bar code with a optional check number.
30 # @author Karim Mribti, Nicola Asuni
31 # @name BarcodeObject
32 # @package com.tecnick.tcpdf
33 # @@version 0.0.8a 2001-04-01 (original code)
34 # @since 2001-03-25
35 # @license http://www.gnu.org/copyleft/lesser.html LGPL
36 #
37
38 #
39 # I25 Barcode Render Class for PHP using the GD graphics library.<br<
40 # Interleaved 2 of 5 is a numeric only bar code with a optional check number.
41 # @author Karim Mribti, Nicola Asuni
42 # @name BarcodeObject
43 # @package com.tecnick.tcpdf
44 # @@version 0.0.8a 2001-04-01 (original code)
45 # @since 2001-03-25
46 # @license http://www.gnu.org/copyleft/lesser.html LGPL
47 #
48 class I25Object extends BarcodeObject {
49
50 #
51 # Class Constructor.
52 # @param int $Width Image width in pixels.
53 # @param int $Height Image height in pixels.
54 # @param int $Style Barcode style.
55 # @param int $Value value to print on barcode.
56 #
57 def __construct($Width, $Height, $Style, $Value)
58 parent::__construct($Width, $Height, $Style);
59 @mValue = $Value;
60 @mCharSet = array (
61 # 0# "00110",
62 # 1# "10001",
63 # 2# "01001",
64 # 3# "11000",
65 # 4# "00101",
66 # 5# "10100",
67 # 6# "01100",
68 # 7# "00011",
69 # 8# "10010",
70 # 9# "01010"
71 );
72 end
73
74 #
75 # Returns barcode size.
76 # @param int $xres Horizontal resolution.
77 # @return barcode size.
78 # @access private
79 #
80 def GetSize($xres)
81 $len = @mValue.length;
82
83 if ($len == 0) {
84 @mError = "Null value";
85 return false;
86 end
87
88 for ($i=0;$i<$len;$i++)
89 if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
90 @mError = "I25 is numeric only";
91 return false;
92 end
93 end
94
95 if (($len%2) != 0)
96 @mError = "The length of barcode value must be even";
97 return false;
98 end
99 $StartSize = BCD_I25_NARROW_BAR# 4 # $xres;
100 $StopSize = BCD_I25_WIDE_BAR# $xres + 2# BCD_I25_NARROW_BAR# $xres;
101 $cPos = 0;
102 $sPos = 0;
103 do {
104 $c1 = @mValue[$cPos];
105 $c2 = @mValue[$cPos+1];
106 $cset1 = @mCharSet[$c1];
107 $cset2 = @mCharSet[$c2];
108
109 for ($i=0;$i<5;$i++)
110 $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
111 $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
112 $sPos += ($type1 + $type2);
113 end
114 $cPos+=2;
115 end while ($cPos<$len);
116
117 return $sPos + $StartSize + $StopSize;
118 end
119
120 #
121 # Draws the start code.
122 # @param int $DrawPos Drawing position.
123 # @param int $yPos Vertical position.
124 # @param int $ySize Vertical size.
125 # @param int $xres Horizontal resolution.
126 # @return int drawing position.
127 # @access private
128 #
129 def DrawStart($DrawPos, $yPos, $ySize, $xres)
130 # Start code is "0000"#
131 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
132 $DrawPos += BCD_I25_NARROW_BAR # $xres;
133 $DrawPos += BCD_I25_NARROW_BAR # $xres;
134 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
135 $DrawPos += BCD_I25_NARROW_BAR # $xres;
136 $DrawPos += BCD_I25_NARROW_BAR # $xres;
137 return $DrawPos;
138 end
139
140 #
141 # Draws the stop code.
142 # @param int $DrawPos Drawing position.
143 # @param int $yPos Vertical position.
144 # @param int $ySize Vertical size.
145 # @param int $xres Horizontal resolution.
146 # @return int drawing position.
147 # @access private
148 #
149 def DrawStop($DrawPos, $yPos, $ySize, $xres)
150 # Stop code is "100"#
151 @DrawSingleBar($DrawPos, $yPos, BCD_I25_WIDE_BAR# $xres , $ySize);
152 $DrawPos += BCD_I25_WIDE_BAR # $xres;
153 $DrawPos += BCD_I25_NARROW_BAR # $xres;
154 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
155 $DrawPos += BCD_I25_NARROW_BAR # $xres;
156 return $DrawPos;
157 end
158
159 #
160 # Draws the barcode object.
161 # @param int $xres Horizontal resolution.
162 # @return bool true in case of success.
163 #
164 def DrawObject($xres)
165 $len = @mValue.length;
166
167 if (($size = GetSize($xres))==0)
168 return false;
169 end
170
171 $cPos = 0;
172
173 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
174 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
175
176 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
177 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
178 else $sPos = 0;
179
180 if (@mStyle & BCS_DRAW_TEXT)
181 if (@mStyle & BCS_STRETCH_TEXT)
182 # Stretch#
183 for ($i=0;$i<$len;$i++)
184 @DrawChar(@mFont, $sPos+BCD_I25_NARROW_BAR*4*$xres+($size/$len)*$i,
185 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET , @mValue[$i]);
186 end
187 endelse# Center#
188 $text_width = GetFontWidth(@mFont) * @mValue.length;
189 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(BCD_I25_NARROW_BAR*4*$xres),
190 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
191 end
192 end
193
194 $sPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
195 do {
196 $c1 = @mValue[$cPos];
197 $c2 = @mValue[$cPos+1];
198 $cset1 = @mCharSet[$c1];
199 $cset2 = @mCharSet[$c2];
200
201 for ($i=0;$i<5;$i++)
202 $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
203 $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
204 @DrawSingleBar($sPos, BCD_DEFAULT_MAR_Y1, $type1 , $ysize);
205 $sPos += ($type1 + $type2);
206 end
207 $cPos+=2;
208 end while ($cPos<$len);
209 $sPos = @DrawStop($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
210 return true;
211 end
212 }
213
214 #============================================================+
215 # END OF FILE
216 #============================================================+
@@ -0,0 +1,87
1
2 #============================================================+
3 # File name : image.rb
4 # Begin : 2002-07-31
5 # Last Update : 2005-01-08
6 # Author : Karim Mribti [barcode@mribti.com]
7 # : Nicola Asuni [info@tecnick.com]
8 # Version : 0.0.8a 2001-04-01 (original code)
9 # License : GNU LGPL (Lesser General Public License) 2.1
10 # http://www.gnu.org/copyleft/lesser.txt
11 # Source Code : http://www.mribti.com/barcode/
12 #
13 # Description : Barcode Image Rendering.
14 #
15 # NOTE:
16 # This version contains changes by Nicola Asuni:
17 # - porting to Ruby
18 # - code style and formatting
19 # - automatic php documentation in PhpDocumentor Style
20 # (www.phpdoc.org)
21 # - minor bug fixing
22 #============================================================+
23
24 #
25 # Barcode Image Rendering.
26 # @author Karim Mribti, Nicola Asuni
27 # @name BarcodeObject
28 # @package com.tecnick.tcpdf
29 # @@version 0.0.8a 2001-04-01 (original code)
30 # @since 2001-03-25
31 # @license http://www.gnu.org/copyleft/lesser.html LGPL
32 #
33
34 #
35 #
36 #
37
38 require("../../shared/barcode/barcode.rb");
39 require("../../shared/barcode/i25object.rb");
40 require("../../shared/barcode/c39object.rb");
41 require("../../shared/barcode/c128aobject.rb");
42 require("../../shared/barcode/c128bobject.rb");
43 require("../../shared/barcode/c128cobject.rb");
44
45 if (!$_REQUEST['style'].nil?) $_REQUEST['style'] = BCD_DEFAULT_STYLE;
46 if (!$_REQUEST['width'].nil?) $_REQUEST['width'] = BCD_DEFAULT_WIDTH;
47 if (!$_REQUEST['height'].nil?) $_REQUEST['height'] = BCD_DEFAULT_HEIGHT;
48 if (!$_REQUEST['xres'].nil?) $_REQUEST['xres'] = BCD_DEFAULT_XRES;
49 if (!$_REQUEST['font'].nil?) $_REQUEST['font'] = BCD_DEFAULT_FONT;
50 if (!$_REQUEST['type'].nil?) $_REQUEST['type'] = "C39";
51 if (!$_REQUEST['code'].nil?) $_REQUEST['code'] = "";
52
53 switch ($_REQUEST['type'].upcase)
54 case "I25"
55 $obj = new I25Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
56 break;
57 end
58 case "C128A"
59 $obj = new C128AObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
60 break;
61 end
62 case "C128B"
63 $obj = new C128BObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
64 break;
65 end
66 case "C128C"
67 $obj = new C128CObject($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
68 break;
69 end
70 case "C39":
71 default
72 $obj = new C39Object($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['style'], $_REQUEST['code']);
73 break;
74 end
75 }
76
77 if ($obj)
78 $obj->SetFont($_REQUEST['font']);
79 $obj->DrawObject($_REQUEST['xres']);
80 $obj->FlushObject();
81 $obj->DestroyObject();
82 unset($obj); # clean#
83 }
84
85 #============================================================+
86 # END OF FILE
87 #============================================================+
This diff has been collapsed as it changes many lines, (504 lines changed) Show them Hide them
@@ -0,0 +1,504
1 GNU LESSER GENERAL PUBLIC LICENSE
2 Version 2.1, February 1999
3
4 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 [This is the first released version of the Lesser GPL. It also counts
10 as the successor of the GNU Library Public License, version 2, hence
11 the version number 2.1.]
12
13 Preamble
14
15 The licenses for most software are designed to take away your
16 freedom to share and change it. By contrast, the GNU General Public
17 Licenses are intended to guarantee your freedom to share and change
18 free software--to make sure the software is free for all its users.
19
20 This license, the Lesser General Public License, applies to some
21 specially designated software packages--typically libraries--of the
22 Free Software Foundation and other authors who decide to use it. You
23 can use it too, but we suggest you first think carefully about whether
24 this license or the ordinary General Public License is the better
25 strategy to use in any particular case, based on the explanations below.
26
27 When we speak of free software, we are referring to freedom of use,
28 not price. Our General Public Licenses are designed to make sure that
29 you have the freedom to distribute copies of free software (and charge
30 for this service if you wish); that you receive source code or can get
31 it if you want it; that you can change the software and use pieces of
32 it in new free programs; and that you are informed that you can do
33 these things.
34
35 To protect your rights, we need to make restrictions that forbid
36 distributors to deny you these rights or to ask you to surrender these
37 rights. These restrictions translate to certain responsibilities for
38 you if you distribute copies of the library or if you modify it.
39
40 For example, if you distribute copies of the library, whether gratis
41 or for a fee, you must give the recipients all the rights that we gave
42 you. You must make sure that they, too, receive or can get the source
43 code. If you link other code with the library, you must provide
44 complete object files to the recipients, so that they can relink them
45 with the library after making changes to the library and recompiling
46 it. And you must show them these terms so they know their rights.
47
48 We protect your rights with a two-step method: (1) we copyright the
49 library, and (2) we offer you this license, which gives you legal
50 permission to copy, distribute and/or modify the library.
51
52 To protect each distributor, we want to make it very clear that
53 there is no warranty for the free library. Also, if the library is
54 modified by someone else and passed on, the recipients should know
55 that what they have is not the original version, so that the original
56 author's reputation will not be affected by problems that might be
57 introduced by others.
58
59 Finally, software patents pose a constant threat to the existence of
60 any free program. We wish to make sure that a company cannot
61 effectively restrict the users of a free program by obtaining a
62 restrictive license from a patent holder. Therefore, we insist that
63 any patent license obtained for a version of the library must be
64 consistent with the full freedom of use specified in this license.
65
66 Most GNU software, including some libraries, is covered by the
67 ordinary GNU General Public License. This license, the GNU Lesser
68 General Public License, applies to certain designated libraries, and
69 is quite different from the ordinary General Public License. We use
70 this license for certain libraries in order to permit linking those
71 libraries into non-free programs.
72
73 When a program is linked with a library, whether statically or using
74 a shared library, the combination of the two is legally speaking a
75 combined work, a derivative of the original library. The ordinary
76 General Public License therefore permits such linking only if the
77 entire combination fits its criteria of freedom. The Lesser General
78 Public License permits more lax criteria for linking other code with
79 the library.
80
81 We call this license the "Lesser" General Public License because it
82 does Less to protect the user's freedom than the ordinary General
83 Public License. It also provides other free software developers Less
84 of an advantage over competing non-free programs. These disadvantages
85 are the reason we use the ordinary General Public License for many
86 libraries. However, the Lesser license provides advantages in certain
87 special circumstances.
88
89 For example, on rare occasions, there may be a special need to
90 encourage the widest possible use of a certain library, so that it becomes
91 a de-facto standard. To achieve this, non-free programs must be
92 allowed to use the library. A more frequent case is that a free
93 library does the same job as widely used non-free libraries. In this
94 case, there is little to gain by limiting the free library to free
95 software only, so we use the Lesser General Public License.
96
97 In other cases, permission to use a particular library in non-free
98 programs enables a greater number of people to use a large body of
99 free software. For example, permission to use the GNU C Library in
100 non-free programs enables many more people to use the whole GNU
101 operating system, as well as its variant, the GNU/Linux operating
102 system.
103
104 Although the Lesser General Public License is Less protective of the
105 users' freedom, it does ensure that the user of a program that is
106 linked with the Library has the freedom and the wherewithal to run
107 that program using a modified version of the Library.
108
109 The precise terms and conditions for copying, distribution and
110 modification follow. Pay close attention to the difference between a
111 "work based on the library" and a "work that uses the library". The
112 former contains code derived from the library, whereas the latter must
113 be combined with the library in order to run.
114
115 GNU LESSER GENERAL PUBLIC LICENSE
116 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
118 0. This License Agreement applies to any software library or other
119 program which contains a notice placed by the copyright holder or
120 other authorized party saying it may be distributed under the terms of
121 this Lesser General Public License (also called "this License").
122 Each licensee is addressed as "you".
123
124 A "library" means a collection of software functions and/or data
125 prepared so as to be conveniently linked with application programs
126 (which use some of those functions and data) to form executables.
127
128 The "Library", below, refers to any such software library or work
129 which has been distributed under these terms. A "work based on the
130 Library" means either the Library or any derivative work under
131 copyright law: that is to say, a work containing the Library or a
132 portion of it, either verbatim or with modifications and/or translated
133 straightforwardly into another language. (Hereinafter, translation is
134 included without limitation in the term "modification".)
135
136 "Source code" for a work means the preferred form of the work for
137 making modifications to it. For a library, complete source code means
138 all the source code for all modules it contains, plus any associated
139 interface definition files, plus the scripts used to control compilation
140 and installation of the library.
141
142 Activities other than copying, distribution and modification are not
143 covered by this License; they are outside its scope. The act of
144 running a program using the Library is not restricted, and output from
145 such a program is covered only if its contents constitute a work based
146 on the Library (independent of the use of the Library in a tool for
147 writing it). Whether that is true depends on what the Library does
148 and what the program that uses the Library does.
149
150 1. You may copy and distribute verbatim copies of the Library's
151 complete source code as you receive it, in any medium, provided that
152 you conspicuously and appropriately publish on each copy an
153 appropriate copyright notice and disclaimer of warranty; keep intact
154 all the notices that refer to this License and to the absence of any
155 warranty; and distribute a copy of this License along with the
156 Library.
157
158 You may charge a fee for the physical act of transferring a copy,
159 and you may at your option offer warranty protection in exchange for a
160 fee.
161
162 2. You may modify your copy or copies of the Library or any portion
163 of it, thus forming a work based on the Library, and copy and
164 distribute such modifications or work under the terms of Section 1
165 above, provided that you also meet all of these conditions:
166
167 a) The modified work must itself be a software library.
168
169 b) You must cause the files modified to carry prominent notices
170 stating that you changed the files and the date of any change.
171
172 c) You must cause the whole of the work to be licensed at no
173 charge to all third parties under the terms of this License.
174
175 d) If a facility in the modified Library refers to a function or a
176 table of data to be supplied by an application program that uses
177 the facility, other than as an argument passed when the facility
178 is invoked, then you must make a good faith effort to ensure that,
179 in the event an application does not supply such function or
180 table, the facility still operates, and performs whatever part of
181 its purpose remains meaningful.
182
183 (For example, a function in a library to compute square roots has
184 a purpose that is entirely well-defined independent of the
185 application. Therefore, Subsection 2d requires that any
186 application-supplied function or table used by this function must
187 be optional: if the application does not supply it, the square
188 root function must still compute square roots.)
189
190 These requirements apply to the modified work as a whole. If
191 identifiable sections of that work are not derived from the Library,
192 and can be reasonably considered independent and separate works in
193 themselves, then this License, and its terms, do not apply to those
194 sections when you distribute them as separate works. But when you
195 distribute the same sections as part of a whole which is a work based
196 on the Library, the distribution of the whole must be on the terms of
197 this License, whose permissions for other licensees extend to the
198 entire whole, and thus to each and every part regardless of who wrote
199 it.
200
201 Thus, it is not the intent of this section to claim rights or contest
202 your rights to work written entirely by you; rather, the intent is to
203 exercise the right to control the distribution of derivative or
204 collective works based on the Library.
205
206 In addition, mere aggregation of another work not based on the Library
207 with the Library (or with a work based on the Library) on a volume of
208 a storage or distribution medium does not bring the other work under
209 the scope of this License.
210
211 3. You may opt to apply the terms of the ordinary GNU General Public
212 License instead of this License to a given copy of the Library. To do
213 this, you must alter all the notices that refer to this License, so
214 that they refer to the ordinary GNU General Public License, version 2,
215 instead of to this License. (If a newer version than version 2 of the
216 ordinary GNU General Public License has appeared, then you can specify
217 that version instead if you wish.) Do not make any other change in
218 these notices.
219
220 Once this change is made in a given copy, it is irreversible for
221 that copy, so the ordinary GNU General Public License applies to all
222 subsequent copies and derivative works made from that copy.
223
224 This option is useful when you wish to copy part of the code of
225 the Library into a program that is not a library.
226
227 4. You may copy and distribute the Library (or a portion or
228 derivative of it, under Section 2) in object code or executable form
229 under the terms of Sections 1 and 2 above provided that you accompany
230 it with the complete corresponding machine-readable source code, which
231 must be distributed under the terms of Sections 1 and 2 above on a
232 medium customarily used for software interchange.
233
234 If distribution of object code is made by offering access to copy
235 from a designated place, then offering equivalent access to copy the
236 source code from the same place satisfies the requirement to
237 distribute the source code, even though third parties are not
238 compelled to copy the source along with the object code.
239
240 5. A program that contains no derivative of any portion of the
241 Library, but is designed to work with the Library by being compiled or
242 linked with it, is called a "work that uses the Library". Such a
243 work, in isolation, is not a derivative work of the Library, and
244 therefore falls outside the scope of this License.
245
246 However, linking a "work that uses the Library" with the Library
247 creates an executable that is a derivative of the Library (because it
248 contains portions of the Library), rather than a "work that uses the
249 library". The executable is therefore covered by this License.
250 Section 6 states terms for distribution of such executables.
251
252 When a "work that uses the Library" uses material from a header file
253 that is part of the Library, the object code for the work may be a
254 derivative work of the Library even though the source code is not.
255 Whether this is true is especially significant if the work can be
256 linked without the Library, or if the work is itself a library. The
257 threshold for this to be true is not precisely defined by law.
258
259 If such an object file uses only numerical parameters, data
260 structure layouts and accessors, and small macros and small inline
261 functions (ten lines or less in length), then the use of the object
262 file is unrestricted, regardless of whether it is legally a derivative
263 work. (Executables containing this object code plus portions of the
264 Library will still fall under Section 6.)
265
266 Otherwise, if the work is a derivative of the Library, you may
267 distribute the object code for the work under the terms of Section 6.
268 Any executables containing that work also fall under Section 6,
269 whether or not they are linked directly with the Library itself.
270
271 6. As an exception to the Sections above, you may also combine or
272 link a "work that uses the Library" with the Library to produce a
273 work containing portions of the Library, and distribute that work
274 under terms of your choice, provided that the terms permit
275 modification of the work for the customer's own use and reverse
276 engineering for debugging such modifications.
277
278 You must give prominent notice with each copy of the work that the
279 Library is used in it and that the Library and its use are covered by
280 this License. You must supply a copy of this License. If the work
281 during execution displays copyright notices, you must include the
282 copyright notice for the Library among them, as well as a reference
283 directing the user to the copy of this License. Also, you must do one
284 of these things:
285
286 a) Accompany the work with the complete corresponding
287 machine-readable source code for the Library including whatever
288 changes were used in the work (which must be distributed under
289 Sections 1 and 2 above); and, if the work is an executable linked
290 with the Library, with the complete machine-readable "work that
291 uses the Library", as object code and/or source code, so that the
292 user can modify the Library and then relink to produce a modified
293 executable containing the modified Library. (It is understood
294 that the user who changes the contents of definitions files in the
295 Library will not necessarily be able to recompile the application
296 to use the modified definitions.)
297
298 b) Use a suitable shared library mechanism for linking with the
299 Library. A suitable mechanism is one that (1) uses at run time a
300 copy of the library already present on the user's computer system,
301 rather than copying library functions into the executable, and (2)
302 will operate properly with a modified version of the library, if
303 the user installs one, as long as the modified version is
304 interface-compatible with the version that the work was made with.
305
306 c) Accompany the work with a written offer, valid for at
307 least three years, to give the same user the materials
308 specified in Subsection 6a, above, for a charge no more
309 than the cost of performing this distribution.
310
311 d) If distribution of the work is made by offering access to copy
312 from a designated place, offer equivalent access to copy the above
313 specified materials from the same place.
314
315 e) Verify that the user has already received a copy of these
316 materials or that you have already sent this user a copy.
317
318 For an executable, the required form of the "work that uses the
319 Library" must include any data and utility programs needed for
320 reproducing the executable from it. However, as a special exception,
321 the materials to be distributed need not include anything that is
322 normally distributed (in either source or binary form) with the major
323 components (compiler, kernel, and so on) of the operating system on
324 which the executable runs, unless that component itself accompanies
325 the executable.
326
327 It may happen that this requirement contradicts the license
328 restrictions of other proprietary libraries that do not normally
329 accompany the operating system. Such a contradiction means you cannot
330 use both them and the Library together in an executable that you
331 distribute.
332
333 7. You may place library facilities that are a work based on the
334 Library side-by-side in a single library together with other library
335 facilities not covered by this License, and distribute such a combined
336 library, provided that the separate distribution of the work based on
337 the Library and of the other library facilities is otherwise
338 permitted, and provided that you do these two things:
339
340 a) Accompany the combined library with a copy of the same work
341 based on the Library, uncombined with any other library
342 facilities. This must be distributed under the terms of the
343 Sections above.
344
345 b) Give prominent notice with the combined library of the fact
346 that part of it is a work based on the Library, and explaining
347 where to find the accompanying uncombined form of the same work.
348
349 8. You may not copy, modify, sublicense, link with, or distribute
350 the Library except as expressly provided under this License. Any
351 attempt otherwise to copy, modify, sublicense, link with, or
352 distribute the Library is void, and will automatically terminate your
353 rights under this License. However, parties who have received copies,
354 or rights, from you under this License will not have their licenses
355 terminated so long as such parties remain in full compliance.
356
357 9. You are not required to accept this License, since you have not
358 signed it. However, nothing else grants you permission to modify or
359 distribute the Library or its derivative works. These actions are
360 prohibited by law if you do not accept this License. Therefore, by
361 modifying or distributing the Library (or any work based on the
362 Library), you indicate your acceptance of this License to do so, and
363 all its terms and conditions for copying, distributing or modifying
364 the Library or works based on it.
365
366 10. Each time you redistribute the Library (or any work based on the
367 Library), the recipient automatically receives a license from the
368 original licensor to copy, distribute, link with or modify the Library
369 subject to these terms and conditions. You may not impose any further
370 restrictions on the recipients' exercise of the rights granted herein.
371 You are not responsible for enforcing compliance by third parties with
372 this License.
373
374 11. If, as a consequence of a court judgment or allegation of patent
375 infringement or for any other reason (not limited to patent issues),
376 conditions are imposed on you (whether by court order, agreement or
377 otherwise) that contradict the conditions of this License, they do not
378 excuse you from the conditions of this License. If you cannot
379 distribute so as to satisfy simultaneously your obligations under this
380 License and any other pertinent obligations, then as a consequence you
381 may not distribute the Library at all. For example, if a patent
382 license would not permit royalty-free redistribution of the Library by
383 all those who receive copies directly or indirectly through you, then
384 the only way you could satisfy both it and this License would be to
385 refrain entirely from distribution of the Library.
386
387 If any portion of this section is held invalid or unenforceable under any
388 particular circumstance, the balance of the section is intended to apply,
389 and the section as a whole is intended to apply in other circumstances.
390
391 It is not the purpose of this section to induce you to infringe any
392 patents or other property right claims or to contest validity of any
393 such claims; this section has the sole purpose of protecting the
394 integrity of the free software distribution system which is
395 implemented by public license practices. Many people have made
396 generous contributions to the wide range of software distributed
397 through that system in reliance on consistent application of that
398 system; it is up to the author/donor to decide if he or she is willing
399 to distribute software through any other system and a licensee cannot
400 impose that choice.
401
402 This section is intended to make thoroughly clear what is believed to
403 be a consequence of the rest of this License.
404
405 12. If the distribution and/or use of the Library is restricted in
406 certain countries either by patents or by copyrighted interfaces, the
407 original copyright holder who places the Library under this License may add
408 an explicit geographical distribution limitation excluding those countries,
409 so that distribution is permitted only in or among countries not thus
410 excluded. In such case, this License incorporates the limitation as if
411 written in the body of this License.
412
413 13. The Free Software Foundation may publish revised and/or new
414 versions of the Lesser General Public License from time to time.
415 Such new versions will be similar in spirit to the present version,
416 but may differ in detail to address new problems or concerns.
417
418 Each version is given a distinguishing version number. If the Library
419 specifies a version number of this License which applies to it and
420 "any later version", you have the option of following the terms and
421 conditions either of that version or of any later version published by
422 the Free Software Foundation. If the Library does not specify a
423 license version number, you may choose any version ever published by
424 the Free Software Foundation.
425
426 14. If you wish to incorporate parts of the Library into other free
427 programs whose distribution conditions are incompatible with these,
428 write to the author to ask for permission. For software which is
429 copyrighted by the Free Software Foundation, write to the Free
430 Software Foundation; we sometimes make exceptions for this. Our
431 decision will be guided by the two goals of preserving the free status
432 of all derivatives of our free software and of promoting the sharing
433 and reuse of software generally.
434
435 NO WARRANTY
436
437 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439 EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440 OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441 KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445 THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
447 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449 AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452 LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454 FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456 DAMAGES.
457
458 END OF TERMS AND CONDITIONS
459
460 How to Apply These Terms to Your New Libraries
461
462 If you develop a new library, and you want it to be of the greatest
463 possible use to the public, we recommend making it free software that
464 everyone can redistribute and change. You can do so by permitting
465 redistribution under these terms (or, alternatively, under the terms of the
466 ordinary General Public License).
467
468 To apply these terms, attach the following notices to the library. It is
469 safest to attach them to the start of each source file to most effectively
470 convey the exclusion of warranty; and each file should have at least the
471 "copyright" line and a pointer to where the full notice is found.
472
473 <one line to give the library's name and a brief idea of what it does.>
474 Copyright (C) <year> <name of author>
475
476 This library is free software; you can redistribute it and/or
477 modify it under the terms of the GNU Lesser General Public
478 License as published by the Free Software Foundation; either
479 version 2.1 of the License, or (at your option) any later version.
480
481 This library is distributed in the hope that it will be useful,
482 but WITHOUT ANY WARRANTY; without even the implied warranty of
483 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484 Lesser General Public License for more details.
485
486 You should have received a copy of the GNU Lesser General Public
487 License along with this library; if not, write to the Free Software
488 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
489
490 Also add information on how to contact you by electronic and paper mail.
491
492 You should also get your employer (if you work as a programmer) or your
493 school, if any, to sign a "copyright disclaimer" for the library, if
494 necessary. Here is a sample; alter the names:
495
496 Yoyodyne, Inc., hereby disclaims all copyright interest in the
497 library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
499 <signature of Ty Coon>, 1 April 1990
500 Ty Coon, President of Vice
501
502 That's all there is to it!
503
504
@@ -0,0 +1,48
1 #============================================================+
2 # File name : eng.rb
3 # Begin : 2004-03-03
4 # Last Update : 2005-03-19
5 #
6 # Description : Language module for TCPDF
7 # (contains translated texts)
8 #
9 #
10 # Author: Nicola Asuni
11 #
12 # (c) Copyright:
13 # Tecnick.com S.r.l.
14 # Via Ugo Foscolo n.19
15 # 09045 Quartu Sant'Elena (CA)
16 # ITALY
17 # www.tecnick.com
18 # info@tecnick.com
19 #============================================================+
20
21 #
22 # TCPDF language file (contains translated texts).
23 # @package com.tecnick.tcpdf
24 # @abstract TCPDF language file.
25 # @author Nicola Asuni
26 # @copyright 2004 Tecnick.com S.r.l (www.tecnick.com) Via Ugo Foscolo n.19 - 09045 Quartu Sant'Elena (CA) - ITALY - www.tecnick.com - info@tecnick.com
27 # @link http://tcpdf.sourceforge.net
28 # @license http://www.gnu.org/copyleft/lesser.html LGPL
29 # @since 2004-03-03
30 #
31
32 # ENGLISH
33
34 @l = []
35
36 # PAGE META DESCRIPTORS --------------------------------------
37
38 @l['a_meta_charset'] = "UTF-8";
39 @l['a_meta_dir'] = "ltr";
40 @l['a_meta_language'] = "en";
41
42 # TRANSLATIONS --------------------------------------
43 @l['w_page'] = "page";
44
45 #============================================================+
46 # END OF FILE
47 #============================================================+
48
@@ -0,0 +1,64
1 # The MIT License
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a copy
4 # of this software and associated documentation files (the "Software"), to deal
5 # in the Software without restriction, including without limitation the rights
6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 # copies of the Software, and to permit persons to whom the Software is
8 # furnished to do so, subject to the following conditions:
9 #
10 # The above copyright notice and this permission notice shall be included in
11 # all copies or substantial portions of the Software.
12 #
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 # THE SOFTWARE.
20 #
21 # This implements native php methods used by tcpdf, which have had to be
22 # reimplemented within Ruby.
23
24 module RFPDF
25
26 # http://uk2.php.net/getimagesize
27 def getimagesize(filename)
28 out = Hash.new
29 out[2] = ImageScience.image_type(filename)
30
31 image = ImageScience.with_image(filename) do |img|
32 out[0] = image.width
33 out[1] = image.height
34
35 # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are.
36 # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too.
37 case out[2]
38 when "GIF"
39 out['mime'] = "image/gif"
40 when "JPEG"
41 out['mime'] = "image/jpeg"
42 when "PNG"
43 out['mime'] = "image/png"
44 when "WBMP"
45 out['mime'] = "image/vnd.wap.wbmp"
46 when "XPM"
47 out['mime'] = "image/x-xpixmap"
48 end
49 out[3] = "height=\"#{image.height}\" width=\"#{image.width}\""
50
51 if image.colorspace == "CMYK" || image.colorspace == "RGBA"
52 out['channels'] = 4
53 elsif image.colorspace == "RGB"
54 out['channels'] = 3
55 end
56
57 out['bits'] = image.depth
58 out['bits'] /= out['channels'] if out['channels']
59 end
60
61 out
62 end
63
64 end No newline at end of file
@@ -0,0 +1,64
1 # The MIT License
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a copy
4 # of this software and associated documentation files (the "Software"), to deal
5 # in the Software without restriction, including without limitation the rights
6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 # copies of the Software, and to permit persons to whom the Software is
8 # furnished to do so, subject to the following conditions:
9 #
10 # The above copyright notice and this permission notice shall be included in
11 # all copies or substantial portions of the Software.
12 #
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 # THE SOFTWARE.
20 #
21 # This implements native php methods used by tcpdf, which have had to be
22 # reimplemented within Ruby.
23
24 module RFPDF
25
26 # http://uk2.php.net/getimagesize
27 def getimagesize(filename)
28 image = Magick::ImageList.new(filename)
29
30 out = Hash.new
31 out[0] = image.columns
32 out[1] = image.rows
33
34 # These are actually meant to return integer values But I couldn't seem to find anything saying what those values are.
35 # So for now they return strings. The only place that uses this at the moment is the parsejpeg method, so I've changed that too.
36 case image.mime_type
37 when "image/gif"
38 out[2] = "GIF"
39 when "image/jpeg"
40 out[2] = "JPEG"
41 when "image/png"
42 out[2] = "PNG"
43 when " image/vnd.wap.wbmp"
44 out[2] = "WBMP"
45 when "image/x-xpixmap"
46 out[2] = "XPM"
47 end
48 out[3] = "height=\"#{image.rows}\" width=\"#{image.columns}\""
49 out['mime'] = image.mime_type
50
51 # This needs work to cover more situations
52 # I can't see how to just list the number of channels with ImageMagick / rmagick
53 if image.colorspace.to_s == "CMYKColorspace"
54 out['channels'] = 4
55 elsif image.colorspace.to_s == "RGBColorspace"
56 out['channels'] = 3
57 end
58
59 out['bits'] = image.channel_depth
60
61 out
62 end
63
64 end No newline at end of file
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
@@ -0,0 +1,2
1 This folder contains fonts descriptions for TCPDF.
2 Please read the documentation on subfolders for copyright, license and other information. No newline at end of file
@@ -0,0 +1,25
1 TCPDFFontDescriptor.define('courier') do |font|
2 font[:cw] = {}
3 0.upto(255) do |i|
4 font[:cw][i]=600
5 end
6 end
7 TCPDFFontDescriptor.define('courierb') do |font|
8 font[:cw] = {}
9 0.upto(255) do |i|
10 font[:cw][i]=600
11 end
12 end
13 TCPDFFontDescriptor.define('courierbi') do |font|
14 font[:cw] = {}
15 0.upto(255) do |i|
16 font[:cw][i]=600
17 end
18 end
19 TCPDFFontDescriptor.define('courieri') do |font|
20 font[:cw] = {}
21 0.upto(255) do |i|
22 font[:cw][i]=600
23 end
24 end
25
@@ -0,0 +1,38
1 Adrian Schroeter
2 Andrey Valentinovich Panov
3 Ben Laenen
4 Bhikkhu Pesala
5 Clayborne Arevalo
6 Dafydd Harries
7 Danilo Segan
8 Davide Viti
9 David Jez
10 David Lawrence Ramsey
11 Denis Jacquerye
12 Dwayne Bailey
13 Eugeniy Meshcheryakov
14 Gee Fung Sit
15 Heikki Lindroos
16 James Cloos
17 James Crippen
18 John Karp
19 Keenan Pepper
20 Lars Naesbye Christensen
21 Mashrab Kuvatov
22 Mederic Boquien
23 Michael Everson
24 Misu Moldovan
25 Nguyen Thai Ngoc Duy
26 Ognyan Kulev
27 Ondrej Koala Vacha
28 Peter Cernak
29 Remy Oudompheng
30 Roozbeh Pournader
31 Sander Vesik
32 Stepan Roh
33 Tavmjong Bah
34 Tim May
35 Valentin Stoykov
36 Vasek Stodulka
37
38 $Id: AUTHORS 1491 2007-01-12 20:40:12Z ben_laenen $
@@ -0,0 +1,3
1 See http://dejavu.sourceforge.net/wiki/index.rb/Bugs
2
3 $Id: BUGS 80 2004-11-13 13:12:02Z src $
@@ -0,0 +1,98
1 Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)
2
3 Bitstream Vera Fonts Copyright
4 ------------------------------
5
6 Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
7 a trademark of Bitstream, Inc.
8
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of the fonts accompanying this license ("Fonts") and associated
11 documentation files (the "Font Software"), to reproduce and distribute the
12 Font Software, including without limitation the rights to use, copy, merge,
13 publish, distribute, and/or sell copies of the Font Software, and to permit
14 persons to whom the Font Software is furnished to do so, subject to the
15 following conditions:
16
17 The above copyright and trademark notices and this permission notice shall
18 be included in all copies of one or more of the Font Software typefaces.
19
20 The Font Software may be modified, altered, or added to, and in particular
21 the designs of glyphs or characters in the Fonts may be modified and
22 additional glyphs or characters may be added to the Fonts, only if the fonts
23 are renamed to names not containing either the words "Bitstream" or the word
24 "Vera".
25
26 This License becomes null and void to the extent applicable to Fonts or Font
27 Software that has been modified and is distributed under the "Bitstream
28 Vera" names.
29
30 The Font Software may be sold as part of a larger software package but no
31 copy of one or more of the Font Software typefaces may be sold by itself.
32
33 THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
34 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
35 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
36 TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
37 FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
38 ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
39 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
40 THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
41 FONT SOFTWARE.
42
43 Except as contained in this notice, the names of Gnome, the Gnome
44 Foundation, and Bitstream Inc., shall not be used in advertising or
45 otherwise to promote the sale, use or other dealings in this Font Software
46 without prior written authorization from the Gnome Foundation or Bitstream
47 Inc., respectively. For further information, contact: fonts at gnome dot
48 org.
49
50 Arev Fonts Copyright
51 ------------------------------
52
53 Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
54
55 Permission is hereby granted, free of charge, to any person obtaining
56 a copy of the fonts accompanying this license ("Fonts") and
57 associated documentation files (the "Font Software"), to reproduce
58 and distribute the modifications to the Bitstream Vera Font Software,
59 including without limitation the rights to use, copy, merge, publish,
60 distribute, and/or sell copies of the Font Software, and to permit
61 persons to whom the Font Software is furnished to do so, subject to
62 the following conditions:
63
64 The above copyright and trademark notices and this permission notice
65 shall be included in all copies of one or more of the Font Software
66 typefaces.
67
68 The Font Software may be modified, altered, or added to, and in
69 particular the designs of glyphs or characters in the Fonts may be
70 modified and additional glyphs or characters may be added to the
71 Fonts, only if the fonts are renamed to names not containing either
72 the words "Tavmjong Bah" or the word "Arev".
73
74 This License becomes null and void to the extent applicable to Fonts
75 or Font Software that has been modified and is distributed under the
76 "Tavmjong Bah Arev" names.
77
78 The Font Software may be sold as part of a larger software package but
79 no copy of one or more of the Font Software typefaces may be sold by
80 itself.
81
82 THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
83 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
84 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
85 OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
86 TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
87 INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
88 DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
89 FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
90 OTHER DEALINGS IN THE FONT SOFTWARE.
91
92 Except as contained in this notice, the name of Tavmjong Bah shall not
93 be used in advertising or otherwise to promote the sale, use or other
94 dealings in this Font Software without prior written authorization
95 from Tavmjong Bah. For further information, contact: tavmjong @ free
96 . fr.
97
98 $Id: LICENSE 778 2006-04-20 18:14:24Z moyogo $
This diff has been collapsed as it changes many lines, (789 lines changed) Show them Hide them
@@ -0,0 +1,789
1 Changes from 2.14 to 2.15
2
3 - improved hinting in Sans Oblique to deal with some spacing and inconsistency
4 issues (by Ben Laenen)
5 - added anchors to Mono Book, and added GPOS rules for combining diacritics to
6 show up as zero width glyphs (by Ben Laenen)
7 - removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy
8 Meshcheryakov)
9 - added U+27E6-U+27E7 to Sans (by Gee Fung Sit)
10 - added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E,
11 U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A,
12 U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9,
13 U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9,
14 U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525,
15 U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C,
16 U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by
17 Eugeniy Meshcheryakov)
18 - fixed several contours to not intersect, use horizontal or vertical tangents,
19 use integer coordinates, etc in Sans Book (by Denis Jacquerye)
20 - added U+0496-U+0497 in Serif (by Andrey V. Panov)
21
22 Changes from 2.13 to 2.14
23
24 - added Philippine peso glyph U+20B1 (by Clayborne Arevalo)
25 - made U+2012 have the same width as digits, according to Unicode 5.0,
26 page 206 (by Roozbeh Pournader)
27 - made all of the "above" combining characters remove the dot of "i",
28 "j", etc (Soft_Dotted characters), according to Unicode 5.0,
29 page 228 (by Roozbeh Pournader)
30 - made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts
31 except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed),
32 U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif
33 and Serif Condensed) respect the Soft_Dotted property (by Roozbeh
34 Pournader)
35 - added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Rémy Oudompheng)
36 - added U+203D to Serif (by Gee Fung Sit)
37 - added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee
38 Fung Sit)
39 - changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432)
40 (by Ben Laenen)
41 - added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A,
42 U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA,
43 U+0EAB, U+0EAD-0EAF to Sans Mono (by Rémy Oudompheng)
44 - added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07,
45 U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D,
46 U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59,
47 U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77,
48 U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono
49 (by Ben Laenen)
50 - renamed uppercase variants of diacritics (macron, breve, double grave,
51 double acute, inverted breve, dot above) to "uni03XX.case" in Mono
52 (by Ben Laenen)
53 - moved uppercase variants of diacritics up in Mono so they properly
54 vertically align on capitals (by Ben Laenen)
55 - precomposed glyphs with macron, breve, double grave, double acute,
56 inverted breve, dot above, macron below, breve below, inverted breve
57 below, dot below, cedilla, caron below, circumflex below, diaeresis
58 below, tilde below now reference to combining diacritics instead of
59 space modifiers in Mono (by Ben Laenen)
60 - made ring below (U+0325), and half rings below (U+031C and U+0339)
61 smaller in Mono (by Ben Laenen)
62 - added U+205F to all fonts (by Roozbeh Pournader)
63 - added U+035E-U+035F to Sans (by Roozbeh Pournader)
64 - added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F,
65 U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader)
66 - added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B,
67 U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F,
68 U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11,
69 U+2B20-U+2B23 to Sans (by John Karp)
70 - reshaped omega (U+03C9) in Mono (by Ben Laenen)
71 - added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F,
72 U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344,
73 U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354,
74 U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365,
75 U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383,
76 U+2388-U+238B, U+2395 in Mono (by Ben Laenen)
77
78 Changes from 2.12 to 2.13
79
80 - adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book
81 (by Denis Jacquerye)
82 - added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans
83 (by Denis Jacquerye)
84 - added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF,
85 U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5,
86 U+22EF to Sans Mono (by Roozbeh Pournader)
87 - added U+04FA-U+04FD to Sans (by Michael Everson)
88 - removed U+2329 and U+232A because of their CJK properties, added U+27E8
89 and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader)
90 - corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482,
91 U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A
92 in Sans (by Michael Everson)
93 - added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F,
94 U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov)
95 - made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447,
96 U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique
97 (by Andrey V. Panov)
98 - modified U+024C to match glyph in Unicode chart, fixing bug #9039
99 (by Denis Jacquerye)
100 - made some canonically equivalent characters share the same glyph:
101 U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA
102 to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader)
103 - changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts,
104 based on a recent decision by Unicode Technical Committee to only use
105 the digraph form (by Michael Everson)
106 - adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401
107 (by Denis Jacquerye)
108 - fixed several contours to not intersect, use horizontal or vertical tangents,
109 use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye)
110 - added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE,
111 U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov)
112 - enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov)
113 - made traditional shape for U+452, U+45B (by Andrey V. Panov)
114 - added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize
115 the font as supporting English (by Denis Jacquerye)
116
117 Changes from 2.11 to 2.12
118
119 - added U+0180 to Serif (by Denis Jacquerye)
120 - improved and/or hinted Armenian letters U+0542, U+0546, U+0562,
121 U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen)
122 - added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans
123 (by Gee Fung Sit)
124 - adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416,
125 U+041A, U+0436 and U+043A (by Gee Fung Sit)
126 - Mathematical Operators in Sans: changed U+22C0-U+22C1 to match
127 other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in
128 Sans to match the style of U+2221 (by Gee Fung Sit)
129 - added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F,
130 U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C,
131 U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470,
132 U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491,
133 U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0,
134 U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8,
135 U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5,
136 U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E,
137 U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A,
138 U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D,
139 U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to
140 Sans (by Eugeniy Meshcheryakov)
141 - re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans
142 (by Ben Laenen)
143 - made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F,
144 U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov)
145 - fixed sub- and superscript metrics in Condensed Sans (bug #8848)
146 (by Ben Laenen)
147 - added U+474, U+475 in Serif (by Andrey V. Panov)
148 - hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3,
149 U+03C6 in Mono Book (by Ben Laenen)
150
151 Changes from 2.10 to 2.11
152
153 - added instructions for Hebrew glyphs (Sans Book, by Eugeniy
154 Meshcheryakov)
155 - changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and
156 Sans Mono fonts (by Denis Jacquerye).
157 - removed instruction for U+2600-U+26A1 (by Mederic Boquien)
158 - added U+202F and set width of U+00A0 (nobreakingspace) to the
159 same as U+0020, space (by Denis Jacquerye).
160 - added and improved instructions for various Cyrillic letters
161 (by Eugeniy Meshcheryakov)
162 - Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold),
163 U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429,
164 U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in
165 Sans Mono (by Andrey V. Panov)
166 - made small corrections to Cyrillic, most appreciable to U+409,
167 U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459
168 (upright fonts) to Serif (by Andrey V. Panov)
169 - adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A,
170 U+443, U+44F in Serif (by Andrey V. Panov)
171 - enlarged width of U+44A, U+44B, U+44C, U+463 in Serif
172 (by Andrey V. Panov)
173 - added ligature "iacute" as "afii10103" (U+456) "acutecomb" in
174 Serif (by Andrey V. Panov)
175 - made italic shape to U+446, U+448, U+449 in Serif (by Andrey V.
176 Panov)
177 - added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by
178 Andrey V. Panov)
179 - new minimum version of fontforge is 20061014 (by Ben Laenen)
180
181 Changes from 2.9 to 2.10:
182
183 - added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F,
184 U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8,
185 U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and
186 U+FB29 to Sans (by Gee Fung Sit)
187 - added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D,
188 U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB,
189 U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD
190 (by Rémy Oudompheng)
191 - fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen)
192 - changes to U+222B-222D in Sans Mono (by Rémy Oudompheng)
193 - ported the three remaining currency symbols from Arev (U+20B0,
194 U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye
195 Christensen)
196 - corrected U+20A5 in Sans (by Gee Fung Sit)
197 - merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115,
198 U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit)
199 - added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces,
200 fixed incorrect direction of U+2329 in Sans faces, and improved
201 U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David
202 Lawrence Ramsey)
203 - added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen)
204 - added two special glyphs U+F000 and U+F001 in Sans Book that show the
205 current ppem size (horizontal and vertical) (by Ben Laenen)
206 - added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions
207 (by David Lawrence Ramsey)
208 - added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David
209 Lawrence Ramsey)
210 - respaced all Geometric Shapes characters in Serif faces to match those
211 in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and
212 Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again,
213 and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1
214 again (by David Lawrence Ramsey)
215 - corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique
216 and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit)
217 - added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by
218 Gee Fung Sit)
219 - adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by
220 Gee Fung Sit)
221 - added U+0242, U+0245 to Serif (by Gee Fung Sit)
222 - replaced the SHPIX routines which gave them bad spacing at certain
223 sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen)
224
225 Changes from 2.8 to 2.9:
226
227 - DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to
228 "DejaVu Sans Light" (in case we add a Light weight variant), so legacy
229 apps that understand only 4 styles are happy. (by Denis Jacquerye)
230 - added Name ID 16, aka preferred family name, and Name ID 17, aka
231 preferred style name, so contemporary apps that understand more that 4
232 styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For
233 those, Extralight and Condensed are just styles not different families.
234 (by Denis Jacquerye)
235 - added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng)
236 - added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee
237 Fung Sit)
238 - adjusted asteriskmath (U+2217) for consistency with other mathematical
239 operators in Sans (by Ben Laenen)
240 - hinted some Armenian capitals in Sans Book (by Ben Laenen)
241 - added U+0246 - U+0249 (by Ben Laenen)
242 - BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono
243 (by Remy Oudompheng)
244 - adjusted U+20B5 (by Mederic Boquien)
245 - swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos)
246 - added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy
247 Oudompheng)
248 - added U+239B-23AD to Mono (by Remy Oudompheng)
249 - added U+2024-2025 to Serif (by Mederic Boquien)
250 - added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng)
251 - added U+2190-21FF to Mono (by Heikki Lindroos)
252 - added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7,
253 U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36,
254 U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by
255 Gee Fung Sit and Eugeniy Meshcheryakov)
256 - adjustments for Cyrillic in Sans (by Andrey V. Panov)
257 - made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif
258 Bold Oblique (by Andrey V. Panov)
259
260 Changes from 2.7 to 2.8:
261
262 - fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they
263 look good at large sizes too (by Eugeniy Meshcheryakov)
264 - added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos)
265 - added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729
266 to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to
267 U+2775 (by Heikki Lindroos)
268 - added and improved instructions for Cyrillic letters in Mono and Serif
269 (Book, by Eugeniy Meshcheryakov)
270 - rotated U+26B0 (was too small in mono) (by Gee Fung Sit)
271 - adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific
272 accent and moved diacritics to match position on U+00F2 (ograve), etc.
273 (by Denis Jacquerye)
274 - added U+20D6, U+20D7 to Sans (by Gee Fung Sit)
275 - made Armenian ligatures discretionary since the Firefox ligature problem
276 still isn't fixed (by Ben Laenen)
277 - moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben
278 Laenen)
279 - hinted Greek glyphs in Sans Bold (by Ben Laenen)
280 - enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen)
281
282 Changes from 2.6 to 2.7:
283
284 - added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their
285 init/medi/fina forms in Sans (by Ben Laenen)
286 - added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC -
287 U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani
288 and Twi) (by Ben Laenen)
289 - added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to
290 Sans (by Remy Oudompheng)
291 - adjusted diacritics on Vietnamese, Pinyin and other characters:
292 U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB
293 U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B,
294 U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye)
295 - added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance
296 for Serif (by Ben Laenen)
297 - added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif
298 (by Ben Laenen)
299 - fixed U+0209 in Serif Bold Oblique (by Ben Laenen)
300 - adjusted Box Drawing block characters U+2500-257F in Mono to fit character
301 cell, shifting them up by 416 (Denis Jacquerye)
302 - redid U+0194 in Sans (by Ben Laenen)
303 - added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng)
304 - added U+0462 to Serif (by Andrey V. Panov)
305 - added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy
306 Oudompheng)
307 - adjusted U+2208-220D in Sans (by Remy Oudompheng)
308 - improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten
309 instructions for changed glyphs (by Eugeniy Meshcheryakov)
310 - added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug
311 #7166)
312 - renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts
313 (by Denis Jacquerye).
314 - added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were
315 in Sans already (by Lars Naesbye Christensen)
316 - added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B,
317 U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono
318 (by Heikki Lindroos)
319 - replaced the references with unshifted ones for both κ U+03BA and к U+043A
320 in Mono Book (by Denis Jacquerye)
321 - fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey
322 V. Panov).
323
324 Changes from 2.5 to 2.6:
325
326 - redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit)
327 - added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit)
328 - added instructions for some Cyrillic letters in Sans Bold (by Eugeniy
329 Meshcheryakov)
330 - added vulgar fractions U+2153-U+215F for Serif, made with references (by
331 Lars Naesbye Christensen)
332 - added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans
333 (by Remy Oudompheng)
334 - added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292,
335 U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng)
336 - fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng)
337 - added instructions for some Cyrillic letters in Mono Book and Bold(by
338 Eugeniy Meshcheryakov)
339 - minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy
340 Oudompheng)
341 - added hinting instructions to lowercase Armenian glyphs in Sans Book (by
342 Ben Laenen)
343 - changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy
344 Oudompheng)
345 - added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien)
346 - added instructions for some Cyrillic letters in Serif Book (by Eugeniy
347 Meshcheryakov)
348 - renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in
349 Bitstream Vera fonts (by Denis Jacquerye)
350 - added hinting instructions to some Latin-B Extended and IPA characters in
351 Sans Book (by Denis Jacquerye and Ben Laenen)
352 - adjusted bearings, replaced diacritics, hinted hook and horn for
353 Vietnamese in Sans Book (by Denis Jacquerye)
354 - made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts
355 (by Denis Jacquerye)
356 - removed ligatures of precomposed characters in Sans and Serif fonts (by
357 Denis Jacquerye)
358 - added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's
359 PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D,
360 U+2C64, (U+2C6D), (U+2C71)
361 - modified some glyphs in Serif Oblique to make them more italic (by Denis
362 Jacquerye)
363
364 Changes from 2.4 to 2.5:
365
366 - fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye)
367 - added U+20AF to Sans and Serif (by Lars Naesbye Christensen)
368 - regenerated Condensed faces (by Ben Laenen)
369 - added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye)
370 - integrated 255 characters from Arev fonts: Latin Extended-B, Spacing
371 Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement,
372 General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators,
373 Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis
374 Jacquerye)
375 - added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye)
376 - added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy
377 Meshcheryakov)
378 - added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4,
379 U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov)
380 - adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B,
381 U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye)
382 - added U+2000-200A to Mono (by Denis Jacquerye)
383 - added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit)
384 - adapted metrics of Arabic glyphs so they stay above cut-off height in Sans
385 (by Ben Laenen)
386 - fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by
387 Ben Laenen)
388 - fixed weight of lowercase upsilon in Sans Bold, make small adjustment to
389 lowercase omega in Sans (by Ben Laenen)
390 - added U+210E (by Mederic Boquien)
391 - unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien)
392 - added several mathematical relation symbols to Sans and Mono (U+2241-224C,
393 U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match
394 other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng)
395 - made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic
396 Boquien)
397 - added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy
398 Oudompheng)
399 - unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by
400 Mederic Boquien)
401 - added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans
402 Oblique. (by Remy Oudompheng)
403 - added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and
404 unslanted U+2219 in Oblique. (by Remy Oudompheng)
405 - merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen)
406 - fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov)
407 - made fi, fl... ligatures discretionary ligatures (by Ben Laenen)
408
409 Changes from 2.3 to 2.4:
410
411 - added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 -
412 U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5,
413 U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov)
414 - added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC -
415 U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8,
416 U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif
417 (by Eugeniy Meshcheryakov)
418 - added U+2134 to Sans (by Gee Fung Sit)
419 - added U+2080 - U+2089 to all faces (by Gee Fung Sit)
420 - several minor corrections to Sans (by Gee Fung Sit)
421 - major corrections to Sans Condensed (by Gee Fung Sit)
422 - corrected Superscripts and Subscripts in Sans (by Gee Fung Sit)
423 - corrected anchors of U+0316-U+0319 (by Denis Jacquerye)
424 - Verajja integrated (by Stepan Roh)
425 - copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667,
426 and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of
427 them to Sans Mono (by David Lawrence Ramsey)
428 - added U+20B4 to all faces (by Eugeniy Meshcheryakov)
429 - added more minor positional adjustments to U+2638 in all faces to
430 match the other miscellaneous symbols in Verajja, and rescale it in Sans
431 Mono so that it looks better (by David Lawrence Ramsey)
432 - added U+2242, U+2243 and U+22A4 (by Mederic Boquien)
433 - corrected U+2245 in Sans (by Mederic Boquien)
434 - added U+0221, U+0234-0236 (by Denis Jacquerye)
435 - added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621
436 - U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1,
437 U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen)
438 - added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A
439 - U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen)
440 - added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74,
441 U+FE76 - U+FEFC, U+FEFF (by Ben Laenen)
442 - added complete Greek Extended block to Mono (by Ben Laenen)
443 - modified Greek capitals with tonos in Mono (by Ben Laenen)
444 - added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9,
445 U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif
446 (by Denis Jacquerye)
447 - adjusted U+043B and U+044F in Serif (by Denis Jacquerye)
448 - added U+2000-U+200A (by Denis Jacquerye)
449 - added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23,
450 U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49,
451 U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F,
452 U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD,
453 U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by
454 Denis Jacquerye)
455 - added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF,
456 U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov)
457 - added DejaVu Sans Extra Light (by Denis Jacquerye)
458 - Adjusted underline position for (hopefully) improved legibility in
459 Sans, Serif, Mono (Tim May)
460 - added auto-generated DejaVu LGC (by Stepan Roh)
461
462 Changes from 2.2 to 2.3:
463
464 - fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by
465 Keenan Pepper)
466 - added and improved TrueType instructions and related settings (by
467 Keenan Pepper)
468 - added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov)
469 - added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1,
470 U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF,
471 U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov)
472 - added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov)
473 - added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D,
474 U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D,
475 U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB,
476 U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen)
477 - added Greek variant letterforms, archaic letters and symbols to Mono:
478 U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen)
479 - added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556,
480 U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben
481 Laenen)
482 - redid some Greek characters in Sans and Mono to make them look better
483 and to correct some errors (by Ben Laenen)
484 - added U+27E0 to all faces (by David Lawrence Ramsey)
485 - added underscore (U+005F) consistency fixes: extended the Sans Mono
486 and Sans Mono Oblique underscores to touch both horizontal edges, and
487 reduced the height of the Sans Bold Oblique underscore to match the Sans
488 Bold underscore (by David Lawrence Ramsey)
489 - added underscore (U+005F) derivatives and consistency fixes for them:
490 made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made
491 U+0333 two references to underscore; made U+033F two references to U+203E;
492 added U+2017 as two references to underscore, and made U+0333 a reference to
493 it; and added U+203E as a reference to underscore, and made U+0305 a
494 reference to it (by David Lawrence Ramsey)
495 - added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining
496 Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5,
497 U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey)
498 - added minor positional adjustments to U+2638 in all faces (by David
499 Lawrence Ramsey)
500 - added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey)
501 - added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183,
502 U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to
503 Sans (by Gee Fung Sit ???)
504 - added U+2116 to Sans and Serif (by Gee Fung Sit)
505 - changed florin sign U+0192 in Sans (by Gee Fung Sit)
506 - added anchor points to some glyphs (by Denis Jacquerye)
507 - adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1,
508 U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye)
509 - added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA,
510 U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225,
511 U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B,
512 U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye)
513 - added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9,
514 U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77
515 to Serif and Mono (by Denis Jacquerye)
516 - added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193,
517 U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6,
518 U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye)
519 - added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193,
520 U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6,
521 U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye)
522 - added to Mono and Serif (by Denis Jacquerye)
523
524 Changes from 2.1 to 2.2:
525
526 - reworked the vertical orientation of the Blocks Elements characters
527 in all faces to remove their overly large descenders, in order to fix
528 problems with e.g. terminal emulators (by David Lawrence Ramsey)
529 - copied bullet in Sans faces to Serif faces for consistency (by David
530 Lawrence Ramsey)
531 - added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David
532 Lawrence Ramsey)
533 - added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May)
534 - added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in
535 non-Condensed and U+1EE5 in Serif (by Tim May)
536 - fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye)
537 - added anchor points to some glyphs (by Denis Jacquerye)
538 - added U+20B5 (by Denis Jacquerye)
539 - added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191,
540 U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB -
541 U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3,
542 U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103,
543 U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218,
544 U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit)
545 - added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit)
546 - adjusted bearings of U+028B in Sans (by Gee Fung Sit)
547 - added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF,
548 U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC,
549 U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy
550 Meshcheryakov)
551 - replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A,
552 U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC,
553 U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A,
554 U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440,
555 U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy
556 Meshcheryakov)
557 - added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov)
558 - added U+212A and U+212B to the rest of the faces (by Lars Naesbye
559 Christensen)
560 - added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen)
561 - added and improved TrueType instructions and related settings (by
562 Keenan Pepper)
563 - completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E,
564 U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben
565 Laenen)
566 - added U+2070 and U+2074-U+2079 (by Mederic Boquien)
567
568 Changes from 2.0 to 2.1:
569
570 **# Be aware that names of some TTF files changed since version 2.0.#**
571
572 - added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42,
573 U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D,
574 U+1E7E, U+1E7F (by Tim May)
575 - fixed bug where GNOME applications used Mono Bold Oblique instead of
576 Mono Oblique (by Keenan Pepper)
577 - added and improved TrueType instructions and related settings (by
578 Keenan Pepper)
579 - added U+1E41, U+1E57, U+1E61 (by Sander Vesik)
580 - added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328,
581 U+032B, U+0333, U+033C (by Denis Jacquerye)
582 - adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C -
583 U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B,
584 U+033E, U+033F (by Denis Jacquerye)
585 - fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics
586 (by Denis Jacquerye)
587 - fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by
588 Denis Jacquerye)
589 - added anchor points to some glyphs (by Denis Jacquerye)
590 - dropped "-Roman" from font names - affects both internal TTF names and
591 names of generated files (by Stepan Roh)
592 - attempt to fix bug Vertical spacing too big for Mono by exchanging
593 LineGap and OS2TypoLinegap values (proofed by Stefan Rank)
594 - added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB
595 in Mono (by Ben Laenen)
596 - added the per ten thousand sign U+2031 (by Mederic Boquien)
597 - added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David
598 Lawrence Ramsey)
599 - new logo (by Gee Fung Sit)
600 - added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203,
601 U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit)
602
603 Changes from 1.15 to 2.0:
604
605 - "Italized" basic glyphs in all Serif Oblique and their Condensed faces
606 (by David Jez)
607 - added and improved TrueType instructions and related settings (by Keenan
608 Pepper)
609 - added anchor points to some glyphs (by Denis Jacquerye)
610 - many new spacing and combining accents (by Denis Jacquerye)
611 - smart substitutions for transforming i and j to dottless form and for
612 using uppercase diacritics (by Denis Jacquerye)
613 - fixed remaining erroneously slanted characters in Serif Oblique faces (by
614 David Lawrence Ramsey)
615 - copied bullet in Sans faces to Sans Oblique faces for consistency (by
616 David Lawrence Ramsey)
617 - added U+203C and U+2047-U+2049 (by David Lawrence Ramsey)
618 - added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez)
619 - fixed bug LTR glyphs behaving like RTL (by Ben Laenen)
620 - fixed wrong glyph directions (by David Jez)
621 - fixed repositioned accents in Condensed faces (by David Jez)
622
623 Changes from 1.14 to 1.15:
624
625 - added and improved TrueType instructions and related settings (by Keenan
626 Pepper)
627 - fixed U+2302, U+2319 (by David Lawrence Ramsey)
628 - fixed yet another monospace bug (by Stepan Roh)
629 - fixed potential "too big ascender/descender" bug (by Stepan Roh)
630 - fixed U+026E and U+028E (by Denis Jacquerye)
631 - added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C,
632 U+0321, U+0322 (by Denis Jacquerye)
633 - added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey)
634 - added U+2311, U+237D and U+2638 (by David Lawrence Ramsey)
635 - added U+01CD - U+01D4 (by Denis Jacquerye)
636 - fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono
637 Bold (by David Jez)
638 - added U+0490, U+0491 (by Eugeniy Meshcheryakov)
639 - added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov)
640 - completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen)
641 - fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis
642 Jacquerye)
643
644 Changes from 1.13 to 1.14:
645
646 - fixed bug where Mono faces were not recognized as fixed pitch in Windows
647 by correcting Venda glyphs (by David Jez)
648 - added and improved TrueType instructions (by Keenan Pepper)
649 - added 6 Uzbekian glyphs (by Mashrab Kuvatov)
650 - added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by
651 Ben Laenen)
652 - added IPA and related superscript glyphs (by Denis Jacquerye)
653 - fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh)
654 - added U+2302, U+2310, U+2319 (by David Lawrence Ramsey)
655 - fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey)
656 - added 29 glyphs from Block Elements (by David Lawrence Ramsey)
657
658 Changes from 1.12 to 1.13:
659
660 - removed all stems (PS hints) (requested by David Jez)
661 - added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik)
662 - added 10 Venda glyphs (by Dwayne Bailey)
663 - fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh)
664 - updated 'missing' glyph U+FFFD (by David Jez)
665 - set TTF flag fsType to 'Installable Embedding' (= unrestricted usage)
666 (idea by C. Tiffany)
667
668 Changes from 1.11 to 1.12:
669
670 - added long s (by James Cloos)
671 - prettier comma accent in gcommaaccent (by David Jez)
672 - added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar,
673 afii57929 (by David Jez)
674 - changed Iogonek, iogonek, IJ, ij to look better (by David Jez)
675 - glyph uni0237 renamed to dotlessj (requested by David Jez)
676 - fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by
677 David Jez)
678 - added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez)
679 - fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez)
680 - extra kerning for F (by Sander Vesik)
681 - added 'missing' glyph U+FFFD (by David Jez)
682
683 Changes from 1.10 to 1.11:
684
685 - kerning updates (by Sander Vesik)
686 - added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts
687 by Adrian Schroeter, SuSE AG)
688 - added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent,
689 Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent,
690 rcommaaccent (by Stepan Roh)
691
692 Changes from 1.9 to 1.10:
693
694 - added U+022E, U+022F (by Sander Vesik)
695 - kerning updates for DejaVu Sans (by Sander Vesik)
696 - fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov)
697 - fixed ligatures bug in Mono (by Stepan Roh)
698
699 Changes from 1.8 to 1.9:
700
701 - integrated Arev Cyrillics (by Danilo Segan)
702 - added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik)
703
704 Changes from 1.7 to 1.8:
705
706 - fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh)
707
708 Changes from 1.6 to 1.7:
709
710 - added automatically generated Condensed typefaces (by Stepan Roh)
711
712 Changes from 1.5 to 1.6:
713
714 - monospace bug fixed (by Stepan Roh)
715 - incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer
716 fixed (by Stepan Roh)
717 - added automatically generated Oblique version of Serif typefaces (by
718 Stepan Roh)
719 - corrected cyrillic D and d (by Danilo Segan and David Jez)
720 - fixed accents position in Oblique version of Serif typefaces (by Danilo
721 Segan and Sander Vesik)
722 - fixed incorrect computation of OS2Win# fields (by Stepan Roh)
723 - added visiblespace U+2423 (by David Jez)
724 - fixed 'line height' bug by fixing ascender and descender values (by David
725 Jez and Stepan Roh)
726 - fixed part of 'worse than Vera' bug (by Peter Cernak)
727 - smaller comma accent U+0326 (by David Jez)
728
729 Changes from 1.4 to 1.5:
730
731 - added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by
732 Danilo Segan)
733 - fixed bugs in some Cyrillic characters, some of them reported by Sander
734 Vesik (by Danilo Segan)
735 - added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D,
736 U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik)
737 - added Romanian characters (by Misu Moldovan)
738 - added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117,
739 U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C,
740 U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D,
741 U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James
742 Crippen)
743 - added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh)
744
745 Changes from 1.3 to 1.4:
746
747 - added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute,
748 nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan
749 Roh)
750
751 Changes from 1.2 to 1.3:
752
753 - added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo
754 Segan from his BePa fonts)
755
756 Changes from 1.1 to 1.2:
757
758 - added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex,
759 Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave
760 (from The Olwen Font Family 0.2 by Dafydd Harries)
761
762 Changes from 1.0 to 1.1:
763
764 - added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak)
765
766 Changes from 0.9.4 to 1.0:
767
768 - none, just changed version and updated README
769
770 Changes from 0.9.3 to 0.9.4:
771
772 - fixed TTF generation (kerning tables were missing)
773
774 Changes from 0.9.2 to 0.9.3:
775
776 - kerning of added characters
777 - proper caron shape for dcaron in Mono (by Ondrej Koala Vacha)
778 - minor visual changes
779
780 Changes from 0.9.1 to 0.9.2:
781
782 - internal bugged version
783
784 Changes from 0.9 to 0.9.1:
785
786 - proper caron shape for dcaron and tcaron
787 - minor visual changes
788
789 $Id: NEWS 1587 2007-02-18 16:20:38Z ben_laenen $
@@ -0,0 +1,59
1 DejaVu fonts 2.15 (c)2004-2007 DejaVu fonts team
2 -----------------------------------------------
3
4 The DejaVu fonts are a font family based on the Bitstream Vera Fonts
5 (http://gnome.org/fonts/). Its purpose is to provide a wider range of
6 characters (see status.txt for more information) while maintaining the
7 original look and feel.
8
9 DejaVu fonts are based on Bitstream Vera fonts version 1.10.
10
11 Available fonts (Sans = sans serif, Mono = monospaced):
12
13 DejaVu Sans Mono
14 DejaVu Sans Mono Bold
15 DejaVu Sans Mono Bold Oblique
16 DejaVu Sans Mono Oblique
17 DejaVu Sans
18 DejaVu Sans Bold
19 DejaVu Sans Bold Oblique
20 DejaVu Sans Oblique
21 DejaVu Sans ExtraLight (experimental)
22 DejaVu Serif
23 DejaVu Serif Bold
24 DejaVu Serif Bold Oblique (experimental)
25 DejaVu Serif Oblique (experimental)
26 DejaVu Sans Condensed (experimental)
27 DejaVu Sans Condensed Bold (experimental)
28 DejaVu Sans Condensed Bold Oblique (experimental)
29 DejaVu Sans Condensed Oblique (experimental)
30 DejaVu Serif Condensed (experimental)
31 DejaVu Serif Condensed Bold (experimental)
32 DejaVu Serif Condensed Bold Oblique (experimental)
33 DejaVu Serif Condensed Oblique (experimental)
34
35 All fonts are also available as derivative called DejaVu LGC with support
36 only for Latin, Greek and Cyrillic scripts.
37
38 For license information see LICENSE. What's new is described in NEWS. Known
39 bugs are in BUGS. All authors are mentioned in AUTHORS.
40
41 Fonts are published in source form as SFD files (Spline Font Database from
42 FontForge - http://fontforge.sf.net/) and in compiled form as TTF files
43 (TrueType fonts).
44
45 For more information go to http://dejavu.sourceforge.net/.
46
47 Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah:
48 ---------------------------
49 U+01ba, U+01bf, U+01f7, U+021c, U+021d, U+0220, U+0222, U+0223,
50 U+02b9, U+02ba, U+02bd, U+02c2, U+02c3, U+02c4, U+02c5, U+02d4,
51 U+02d5, U+02d7, U+02ec, U+02ed, U+02ee, U+0346-034e, U+0360, U+0362,
52 U+03e2-03ef, U+0460-0463, U+0466-0486, U+0488-0489, U+04a8-04a9,
53 U+0500-050f, U+2055-205e, U+20B0, U+20B2-20B3, U+2102, U+210D, U+210f,
54 U+2111, U+2113, U+2115, U+2118-U+211A, U+211c-211d, U+2124,U+2135,
55 U+213C-U+2140, U+2295-2298, U+2308-230b, U+26A2-U+26B1, U+2701-2704,
56 U+2706-2709, U+270c-274b, U+2758-275a, U+2761-2775, U+2780-2794,
57 U+2798-27af, U+27b1-27be, U+fb05-fb06
58
59 $Id: README 1587 2007-02-18 16:20:38Z ben_laenen $
@@ -0,0 +1,187
1 This is the language coverage file for DejaVu fonts
2 ($Id: langcover.txt 1586 2007-02-18 16:07:32Z ben_laenen $)
3
4 Sans Serif Sans Mono
5 aa Afar 100% (62/62) 100% (62/62) 100% (62/62)
6 ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90)
7 af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69)
8 am Amharic (0/264) (0/264) (0/264)
9 ar Arabic 100% (125/125) (0/125) (0/125)
10 ast Asturian 100% (72/72) 100% (72/72) 100% (72/72)
11 ava Avaric 100% (67/67) 100% (67/67) 100% (67/67)
12 ay Aymara 100% (60/60) 100% (60/60) 100% (60/60)
13 az Azerbaijani 100% (148/148) 97% (144/148) 97% (144/148)
14 az-ir Azerbaijani in Iran 100% (130/130) (0/130) (0/130)
15 ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82)
16 bam Bambara 100% (60/60) 100% (60/60) 100% (60/60)
17 be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68)
18 bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60)
19 bh Bihari (Devanagari script) (0/68) (0/68) (0/68)
20 bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68)
21 bi Bislama 100% (58/58) 100% (58/58) 100% (58/58)
22 bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78)
23 bn Bengali (0/89) (0/89) (0/89)
24 bo Tibetan (0/95) (0/95) (0/95)
25 br Breton 100% (64/64) 100% (64/64) 100% (64/64)
26 bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62)
27 bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70)
28 ca Catalan 100% (74/74) 100% (74/74) 100% (74/74)
29 ce Chechen 100% (67/67) 100% (67/67) 100% (67/67)
30 ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58)
31 chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 97% (74/76)
32 chr Cherokee (0/85) (0/85) (0/85)
33 co Corsican 100% (84/84) 100% (84/84) 100% (84/84)
34 cs Czech 100% (82/82) 100% (82/82) 100% (82/82)
35 cu Old Church Slavonic 100% (103/103) 80% (83/103) 74% (77/103)
36 cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74)
37 cy Welsh 100% (78/78) 100% (78/78) 100% (78/78)
38 da Danish 100% (70/70) 100% (70/70) 100% (70/70)
39 de German 100% (59/59) 100% (59/59) 100% (59/59)
40 dz Dzongkha (0/95) (0/95) (0/95)
41 el Greek 100% (69/69) 100% (69/69) 100% (69/69)
42 en English 100% (72/72) 100% (72/72) 100% (72/72)
43 eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64)
44 es Spanish 100% (66/66) 100% (66/66) 100% (66/66)
45 et Estonian 100% (64/64) 100% (64/64) 100% (64/64)
46 eu Basque 100% (56/56) 100% (56/56) 100% (56/56)
47 fa Persian 100% (129/129) (0/129) (0/129)
48 fi Finnish 100% (62/62) 100% (62/62) 100% (62/62)
49 fj Fijian 100% (52/52) 100% (52/52) 100% (52/52)
50 fo Faroese 100% (68/68) 100% (68/68) 100% (68/68)
51 fr French 100% (84/84) 100% (84/84) 100% (84/84)
52 ful Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62)
53 fur Friulian 100% (66/66) 100% (66/66) 100% (66/66)
54 fy Frisian 100% (75/75) 100% (75/75) 100% (75/75)
55 ga Irish 100% (80/80) 100% (80/80) 100% (80/80)
56 gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70)
57 gez Ethiopic (Geez) (0/218) (0/218) (0/218)
58 gl Galician 100% (66/66) 100% (66/66) 100% (66/66)
59 gn Guarani 100% (70/70) 100% (70/70) 100% (70/70)
60 gu Gujarati (0/78) (0/78) (0/78)
61 gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54)
62 ha Hausa 100% (60/60) 100% (60/60) 100% (60/60)
63 haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63)
64 he Hebrew 100% (27/27) (0/27) (0/27)
65 hi Hindi (Devanagari script) (0/68) (0/68) (0/68)
66 ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52)
67 hr Croatian 100% (62/62) 100% (62/62) 100% (62/62)
68 hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70)
69 hy Armenian 100% (77/77) (0/77) (0/77)
70 ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52)
71 ibo Igbo 100% (58/58) 100% (58/58) 100% (58/58)
72 id Indonesian 100% (54/54) 100% (54/54) 100% (54/54)
73 ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52)
74 ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68)
75 io Ido 100% (52/52) 100% (52/52) 100% (52/52)
76 is Icelandic 100% (70/70) 100% (70/70) 100% (70/70)
77 it Italian 100% (72/72) 100% (72/72) 100% (72/72)
78 iu Inuktitut 100% (161/161) (0/161) (0/161)
79 ja Japanese (0/6538) (0/6538) (0/6538)
80 ka Georgian (0/34) (0/34) (0/34)
81 kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78)
82 ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56)
83 kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77)
84 kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81)
85 km Khmer (0/70) (0/70) (0/70)
86 kn Kannada (0/80) (0/80) (0/80)
87 ko Korean (0/2443) (0/2443) (0/2443)
88 kok Kokani (Devanagari script) (0/68) (0/68) (0/68)
89 ks Kashmiri (Devanagari script) (0/68) (0/68) (0/68)
90 ku Kurdish 100% (64/64) 100% (64/64) 100% (64/64)
91 ku-ir Kurdish in Iran 100% (32/32) (0/32) (0/32)
92 kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66)
93 kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70)
94 kw Cornish 100% (64/64) 100% (64/64) 100% (64/64)
95 ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70)
96 la Latin 100% (68/68) 100% (68/68) 100% (68/68)
97 lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75)
98 lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67)
99 lo Lao 84% (55/65) (0/65) 43% (28/65)
100 lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70)
101 lv Latvian 100% (78/78) 100% (78/78) 100% (78/78)
102 mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56)
103 mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62)
104 mi Maori 100% (64/64) 100% (64/64) 100% (64/64)
105 mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42)
106 ml Malayalam (0/78) (0/78) (0/78)
107 mn Mongolian (0/130) (0/130) (0/130)
108 mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128)
109 mr Marathi (Devanagari script) (0/68) (0/68) (0/68)
110 mt Maltese 100% (72/72) 100% (72/72) 100% (72/72)
111 my Burmese (Myanmar) (0/48) (0/48) (0/48)
112 nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70)
113 nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59)
114 ne Nepali (Devanagari script) (0/68) (0/68) (0/68)
115 nl Dutch 100% (82/82) 100% (82/82) 100% (82/82)
116 nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76)
117 no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70)
118 ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54)
119 oc Occitan 100% (70/70) 100% (70/70) 100% (70/70)
120 om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52)
121 or Oriya (0/79) (0/79) (0/79)
122 os Ossetic 100% (66/66) 100% (66/66) 100% (66/66)
123 pa Punjabi (Gurumukhi script) (0/63) (0/63) (0/63)
124 pl Polish 100% (70/70) 100% (70/70) 100% (70/70)
125 ps-af Pashto in Afghanistan 83% (41/49) (0/49) (0/49)
126 ps-pk Pashto in Pakistan 81% (40/49) (0/49) (0/49)
127 pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82)
128 rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66)
129 ro Romanian 100% (62/62) 100% (62/62) 100% (62/62)
130 ru Russian 100% (66/66) 100% (66/66) 100% (66/66)
131 sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68)
132 sah Yakut 100% (76/76) 100% (76/76) 97% (74/76)
133 sco Scots 100% (56/56) 96% (54/56) 96% (54/56)
134 se North Sami 100% (66/66) 100% (66/66) 100% (66/66)
135 sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66)
136 sh Serbo-Croatian 100% (76/76) 100% (76/76) 100% (76/76)
137 si Sinhala (Sinhalese) (0/77) (0/77) (0/77)
138 sk Slovak 100% (86/86) 100% (86/86) 100% (86/86)
139 sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62)
140 sm Samoan 100% (53/53) 100% (53/53) 100% (53/53)
141 sma South Sami 100% (60/60) 100% (60/60) 100% (60/60)
142 smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60)
143 smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68)
144 sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80)
145 so Somali 100% (52/52) 100% (52/52) 100% (52/52)
146 sq Albanian 100% (56/56) 100% (56/56) 100% (56/56)
147 sr Serbian 100% (76/76) 100% (76/76) 100% (76/76)
148 sv Swedish 100% (68/68) 100% (68/68) 100% (68/68)
149 sw Swahili 100% (52/52) 100% (52/52) 100% (52/52)
150 syr Syriac (0/45) (0/45) (0/45)
151 ta Tamil (0/48) (0/48) (0/48)
152 te Telugu (0/80) (0/80) (0/80)
153 tg Tajik 100% (78/78) 100% (78/78) 97% (76/78)
154 th Thai 1% (1/87) (0/87) (0/87)
155 ti-er Eritrean Tigrinya (0/256) (0/256) (0/256)
156 ti-et Ethiopian Tigrinya (0/282) (0/282) (0/282)
157 tig Tigre (0/221) (0/221) (0/221)
158 tk Turkmen 100% (74/74) 100% (74/74) 97% (72/74)
159 tl Tagalog (0/19) (0/19) (0/19)
160 tn Tswana 100% (56/56) 100% (56/56) 100% (56/56)
161 to Tonga 100% (53/53) 100% (53/53) 100% (53/53)
162 tr Turkish 100% (70/70) 100% (70/70) 100% (70/70)
163 ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52)
164 tt Tatar 100% (76/76) 100% (76/76) 97% (74/76)
165 tw Twi 100% (73/73) 100% (73/73) 100% (73/73)
166 tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70)
167 ug Uighur 100% (125/125) (0/125) (0/125)
168 uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72)
169 ur Urdu 94% (137/145) (0/145) (0/145)
170 uz Uzbek 100% (68/68) 100% (68/68) 100% (68/68)
171 ven Venda 100% (62/62) 100% (62/62) 100% (62/62)
172 vi Vietnamese 100% (194/194) 77% (150/194) 62% (122/194)
173 vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54)
174 vot Votic 100% (62/62) 100% (62/62) 100% (62/62)
175 wa Walloon 100% (70/70) 100% (70/70) 100% (70/70)
176 wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76)
177 wo Wolof 100% (66/66) 100% (66/66) 100% (66/66)
178 xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52)
179 yap Yapese 100% (58/58) 100% (58/58) 100% (58/58)
180 yi Yiddish 100% (27/27) (0/27) (0/27)
181 yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119)
182 zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765)
183 zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213)
184 zh-mo Chinese in Macau (0/13063) (0/13063) (0/13063)
185 zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765)
186 zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063)
187 zu Zulu 100% (52/52) 100% (52/52) 100% (52/52)
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755, binary diff hidden
NO CONTENT: new file 100755, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100755
NO CONTENT: new file 100755
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,13 +1,14
1 1.00 Added view template functionality
1 1.00 Added view template functionality
2 1.10 Added Chinese support
2 1.10 Added Chinese support
3 1.11 Added Japanese support
3 1.11 Added Japanese support
4 1.12 Added Korean support
4 1.12 Added Korean support
5 1.13 Updated to fpdf.rb 1.53d.
5 1.13 Updated to fpdf.rb 1.53d.
6 Added makefont and fpdf_eps.
6 Added makefont and fpdf_eps.
7 Handle \n at the beginning of a string in MultiCell.
7 Handle \n at the beginning of a string in MultiCell.
8 Tried to fix clipping issue in MultiCell - still needs some work.
8 Tried to fix clipping issue in MultiCell - still needs some work.
9 1.14 2006-09-26
9 1.14 2006-09-26
10 * Added support for @options_for_rfpdf hash for configuration:
10 * Added support for @options_for_rfpdf hash for configuration:
11 * Added :filename option in this hash
11 * Added :filename option in this hash
12 If you're using the same settings for @options_for_rfpdf often, you might want to
12 If you're using the same settings for @options_for_rfpdf often, you might want to
13 put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
13 put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
14 1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler No newline at end of file
@@ -1,99 +1,45
1 FWIW - I am migrating my apps to Prawn and Prawnto
2
1 = RFPDF Template Plugin
3 = RFPDF Template Plugin
2
4
3 A template plugin allowing the inclusion of ERB-enabled RFPDF template files.
5 A template plugin allowing the inclusion of ERB-enabled RFPDF template files.
4
6
5 == Example .rb method Usage
7 ==
8 ==
9 == TCPDF Version (The New or UTF8 Version)
10 ==
11 ==
12
13 If you are using HTML, it is recommended you install:
6
14
7 In the controller, something like:
15 gem install -r htmlentities
8
16
9 def mypdf
17 TCPDF Documentation located at:
10 pdf = FPDF.new()
11
18
12 #
19 http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html
13 # Chinese
14 #
15 pdf.extend(PDF_Chinese)
16 pdf.AddPage
17 pdf.AddBig5Font
18 pdf.SetFont('Big5','',18)
19 pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
20 icBig5 = Iconv.new('Big5', 'UTF-8')
21 pdf.Write(15, icBig5.iconv("宋体 should be working"))
22 send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf"
23 end
24
20
25 == Example .rfdf Usage
21 Example of simple use in .rhtml:
26
22
27 In the controller, something like:
23 <%
24 @pdf = TCPDF.new()
25 @pdf.SetMargins(15, 27, 15);
26 @pdf.AddPage();
27 text_options = {:font => "freeserif"}
28 @pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"})
29 %><%=@pdf.Output()%>
28
30
29 def mypdf
31 See the following files for sample of useage:
30 @options_for_rfpdf ||= {}
31 @options_for_rfpdf[:file_name] = "nice_looking.pdf"
32 end
33
32
34 In the layout (make sure this is the only item in the layout):
33 test_unicode.rfpdf
35 <%= @content_for_layout %>
34 utf8test.txt
36
35 logo_example.png
37 In the view (mypdf.rfpdf):
38
36
39 <%
37 FPDF users can migrate to TCPDF by changing the following from:
40 pdf = FPDF.new()
38
41 #
39 pdf = FPDF.new
42 # Chinese
40
43 #
41 to:
44 pdf.extend(PDF_Chinese)
42
45 pdf.AddPage
43 pdf = TCPDF.new
46 pdf.AddBig5Font
44
47 pdf.SetFont('Big5','',18)
45 ENJOY! No newline at end of file
48 pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
49 icBig5 = Iconv.new('Big5', 'UTF-8')
50 pdf.Write(15, icBig5.iconv("宋体 should be working"))
51
52 #
53 # Japanese
54 #
55 pdf.extend(PDF_Japanese)
56 pdf.AddSJISFont();
57 pdf.AddPage();
58 pdf.SetFont('SJIS','',18);
59 pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB');
60 icSJIS = Iconv.new('SJIS', 'UTF-8')
61 pdf.Write(15, icSJIS.iconv("これはテキストである should be working"))
62
63 #
64 # Korean
65 #
66 pdf.extend(PDF_Korean)
67 pdf.AddUHCFont();
68 pdf.AddPage();
69 pdf.SetFont('UHC','',18);
70 pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.');
71 icUHC = Iconv.new('UHC', 'UTF-8')
72 pdf.Write(15, icUHC.iconv("이것은 원본 이다"))
73
74 #
75 # English
76 #
77 pdf.AddPage();
78 pdf.SetFont('Arial', '', 10)
79 pdf.Write(5, "should be working")
80 %>
81 <%= pdf.Output() %>
82
83
84 == Configuring
85
86 You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers.
87
88 Here are a few options:
89
90 :filename (default: action_name.pdf)
91 Filename of PDF to generate
92
93 Note: If you're using the same settings for @options_for_rfpdf often, you might want to
94 put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
95
96 == Problems
97
98 Layouts and partials are currently not supported; just need
99 to wrap the PDF generation differently.
@@ -1,9 +1,10
1 require 'rfpdf'
2
3 begin
1 begin
4 ActionView::Template::register_template_handler 'rfpdf', RFPDF::View
2 require('htmlentities')
5 rescue NameError
3 rescue LoadError
6 # Rails < 2.1
4 # This gem is not required - just nice to have.
7 RFPDF::View.backward_compatibility_mode = true
8 ActionView::Base::register_template_handler 'rfpdf', RFPDF::View
9 end
5 end
6 require('cgi')
7 require 'rfpdf'
8
9 Mime::Type.register "application/pdf", :pdf
10 ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base
@@ -1,346 +1,298
1 module RFPDF
1 module Core::RFPDF
2 COLOR_PALETTE = {
2 COLOR_PALETTE = {
3 :black => [0x00, 0x00, 0x00],
3 :black => [0x00, 0x00, 0x00],
4 :white => [0xff, 0xff, 0xff],
4 :white => [0xff, 0xff, 0xff],
5 }.freeze
5 }.freeze
6
6
7 # Draw a circle at (<tt>mid_x, mid_y</tt>) with <tt>radius</tt>.
8 #
9 # Options are:
10 # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
11 # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
12 # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
13 # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
14 # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
15 # * <tt>:fill_colorspace</tt> - Default value is :rgb or <tt>''</tt>.
16 #
17 # Example:
18 #
19 # draw_circle(x, y, radius, :border_color => ReportHelper::COLOR_PALETTE[:dark_blue], :border_width => 1)
20 #
21 def draw_circle(mid_x, mid_y, radius, options = {})
22 options[:border] ||= 1
23 options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
24 options[:border_width] ||= 0.5
25 options[:fill] ||= 1
26 options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
27 options[:fill_colorspace] ||= :rgb
28 SetLineWidth(options[:border_width])
29 set_draw_color_a(options[:border_color])
30 set_fill_color_a(options[:fill_color], options[:colorspace])
31 fd = ""
32 fd = "D" if options[:border] == 1
33 fd += "F" if options[:fill] == 1
34 Circle(mid_x, mid_y, radius, fd)
35 end
36
7 # Draw a line from (<tt>x1, y1</tt>) to (<tt>x2, y2</tt>).
37 # Draw a line from (<tt>x1, y1</tt>) to (<tt>x2, y2</tt>).
8 #
38 #
9 # Options are:
39 # Options are:
10 # * <tt>:line_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
40 # * <tt>:line_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
11 # * <tt>:line_width</tt> - Default value is <tt>0.5</tt>.
41 # * <tt>:line_width</tt> - Default value is <tt>0.5</tt>.
12 #
42 #
13 # Example:
43 # Example:
14 #
44 #
15 # draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1)
45 # draw_line(x1, y1, x1, y1+h, :line_color => ReportHelper::COLOR_PALETTE[:dark_blue], :line_width => 1)
16 #
46 #
17 def draw_line(x1, y1, x2, y2, options = {})
47 def draw_line(x1, y1, x2, y2, options = {})
18 options[:line_color] ||= COLOR_PALETTE[:black]
48 options[:line_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
19 options[:line_width] ||= 0.5
49 options[:line_width] ||= 0.5
20 set_draw_color(options[:line_color])
50 set_draw_color_a(options[:line_color])
21 SetLineWidth(options[:line_width])
51 SetLineWidth(options[:line_width])
22 Line(x1, y1, x2, y2)
52 Line(x1, y1, x2, y2)
23 end
53 end
24
54
25 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>).
55 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>).
26 #
56 #
27 # Options are:
57 # Options are:
28 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
58 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
29 # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
59 # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
30 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
60 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
61 # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
31 #
62 #
32 # Example:
63 # Example:
33 #
64 #
34 # draw_text(x, y, header_left, :font_size => 10)
65 # draw_text(x, y, header_left, :font_size => 10)
35 #
66 #
36 def draw_text(x, y, text, options = {})
67 def draw_text(x, y, text, options = {})
37 options[:font_color] ||= COLOR_PALETTE[:black]
68 options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
69 options[:font] ||= default_font
38 options[:font_size] ||= 10
70 options[:font_size] ||= 10
39 options[:font_style] ||= ''
71 options[:font_style] ||= ''
40 set_text_color(options[:font_color])
72 set_text_color_a(options[:font_color], options[:colorspace])
41 SetFont('Arial', options[:font_style], options[:font_size])
73 SetFont(options[:font], options[:font_style], options[:font_size])
42 SetXY(x, y)
74 SetXY(x, y)
43 Write(options[:font_size] + 4, text)
75 Write(options[:font_size] + 4, text)
44 end
76 end
45
77
46 # Draw a block of <tt>text</tt> at (<tt>x, y</tt>) bounded by <tt>left_margin</tt> and <tt>right_margin</tt>. Both
78 # Draw a block of <tt>text</tt> at (<tt>x, y</tt>) bounded by <tt>left_margin</tt> and <tt>right_margin_from_right_edge</tt>. Both
47 # margins are measured from their corresponding edge.
79 # margins are measured from their corresponding edge.
48 #
80 #
49 # Options are:
81 # Options are:
50 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
82 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
51 # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
83 # * <tt>:font_size</tt> - Default value is <tt>10</tt>.
52 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
84 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
85 # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
53 #
86 #
54 # Example:
87 # Example:
55 #
88 #
56 # draw_text_block(left_margin, 85, "question", left_margin, 280,
89 # draw_text_block(left_margin, 85, "question", left_margin, 280,
57 # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue],
90 # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue],
58 # :font_size => 12,
91 # :font_size => 12,
59 # :font_style => 'I')
92 # :font_style => 'I')
60 #
93 #
61 def draw_text_block(x, y, text, left_margin, right_margin, options = {})
94 def draw_text_block(x, y, text, left_margin, right_margin_from_right_edge, options = {})
62 options[:font_color] ||= COLOR_PALETTE[:black]
95 options[:font] ||= default_font
96 options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
63 options[:font_size] ||= 10
97 options[:font_size] ||= 10
64 options[:font_style] ||= ''
98 options[:font_style] ||= ''
65 set_text_color(options[:font_color])
99 set_text_color_a(options[:font_color], options[:colorspace])
66 SetFont('Arial', options[:font_style], options[:font_size])
100 SetFont(options[:font], options[:font_style], options[:font_size])
67 SetXY(x, y)
101 SetXY(x, y)
68 SetLeftMargin(left_margin)
102 SetLeftMargin(left_margin)
69 SetRightMargin(right_margin)
103 SetRightMargin(right_margin_from_right_edge)
70 Write(options[:font_size] + 4, text)
104 Write(options[:font_size] + 4, text)
71 SetMargins(0,0,0)
105 SetMargins(0,0,0)
72 end
106 end
73
107
74 # Draw a box at (<tt>x, y</tt>), <tt>w</tt> wide and <tt>h</tt> high.
108 # Draw a box at (<tt>x, y</tt>), <tt>w</tt> wide and <tt>h</tt> high.
75 #
109 #
76 # Options are:
110 # Options are:
77 # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
111 # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>1</tt>.
78 # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
112 # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
79 # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
113 # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
80 # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
114 # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
81 # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
115 # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
116 # * <tt>:fill_colorspace</tt> - Default value is :rgb or <tt>''</tt>.
82 #
117 #
83 # Example:
118 # Example:
84 #
119 #
85 # draw_box(x, y - 1, 38, 22)
120 # draw_box(x, y - 1, 38, 22)
86 #
121 #
87 def draw_box(x, y, w, h, options = {})
122 def draw_box(x, y, w, h, options = {})
88 options[:border] ||= 1
123 options[:border] ||= 1
89 options[:border_color] ||= COLOR_PALETTE[:black]
124 options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
90 options[:border_width] ||= 0.5
125 options[:border_width] ||= 0.5
91 options[:fill] ||= 1
126 options[:fill] ||= 1
92 options[:fill_color] ||= COLOR_PALETTE[:white]
127 options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
128 options[:fill_colorspace] ||= :rgb
93 SetLineWidth(options[:border_width])
129 SetLineWidth(options[:border_width])
94 set_draw_color(options[:border_color])
130 set_draw_color_a(options[:border_color])
95 set_fill_color(options[:fill_color])
131 set_fill_color_a(options[:fill_color], options[:fill_colorspace])
96 fd = ""
132 fd = ""
97 fd = "D" if options[:border] == 1
133 fd = "D" if options[:border] == 1
98 fd += "F" if options[:fill] == 1
134 fd += "F" if options[:fill] == 1
99 Rect(x, y, w, h, fd)
135 Rect(x, y, w, h, fd)
100 end
136 end
101
137
102 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) in a box <tt>w</tt> wide and <tt>h</tt> high.
138 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) in a box <tt>w</tt> wide and <tt>h</tt> high.
103 #
139 #
104 # Options are:
140 # Options are:
105 # * <tt>:align</tt> - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is <tt>'C'</tt>.
141 # * <tt>:align</tt> - Vertical alignment 'C' = center, 'L' = left, 'R' = right. Default value is <tt>'C'</tt>.
106 # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>0</tt>.
142 # * <tt>:border</tt> - Draw a border, 0 = no, 1 = yes? Default value is <tt>0</tt>.
107 # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
143 # * <tt>:border_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
108 # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
144 # * <tt>:border_width</tt> - Default value is <tt>0.5</tt>.
109 # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
145 # * <tt>:fill</tt> - Fill the box, 0 = no, 1 = yes? Default value is <tt>1</tt>.
110 # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
146 # * <tt>:fill_color</tt> - Default value is nothing or <tt>COLOR_PALETTE[:white]</tt>.
111 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
147 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
112 # * <tt>:font_size</tt> - Default value is nothing or <tt>8</tt>.
148 # * <tt>:font_size</tt> - Default value is nothing or <tt>8</tt>.
113 # * <tt>:font_style</tt> - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing <tt>''</tt>.
149 # * <tt>:font_style</tt> - 'B' = bold, 'I' = italic, 'U' = underline. Default value is nothing <tt>''</tt>.
114 # * <tt>:padding</tt> - Default value is nothing or <tt>2</tt>.
150 # * <tt>:padding</tt> - Default value is nothing or <tt>2</tt>.
151 # * <tt>:x_padding</tt> - Default value is nothing.
115 # * <tt>:valign</tt> - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or <tt>'M'</tt>.
152 # * <tt>:valign</tt> - 'M' = middle, 'T' = top, 'B' = bottom. Default value is nothing or <tt>'M'</tt>.
153 # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
116 #
154 #
117 # Example:
155 # Example:
118 #
156 #
119 # draw_text_box(x, y - 1, 38, 22,
157 # draw_text_box(x, y - 1, 38, 22,
120 # "your_score_title",
158 # "your_score_title",
121 # :fill => 0,
159 # :fill => 0,
122 # :font_color => ReportHelper::COLOR_PALETTE[:blue],
160 # :font_color => ReportHelper::COLOR_PALETTE[:blue],
123 # :font_line_spacing => 0,
161 # :font_line_spacing => 0,
124 # :font_style => "B",
162 # :font_style => "B",
125 # :valign => "M")
163 # :valign => "M")
126 #
164 #
127 def draw_text_box(x, y, w, h, text, options = {})
165 def draw_text_box(x, y, w, h, text, options = {})
128 options[:align] ||= 'C'
166 options[:align] ||= 'C'
129 options[:border] ||= 0
167 options[:border] ||= 0
130 options[:border_color] ||= COLOR_PALETTE[:black]
168 options[:border_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
131 options[:border_width] ||= 0.5
169 options[:border_width] ||= 0.5
132 options[:fill] ||= 1
170 options[:fill] ||= 1
133 options[:fill_color] ||= COLOR_PALETTE[:white]
171 options[:fill_color] ||= Core::RFPDF::COLOR_PALETTE[:white]
134 options[:font_color] ||= COLOR_PALETTE[:black]
172 options[:font] ||= default_font
173 options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
135 options[:font_size] ||= 8
174 options[:font_size] ||= 8
136 options[:font_line_spacing] ||= options[:font_size] * 0.3
175 options[:font_line_spacing] ||= options[:font_size] * 0.3
137 options[:font_style] ||= ''
176 options[:font_style] ||= ''
138 options[:padding] ||= 2
177 options[:padding] ||= 2
178 options[:x_padding] ||= 0
139 options[:valign] ||= "M"
179 options[:valign] ||= "M"
140 if options[:fill] == 1 or options[:border] == 1
180 if options[:fill] == 1 or options[:border] == 1
141 draw_box(x, y, w, h, options)
181 draw_box(x, y, w, h, options)
142 end
182 end
143 SetMargins(0,0,0)
183 SetMargins(0,0,0)
144 set_text_color(options[:font_color])
184 set_text_color_a(options[:font_color], options[:colorspace])
145 font_size = options[:font_size]
185 font_size = options[:font_size]
146 SetFont('Arial', options[:font_style], font_size)
186 SetFont(options[:font], options[:font_style], font_size)
147 font_size += options[:font_line_spacing]
187 font_size += options[:font_line_spacing]
148 case options[:valign]
188 case options[:valign]
149 when "B"
189 when "B", "bottom"
150 y -= options[:padding]
190 y -= options[:padding]
151 text = "\n" + text if text["\n"].nil?
191 when "T", "top"
152 when "T"
153 y += options[:padding]
192 y += options[:padding]
154 end
193 end
194 case options[:align]
195 when "L", "left"
196 x += options[:x_padding]
197 w -= options[:x_padding]
198 w -= options[:x_padding]
199 when "R", "right"
200 x += options[:x_padding]
201 w -= options[:x_padding]
202 w -= options[:x_padding]
203 end
155 SetXY(x, y)
204 SetXY(x, y)
156 if GetStringWidth(text) > w or not text["\n"].nil? or options[:valign] == "T"
205 if GetStringWidth(text) < w or not text["\n"].nil? and (options[:valign] == "T" || options[:valign] == "top")
157 font_size += options[:font_size] * 0.1
206 text = text + "\n"
158 #TODO 2006-07-21 Level=1 - this is assuming a 2 line text
207 end
159 SetXY(x, y + ((h - (font_size * 2)) / 2)) if options[:valign] == "M"
208 if GetStringWidth(text) > w or not text["\n"].nil? or (options[:valign] == "B" || options[:valign] == "bottom")
209 font_size += options[:font_size] * 0.1
210 # TODO 2006-07-21 Level=1 - this is assuming a 2 line text
211 SetXY(x, y + ((h - (font_size * 2)) / 2)) if (options[:valign] == "M" || options[:valign] == "middle")
160 MultiCell(w, font_size, text, 0, options[:align])
212 MultiCell(w, font_size, text, 0, options[:align])
161 else
213 else
162 Cell(w, h, text, 0, 0, options[:align])
214 Cell(w, h, text, 0, 0, options[:align])
163 end
215 end
164 end
216 end
165
217
166 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) as a title.
218 # Draw a string of <tt>text</tt> at (<tt>x, y</tt>) as a title.
167 #
219 #
168 # Options are:
220 # Options are:
169 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
221 # * <tt>:font_color</tt> - Default value is <tt>COLOR_PALETTE[:black]</tt>.
170 # * <tt>:font_size</tt> - Default value is <tt>18</tt>.
222 # * <tt>:font_size</tt> - Default value is <tt>18</tt>.
171 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
223 # * <tt>:font_style</tt> - Default value is nothing or <tt>''</tt>.
224 # * <tt>:colorspace</tt> - Default value is :rgb or <tt>''</tt>.
172 #
225 #
173 # Example:
226 # Example:
174 #
227 #
175 # draw_title(left_margin, 60,
228 # draw_title(left_margin, 60,
176 # "title:",
229 # "title:",
177 # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue])
230 # :font_color => ReportHelper::COLOR_PALETTE[:dark_blue])
178 #
231 #
179 def draw_title(x, y, title, options = {})
232 def draw_title(x, y, title, options = {})
180 options[:font_color] ||= COLOR_PALETTE[:black]
233 options[:font_color] ||= Core::RFPDF::COLOR_PALETTE[:black]
234 options[:font] ||= default_font
181 options[:font_size] ||= 18
235 options[:font_size] ||= 18
182 options[:font_style] ||= ''
236 options[:font_style] ||= ''
183 set_text_color(options[:font_color])
237 set_text_color_a(options[:font_color], options[:colorspace])
184 SetFont('Arial', options[:font_style], options[:font_size])
238 SetFont(options[:font], options[:font_style], options[:font_size])
185 SetXY(x, y)
239 SetXY(x, y)
186 Write(options[:font_size] + 2, title)
240 Write(options[:font_size] + 2, title)
187 end
241 end
188
242
189 # Set the draw color. Default value is <tt>COLOR_PALETTE[:black]</tt>.
243 # Set the draw color. Default value is <tt>COLOR_PALETTE[:black]</tt>.
190 #
244 #
191 # Example:
245 # Example:
192 #
246 #
193 # set_draw_color(ReportHelper::COLOR_PALETTE[:dark_blue])
247 # set_draw_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
194 #
248 #
195 def set_draw_color(color = COLOR_PALETTE[:black])
249 def set_draw_color_a(color = Core::RFPDF::COLOR_PALETTE[:black])
196 SetDrawColor(color[0], color[1], color[2])
250 SetDrawColor(color[0], color[1], color[2])
197 end
251 end
198
252
199 # Set the fill color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
253 # Set the fill color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
200 #
254 #
201 # Example:
255 # Example:
202 #
256 #
203 # set_fill_color(ReportHelper::COLOR_PALETTE[:dark_blue])
257 # set_fill_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
204 #
258 #
205 def set_fill_color(color = COLOR_PALETTE[:white])
259 def set_fill_color_a(color = Core::RFPDF::COLOR_PALETTE[:white], colorspace = :rgb)
206 SetFillColor(color[0], color[1], color[2])
260 if colorspace == :cmyk
261 SetCmykFillColor(color[0], color[1], color[2], color[3])
262 else
263 SetFillColor(color[0], color[1], color[2])
264 end
207 end
265 end
208
266
209 # Set the text color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
267 # Set the text color. Default value is <tt>COLOR_PALETTE[:white]</tt>.
210 #
268 #
211 # Example:
269 # Example:
212 #
270 #
213 # set_text_color(ReportHelper::COLOR_PALETTE[:dark_blue])
271 # set_text_color_a(ReportHelper::COLOR_PALETTE[:dark_blue])
214 #
272 #
215 def set_text_color(color = COLOR_PALETTE[:black])
273 def set_text_color_a(color = Core::RFPDF::COLOR_PALETTE[:black], colorspace = :rgb)
216 SetTextColor(color[0], color[1], color[2])
274 if colorspace == :cmyk
275 SetCmykTextColor(color[0], color[1], color[2], color[3])
276 else
277 SetTextColor(color[0], color[1], color[2])
278 end
217 end
279 end
218
280
219 # Write a string containing html characters. Default value is <tt>COLOR_PALETTE[:white]</tt>.
281 # Write a string containing html characters. Default value is <tt>COLOR_PALETTE[:white]</tt>.
220 #
282 #
221 # Options are:
283 # Options are:
222 # * <tt>:height</tt> - Line height. Default value is <tt>20</tt>.
284 # * <tt>:height</tt> - Line height. Default value is <tt>20</tt>.
223 #
285 #
224 # Example:
286 # Example:
225 #
287 #
226 # write_html(html, :height => 12)
288 # write_html_with_options(html, :height => 12)
227 #
289 #
228 def write_html(html, options = {})
290 #FIXME 2007-08-07 (EJM) Level=0 - This needs to call the TCPDF version.
291 def write_html_with_options(html, options = {})
292 options[:fill] ||= 0
229 options[:height] ||= 20
293 options[:height] ||= 20
230 #HTML parser
294 options[:new_line_after] ||= false
231 @href = nil
295 write_html(html, options[:new_line_after], options[:fill], options[:height])
232 @style = {}
296 return
233 html.gsub!("\n",' ')
234 re = %r{ ( <!--.*?--> |
235 < (?:
236 [^<>"] +
237 |
238 " (?: \\. | [^\\"]+ ) * "
239 ) *
240 >
241 ) }xm
242
243 html.split(re).each do |value|
244 if "<" == value[0,1]
245 #Tag
246 if (value[1, 1] == '/')
247 close_tag(value[2..-2], options)
248 else
249 tag = value[1..-2]
250 open_tag(tag, options)
251 end
252 else
253 #Text
254 if @href
255 put_link(@href,value)
256 else
257 Write(options[:height], value)
258 end
259 end
260 end
261 end
262
263 def open_tag(tag, options = {}) #:nodoc:
264 #Opening tag
265 tag = tag.to_s.upcase
266 set_style(tag, true) if tag == 'B' or tag == 'I' or tag == 'U'
267 @href = options['HREF'] if tag == 'A'
268 Ln(options[:height]) if tag == 'BR'
269 end
270
271 def close_tag(tag, options = {}) #:nodoc:
272 #Closing tag
273 tag = tag.to_s.upcase
274 set_style(tag, false) if tag == 'B' or tag == 'I' or tag == 'U'
275 @href = '' if $tag == 'A'
276 end
277
278 def set_style(tag, enable = true) #:nodoc:
279 #Modify style and select corresponding font
280 style = ""
281 @style[tag] = enable
282 ['B','I','U'].each do |s|
283 style += s if not @style[s].nil? and @style[s]
284 end
285 SetFont('', style)
286 end
287
288 def put_link(url, txt) #:nodoc:
289 #Put a hyperlink
290 SetTextColor(0,0,255)
291 set_style('U',true)
292 Write(5, txt, url)
293 set_style('U',false)
294 SetTextColor(0)
295 end
297 end
296 end
298 end No newline at end of file
297
298 # class FPDF
299 # alias_method :set_margins , :SetMargins
300 # alias_method :set_left_margin , :SetLeftMargin
301 # alias_method :set_top_margin , :SetTopMargin
302 # alias_method :set_right_margin , :SetRightMargin
303 # alias_method :set_auto_pagebreak , :SetAutoPageBreak
304 # alias_method :set_display_mode , :SetDisplayMode
305 # alias_method :set_compression , :SetCompression
306 # alias_method :set_title , :SetTitle
307 # alias_method :set_subject , :SetSubject
308 # alias_method :set_author , :SetAuthor
309 # alias_method :set_keywords , :SetKeywords
310 # alias_method :set_creator , :SetCreator
311 # alias_method :set_draw_color , :SetDrawColor
312 # alias_method :set_fill_color , :SetFillColor
313 # alias_method :set_text_color , :SetTextColor
314 # alias_method :set_line_width , :SetLineWidth
315 # alias_method :set_font , :SetFont
316 # alias_method :set_font_size , :SetFontSize
317 # alias_method :set_link , :SetLink
318 # alias_method :set_y , :SetY
319 # alias_method :set_xy , :SetXY
320 # alias_method :get_string_width , :GetStringWidth
321 # alias_method :get_x , :GetX
322 # alias_method :set_x , :SetX
323 # alias_method :get_y , :GetY
324 # alias_method :accept_pagev_break , :AcceptPageBreak
325 # alias_method :add_font , :AddFont
326 # alias_method :add_link , :AddLink
327 # alias_method :add_page , :AddPage
328 # alias_method :alias_nb_pages , :AliasNbPages
329 # alias_method :cell , :Cell
330 # alias_method :close , :Close
331 # alias_method :error , :Error
332 # alias_method :footer , :Footer
333 # alias_method :header , :Header
334 # alias_method :image , :Image
335 # alias_method :line , :Line
336 # alias_method :link , :Link
337 # alias_method :ln , :Ln
338 # alias_method :multi_cell , :MultiCell
339 # alias_method :open , :Open
340 # alias_method :Open , :open
341 # alias_method :output , :Output
342 # alias_method :page_no , :PageNo
343 # alias_method :rect , :Rect
344 # alias_method :text , :Text
345 # alias_method :write , :Write
346 # end
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb to vendor/plugins/rfpdf/lib/fpdf/bookmark.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/bookmark.rb to vendor/plugins/rfpdf/lib/fpdf/bookmark.rb
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/chinese.rb to vendor/plugins/rfpdf/lib/fpdf/chinese.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/chinese.rb to vendor/plugins/rfpdf/lib/fpdf/chinese.rb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb to vendor/plugins/rfpdf/lib/fpdf/fpdf_eps.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb to vendor/plugins/rfpdf/lib/fpdf/fpdf_eps.rb
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/japanese.rb to vendor/plugins/rfpdf/lib/fpdf/japanese.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/japanese.rb to vendor/plugins/rfpdf/lib/fpdf/japanese.rb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/korean.rb to vendor/plugins/rfpdf/lib/fpdf/korean.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/korean.rb to vendor/plugins/rfpdf/lib/fpdf/korean.rb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/makefont.rb to vendor/plugins/rfpdf/lib/fpdf/makefont.rb
NO CONTENT: file renamed from vendor/plugins/rfpdf/lib/rfpdf/makefont.rb to vendor/plugins/rfpdf/lib/fpdf/makefont.rb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now