From 16246cb0d733077d7c71fe1663a2af4340c6c953 Mon Sep 17 00:00:00 2001 From: Aaron Spike Date: Wed, 25 Apr 2007 00:53:02 +0000 Subject: Add doctormo's barcode extension. Patch 1681456. Still need to make it work with the make-chinery for installation and distribution. (bzr r2958) --- share/extensions/Barcode/Code39Ext.py | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 share/extensions/Barcode/Code39Ext.py (limited to 'share/extensions/Barcode/Code39Ext.py') diff --git a/share/extensions/Barcode/Code39Ext.py b/share/extensions/Barcode/Code39Ext.py new file mode 100644 index 000000000..d1682a641 --- /dev/null +++ b/share/extensions/Barcode/Code39Ext.py @@ -0,0 +1,62 @@ +''' +Copyright (C) 2007 Martin Owens + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import Code39 + +encode = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') + +map = {} + +i = 0 +for char in encode: + map[char] = i + i = i + 1 + +# Extended encoding maps for full ASCII Code93 +def getMap(array): + result = {} + y = 0 + for x in array: + result[chr(x)] = encode[y] + y = y + 1 + + return result; + +# MapA is eclectic, but B, C, D are all ASCII ranges +mapA = getMap([27,28,29,30,31,59,60,61,62,63,91,92,93,94,95,123,124,125,126,127,0,64,96,127,127,127]) # % +mapB = getMap(range(1, 26)) # $ +mapC = getMap(range(33, 58)) # / +mapD = getMap(range(97, 122)) # + + +class Object(Code39.Object): + def encode(self, text): + # We are only going to extend the Code39 barcodes + result = '' + for char in text: + if mapA.has_key(char): + char = '%' + mapA[char] + elif mapB.has_key(char): + char = '$' + mapB[char] + elif mapC.has_key(char): + char = '/' + mapC[char] + elif mapD.has_key(char): + char = '+' + mapD[char] + result = result + char + + return Code39.Object.encode(self, result); + -- cgit v1.2.3