diff vendor/plugins/rfpdf/lib/barcode/i25object.rb @ 441:cbce1fd3b1b7 redmine-1.2

Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author Chris Cannam
date Mon, 06 Jun 2011 14:24:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/rfpdf/lib/barcode/i25object.rb	Mon Jun 06 14:24:13 2011 +0100
@@ -0,0 +1,216 @@
+
+#============================================================+
+# File name   : i25aobject.rb
+# Begin       : 2002-07-31
+# Last Update : 2004-12-29
+# Author      : Karim Mribti [barcode@mribti.com]
+#             : Nicola Asuni [info@tecnick.com]
+# Version     : 0.0.8a  2001-04-01 (original code)
+# License     : GNU LGPL (Lesser General Public License) 2.1
+#               http://www.gnu.org/copyleft/lesser.txt
+# Source Code : http://www.mribti.com/barcode/
+#
+# Description : I25 Barcode Render Class for PHP using
+#               the GD graphics library.
+#               Interleaved 2 of 5 is a numeric only bar code
+#               with a optional check number.
+#
+# NOTE:
+# This version contains changes by Nicola Asuni:
+#  - porting to Ruby
+#  - code style and formatting
+#  - automatic php documentation in PhpDocumentor Style
+#    (www.phpdoc.org)
+#  - minor bug fixing
+#============================================================+
+
+#
+# I25 Barcode Render Class for PHP using the GD graphics library.<br<
+# Interleaved 2 of 5 is a numeric only bar code with a optional check number.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+
+#
+# I25 Barcode Render Class for PHP using the GD graphics library.<br<
+# Interleaved 2 of 5 is a numeric only bar code with a optional check number.
+# @author Karim Mribti, Nicola Asuni
+# @name BarcodeObject
+# @package com.tecnick.tcpdf
+# @@version 0.0.8a  2001-04-01 (original code)
+# @since 2001-03-25
+# @license http://www.gnu.org/copyleft/lesser.html LGPL
+#
+class I25Object extends BarcodeObject {
+	
+	#
+	# Class Constructor.
+	# @param int $Width Image width in pixels.
+	# @param int $Height Image height in pixels. 
+	# @param int $Style Barcode style.
+	# @param int $Value value to print on barcode.
+	#
+	def __construct($Width, $Height, $Style, $Value)
+		parent::__construct($Width, $Height, $Style);
+		@mValue = $Value;
+		@mCharSet = array (
+		# 0# "00110",
+		# 1# "10001",
+		# 2# "01001",
+		# 3# "11000",
+		# 4# "00101",
+		# 5# "10100",
+		# 6# "01100",
+		# 7# "00011",
+		# 8# "10010",
+		# 9# "01010"
+		);
+	end
+	
+	#
+	# Returns barcode size.
+	# @param int $xres Horizontal resolution.
+	# @return barcode size.
+	# @access private
+	#
+	def GetSize($xres)
+		$len = @mValue.length;
+
+		if ($len == 0)  {
+			@mError = "Null value";
+			return false;
+		end
+
+		for ($i=0;$i<$len;$i++)
+			if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
+				@mError = "I25 is numeric only";
+				return false;
+			end
+		end
+
+		if (($len%2) != 0)
+			@mError = "The length of barcode value must be even";
+			return false;
+		end
+		$StartSize = BCD_I25_NARROW_BAR# 4 # $xres;
+		$StopSize  = BCD_I25_WIDE_BAR# $xres + 2# BCD_I25_NARROW_BAR# $xres;
+		$cPos = 0;
+		$sPos = 0;
+		do {
+			$c1    = @mValue[$cPos];
+			$c2    = @mValue[$cPos+1];
+			$cset1 = @mCharSet[$c1];
+			$cset2 = @mCharSet[$c2];
+
+			for ($i=0;$i<5;$i++)
+				$type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$sPos += ($type1 + $type2);
+			end
+			$cPos+=2;
+		end while ($cPos<$len);
+
+		return $sPos + $StartSize + $StopSize;
+	end
+
+	#
+	# Draws the start code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStart($DrawPos, $yPos, $ySize, $xres)
+		# Start code is "0000"#
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		return $DrawPos;
+	end
+	
+	#
+	# Draws the stop code.
+	# @param int $DrawPos Drawing position.
+	# @param int $yPos Vertical position.
+	# @param int $ySize Vertical size.
+	# @param int $xres Horizontal resolution.
+	# @return int drawing position.
+	# @access private
+	#
+	def DrawStop($DrawPos, $yPos, $ySize, $xres)
+		# Stop code is "100"#
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_WIDE_BAR# $xres , $ySize);
+		$DrawPos += BCD_I25_WIDE_BAR # $xres;
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		@DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
+		$DrawPos += BCD_I25_NARROW_BAR # $xres;
+		return $DrawPos;
+	end
+
+	#
+	# Draws the barcode object.
+	# @param int $xres Horizontal resolution.
+	# @return bool true in case of success.
+	#
+	def DrawObject($xres)
+		$len = @mValue.length;
+
+		if (($size = GetSize($xres))==0)
+			return false;
+		end
+
+		$cPos  = 0;
+
+		if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
+		else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
+
+		if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
+		elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
+		else $sPos = 0;
+
+		if (@mStyle & BCS_DRAW_TEXT)
+			if (@mStyle & BCS_STRETCH_TEXT)
+				# Stretch#
+				for ($i=0;$i<$len;$i++)
+					@DrawChar(@mFont, $sPos+BCD_I25_NARROW_BAR*4*$xres+($size/$len)*$i,
+					$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET , @mValue[$i]);
+				end
+			endelse# Center#
+			$text_width = GetFontWidth(@mFont) * @mValue.length;
+			@DrawText(@mFont, $sPos+(($size-$text_width)/2)+(BCD_I25_NARROW_BAR*4*$xres),
+			$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
+			end
+		end
+
+		$sPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
+		do {
+			$c1 = @mValue[$cPos];
+			$c2 = @mValue[$cPos+1];
+			$cset1 = @mCharSet[$c1];
+			$cset2 = @mCharSet[$c2];
+
+			for ($i=0;$i<5;$i++)
+				$type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
+				$type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
+				@DrawSingleBar($sPos, BCD_DEFAULT_MAR_Y1, $type1 , $ysize);
+				$sPos += ($type1 + $type2);
+			end
+			$cPos+=2;
+		end while ($cPos<$len);
+		$sPos =  @DrawStop($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
+		return true;
+	end
+}
+
+#============================================================+
+# END OF FILE
+#============================================================+