98 lines
2.7 KiB
Python
98 lines
2.7 KiB
Python
# 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
|