# coding=utf-8 # # 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. # """ Python barcode renderer for Code39 barcodes. Designed for use with Inkscape. """ from .Base import Barcode ENCODE = { '0': '000110100', '1': '100100001', '2': '001100001', '3': '101100000', '4': '000110001', '5': '100110000', '6': '001110000', '7': '000100101', '8': '100100100', '9': '001100100', 'A': '100001001', 'B': '001001001', 'C': '101001000', 'D': '000011001', 'E': '100011000', 'F': '001011000', 'G': '000001101', 'H': '100001100', 'I': '001001100', 'J': '000011100', 'K': '100000011', 'L': '001000011', 'M': '101000010', 'N': '000010011', 'O': '100010010', 'P': '001010010', 'Q': '000000111', 'R': '100000110', 'S': '001000110', 'T': '000010110', 'U': '110000001', 'V': '011000001', 'W': '111000000', 'X': '010010001', 'Y': '110010000', 'Z': '011010000', '-': '010000101', '*': '010010100', '+': '010001010', '$': '010101000', '%': '000101010', '/': '010100010', '.': '110000100', ' ': '011000100', } class Code39(Barcode): """Convert a text into string binary of black and white markers""" def encode(self, text): self.text = text.upper() result = '' # It is possible for us to encode code39 # into full ascii, but this feature is # not enabled here for char in '*' + self.text + '*': if char not in ENCODE: char = '-' result = result + ENCODE[char] + '0' # Now we need to encode the code39, best read # the code to understand what it's up to: encoded = '' colour = '1' # 1 = Black, 0 = White for data in result: if data == '1': encoded = encoded + colour + colour else: encoded = encoded + colour colour = colour == '1' and '0' or '1' return encoded