diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
commit | cca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch) | |
tree | 146f39ded1c938019e1ed42d30923c2ac9e86789 /share/extensions/barcode/Code39.py | |
parent | Initial commit. (diff) | |
download | inkscape-upstream/1.2.2.tar.xz inkscape-upstream/1.2.2.zip |
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | share/extensions/barcode/Code39.py | 98 |
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 |