1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# 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
|