1
0
Fork 0
inkscape/share/extensions/barcode/Code39.py
Daniel Baumann 02d935e272
Adding upstream version 1.4.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 23:40:13 +02:00

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