summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2018-03-07 14:36:00 +0000
committerMartin Owens <doctormo@gmail.com>2018-03-07 14:36:00 +0000
commit3eef1dcea191721b1a7f660c126f83a39bb4a6bc (patch)
treeb43a8e60d2a8feee472464b737140bf9458182ad /share
parentPromote the path 'd' attribute to a property per SVG 2. Try 2. (diff)
downloadinkscape-3eef1dcea191721b1a7f660c126f83a39bb4a6bc.tar.gz
inkscape-3eef1dcea191721b1a7f660c126f83a39bb4a6bc.zip
Improve EAN13 with guide mark and clean up a bit of code
Diffstat (limited to 'share')
-rw-r--r--share/extensions/Barcode/BaseEan.py19
-rw-r--r--share/extensions/Barcode/Ean13.py10
-rw-r--r--share/extensions/Barcode/Ean2.py12
-rw-r--r--share/extensions/Barcode/Ean5.py8
-rw-r--r--share/extensions/Barcode/Ean8.py9
-rw-r--r--share/extensions/Barcode/Upca.py9
-rw-r--r--share/extensions/Barcode/Upce.py6
7 files changed, 40 insertions, 33 deletions
diff --git a/share/extensions/Barcode/BaseEan.py b/share/extensions/Barcode/BaseEan.py
index 2c3ab0c09..84f780ae3 100644
--- a/share/extensions/Barcode/BaseEan.py
+++ b/share/extensions/Barcode/BaseEan.py
@@ -91,6 +91,8 @@ class EanBarcode(Barcode):
def encode(self, code):
"""Encode any EAN barcode"""
code = code.replace(' ', '').strip()
+ guide = code.endswith('>')
+ code = code.strip('>')
if not code.isdigit():
return self.error(code, 'Not a Number, must be digits 0-9 only')
@@ -115,9 +117,9 @@ class EanBarcode(Barcode):
code = self.append_checksum(code)
elif not self.verify_checksum(code):
return self.error(code, 'Checksum failed, omit for new sum')
- return self._encode(self.intarray(code))
+ return self._encode(self.intarray(code), guide=guide)
- def _encode(self, num):
+ def _encode(self, num, guide=False):
"""
Write your EAN encoding function, it's passed in an array of int and
it should return a string on 1 and 0 for black and white parts
@@ -131,17 +133,12 @@ class EanBarcode(Barcode):
parts += list(right) + [self.guard_bar]
return ''.join(parts)
- def get_checksum(self, number):
+ def get_checksum(self, num):
"""Generate a UPCA/EAN13/EAN8 Checksum"""
- weight = [3, 1] * len(number)
- result = 0
- # We need to work from left to right so reverse
- number = number[::-1]
- # checksum based on first digits.
- for i in range(len(number)):
- result += int(number[i]) * weight[i]
+ # Left to right,checksum based on first digits.
+ total = sum([int(n) * (3, 1)[x % 2] for x, n in enumerate(num[::-1])])
# Modulous result to a single digit checksum
- checksum = self.magic - (result % self.magic)
+ checksum = self.magic - (total % self.magic)
if checksum < 0 or checksum >= self.magic:
return '0'
return str(checksum)
diff --git a/share/extensions/Barcode/Ean13.py b/share/extensions/Barcode/Ean13.py
index 41f4df826..71fa2257e 100644
--- a/share/extensions/Barcode/Ean13.py
+++ b/share/extensions/Barcode/Ean13.py
@@ -30,10 +30,14 @@ class Ean13(EanBarcode):
checks = [13]
lengths = [12]
- def _encode(self, n):
+ def _encode(self, num, guide=False):
"""Encode an ean13 barcode"""
- self.text = self.space(n[0:1], 4, n[1:7], 5, n[7:], 7)
+ self.text = self.space(num[0:1], 4, num[1:7], 5, num[7:], 7)
+ if guide:
+ self.text = self.text[:-4] + '>'
return self.enclose(
- self.encode_interleaved(n[0], n[1:7]), self.encode_right(n[7:]))
+ self.encode_interleaved(num[0], num[1:7]),
+ self.encode_right(num[7:])
+ )
diff --git a/share/extensions/Barcode/Ean2.py b/share/extensions/Barcode/Ean2.py
index 9aec06a27..8b2e6fadc 100644
--- a/share/extensions/Barcode/Ean2.py
+++ b/share/extensions/Barcode/Ean2.py
@@ -29,10 +29,10 @@ class Ean2(EanBarcode):
length = 2
name = 'ean5'
- def _encode(self, number):
- if len(number) != 2:
- number = ([0, 0] + number)[-2:]
- self.text = ' '.join(self.space(number))
- family = ((number[0] * 10) + number[1]) % 4
- return START + '01'.join(self.encode_interleaved(family, number, FAMS))
+ def _encode(self, num, guide=False):
+ if len(num) != 2:
+ num = ([0, 0] + num)[-2:]
+ self.text = ' '.join(self.space(num))
+ family = ((num[0] * 10) + num[1]) % 4
+ return START + '01'.join(self.encode_interleaved(family, num, FAMS))
diff --git a/share/extensions/Barcode/Ean5.py b/share/extensions/Barcode/Ean5.py
index c6f8555fb..9c61d7a87 100644
--- a/share/extensions/Barcode/Ean5.py
+++ b/share/extensions/Barcode/Ean5.py
@@ -31,8 +31,8 @@ class Ean5(EanBarcode):
name = 'ean5'
length = 5
- def _encode(self, number):
- self.text = ' '.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))
+ def _encode(self, num, guide=False):
+ self.text = ' '.join(self.space(num))
+ family = sum([int(n) * int(m) for n, m in zip(num, '39393')]) % 10
+ return START + '01'.join(self.encode_interleaved(family, num, FAMS))
diff --git a/share/extensions/Barcode/Ean8.py b/share/extensions/Barcode/Ean8.py
index 562952e42..91c4878f9 100644
--- a/share/extensions/Barcode/Ean8.py
+++ b/share/extensions/Barcode/Ean8.py
@@ -27,8 +27,11 @@ class Ean8(EanBarcode):
checks = [8]
lengths = [7]
- def _encode(self, n):
+ def _encode(self, num, guide=False):
"""Encode an ean8 barcode"""
- self.text = self.space(n[:4], 3, n[4:])
- return self.enclose(self.encode_left(n[:4]), self.encode_right(n[4:]))
+ self.text = self.space(num[:4], 3, num[4:])
+ return self.enclose(
+ self.encode_left(num[:4]),
+ self.encode_right(num[4:])
+ )
diff --git a/share/extensions/Barcode/Upca.py b/share/extensions/Barcode/Upca.py
index 32ecc0aa6..fdd506648 100644
--- a/share/extensions/Barcode/Upca.py
+++ b/share/extensions/Barcode/Upca.py
@@ -28,8 +28,11 @@ class Upca(EanBarcode):
lengths = [11]
checks = [12]
- def _encode(self, n):
+ def _encode(self, num, guide=False):
"""Encode for a UPC-A Barcode"""
- self.text = self.space(n[0:1], 3, n[1:6], 4, n[6:11], 3, n[11:])
- return self.enclose(self.encode_left(n[0:6]), self.encode_right(n[6:12]))
+ self.text = self.space(num[0:1], 3, num[1:6], 4, num[6:11], 3, num[11:])
+ return self.enclose(
+ self.encode_left(num[0:6]),
+ self.encode_right(num[6:12]),
+ )
diff --git a/share/extensions/Barcode/Upce.py b/share/extensions/Barcode/Upce.py
index 2ee9d8db2..6dfbaf0b6 100644
--- a/share/extensions/Barcode/Upce.py
+++ b/share/extensions/Barcode/Upce.py
@@ -34,10 +34,10 @@ class Upce(EanBarcode):
checks = [7, 12]
center_bar = '020'
- def _encode(self, n):
+ def _encode(self, num, guide=False):
"""Generate a UPC-E Barcode"""
- self.text = self.space(['0'], 2, n[:6], 2, n[-1])
- code = self.encode_interleaved(n[-1], n[:6], FAMS)
+ self.text = self.space(['0'], 2, num[:6], 2, num[-1])
+ code = self.encode_interleaved(num[-1], num[:6], FAMS)
return self.enclose(code)
def append_checksum(self, number):