diff options
| author | Liam P. White <inkscapebrony@gmail.com> | 2014-06-19 00:29:52 +0000 |
|---|---|---|
| committer | Liam P. White <inkscapebrony@gmail.com> | 2014-06-19 00:29:52 +0000 |
| commit | fd8dc80e78f402e37d9c4ef29094e69d90653ea6 (patch) | |
| tree | a858ce047096b8ddb581d76805760e773a251a5f /share/extensions/Barcode | |
| parent | Removed original path helper paths pointed by LiamW (diff) | |
| parent | add win64 files to distribution (Makefile.am) (diff) | |
| download | inkscape-fd8dc80e78f402e37d9c4ef29094e69d90653ea6.tar.gz inkscape-fd8dc80e78f402e37d9c4ef29094e69d90653ea6.zip | |
Update to latest tip (trunk r13432)
(bzr r13341.1.62)
Diffstat (limited to 'share/extensions/Barcode')
| -rw-r--r-- | share/extensions/Barcode/Base.py | 31 | ||||
| -rw-r--r-- | share/extensions/Barcode/Code128.py | 49 | ||||
| -rw-r--r-- | share/extensions/Barcode/Code25i.py | 3 | ||||
| -rw-r--r-- | share/extensions/Barcode/Code39.py | 7 | ||||
| -rw-r--r-- | share/extensions/Barcode/Code39Ext.py | 6 | ||||
| -rw-r--r-- | share/extensions/Barcode/Code93.py | 2 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean13.py (renamed from share/extensions/Barcode/EAN13.py) | 2 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean5.py (renamed from share/extensions/Barcode/EAN5.py) | 6 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean8.py (renamed from share/extensions/Barcode/EAN8.py) | 2 | ||||
| -rw-r--r-- | share/extensions/Barcode/Makefile.am | 12 | ||||
| -rw-r--r-- | share/extensions/Barcode/Rm4scc.py (renamed from share/extensions/Barcode/RM4CC.py) | 2 | ||||
| -rw-r--r-- | share/extensions/Barcode/Upca.py (renamed from share/extensions/Barcode/UPCA.py) | 2 | ||||
| -rw-r--r-- | share/extensions/Barcode/Upce.py (renamed from share/extensions/Barcode/UPCE.py) | 6 | ||||
| -rw-r--r-- | share/extensions/Barcode/__init__.py | 61 |
14 files changed, 94 insertions, 97 deletions
diff --git a/share/extensions/Barcode/Base.py b/share/extensions/Barcode/Base.py index b86185388..b7429f84f 100644 --- a/share/extensions/Barcode/Base.py +++ b/share/extensions/Barcode/Base.py @@ -34,6 +34,7 @@ class Barcode(object): """Cause an error to be reported""" sys.stderr.write( "Error encoding '%s' as %s barcode: %s\n" % (bar, self.name, msg)) + return "ERROR" def __init__(self, param={}): self.document = param.get('document', None) @@ -50,29 +51,33 @@ class Barcode(object): self.width = len(self.string) self.data = self.graphicalArray(self.string) - def generate(self): - """Generate the actual svg from the coding""" - svg_uri = u'http://www.w3.org/2000/svg' - if not self.string or not self.data: - return + def get_id(self): + """Get the next useful id""" if not self.document: - return self.error("No document defined") - - data = self.data - # Collect document ids + return "barcode" doc_ids = {} docIdNodes = self.document.xpath('//@id') for m in docIdNodes: doc_ids[m] = 1 - # We don't have svg documents so lets do something raw: name = 'barcode' - # Make sure that the id/name is inique index = 0 while (doc_ids.has_key(name)): - name = 'barcode' + str(index) - index = index + 1 + index += 1 + name = 'barcode%d' % index + return name + + def generate(self): + """Generate the actual svg from the coding""" + svg_uri = u'http://www.w3.org/2000/svg' + if self.string == 'ERROR': + return + if not self.string or not self.data: + raise ValueError("No string specified for barcode.") + + data = self.data + name = self.get_id() # use an svg group element to contain the barcode barcode = etree.Element('{%s}%s' % (svg_uri,'g')) diff --git a/share/extensions/Barcode/Code128.py b/share/extensions/Barcode/Code128.py index 8734fc330..618ce7817 100644 --- a/share/extensions/Barcode/Code128.py +++ b/share/extensions/Barcode/Code128.py @@ -27,7 +27,29 @@ from Base import Barcode import math import re -map = [ '11011001100','11001101100','11001100110','10010011000','10010001100','10001001100','10011001000','10011000100','10001100100','11001001000','11001000100','11000100100','10110011100','10011011100','10011001110','10111001100','10011101100','10011100110','11001110010','11001011100','11001001110','11011100100','11001110100','11101101110','11101001100','11100101100','11100100110','11101100100','11100110100','11100110010','11011011000','11011000110','11000110110','10100011000','10001011000','10001000110','10110001000','10001101000','10001100010','11010001000','11000101000','11000100010','10110111000','10110001110','10001101110','10111011000','10111000110','10001110110','11101110110','11010001110','11000101110','11011101000','11011100010','11011101110','11101011000','11101000110','11100010110','11101101000','11101100010','11100011010','11101111010','11001000010','11110001010','10100110000','10100001100','10010110000','10010000110','10000101100','10000100110','10110010000','10110000100','10011010000','10011000010','10000110100','10000110010','11000010010','11001010000','11110111010','11000010100','10001111010','10100111100','10010111100','10010011110','10111100100','10011110100','10011110010','11110100100','11110010100','11110010010','11011011110','11011110110','11110110110','10101111000','10100011110','10001011110','10111101000','10111100010','11110101000','11110100010','10111011110','10111101110','11101011110','11110101110','11010000100','11010010000','11010011100','11000111010','11' ] +codeMap = [ + '11011001100','11001101100','11001100110','10010011000','10010001100', + '10001001100','10011001000','10011000100','10001100100','11001001000', + '11001000100','11000100100','10110011100','10011011100','10011001110', + '10111001100','10011101100','10011100110','11001110010','11001011100', + '11001001110','11011100100','11001110100','11101101110','11101001100', + '11100101100','11100100110','11101100100','11100110100','11100110010', + '11011011000','11011000110','11000110110','10100011000','10001011000', + '10001000110','10110001000','10001101000','10001100010','11010001000', + '11000101000','11000100010','10110111000','10110001110','10001101110', + '10111011000','10111000110','10001110110','11101110110','11010001110', + '11000101110','11011101000','11011100010','11011101110','11101011000', + '11101000110','11100010110','11101101000','11101100010','11100011010', + '11101111010','11001000010','11110001010','10100110000','10100001100', + '10010110000','10010000110','10000101100','10000100110','10110010000', + '10110000100','10011010000','10011000010','10000110100','10000110010', + '11000010010','11001010000','11110111010','11000010100','10001111010', + '10100111100','10010111100','10010011110','10111100100','10011110100', + '10011110010','11110100100','11110010100','11110010010','11011011110', + '11011110110','11110110110','10101111000','10100011110','10001011110', + '10111101000','10111100010','11110101000','11110100010','10111011110', + '10111101110','11101011110','11110101110','11010000100','11010010000', + '11010011100','11000111010','11' ] def mapExtra(sd, chars): result = list(sd) @@ -44,7 +66,8 @@ charAB = list(' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ charA = mapExtra(charAB, range(0, 31)) # Offset 64 charB = mapExtra(charAB, range(96, 125)) # Offset -32 -class Object(Barcode): +class Code128(Barcode): + """Main barcode object, generates the encoding bits here""" def encode(self, text): result = '' blocks = [] @@ -65,7 +88,7 @@ class Object(Barcode): if block: blocks.append(self.bestBlock(block)) block = ''; - + self.inclabel = text return self.encodeBlocks(blocks) @@ -74,12 +97,12 @@ class Object(Barcode): if block.upper() == block: return [ 'A', block ] return [ 'B', block ] - + def encodeBlocks(self, blocks): total = 0 pos = 0 encode = ''; - + for block in blocks: set = block[0] datum = block[1] @@ -103,7 +126,7 @@ class Object(Barcode): i = 1 total = total + num * i - encode = encode + map[num] + encode = encode + codeMap[num] pos = pos + 1 if set == 'A' or set == 'B': @@ -113,18 +136,18 @@ class Object(Barcode): for char in datum: total = total + (chars.index(char) * pos) - encode = encode + map[chars.index(char)] + encode = encode + codeMap[chars.index(char)] pos = pos + 1 else: for char in (datum[i:i+2] for i in range(0, len(datum), 2)): total = total + (int(char) * pos) - encode = encode + map[int(char)] + encode = encode + codeMap[int(char)] pos = pos + 1 - + checksum = total % 103 - encode = encode + map[checksum] - encode = encode + map[106] - encode = encode + map[107] - + encode = encode + codeMap[checksum] + encode = encode + codeMap[106] + encode = encode + codeMap[107] + return encode diff --git a/share/extensions/Barcode/Code25i.py b/share/extensions/Barcode/Code25i.py index 518a306f2..51346be60 100644 --- a/share/extensions/Barcode/Code25i.py +++ b/share/extensions/Barcode/Code25i.py @@ -34,14 +34,13 @@ encoding = { '7' : '00011', '8' : '10010', '9' : '01010', - } # Start and stop code are already encoded into white (0) and black(1) bars start_code = '1010' stop_code = '1101' -class Object(Barcode): +class Code25i(Barcode): # Convert a text into string binary of black and white markers def encode(self, number): self.label = number diff --git a/share/extensions/Barcode/Code39.py b/share/extensions/Barcode/Code39.py index 64b22f352..ade397463 100644 --- a/share/extensions/Barcode/Code39.py +++ b/share/extensions/Barcode/Code39.py @@ -68,7 +68,7 @@ encoding = { ' ' : '011000100', } -class Object(Barcode): +class Code39(Barcode): # Convert a text into string binary of black and white markers def encode(self, text): text = text.upper() @@ -93,10 +93,7 @@ class Object(Barcode): encoded = encoded + colour + colour else: encoded = encoded + colour - if colour == '1': - colour = '0' - else: - colour = '1' + colour = colour == '1' and '0' or '1' self.inclabel = text return encoded; diff --git a/share/extensions/Barcode/Code39Ext.py b/share/extensions/Barcode/Code39Ext.py index 8f1e77826..b6df47de2 100644 --- a/share/extensions/Barcode/Code39Ext.py +++ b/share/extensions/Barcode/Code39Ext.py @@ -19,7 +19,7 @@ Python barcode renderer for Code39 Extended barcodes. Designed for Inkscape. """ -import Code39 +from Code39 import Code39 encode = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') @@ -46,7 +46,7 @@ mapB = getMap(range(1, 26)) # $ mapC = getMap(range(33, 58)) # / mapD = getMap(range(97, 122)) # + -class Object(Code39.Object): +class Code39Ext(Code39): def encode(self, text): # We are only going to extend the Code39 barcodes result = '' @@ -61,5 +61,5 @@ class Object(Code39.Object): char = '+' + mapD[char] result = result + char - return Code39.Object.encode(self, result); + return Code39.encode(self, result); diff --git a/share/extensions/Barcode/Code93.py b/share/extensions/Barcode/Code93.py index 76cbf683b..866ec6036 100644 --- a/share/extensions/Barcode/Code93.py +++ b/share/extensions/Barcode/Code93.py @@ -56,7 +56,7 @@ mapD = getMap(range(97, 122)) # + encoding = '100010100 101001000 101000100 101000010 100101000 100100100 100100010 101010000 100010010 100001010 110101000 110100100 110100010 110010100 110010010 110001010 101101000 101100100 101100010 100110100 100011010 101011000 101001100 101000110 100101100 100010110 110110100 110110010 110101100 110100110 110010110 110011010 101101100 101100110 100110110 100111010 100101110 111010100 111010010 111001010 101101110 101110110 110101110 100100110 111011010 111010110 100110010 101011110'.split() -class Object(Barcode): +class Code93(Barcode): def encode(self, text): # start marker bits = self.encode93('MARKER') diff --git a/share/extensions/Barcode/EAN13.py b/share/extensions/Barcode/Ean13.py index 41681173b..3bad5d6e5 100644 --- a/share/extensions/Barcode/EAN13.py +++ b/share/extensions/Barcode/Ean13.py @@ -23,7 +23,7 @@ Python barcode renderer for EAN13 barcodes. Designed for use with Inkscape. from BaseEan import EanBarcode -class Object(EanBarcode): +class Ean13(EanBarcode): """Provide an Ean13 barcode generator""" name = 'ean13' lengths = [ 12 ] diff --git a/share/extensions/Barcode/EAN5.py b/share/extensions/Barcode/Ean5.py index 68ff99738..1bd26a4bd 100644 --- a/share/extensions/Barcode/EAN5.py +++ b/share/extensions/Barcode/Ean5.py @@ -25,14 +25,14 @@ from BaseEan import EanBarcode FAMS = [ '11000','10100','10010','10001','01100','00110','00011','01010','01001','00101' ] START = '01011' -class Object(EanBarcode): +class Ean5(EanBarcode): """Provide an Ean5 barcode generator""" name = 'ean5' length = 5 def _encode(self, number): - self.x += 110.0 # horiz offset so it does not overlap EAN13 - self.y -= self.height + 5 # move the text to the top + self.x += 110.0*self.scale # horiz offset so it does not overlap EAN13 + self.y -= (self.height + 5)*self.scale # move the text to the top self.label = ' '.join(self.space(number)) family = sum([int(n)*int(m) for n,m in zip(number, '39393')]) % 10 return START + '01'.join(self.encode_interleaved(family, number, FAMS)) diff --git a/share/extensions/Barcode/EAN8.py b/share/extensions/Barcode/Ean8.py index 05b4d7bb7..83e82814a 100644 --- a/share/extensions/Barcode/EAN8.py +++ b/share/extensions/Barcode/Ean8.py @@ -21,7 +21,7 @@ Python barcode renderer for EAN8 barcodes. Designed for use with Inkscape. from BaseEan import EanBarcode -class Object(EanBarcode): +class Ean8(EanBarcode): """Provide an EAN8 barcode generator""" name = 'ean8' lengths = [ 7 ] diff --git a/share/extensions/Barcode/Makefile.am b/share/extensions/Barcode/Makefile.am index 691120cb6..7a1e889c0 100644 --- a/share/extensions/Barcode/Makefile.am +++ b/share/extensions/Barcode/Makefile.am @@ -9,13 +9,13 @@ barcode_DATA = \ Code39.py \ Code25i.py \ Code93.py \ - EAN13.py \ - EAN8.py \ - EAN5.py \ + Ean13.py \ + Ean8.py \ + Ean5.py \ __init__.py \ - RM4CC.py \ - UPCA.py \ - UPCE.py + Rm4scc.py \ + Upca.py \ + Upce.py EXTRA_DIST = \ $(barcode_DATA) diff --git a/share/extensions/Barcode/RM4CC.py b/share/extensions/Barcode/Rm4scc.py index d980c6c86..0fb154280 100644 --- a/share/extensions/Barcode/RM4CC.py +++ b/share/extensions/Barcode/Rm4scc.py @@ -65,7 +65,7 @@ map = { check = ['ZUVWXY','501234','B6789A','HCDEFG','NIJKLM','TOPQRS'] (BAR_TRACK, BAR_DOWN, BAR_UP, BAR_FULL, BAR_NONE, WHITE_SPACE) = range(6) -class Object(Barcode): +class Rm4scc(Barcode): def encode(self, text): result = '' diff --git a/share/extensions/Barcode/UPCA.py b/share/extensions/Barcode/Upca.py index 6ac10943c..d69ed11e6 100644 --- a/share/extensions/Barcode/UPCA.py +++ b/share/extensions/Barcode/Upca.py @@ -21,7 +21,7 @@ Python barcode renderer for UPCA barcodes. Designed for use with Inkscape. from BaseEan import EanBarcode -class Object(EanBarcode): +class Upca(EanBarcode): """Provides a renderer for EAN12 aka UPC-A Barcodes""" name = 'upca' lengths = [ 11 ] diff --git a/share/extensions/Barcode/UPCE.py b/share/extensions/Barcode/Upce.py index dba5d48ea..eee2a739c 100644 --- a/share/extensions/Barcode/UPCE.py +++ b/share/extensions/Barcode/Upce.py @@ -27,7 +27,7 @@ import sys FAMS = [ '111000', '110100', '110010', '110001', '101100', '100110', '100011', '101010', '101001', '100101' ] -class Object(EanBarcode): +class Upce(EanBarcode): """Generate EAN6/UPC-E barcode generator""" name = 'upce' lengths = [ 6, 11 ] @@ -56,7 +56,7 @@ class Object(EanBarcode): # All UPC-E Numbers use number system 0 if number[0] != '0' or len(number)!=11: # If not then the code is invalid - return None + raise ValueError("Invalid UPC Number") # Most of the conversions deal # with the specific code parts @@ -83,7 +83,7 @@ class Object(EanBarcode): return manufacturer + product[4] else: # Invalid UPC-A Numbe - return None + raise ValueError("Invalid UPC Number") def ConvertEtoA(self, number): """Convert UPC-E to UPC-A by padding with zeros""" diff --git a/share/extensions/Barcode/__init__.py b/share/extensions/Barcode/__init__.py index 370839f45..e4e328ae3 100644 --- a/share/extensions/Barcode/__init__.py +++ b/share/extensions/Barcode/__init__.py @@ -1,5 +1,5 @@ # -# Copyright (C) 2010 Martin Owens +# Copyright (C) 2014 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 @@ -16,10 +16,9 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # """ -Renderer for barcodes, SVG extention for Inkscape. +Renderer for barcodes, SVG extention for Inkscape. For supported barcodes see Barcode module directory. - """ # This lists all known Barcodes missing from this package @@ -40,45 +39,19 @@ For supported barcodes see Barcode module directory. import sys -def getBarcode(format, param={}): - if format: - format = str(format).lower() - format = format.replace('-', '') - format = format.replace(' ', '') - if format=='code25i': - import Code25i - return Code25i.Object(param) - elif format=='code39': - import Code39 - return Code39.Object(param) - elif format=='code39ext': - import Code39Ext - return Code39Ext.Object(param) - elif format=='code93': - import Code93 - return Code93.Object(param) - elif format=='code128': - import Code128 - return Code128.Object(param) - - elif format in ['rm4cc', 'rm4scc']: - import RM4CC - return RM4CC.Object(param) - - elif format == 'upca': - import UPCA - return UPCA.Object(param) - elif format == 'upce': - import UPCE - return UPCE.Object(param) - elif format == 'ean5': - import EAN5 - return EAN5.Object(param) - elif format in ['ean8', 'ucc8']: - import EAN8 - return EAN8.Object(param) - elif format in ['ean13', 'ucc13','jan']: - import EAN13 - return EAN13.Object(param) - sys.stderr.write("Invalid format for barcode: " + str(format) + "\n") +def getBarcode(code, **kwargs): + """Gets a barcode from a list of available barcode formats""" + if not code: + return sys.stderr.write("No barcode format given!\n") + + + code = str(code).replace('-', '').strip() + try: + barcode = getattr(__import__('Barcode.'+code, fromlist=['Barcode']), code) + return barcode(kwargs) + except ImportError: + sys.stderr.write("Invalid type of barcode: %s\n" % code) + except AttributeError: + raise + sys.stderr.write("Barcode module is missing the barcode class: %s\n" % code) |
