summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/barracuda/barracuda.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/scripts/barracuda/barracuda.lua')
-rw-r--r--Master/texmf-dist/scripts/barracuda/barracuda.lua87
1 files changed, 62 insertions, 25 deletions
diff --git a/Master/texmf-dist/scripts/barracuda/barracuda.lua b/Master/texmf-dist/scripts/barracuda/barracuda.lua
index 4d587ef952b..d8eae352165 100644
--- a/Master/texmf-dist/scripts/barracuda/barracuda.lua
+++ b/Master/texmf-dist/scripts/barracuda/barracuda.lua
@@ -2,7 +2,7 @@
--
-- Encode a message into a barcode symbol, in Lua or within a LuaTeX source file
--
--- Copyright (C) 2019 Roberto Giacomelli
+-- Copyright (C) 2020 Roberto Giacomelli
--
-- 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
@@ -19,14 +19,15 @@
-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-- Basic Conventions:
--- fields that start with an undercore are private
+-- fields that start with an undercore must be considered as private
-- class name follows the snake case naming convention
-- the 'barracuda' table is the only global object to access every package
-- modules.
local Barracuda = {
- _VERSION = "barracuda v0.0.9.1",
_NAME = "barracuda",
+ _VERSION = "barracuda v0.0.10",
+ _DATE = "2020-02-04",
_DESCRIPTION = "Lua library for barcode printing",
_URL = "https://github.com/robitex/barracuda",
_LICENSE = "GNU GENERAL PUBLIC LICENSE, Version 2, June 1991",
@@ -40,13 +41,20 @@ Barracuda._barcode = require "lib-barcode.brcd-barcode" -- barcode abstract cla
local Barcode = Barracuda._barcode
Barcode._libgeo = Barracuda._libgeo
--- encoder builder
-function Barracuda:get_barcode_class() --> Barcode class object
+-- return a reference of Barcode abstract class
+function Barracuda:barcode() --> Barcode class object
return self._barcode
end
--- where we place output driver library
-function Barracuda:get_driver() --> Driver object, err
+-- encoder costructor (a bridge to Barcode class method)
+function Barracuda:new_encoder(treename, opt) --> object, err
+ local barcode = self._barcode
+ local enc, err = barcode:new_encoder(treename, opt) --> object, err
+ return enc, err
+end
+
+-- where we place the output driver library
+function Barracuda:get_driver() --> Driver object
if not self._lib_driver then
self._lib_driver = require "lib-driver.brcd-driver"
end
@@ -63,54 +71,83 @@ end
-- panic on error
-- save barcode as a graphic external file
-function Barracuda:save(bc_type, data, filename, id_drv)
- local barcode = self:get_barcode_class()
- local enc, err = barcode:new_encoder(bc_type)
- assert(enc, err)
- local arg_data = type(data)
+-- 'treename' mandatory encoder identifier <family>-<variant>:<name>
+-- 'data' mandatory the object string or integer being encoded
+-- 'filename' mandatory output filename
+-- 'id_drv' optional driver identifier, defualt 'svg'
+-- 'opt' optional table for symbol parameters
+function Barracuda:save(treename, data, filename, id_drv, opt)
+ local barcode = self._barcode
+ local enc_archive = barcode._encoder_instances
+ local enc = enc_archive[treename]
+ if not enc then
+ local err
+ enc, err = barcode:new_encoder(treename)
+ assert(enc, err)
+ end
+ -- make symbol
local symb
+ local arg_data = type(data)
if arg_data == "number" then
local err_data
symb, err_data = enc:from_uint(data)
- asser(symb, err_data)
+ assert(symb, err_data)
elseif arg_data == "string" then
local err_data
symb, err_data = enc:from_string(data)
assert(symb, err_data)
else
- error("[argErr] unsupported 'data' type")
+ error("[ArgErr] unsupported type for 'data'")
+ end
+ if opt then
+ local ok, err = symb:set_param(opt)
+ assert(ok, err)
end
local canvas = self:new_canvas()
symb:append_ga(canvas)
local driver = self:get_driver()
id_drv = id_drv or "svg"
- local ok, out_err = driver:save(id_drv, canvas, filename)
- assert(ok, out_err)
+ local ok, err = driver:save(id_drv, canvas, filename)
+ assert(ok, err)
end
-- this is a only LuaTeX method
-function Barracuda:hbox(bc_type, data, box_name)
- local barcode = self:get_barcode_class()
- local enc, err = barcode:new_encoder(bc_type)
- assert(enc, err)
- local arg_data = type(data)
+-- 'treename' mandatory encoder identifier <family>-<variant>:<name>
+-- 'data' mandatory the object string or integer being encoded
+-- 'box_name' mandatory TeX hbox name
+-- 'opt' optional table for symbol parameters
+function Barracuda:hbox(treename, data, box_name, opt)
+ local barcode = self._barcode
+ local enc_archive = barcode._encoder_instances
+ local enc = enc_archive[treename]
+ if not enc then
+ local err
+ enc, err = barcode:new_encoder(treename)
+ assert(enc, err)
+ end
+ -- make symbol
local symb
+ local arg_data = type(data)
if arg_data == "number" then
local err_data
symb, err_data = enc:from_uint(data)
- asser(symb, err_data)
+ assert(symb, err_data)
elseif arg_data == "string" then
local err_data
symb, err_data = enc:from_string(data)
assert(symb, err_data)
else
- error("[argErr] unsupported 'data' type")
+ error("[ArgErr] unsupported type for 'data'")
+ end
+ if opt then
+ local ok, err = symb:set_param(opt)
+ assert(ok, err)
end
local canvas = self:new_canvas()
symb:append_ga(canvas)
local driver = self:get_driver()
- local ok, err_hbox = driver:ga_to_hbox(canvas, box_name)
- assert(ok, err_hbox)
+ local ok, err = driver:ga_to_hbox(canvas, box_name)
+ assert(ok, err)
end
return Barracuda