# 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 = "0" if colour == "1" else "1" return encoded