summaryrefslogtreecommitdiffstats
path: root/share/extensions/barcode/Code39.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/extensions/barcode/Code39.py')
-rw-r--r--share/extensions/barcode/Code39.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/share/extensions/barcode/Code39.py b/share/extensions/barcode/Code39.py
new file mode 100644
index 0000000..87f346a
--- /dev/null
+++ b/share/extensions/barcode/Code39.py
@@ -0,0 +1,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