summaryrefslogtreecommitdiffstats
path: root/share/extensions/barcode/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/extensions/barcode/__init__.py')
-rw-r--r--share/extensions/barcode/__init__.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/share/extensions/barcode/__init__.py b/share/extensions/barcode/__init__.py
new file mode 100644
index 0000000..1bfe281
--- /dev/null
+++ b/share/extensions/barcode/__init__.py
@@ -0,0 +1,77 @@
+# coding=utf-8
+#
+# 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
+# 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-1301, USA.
+#
+# pylint: disable=no-self-use
+"""
+Renderer for barcodes, SVG extension for Inkscape.
+
+For supported barcodes see Barcode module directory.
+"""
+
+from inkex.localization import inkex_gettext as _
+
+# This lists all known Barcodes missing from this package
+# ===== UPC-Based Extensions ====== #
+# Code11
+# ========= Code25-Based ========== #
+# Codabar
+# Postnet
+# ITF25
+# ========= Alpha-numeric ========= #
+# Code39Mod
+# USPS128
+# =========== 2D Based ============ #
+# PDF417
+# PDF417-Macro
+# PDF417-Truncated
+# PDF417-GLI
+
+
+class NoBarcode:
+ """Simple class for no barcode"""
+
+ def __init__(self, msg):
+ self.msg = msg
+
+ def encode(self, text):
+ """Encode the text into a barcode pattern"""
+ raise ValueError(_("No barcode encoder: {}").format(self.msg))
+
+ def generate(self):
+ """Generate actual svg from the barcode pattern"""
+ return None
+
+
+def get_barcode(code, **kw):
+ """Gets a barcode from a list of available barcode formats"""
+ if not code:
+ return NoBarcode(_("No barcode format given."))
+
+ code = str(code).replace("-", "").strip()
+ module = "barcode." + code
+ lst = ["barcode"]
+ try:
+ return getattr(__import__(module, fromlist=lst), code)(kw)
+ except ImportError as err:
+ if code in str(err):
+ return NoBarcode(_("Invalid type of barcode: {}.{}").format(module, code))
+ raise
+ except AttributeError:
+ return NoBarcode(
+ _("Barcode module is missing barcode class: {}.{}").format(module, code)
+ )