diff options
| author | Martin Owens <doctormo@gmail.com> | 2018-03-07 14:36:00 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2018-03-07 14:36:00 +0000 |
| commit | 3eef1dcea191721b1a7f660c126f83a39bb4a6bc (patch) | |
| tree | b43a8e60d2a8feee472464b737140bf9458182ad /share | |
| parent | Promote the path 'd' attribute to a property per SVG 2. Try 2. (diff) | |
| download | inkscape-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.py | 19 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean13.py | 10 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean2.py | 12 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean5.py | 8 | ||||
| -rw-r--r-- | share/extensions/Barcode/Ean8.py | 9 | ||||
| -rw-r--r-- | share/extensions/Barcode/Upca.py | 9 | ||||
| -rw-r--r-- | share/extensions/Barcode/Upce.py | 6 |
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): |
