RM4CC.py revision 040e298be5b23e77e33309d65449072183c82d5c
334d4b1f1d568975853cc747597ce977aa8aa1ddKris'''
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisCopyright (C) 2007 Martin Owens
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisThis program is free software; you can redistribute it and/or modify
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisit under the terms of the GNU General Public License as published by
334d4b1f1d568975853cc747597ce977aa8aa1ddKristhe Free Software Foundation; either version 2 of the License, or
334d4b1f1d568975853cc747597ce977aa8aa1ddKris(at your option) any later version.
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisThis program is distributed in the hope that it will be useful,
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisbut WITHOUT ANY WARRANTY; without even the implied warranty of
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoGNU General Public License for more details.
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoYou should have received a copy of the GNU General Public License
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoalong with this program; if not, write to the Free Software
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico'''
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKrisfrom Base import Barcode
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKrismap = {
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '(' : '25',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris ')' : '3',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '0' : '05053535',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '1' : '05152535',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '2' : '05153525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '3' : '15052535',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '4' : '15053525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '5' : '15152525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris '6' : '05251535',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico '7' : '05350535',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico '8' : '05351525',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico '9' : '15250535',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'A' : '15251525',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'B' : '15350525',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'C' : '05253515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'D' : '05352515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'E' : '05353505',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'F' : '15252515',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'G' : '15253505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'H' : '15352505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'I' : '25051535',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'J' : '25150535',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'K' : '25151525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'L' : '35050535',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'M' : '35051525',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'N' : '35150525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'O' : '25053525',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'P' : '25152515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'Q' : '25153505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'R' : '35052515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'S' : '35053505',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'T' : '35152505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'U' : '25251515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'V' : '25350515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'W' : '25351505',
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico 'X' : '35250515',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'Y' : '35251505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris 'Z' : '35350505',
334d4b1f1d568975853cc747597ce977aa8aa1ddKris}
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico
334d4b1f1d568975853cc747597ce977aa8aa1ddKrischeck = ['ZUVWXY','501234','B6789A','HCDEFG','NIJKLM','TOPQRS']
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNicoclass Object(Barcode):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris def encode(self, text):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result = ''
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris self.height = 18
334d4b1f1d568975853cc747597ce977aa8aa1ddKris text = text.upper()
334d4b1f1d568975853cc747597ce977aa8aa1ddKris text.replace('(', '')
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico text.replace(')', '')
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris text = '(' + text + self.checksum(text) + ')'
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico i = 0
334d4b1f1d568975853cc747597ce977aa8aa1ddKris for char in text:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if map.has_key(char):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result = result + map[char]
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris i = i + 1
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris self.inclabel = text
334d4b1f1d568975853cc747597ce977aa8aa1ddKris return result;
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris # given a string of data, return the check character
334d4b1f1d568975853cc747597ce977aa8aa1ddKris def checksum(self, text):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris total_lower = 0
334d4b1f1d568975853cc747597ce977aa8aa1ddKris total_upper = 0
334d4b1f1d568975853cc747597ce977aa8aa1ddKris for char in text:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if map.has_key(char):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris bars = map[char][0:8:2]
334d4b1f1d568975853cc747597ce977aa8aa1ddKris lower = 0
334d4b1f1d568975853cc747597ce977aa8aa1ddKris upper = 0
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[0]) & 1:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris lower = lower + 4
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[1]) & 1:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris lower = lower + 2
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[2]) & 1:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris lower = lower + 1
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[0]) & 2:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris upper = upper + 4
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[1]) & 2:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris upper = upper + 2
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if int(bars[2]) & 2:
334d4b1f1d568975853cc747597ce977aa8aa1ddKris upper = upper + 1
334d4b1f1d568975853cc747597ce977aa8aa1ddKris total_lower = total_lower + (lower % 6)
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico total_upper = total_upper + (upper % 6)
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris total_lower = total_upper % 6
334d4b1f1d568975853cc747597ce977aa8aa1ddKris total_upper = total_upper % 6
334d4b1f1d568975853cc747597ce977aa8aa1ddKris
334d4b1f1d568975853cc747597ce977aa8aa1ddKris checkchar = check[total_upper][total_lower]
334d4b1f1d568975853cc747597ce977aa8aa1ddKris return checkchar
40e5cf3e8f0ddda79b1650df77d0f847a22822bfJazzyNico
334d4b1f1d568975853cc747597ce977aa8aa1ddKris def getStyle(self, index):
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result = { 'width' : 2, 'write' : True, 'top' : int(self.y) }
334d4b1f1d568975853cc747597ce977aa8aa1ddKris if index==0: # Track Bar
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['top'] = result['top'] + 6
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['height'] = 5
334d4b1f1d568975853cc747597ce977aa8aa1ddKris elif index==1: # Decender Bar
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['top'] = result['top'] + 6
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['height'] = 11
334d4b1f1d568975853cc747597ce977aa8aa1ddKris elif index==2: # Accender Bar
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['height'] = 11
334d4b1f1d568975853cc747597ce977aa8aa1ddKris elif index==3: # Full Bar
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['height'] = 17
334d4b1f1d568975853cc747597ce977aa8aa1ddKris elif index==5: # White Space
334d4b1f1d568975853cc747597ce977aa8aa1ddKris result['write'] = False
334d4b1f1d568975853cc747597ce977aa8aa1ddKris return result
334d4b1f1d568975853cc747597ce977aa8aa1ddKris