summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/luatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-12-05 21:23:07 +0000
committerKarl Berry <karl@freefriends.org>2019-12-05 21:23:07 +0000
commit0ed7b2cd92f7a81334f612df3e37211f8333ae75 (patch)
tree2bcbe01d8e86cbf57d64069a153346da4936b00a /Master/texmf-dist/doc/luatex
parent7f43f3692e1354166c0623faf83c84b23d041ea3 (diff)
barracuda (5dec19)
git-svn-id: svn://tug.org/texlive/trunk@53034 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/luatex')
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/INSTALL.txt37
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/LICENSE.txt339
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/README.md95
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/TODO.txt92
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.pdfbin0 -> 38718 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.tex148
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-manual-tool.tex7
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.pdfbin0 -> 57452 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.tex331
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/doc/image/8006194056290.pdfbin0 -> 5682 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.pdfbin0 -> 3621 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.tex13
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code128/001-code128-test.lua32
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.pdfbin0 -> 22044 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.tex125
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code128/02-05-pdfliteral.txt43
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code128/c128-123.svg42
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/001-code39-test.lua41
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.pdfbin0 -> 22618 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.tex120
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.pdfbin0 -> 19827 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.tex53
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.pdfbin0 -> 15243 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.tex46
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/005-code39-test.lua8
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-code39-test.lua45
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-six.svg653
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-code39/my_barcode.svg76
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.pdfbin0 -> 23619 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.tex220
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.pdfbin0 -> 10601 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.tex12
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.pdfbin0 -> 3901 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.tex16
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/004-ean-test.lua9
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ean/8006194056290.svg89
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.pdfbin0 -> 30290 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.tex740
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/001-ga-svg-test.lua28
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/002-ga-svg-test.lua18
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-01.svg26
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-02.svg17
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-code39.svg76
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.pdfbin0 -> 19127 bytes
-rw-r--r--Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.tex187
45 files changed, 3784 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/luatex/barracuda/INSTALL.txt b/Master/texmf-dist/doc/luatex/barracuda/INSTALL.txt
new file mode 100644
index 00000000000..0c06f98488f
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/INSTALL.txt
@@ -0,0 +1,37 @@
+Installation
+============
+
+Installing `barracuda` for TeX Live
+-----------------------------------
+
+If you have TeX Live installed from CTAN or from DVD TeX Collection, before
+any modification to your system check if the package is already installed
+looking for `installed` key in the output of the command:
+
+ $ tlmgr show barracuda
+
+If `barracuda` is not present, run the command:
+
+ $ tlmgr install barracuda
+
+If you have installed TeX Live via Linux OS repository try your distribution's
+package management system.
+
+It's also possible a manual installation:
+
+ a. Grab the sources from CTAN or https://github.com/robitex/barracuda .
+ b. Unzip it at the root of one or your TDS trees.
+ c. You may need to update some filename database after this running `texhash`,
+ see your TeX distribution's manual for details.
+
+Any TeX Live documentation files can be easily opened on screen with the
+`texdoc` command line utility (this way is very handy).
+
+ $ texdoc pkgname
+
+Installing for Lua
+------------------
+
+Manually copy the `src` folder content to a suitable directory of your system
+that is reachable to a Lua interpreter.
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/LICENSE.txt b/Master/texmf-dist/doc/luatex/barracuda/LICENSE.txt
new file mode 100644
index 00000000000..d1d6cd4ea1d
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/LICENSE.txt
@@ -0,0 +1,339 @@
+GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Master/texmf-dist/doc/luatex/barracuda/README.md b/Master/texmf-dist/doc/luatex/barracuda/README.md
new file mode 100644
index 00000000000..6dc3ccb2db0
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/README.md
@@ -0,0 +1,95 @@
+# `barracuda` project
+
+This Lua library is for drawing barcode symbols. The project delivers modules
+to typeset barcode from within a LuaTeX document. Therefore is also possible
+to use `barracuda` with a Lua standalone interpreter to draw barcodes with
+different graphic format such as `SVG` (see an example below).
+This package does not have dependences.
+
+![a SVG formatted Code39 symbol](/test/test-ga-svg/test-code39.svg)
+
+Internal modules is structured to ensure good performance and to allow a
+complete user control over barcode symbol parameters :thumbsup: .
+
+Although development is in beta stage, `barracuda` has a good level of
+stability.
+
+## Current version information
+
+Version: v0.0.9.1
+Date: 2019-12-04
+
+## Barcode symbologies list
+
+So far, are supported
+
+- Code 39
+- Code 128
+- Interleaved 2 of 5
+- EAN family (EAN8, EAN13, and the add-ons EAN5 and EAN2)
+
+Other 1D encoding symbology will be added to the project, then it will be the
+turn of 2D barcode types like Datamatrix, QRCode or PDF417.
+
+## A very simple LaTeX example
+
+The LaTeX package `barracuda.sty` under the cover uses Lua code so you need to
+compile your source files with LuaTeX or LuajitTeX with the LaTeX format.
+
+For instance, here there is a minimal example for LuaLaTeX:
+
+```latex
+% !TeX program = LuaLaTeX
+\documentclass{article}
+\usepackage{barracuda}
+\begin{document}
+\barracuda{code39}{123ABC}
+\end{document}
+```
+
+## Documentation
+
+Details and package reference can be found in the manual delivered in the `doc`
+project directory, even if it is very minimal at the moment.
+
+Directory `test` contains files useful also for code examples.
+
+## Installation
+
+The `barracuda` package can be used with pure Lua interpreter or from within a
+TeX source file for Lua-powered typesetting engine like LuaTeX. In the first
+case you can manually copy `src` folder content to a suitable directory of
+your system. Otherwise, you can install the package via `tlmgr` for your TeX
+Live distribution.
+
+If you have installed TeX Live with the `full` schema, `barracuda` is just
+available and no further action is required. Please, take into account that
+only the tagged version (in the `git` sense) of the package will be sent to
+CTAN. This means that intermediate development version between consecutive
+releases can be found only at https://github.com/robitex/barracuda .
+
+TeX Live distribution or Lua interpreter executable are available for a very
+large number of Operating Systems so it is also for `barracuda`.
+
+Step by step istruction can be found in the INSTALL.txt file.
+
+## Contribute
+
+Contributes are welcome in any form and for any topics. You can contact me
+directly via email at giaconet.mailbox@gmail.com or via a pull request on the
+repository https://github.com/robitex/barracuda or writing a public message
+via the web page https://github.com/robitex/barracuda/issues for todos, bugs,
+feature requests, and more (press the bottom `New issue`).
+
+Anyway, as a starting point take a look of TODO.txt file for the next
+scheduled development tasks.
+
+## License
+
+`barracuda` project is released under the
+[GNU GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
+Please, for more legal details refer to LICENSE.txt file or visit the web page
+https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+
+Copyright (C) 2019 Roberto Giacomelli
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/TODO.txt b/Master/texmf-dist/doc/luatex/barracuda/TODO.txt
new file mode 100644
index 00000000000..5b1970810c2
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/TODO.txt
@@ -0,0 +1,92 @@
+Development Program Task Table
+
+Hypothetical developing tasks list:
+
+__.__: 20__-__-__: [dev] TiKz driver
+__.__: 20__-__-__: [dev] debug driver, ga code pretty printing
+__.__: 20__-__-__: [dev] make thing happen: font property for text
+__.__: 20__-__-__: [dev] develop LaTeX user package
+__.__: 20__-__-__: [dev] coherent error management
+__.__: 20__-__-__: [dev] proportional options
+__.__: 20__-__-__: [dev] a number parameter can be a string? unit measure...
+__.__: 20__-__-__: [prj] a command line program to print barcodes
+__.__: 20__-__-__: [man] put ga-asm-spec together with the manual
+__.__: 2019-__-__: [dev] guard text in EAN simbology
+__.__: 2019-__-__: [dev] ISBN support
+__.__: 2019-__-__: [dev] UPC support
+__.__: 2019-__-__: [dev] make optional file name in all the Driver methods
+__.__: 2019-__-__: [prj] use l3build for testing and CTAN files packaging
+
+Scheduled tasks (What we are working on):
+[ ] <v0.1> 2019-__-__: Data Matrix 2D symbology
+
+__.__: 2019-__-__: [dmx] data matrix first run
+__.__: 2019-__-__: [dmx] ecc200 error correction code
+__.__: 2019-__-__: [svg] opcode for grids
+__.__: 2019-__-__: [pdf] opcode for grids
+__.__: 2019-__-__: [gas] ga-asm grid opcode
+__.__: 2019-__-__: [geo] grid vector object
+_1.__: 2019-__-__: [dev] init source file encoder for Data Matrix
+
+[🎉] <v0.0.9.1> 2019-12-04: prelude to version v0.1
+09.15: 2019-11-29: [prj] upload to CTAN version v0.0.9.1 (CTAN conditions)
+09.14: 2019-11-29: [prj] upload to CTAN version v0.0.9
+09.13: 2019-11-26: [man] say something about barracuda.sty
+09.12: 2019-11-26: [man] edit the section 'A more deep look' for clearness
+09.11: 2019-11-26: [prj] reformat todo file: no more date at line end
+09.10: 2019-11-26: [svg] take dimensions as scaled point and then mm
+09.09: 2019-11-26: [prj] every dev task ends with a repository commit
+09.08: 2019-11-25: [prj] .gitignore .out file
+09.07: 2019-11-25: [svg] support for text
+09.06: 2019-11-25: [man] time to get an usable manual even if minimal
+09.05: 2019-11-23: [chk] some new test files
+09.04: 2019-11-23: [dev] new barracuda methods save() and hbox()
+09.03: 2019-11-20: [svg] driver first run
+09.02: 2019-11-10: [dev] implement ga opcode for line-join style and line-cap style
+09.01: 2019-11-10: [prj] make lib-parseopt a separated project
+
+Completed tasks:
+
+<Version 0.0.8> move costructors to the barcode abstract class 🎉 2019-11-09
+Task 8.5: adopted new Barcode costructors in the EAN encoder 2019-11-09
+Task 8.4: adopted new Barcode costructors in the ITF encoder 2019-11-09
+Task 8.3: adopted new Barcode costructors in the Code128 encoder 2019-11-09
+Task 8.2: adopted new Barcode costructors in the Code39 encoder 2019-11-04
+Task 8.1: new costructor method in the barcode superclass 2019-11-04
+
+<Version 0.0.7> code refactoring for ga-canvas 🎉 2019-11-02
+Task 7.5: recompile all the test files 2019-11-02
+Task 7.4: new functions canvas:encode_<obj>() 2019-11-02
+Task 7.3: text position options for Code39 became two indipendent 2019-11-02
+Task 7.2: added a new code39 test file (and bugs fixed) 2019-11-02
+Task 7.1: added subdirectories in the test tree 2019-11-02
+
+<Version 0.0.6> implement Interleaved 2 of 5 encoder 🎉 2019-07-02
+Task 6.4: test files 2019-07-02
+Task 6.3: add bearer bars for itf encoder 2019-07-02
+Task 6.2: check digit capability for itf 2 of 5 encoder 2019-07-02
+Task 6.1: implement basic Interleaved 2 of 5 encoder 2019-06-29
+
+<Version 0.0.5> implement Code128 and EAN family encoders 🎉 2019-01-27
+Task 5.5: test file 2019-01-27
+Task 5.4: implement EAN2 variant 2019-01-26
+Task 5.3: implement EAN5 variant 2019-01-26
+Task 5.2: new family encoder concept 2019-01-25
+Task 5.1: implement EAN13 encoder 2019-01-12
+Task 4.4: refactoring param iterator 2018-12-30
+Task 4.3: test the local system of option set up for Code128 2018-12-30
+Task 4.2: test the local system of option set up for Code39 2018-12-30
+Task 4.1: test for ga-canvas 2018-12-29
+Task 3.3: opt in Code 39 and Code 128 symbol constructors 2018-12-24
+Task 3.2: focus on a new constructor in Barcode Class for
+ better encoder implementation 2018-12-21
+Task 3.1: import and refactoring previous Code128 encoder code 2018-12-16
+
+<Version 0.0.2> 🎉 2018-12-11
+Task 2.5: option text_gap for code39 2018-12-11
+Task 2.4: resolved the horizontal correction in spaced text 2018-12-11
+Task 2.3: further text option for the Code39 encoder 2018-12-06
+Task 2.2: include minimal text ability to the system
+Task 2.1: design and implement a basic framework
+
+<Version 0.0.1> open 0.0.1 alpha dev master branch 🎉 2018-11-30
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.pdf b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.pdf
new file mode 100644
index 00000000000..18ba18b9c27
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.tex b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.tex
new file mode 100644
index 00000000000..1c403455f86
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-ga-asm.tex
@@ -0,0 +1,148 @@
+% !TeX program = LuaLaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\documentclass{article}
+
+\usepackage{fontspec}
+\setmainfont{Libertinus Serif}
+
+\usepackage[margin=18mm]{geometry}
+\usepackage{array}
+\usepackage{booktabs}
+
+\newcolumntype{C}{>{\ttfamily}c}
+\newcolumntype{L}{>{\ttfamily}l}
+
+\begin{document}
+Goal: describe geometrical object like lines and rectangles
+mainly for a barcode drawing library.
+
+
+
+\section{\texttt{ga} instruction set}
+
+A graphic data specification format called '\texttt{ga}' \emph{graphic alchemy},
+or if you want \emph{generic graphic assembler}.
+
+\begin{verbatim}
+ga<DIM, UINT> := generic graphic assembler
+ <DIM> := numeric type parameter for dimension, for example f64 or i32
+ <UINT> := numeric type parameter for quantity, an unsigned integer, i.e. u8
+
+ga<DIM, UINT> := +Elem<DIM, UINT>
+
+Elem<DIM, UINT> := Code<u8> + Args<DIM, UINT>
+
+Code<u8> := State<u8> | Object<u8> | Fn<u8>
+ State<u8> := 1 -> 31 -- graphic properties
+ Object<u8> := 32 -> 239 -- graphic objects
+ Fn<u8> := 240 -> 255 -- functions
+
+Args<DIM, UINT> : <x: DIM> | <e: u8> | <n: UINT> | <c: CHARS>
+ <x: DIM> := a dimension value of type DIM
+ <e: u8> := an enumeration value of type u8 (unsigned byte)
+ <n: UINT> := an unsigned integer for multiplicity
+ <c: CHARS> := chars sequence ended with 0
+\end{verbatim}
+
+
+
+\section{Properties}
+
+Colors, linecap style etc\dots
+
+\noindent\begin{tabular}{CLlL}
+\toprule
+OpCode & Mnemonic key & Graphic property & Operands\\
+\midrule
+ 1 & pen\_thick & Line thick & <w: DIM>\\
+ 2 & line\_cap\_style & Line cap style & <e: u8>\\
+ 3 & line\_join\_style & Line join style & <e: u8>\\
+ 8 & color & ... \\
+\midrule
+30 & start\_bbox\_group & Stop to check the bounding box & -\\
+31 & end\_bbox\_group & Set a bounding box and restart to check & <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM>\\
+\bottomrule
+\end{tabular}
+
+
+
+\section{Objects}
+
+\subsection{Lines}
+
+A segment that starts from point P1 (x1, y1) and ends to P2 (x2, y2).
+
+\noindent\begin{tabular}{CLlL}
+\toprule
+OpCode & Mnemonic key & Graphic object & Operands\\
+\midrule
+32 & line & Line & <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM>\\
+33 & hline & Horizontal line & <x1: DIM> <x2: DIM> <y: DIM>\\
+34 & vline & Vertical line & <y1: DIM> <y2: DIM> <x: DIM>\\
+\midrule
+36 & vbar & Vertical bars & <y1: DIM> <y2: DIM> <b: UINT> <x1: DIM> <t1: DIM> ...\\
+37 & hbar & Horizontal bars & <x1: DIM> <x2: DIM> <b: UINT> <y1: DIM> <t1: DIM> ...\\
+\midrule
+38 & polyline & Open polyline & <n: UINT> <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM> ...\\
+39 & c\_polyline & Closed polyline & <n: UINT> <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM> ...\\
+\bottomrule
+\end{tabular}
+
+
+\subsection{Rectangles}
+
+\noindent\begin{tabular}{CLlL}
+\toprule
+OpCode & Mnemonic key & Graphic object & Operands\\
+\midrule
+ 48 & rect & Rectangle & <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM>\\
+ 49 & f\_rect & Filled rectangle & <x1: DIM> <y1: DIM> <x2: DIM> <y2: DIM>\\
+ 50 & rect\_size & Rectangle & <x1: DIM> <y1: DIM> <w: DIM> <h: DIM>\\
+ 51 & f\_rect\_size & Filled rectangle & <x1: DIM> <y1: DIM> <w: DIM> <h: DIM>\\
+
+\bottomrule
+\end{tabular}
+
+
+\subsection{Text}
+
+\noindent\begin{tabular}{CLl}
+\toprule
+OpCode & Mnemonic key & Graphic object/Operands\\
+\midrule
+ 130 & text & A text with several glyphs\\
+ & & \ttfamily <ax: FLOAT> <ay: FLOAT> <xpos: DIM> <ypos: DIM> <c: CHARS>\\
+\midrule
+ 131 & text\_xspaced & A text with glyphs equally spaced on its vertical axis\\
+ & & \ttfamily <x1: DIM> <xgap: DIM> <ay: FLOAT> <ypos: DIM> <c: CHARS>\\
+\midrule
+ 132 & text\_xwidth & Glyphs equally spaced on vertical axis between two x coordinates\\
+ & & \ttfamily <ay: FLOAT> <x1: DIM> <x2: DIM> <y: DIM> <c: CHARS>\\
+\midrule
+ & under design assessment\\
+ 140 & \_text\_group & Texts on the same baseline \\
+ & & \ttfamily <ay: DIM> <y: DIM> <n: UINT> <<xi: DIM> <ai: FLOAT> <ci: CHARS>> \\
+\bottomrule
+\end{tabular}
+
+
+\subsection{Function}
+
+
+\noindent\begin{tabular}{CLlL}
+\toprule
+OpCode & Mnemonic key & Function & Operands\\
+\midrule
+ 240 & move & Translate objects & <n: UINT> <dx: DIM> <dy: UINT>\\
+ 241 & copy & Copy object & <n: UINT> <c: UINT> <dx1: DIM> <dy1: UINT> ...\\
+ 242 & and\_copy & Place and copy objects & <n: UINT> <c: UINT> <dx1: DIM> <dy1: UINT> ...\\
+ 243 & grid & Copy next \(n\) objects on a grid & <n: UINT> <col: UINT> <row: UINT> <dx: DIM> <dy: DIM>\\
+ 244 & sl\_grid\\
+ 250 & mirror\\
+ 255 & comment & A string comment & <s: STRING>\\
+\bottomrule
+\end{tabular}
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-manual-tool.tex b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-manual-tool.tex
new file mode 100644
index 00000000000..9e5f5f8a47c
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda-manual-tool.tex
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.pdf b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.pdf
new file mode 100644
index 00000000000..6472da10eeb
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.tex b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.tex
new file mode 100644
index 00000000000..e5d6b6acdba
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/barracuda.tex
@@ -0,0 +1,331 @@
+% !TeX program = LuaLaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+% Barracuda manual main source file
+
+\documentclass[11pt]{article}
+\usepackage{fontspec}
+\usepackage{geometry}
+\usepackage{fancyvrb}
+\usepackage{graphicx}
+\usepackage{hyperref}
+
+% special macro for manual typesetting
+\input{barracuda-manual-tool}
+
+\hypersetup{
+pdfinfo={
+ Title={Barracuda manual},
+ Subject={Barcode printing package},
+ Author={Roberto Giacomelli},
+ Keywords={Barcode EAN Code128 Lua}
+}}
+
+\setmainfont{Libertinus Serif}
+\setmonofont{IBM Plex Sans Condensed}
+\fvset{
+ fontsize=\small,
+ frame=single,
+ labelposition=topline,
+ framesep=6pt
+}
+\geometry{
+ left=32mm,
+ right=40mm,
+ top=28mm,
+ bottom=28mm
+}
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\brcd}{\code{barracuda}}
+
+\author{Roberto Giacomelli\\\small email: \url{giaconet.mailbox@gmail.com}}
+\title{\code{barracuda} manual\\[1ex]
+\small \url{https://github.com/robitex/barracuda}}
+\date{\small 2019-12-04\\Version v0.0.9.1}
+
+\begin{document}
+\maketitle
+
+\abstract{%
+Welcome to the \brcd{} software project devoted to barcodes printing.
+
+This manual shows you how to print barcodes in your \TeX{} documents and how to
+export such graphic content to an external file, using \brcd{}.
+
+\brcd{} is written in Lua programming language and is free software released
+under the GPL 2 License.%
+}
+
+
+\section{Introduction}
+
+Barcode symbols are usually a sequence of vertical lines representing encoded
+data that can be retrived with special laser scanner or more simpler with a
+smartphone running dedicated apps. Almost every store item has a label with a
+printed barcode for automatic identification purpose.
+
+So far, \brcd{} supported symbologies are as the following:
+\begin{itemize}
+ \item Code 39,
+ \item Code 128,
+ \item EAN family (EAN 8, EAN 13, and the add-ons EAN 2 and EAN 5),
+ \item ITF 2of5, interleaved Two of Five.
+\end{itemize}
+
+The package provides drivers for different graphic format, at the moment are:
+\begin{itemize}
+ \item PDF Portable Document Format (require a modern \TeX{} engine),
+ \item SVG Scalable Vector Graphic.
+\end{itemize}
+
+The name \brcd{} is an assonance with the name Barcode. I started the project
+back in 2016 for getting barcode in my \TeX{} generated PDF documents, studying
+the Lua\TeX{} technology.
+
+
+\subsection{Manual Content}
+
+The manual is divided into three parts. At section~\ref{secEnter} the first look
+gives to the user a proof of concept to how to use and how works the package
+while the next parts present details like how to change the \emph{module} width
+of a EAN-13 barcode or how to implement a barcode symbology not already included
+in the package.
+
+The plan of the manual is (but some sections are not completed yet):
+\begin{description}
+\item[Part 1:] Get started
+\begin{itemize}
+ \item print your first barcode \( \to \) \ref{secEnter}
+ \item installing \brcd{} on your system \( \to \) \ref{secInstall}
+ \item \brcd{} \LaTeX{} package \( \to \) \ref{secLaTeXPkg}
+\end{itemize}
+\item[Part 2:] Advanced Work with \brcd{}
+\begin{itemize}
+ \item Lua framework description \( \to \) \ref{secFramework}
+ \item working example and use cases \( \to \) \ref{secExample}
+\end{itemize}
+\item[Part 3:] Reference and parameters
+\begin{itemize}
+ \item barcode symbology reference \( \to \) \ref{secBcRef}
+ \item \code{ga} specification
+ \item API reference \( \to \) \ref{secAPI}
+\end{itemize}
+\end{description}
+
+\subsection{Required knowledge and useful resources}
+
+The \brcd{} is a Lua package that can be executed by any Lua interpreter. To use
+it, it's necessary some knowledge of Lua programming language and a certain
+ability with the terminal of your computer system in order to accomplish command
+tasks or software installations.
+
+It's also possible to run \brcd{} directly from within a \TeX{} source file,
+compiled with a suitable typesetting engine like Lua\TeX{}. To do so a minimal
+\TeX{} system knowledge is required. As an example of this workflow you simply
+can look to this manual because itself is typesetted with LuaLa\TeX{}, running
+\brcd{} to include barcodes as a vector graphic object.
+
+Here is a collection of useful learning resources\dots
+
+%
+%
+%
+%
+
+
+\section{Get Started with Barracuda}
+\label{secEnter}
+
+The starting point to work with \brcd{} is always a plain text file with some
+code, late processed by a command line program with a Lua interpreter.
+
+As a practical example producing an EAN-13 barcode, in a text editor of your
+choice on a empty file called \code{first-run.lua}, type the following two lines
+of code:
+\medskip
+\begin{Verbatim}[label=\footnotesize\code{first-run.lua}]
+local barracuda = require "barracuda"
+barracuda:save("ean-13", "8006194056290", "my_barcode", "svg")
+\end{Verbatim}
+
+What you have done is to write a \emph{script}. If you have installed a Lua
+interpreter and \brcd{}, open a terminal and run the command:
+\begin{Verbatim}
+$ lua first-run.lua
+\end{Verbatim}
+
+You will see in the same directory of your script, appearing the new file
+\code{my\_barcode.svg} with the drawing:
+\begin{center}
+\includegraphics{image/8006194056290}
+\end{center}
+
+Coming back to the script \code{first-run.lua}, first of all, it's necessary to
+load the library with the standard statement \code{require()}. What that Lua
+function returns is an object---more precisely a table reference---where are
+stored every package features.
+
+We can now produce the EAN-13 barcode using the method \code{save()} of the
+\brcd{} object. The \code{save()} method takes in order the barcode symbology
+identifier, the data to be encoded as a string or also a whole number, the
+output file name and the optional output format.
+
+
+\subsection{Running Lua\TeX}
+
+Barracuda can also running inside Lua\TeX{} and the others Lua powered \TeX{}
+engine. The text source file is a bit difference respect to a Lua script: Lua
+code have to bring place as the argument of directlua primitive... we must use
+a box register of type horizontal...
+
+\begin{Verbatim}
+% !TeX program = LuaTeX
+\nopagenumbers
+\newbox\mybox
+\directlua{
+ local require "barracuda"
+ barracuda:hbox("ean-13", "8006194056290", "mybox")
+}\box\mybox
+\bye
+\end{Verbatim}
+
+The method \code{hbox()} works only with Lua\TeX{}.
+
+
+\subsection{A more deep look}
+
+Barracuda is designed to be modular and flexible. For example it is possible
+to draw different barcodes on the same canvas or tune barcode parameters.
+
+The main workflow to draw a barcode object reveals more details on internal
+structure. In fact, to draw an EAN-13 barcode we must do at least the following
+steps:
+\begin{enumerate}
+\item load the library,
+\item get a reference to the \code{Barcode} class,
+\item build an EAN encoder,
+\item build an EAN symbol passing data to a costructor,
+\item get a reference to a new canvas object,
+\item draw barcode on canvas,
+\item get a reference of driver object,
+\item address canvas toward a driver.
+\end{enumerate}
+
+Follow that step by step procedure the corresponding code is in the next
+listing:
+\begin{Verbatim}
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+
+local ean13, err_enc = barcode:new_encoder("ean-13")
+assert(ean13, err_enc)
+
+local symb, err_symb = ean13:from_string("8006194056290")
+assert(symb, err_symb)
+
+local canvas = barracuda:new_canvas()
+symb:append_ga(canvas)
+
+local driver = barracuda:get_driver()
+local ok, err_out = driver:save("svg", canvas, "my_barcode", "svg")
+assert(ok, err_out)
+\end{Verbatim}
+
+
+\section{Installing}
+\label{secInstall}
+
+\subsection{Installing `barracuda` for TeX Live}
+
+If you have TeX Live installed from CTAN or from DVD TeX Collection, check
+before any modification to your system if the package is already installed
+looking for \emph{installed} key in the output of the command:
+\begin{Verbatim}
+$ tlmgr show barracuda
+\end{Verbatim}
+
+If `barracuda` is not present, run the command:
+\begin{Verbatim}
+$ tlmgr install barracuda
+\end{Verbatim}
+
+If you have installed TeX Live via Linux OS repository try your distribution's
+package management system.
+
+It's also possible a manual installation:
+\begin{enumerate}
+\item Grab the sources from CTAN or \url{https://github.com/robitex/barracuda}.
+\item Unzip it at the root of one or your TDS trees.
+\item You may need to update some filename database after this, see your \TeX{}
+distribution's manual for details.
+\end{enumerate}
+
+\subsection{Installing for Lua}
+
+Manually copy \code{src} folder content to a suitable directory of your system
+that is reachable to Lua interpreter.
+
+
+\section{Barracuda \LaTeX{} Package}
+\label{secLaTeXPkg}
+
+The \LaTeX{} package delivered with \brcd{} is still under an early stage of
+development. The only macro available is \verb=\barracuda{encoder}{data}=.
+A simple example is the following source file for Lua\LaTeX{}:
+\begin{Verbatim}
+% !TeX program = LuaLaTeX
+\documentclass{article}
+\usepackage{barracuda}
+\begin{document}
+\leavevmode
+\barracuda{code39}{123ABC}\\
+\barracuda{code128}{123ABC}
+\end{document}
+\end{Verbatim}
+
+Every macro \verb=\barracuda= typesets a barcode symbol represented with the
+encoder defined in the first argument, the information defined by the second.
+
+
+\section{The Barracuda Framework}
+\label{secFramework}
+
+The \brcd{} package framework consists in indipendet modules: a barcode class
+hierarchy encoding a text into a barcode symbology; a geometrical library called
+\code{libgeo} representing several graphic object; an encoding library for the
+\code{ga} format (graphic assembler) several driver to "print" a ga stream
+into a file or a \TeX{} hbox register.
+
+To implement a barcode encoder you need to write a component called
+\emph{encoder} defining every parameters and producing the encoder class, while
+a driver must understand ga opcode stream and print the corresponding graphic
+object.
+
+Every barcode encoder come with a set of parameters, some of them can be
+reserved and can be setting up by the user only through the encoder.
+
+So, you can create many instances of the same encoder for a single barcode
+type, with its own parameter set.
+
+The basic idea is getting faster encoder, for which the user may set up
+paramenters at any level: barcode abstract class, encoder, down to a single
+symbol.
+
+Barcode class is completely indipendent from the ouput driver and viceversa.
+
+
+\section{Example and use cases}
+\label{secExample}
+
+TODO
+
+\section{Barcode Reference}
+\label{secBcRef}
+
+TODO
+
+\section{API reference}
+\label{secAPI}
+
+TODO
+
+\end{document}
diff --git a/Master/texmf-dist/doc/luatex/barracuda/doc/image/8006194056290.pdf b/Master/texmf-dist/doc/luatex/barracuda/doc/image/8006194056290.pdf
new file mode 100644
index 00000000000..8effe87846a
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/doc/image/8006194056290.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.pdf
new file mode 100644
index 00000000000..a075d25db11
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.tex
new file mode 100644
index 00000000000..33a81aeb5dd
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-barracuda-package/01-barracuda-latex-test.tex
@@ -0,0 +1,13 @@
+% !TeX program = LuaLaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+% test file: make a Code39 barcodes in a LaTeX document
+
+\documentclass{article}
+\usepackage{barracuda}
+
+\begin{document}
+A\barracuda{code39}{123QWE}A
+\end{document}
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/001-code128-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/001-code128-test.lua
new file mode 100644
index 00000000000..78645612dca
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/001-code128-test.lua
@@ -0,0 +1,32 @@
+-- Copyright (C) 2018 Roberto Giacomelli
+
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local c128, err = barcode:new_encoder("code128")
+assert(not err, err)
+
+print(c128._NAME)
+print(c128._VERSION)
+
+local info = c128:info()
+print("encoder name = ", info.name)
+print("description = ", info.description)
+for k, tp in ipairs(info.param) do
+ print(k, tp.name, tp.value)
+end
+
+local symb = c128:from_string("123")
+print("Symbol char list:")
+for _, c in ipairs(symb._code_data) do
+ print(c)
+end
+
+local canvas = barracuda:new_canvas()
+
+symb:append_ga(canvas)
+
+-- driver library
+local drv = barracuda:get_driver()
+drv:save("svg", canvas, "c128-123")
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.pdf
new file mode 100644
index 00000000000..c3c8460bc7e
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.tex
new file mode 100644
index 00000000000..eeaf60e4832
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/002-code128-test.tex
@@ -0,0 +1,125 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+Code 128 encoder test.
+
+Test 1: one simple barcode with default parameter:
+
+\directlua{
+barracuda = require "barracuda"
+}
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+
+local c128, err = barcode:new_encoder("code128")
+assert(not err, err)
+
+local symbo, err = c128:from_string("5465468132546812")
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+Test 2: two symbols, different anchor. The first symbol (more longer than the
+second one) takes the anchor parameters from the super class Barcode, while
+the second one takes anchors from itself:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local ok, err = barcode:set_param{ax = 1, ay = 1} % super class set up
+assert(ok, err)
+assert(barcode.ax == 1, "barcode ax is "..tostring(barcode.ax))
+
+local c128, err = barcode:enc_by_name("code128")
+assert(c128.ax == 1, "c128 ax is "..tostring(c128.ax))
+
+local s1, err = c128:from_string("12345678901234567890"); assert(s1, err)
+local s2, err = c128:from_string("0987654321", {ax = 0, ay = 0}); assert(s2, err)
+
+local s1_ax = s1:get_param("ax")
+assert(s1.ax == 1, "1 ax is "..tostring(s1.ax))
+local s2_ax = s2:get_param("ax")
+assert(s2.ax == 0, "0 ax is "..tostring(s2.ax))
+
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+s2:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}\box\mybox
+
+Test 3: play with the barcodes height (ydim parameter). The vertical anchor ay
+will take to super class Barcode, previously set to 1.0. So, the symbols will
+be aligned to the top:
+
+\directlua{
+local c128, err = barracuda:get_barcode_class()
+ :enc_by_name "code128"; assert(c128, err)
+
+local s, err = c128:from_string("123456"); assert(s, err)
+local canvas = barracuda:new_canvas()
+s:append_ga(canvas)
+
+local ok, err = s:set_param("ydim", tex.sp "30mm")
+s:append_ga(canvas, tex.sp "20mm")
+
+local ok, err = s:set_param("ydim", tex.sp "60mm")
+s:append_ga(canvas, tex.sp "40mm")
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}\box\mybox
+
+Test 4: set up vertical anchor globally to 0.0, locally to the encoder to 0.5
+and locally to 1.0:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+% set ay globally to 0.0
+local ok, err = barcode:set_param("ay", 0); assert(ok, err)
+
+local c128, err = barcode:enc_by_name "code128"; assert(c128, err)
+local s, err = c128:from_string("ABCDEFGHI"); assert(s, err)
+
+local canvas = barracuda:new_canvas()
+local _, err = s:append_ga(canvas); assert(not err, err)
+
+% set ay to 0.5 for the encoder
+local ok, err = c128:set_param("ay", 0.5); assert(ok, err)
+local _, err = s:append_ga(canvas, tex.sp "30mm"); assert(not err, err)
+% set locally to the symbol ay to 1.0
+local ok, err = s:set_param("ay", 1)
+local _, err = s:append_ga(canvas, tex.sp "60mm"); assert(not err, err)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}\box\mybox
+
+Test 5: uint() costructor and save a file with PDF literal code:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local c128, err = barcode:enc_by_name("code128"); assert(c128, err)
+local s, e = c128:from_uint(1234567890); assert(s, e)
+local canvas = barracuda:new_canvas()
+local _, errc = s:append_ga(canvas); assert(not errc, errc)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+drv:save("native", canvas, "02-05-pdfliteral")
+}\box\mybox
+
+That's all folk!
+
+\bye
+
+function Driver:save(id_drv, ga, filename, ext) --> ok, err \ No newline at end of file
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/02-05-pdfliteral.txt b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/02-05-pdfliteral.txt
new file mode 100644
index 00000000000..fe16d33c50b
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/02-05-pdfliteral.txt
@@ -0,0 +1,43 @@
+q
+-53.574521 -14.173154 1.190545 28.346308 re
+-51.788704 -14.173154 0.595272 28.346308 re
+-50.002887 -14.173154 1.785817 28.346308 re
+f
+S
+-47.026524 -14.173154 0.595272 28.346308 re
+-45.835979 -14.173154 1.190545 28.346308 re
+-43.454889 -14.173154 1.785817 28.346308 re
+f
+S
+-40.478527 -14.173154 0.595272 28.346308 re
+-38.097437 -14.173154 0.595272 28.346308 re
+-36.906892 -14.173154 1.190545 28.346308 re
+f
+S
+-33.930530 -14.173154 1.785817 28.346308 re
+-30.358895 -14.173154 0.595272 28.346308 re
+-29.168350 -14.173154 1.190545 28.346308 re
+f
+S
+-27.382533 -14.173154 1.190545 28.346308 re
+-23.810898 -14.173154 0.595272 28.346308 re
+-22.620353 -14.173154 0.595272 28.346308 re
+f
+S
+-20.834536 -14.173154 1.190545 28.346308 re
+-19.048719 -14.173154 2.381090 28.346308 re
+-16.072356 -14.173154 1.190545 28.346308 re
+f
+S
+-14.286539 -14.173154 0.595272 28.346308 re
+-12.500722 -14.173154 2.381090 28.346308 re
+-8.929087 -14.173154 0.595272 28.346308 re
+f
+S
+-7.738542 -14.173154 1.190545 28.346308 re
+-4.762180 -14.173154 1.785817 28.346308 re
+-2.381090 -14.173154 0.595272 28.346308 re
+-1.190545 -14.173154 1.190545 28.346308 re
+f
+S
+Q \ No newline at end of file
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/c128-123.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/c128-123.svg
new file mode 100644
index 00000000000..9f5b5847aaa
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code128/c128-123.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="18.479903mm" height="9.999947mm"
+ viewBox="-2.099989 -9.999947 18.479903 9.999947"
+>
+ <g stroke="black">
+ <path d="M0.209999 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ <path d="M0.734996 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ <path d="M1.364993 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ </g>
+ <g stroke="black">
+ <path d="M2.414987 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ <path d="M3.254983 -9.999947V-0.000000" style="stroke-width:0.629997"/>
+ <path d="M4.199978 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ </g>
+ <g stroke="black">
+ <path d="M4.829975 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ <path d="M5.774970 -9.999947V-0.000000" style="stroke-width:0.629997"/>
+ <path d="M6.614965 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ </g>
+ <g stroke="black">
+ <path d="M7.139962 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ <path d="M7.874959 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ <path d="M8.504955 -9.999947V-0.000000" style="stroke-width:0.629997"/>
+ </g>
+ <g stroke="black">
+ <path d="M9.344951 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ <path d="M10.289946 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ <path d="M11.024942 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ </g>
+ <g stroke="black">
+ <path d="M11.759938 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ <path d="M12.914932 -9.999947V-0.000000" style="stroke-width:0.629997"/>
+ <path d="M13.544929 -9.999947V-0.000000" style="stroke-width:0.209999"/>
+ <path d="M14.069926 -9.999947V-0.000000" style="stroke-width:0.419998"/>
+ </g>
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/001-code39-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/001-code39-test.lua
new file mode 100644
index 00000000000..e4a8569e938
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/001-code39-test.lua
@@ -0,0 +1,41 @@
+-- Copyright (C) 2019 Roberto Giacomelli
+-- test Code 39 encoder
+
+local barracuda = require "barracuda"
+
+for k, v in pairs(barracuda) do
+ print(k,v)
+end
+
+local barcode = barracuda:get_barcode_class()
+
+local c39, err = barcode:new_encoder("code39")
+assert(not err, err)
+
+print(c39._NAME)
+print(c39._VERSION)
+
+local info = c39:info()
+
+print("encoder name = ", info.name)
+print("description = ", info.description)
+
+for k, tp in ipairs(info.param) do
+ print(k, tp.name, tp.value)
+end
+
+local symb = c39:from_string("123")
+
+print("print internal representation of chars")
+for _, c in ipairs(symb.code) do
+ print(c)
+end
+print()
+
+local canvas = barracuda:new_canvas()
+symb:append_ga(canvas)
+
+-- native driver
+local drv = barracuda:get_driver()
+
+for _, code in ipairs(canvas._data) do print(code) end
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.pdf
new file mode 100644
index 00000000000..060a61e8929
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.tex
new file mode 100644
index 00000000000..73f91aac430
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/002-code39-test.tex
@@ -0,0 +1,120 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+Test 1: Code 39 symbol with default parameters:
+
+\directlua{
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :new_encoder("code39")
+assert(not err, err)
+
+local symbol, err = c39:from_string("ABC12QJ31")
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+Test 2: get the reference of the previous encoder and typeset two
+Code 39 symbols on the same canvas, one above to the other:
+
+\directlua{
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :enc_by_name("code39")
+ assert(c39, err)
+
+local s1, err = c39:from_string("ZKPQJ31"); assert(s1, err)
+local s2, err = c39:from_string("RTFG746", {text_vpos="top"}); assert(s2, err)
+
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+
+local h2 = s2:get_param("height")
+s2:append_ga(canvas, 0.0, h2 + tex.sp "5pt")
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+Test 3: with the same encoder print a symbol, change globally the height,
+and reprint the same symbol again on the same canvas:
+
+\directlua{
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :enc_by_name("code39")
+ assert(c39, err)
+
+local s1, err = c39:from_string("ZKPQJ31"); assert(s1, err)
+
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+
+local h = s1:get_param("height")
+c39:set_param("height", 2*h)
+c39:set_param {text_vpos = "top"}
+
+s1:append_ga(canvas, 0.0, h + tex.sp "5pt")
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+Test 4: do the same in test 3 but change locally parameters as
+height and text properties:
+
+\directlua{
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :enc_by_name("code39")
+ assert(c39, err)
+
+local s1, err = c39:from_string("0123456789"); assert(s1, err)
+
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+local h, err = s1:get_param("height"); assert(h, err)
+local ok, err = s1:set_param{
+ height = h/2,
+ text_enabled = true,
+ text_vpos = "bottom",
+ text_hpos = "spaced",
+ text_star = true,
+ ay = 1,
+}; assert(ok, err)
+s1:append_ga(canvas, 0.0, - tex.sp "5pt")
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+Test 5: create a new encoder with a large module value:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+
+local c39, err = barcode:new_encoder("code39", "e2", {module = tex.sp "0.5mm"})
+assert(c39, err)
+
+local s1, err = c39:from_string("02040608"); assert(s1, err)
+
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+\bye
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.pdf
new file mode 100644
index 00000000000..66b04e61e38
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.tex
new file mode 100644
index 00000000000..a4ba3d6e81c
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/003-code39-test.tex
@@ -0,0 +1,53 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+Test 3: the same Code 39 symbol drawing multiple time on the same canvas
+
+\directlua{
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :new_encoder("code39")
+assert(not err, err)
+local err
+local symbol
+symbol, err = c39:from_string("ABCDEF12QJ31+")
+assert(not err, err)
+
+local ok, err = c39:set_param("text_vpos", "top")
+assert(ok, err)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+
+local ok, err = symbol:set_param("text_hpos", "center")
+assert(ok, err)
+symbol:append_ga(canvas, tex.sp "4.5cm")
+
+local ok, err = symbol:set_param("text_hpos", "right")
+assert(ok, err)
+symbol:append_ga(canvas, tex.sp "9.0cm")
+
+local ok, err = c39:set_param("text_vpos", "bottom")
+assert(ok, err)
+
+local ok, err = symbol:set_param("text_hpos", "left")
+symbol:append_ga(canvas, 0, tex.sp "-2.0cm")
+
+local ok, err = symbol:set_param("text_hpos", "center")
+assert(ok, err)
+symbol:append_ga(canvas, tex.sp "4.5cm", tex.sp "-2.0cm")
+
+local ok, err = symbol:set_param("text_hpos", "right")
+assert(ok, err)
+symbol:append_ga(canvas, tex.sp "9.0cm", tex.sp "-2.0cm")
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+\bye
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.pdf
new file mode 100644
index 00000000000..3c96d9233b4
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.tex
new file mode 100644
index 00000000000..559dc943837
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/004-code39-test.tex
@@ -0,0 +1,46 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+Test 4: check uint costructor:
+
+\directlua{
+barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :new_encoder("code39")
+assert(not err, err)
+local err
+local symbol
+symbol, err = c39:from_uint(0, {text_hpos="center"})
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+\directlua{
+local c39, err = barracuda:get_barcode_class()
+ :enc_by_name("code39")
+assert(c39, err)
+local e
+local symbol
+symbol, e = c39:from_uint(0123456789, {text_hpos="spaced",text_star=true})
+assert(not e, e)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\box\mybox
+
+\bye
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/005-code39-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/005-code39-test.lua
new file mode 100644
index 00000000000..4ac0ff171d6
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/005-code39-test.lua
@@ -0,0 +1,8 @@
+
+-- Code 39 test file number 5
+
+local barracuda = require "barracuda"
+barracuda:save("code39", "ABCDEFG", "my_barcode")
+
+-- end of test file
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-code39-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-code39-test.lua
new file mode 100644
index 00000000000..d33ad4ffaf1
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-code39-test.lua
@@ -0,0 +1,45 @@
+
+local cm = 1864679.8110236 -- sp
+
+local barracuda = require "barracuda"
+local c39, err = barracuda:get_barcode_class()
+ :new_encoder("code39")
+assert(not err, err)
+local err
+local symbol
+symbol, err = c39:from_string("ABCDEF12QJ31+")
+assert(not err, err)
+
+local ok, err = c39:set_param("text_vpos", "top")
+assert(ok, err)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+
+local ok, err = symbol:set_param("text_hpos", "center")
+assert(ok, err)
+symbol:append_ga(canvas, 4.5*cm)
+
+local ok, err = symbol:set_param("text_hpos", "right")
+assert(ok, err)
+symbol:append_ga(canvas, 9.0*cm)
+
+local ok, err = c39:set_param("text_vpos", "bottom")
+assert(ok, err)
+
+local ok, err = symbol:set_param("text_hpos", "left")
+symbol:append_ga(canvas, 0, -2.0*cm)
+
+local ok, err = symbol:set_param("text_hpos", "center")
+assert(ok, err)
+symbol:append_ga(canvas, 4.5*cm, -2.0*cm)
+
+local ok, err = symbol:set_param("text_hpos", "right")
+assert(ok, err)
+symbol:append_ga(canvas, 9.0*cm, -2.0*cm)
+
+local drv = barracuda:get_driver()
+drv:save("svg", canvas, "006-six")
+
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-six.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-six.svg
new file mode 100644
index 00000000000..25ce8bb34cd
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/006-six.svg
@@ -0,0 +1,653 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="132.036779mm" height="33.746381mm"
+ viewBox="-2.539987 -10.873169 132.036779 33.746381"
+>
+ <g stroke="black">
+ <path d="M0.095249 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M0.666746 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M1.142994 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M1.714491 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M2.190738 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M2.666986 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M3.143233 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M3.524231 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M4.095728 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M4.571976 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M5.048223 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M5.524471 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M6.000718 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M6.572215 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M7.048463 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M7.619960 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M8.191457 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M8.667704 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M9.239201 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M9.620199 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M10.001197 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M10.382195 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M10.858443 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M11.525189 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M12.001437 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M12.572934 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M13.049181 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M13.525429 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M14.192175 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M14.573173 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M14.954171 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M15.430419 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M16.001916 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M16.668662 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M17.049660 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M17.525908 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M18.002155 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M18.573652 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M18.954650 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M19.430898 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M19.907145 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M20.383393 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M21.050139 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M21.431137 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M21.907385 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M22.383632 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M22.764630 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M23.145628 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M23.621876 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M24.383872 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M24.860119 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M25.241117 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M25.717365 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M26.479361 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M26.955608 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M27.431856 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M28.003353 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M28.670099 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M29.051097 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M29.432095 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M29.908343 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M30.384590 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M30.956087 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M31.337085 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M31.813333 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M32.289580 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M32.861077 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M33.242075 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M33.813572 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M34.385069 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M34.766067 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M35.337564 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M35.813812 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M36.385309 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M36.861556 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="0.000000" y="-8.773169" font-family="Verdana" font-size="2.877000">
+ ABCDEF12QJ31+ </text>
+ <g stroke="black">
+ <path d="M45.095249 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M45.666746 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M46.142994 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M46.714491 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M47.190738 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M47.666986 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M48.143233 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M48.524231 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M49.095728 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M49.571976 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M50.048223 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M50.524471 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M51.000718 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M51.572215 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M52.048463 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M52.619960 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M53.191457 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M53.667704 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M54.239201 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M54.620199 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M55.001197 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M55.382195 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M55.858443 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M56.525189 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M57.001437 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M57.572934 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M58.049181 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M58.525429 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M59.192175 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M59.573173 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M59.954171 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M60.430419 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M61.001916 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M61.668662 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M62.049660 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M62.525908 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M63.002155 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M63.573652 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M63.954650 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M64.430898 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M64.907145 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M65.383393 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M66.050139 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M66.431137 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M66.907385 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M67.383632 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M67.764630 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M68.145628 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M68.621876 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M69.383872 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M69.860119 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M70.241117 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M70.717365 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M71.479361 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M71.955608 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M72.431856 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M73.003353 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M73.670099 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M74.051097 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M74.432095 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M74.908343 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M75.384590 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M75.956087 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M76.337085 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M76.813333 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M77.289580 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M77.861077 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M78.242075 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M78.813572 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M79.385069 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M79.766067 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M80.337564 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M80.813812 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M81.385309 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M81.861556 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="63.478403" y="-8.773169" font-family="Verdana" font-size="2.877000" text-anchor="middle">
+ ABCDEF12QJ31+ </text>
+ <g stroke="black">
+ <path d="M90.095249 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M90.666746 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M91.142994 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M91.714491 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M92.190738 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M92.666986 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M93.143233 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M93.524231 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M94.095728 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M94.571976 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M95.048223 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M95.524471 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M96.000718 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M96.572215 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M97.048463 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M97.619960 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M98.191457 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M98.667704 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M99.239201 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M99.620199 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M100.001197 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M100.382195 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M100.858443 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M101.525189 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M102.001437 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M102.572934 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M103.049181 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M103.525429 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M104.192175 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M104.573173 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M104.954171 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M105.430419 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M106.001916 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M106.668662 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M107.049660 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M107.525908 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M108.002155 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M108.573652 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M108.954650 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M109.430898 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M109.907145 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M110.383393 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M111.050139 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M111.431137 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M111.907385 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M112.383632 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M112.764630 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M113.145628 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M113.621876 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M114.383872 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M114.860119 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M115.241117 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M115.717365 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M116.479361 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M116.955608 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M117.431856 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M118.003353 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M118.670099 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M119.051097 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M119.432095 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M119.908343 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M120.384590 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M120.956087 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M121.337085 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M121.813333 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M122.289580 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M122.861077 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M123.242075 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M123.813572 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M124.385069 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M124.766067 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M125.337564 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M125.813812 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M126.385309 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M126.861556 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="126.956806" y="-8.773169" font-family="Verdana" font-size="2.877000" text-anchor="end">
+ ABCDEF12QJ31+ </text>
+ <g stroke="black">
+ <path d="M0.095249 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M0.666746 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M1.142994 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M1.714491 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M2.190738 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M2.666986 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M3.143233 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M3.524231 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M4.095728 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M4.571976 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M5.048223 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M5.524471 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M6.000718 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M6.572215 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M7.048463 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M7.619960 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M8.191457 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M8.667704 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M9.239201 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M9.620199 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M10.001197 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M10.382195 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M10.858443 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M11.525189 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M12.001437 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M12.572934 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M13.049181 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M13.525429 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M14.192175 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M14.573173 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M14.954171 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M15.430419 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M16.001916 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M16.668662 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M17.049660 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M17.525908 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M18.002155 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M18.573652 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M18.954650 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M19.430898 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M19.907145 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M20.383393 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M21.050139 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M21.431137 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M21.907385 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M22.383632 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M22.764630 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M23.145628 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M23.621876 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M24.383872 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M24.860119 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M25.241117 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M25.717365 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M26.479361 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M26.955608 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M27.431856 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M28.003353 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M28.670099 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M29.051097 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M29.432095 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M29.908343 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M30.384590 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M30.956087 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M31.337085 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M31.813333 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M32.289580 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M32.861077 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M33.242075 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M33.813572 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M34.385069 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M34.766067 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M35.337564 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M35.813812 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M36.385309 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M36.861556 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="0.000000" y="22.873212" font-family="Verdana" font-size="2.877000">
+ ABCDEF12QJ31+ </text>
+ <g stroke="black">
+ <path d="M45.095249 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M45.666746 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M46.142994 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M46.714491 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M47.190738 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M47.666986 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M48.143233 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M48.524231 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M49.095728 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M49.571976 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M50.048223 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M50.524471 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M51.000718 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M51.572215 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M52.048463 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M52.619960 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M53.191457 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M53.667704 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M54.239201 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M54.620199 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M55.001197 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M55.382195 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M55.858443 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M56.525189 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M57.001437 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M57.572934 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M58.049181 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M58.525429 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M59.192175 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M59.573173 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M59.954171 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M60.430419 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M61.001916 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M61.668662 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M62.049660 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M62.525908 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M63.002155 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M63.573652 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M63.954650 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M64.430898 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M64.907145 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M65.383393 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M66.050139 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M66.431137 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M66.907385 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M67.383632 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M67.764630 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M68.145628 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M68.621876 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M69.383872 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M69.860119 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M70.241117 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M70.717365 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M71.479361 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M71.955608 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M72.431856 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M73.003353 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M73.670099 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M74.051097 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M74.432095 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M74.908343 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M75.384590 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M75.956087 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M76.337085 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M76.813333 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M77.289580 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M77.861077 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M78.242075 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M78.813572 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M79.385069 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M79.766067 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M80.337564 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M80.813812 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M81.385309 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M81.861556 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="63.478403" y="22.873212" font-family="Verdana" font-size="2.877000" text-anchor="middle">
+ ABCDEF12QJ31+ </text>
+ <g stroke="black">
+ <path d="M90.095249 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M90.666746 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M91.142994 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M91.714491 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M92.190738 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M92.666986 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M93.143233 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M93.524231 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M94.095728 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M94.571976 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M95.048223 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M95.524471 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M96.000718 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M96.572215 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M97.048463 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M97.619960 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M98.191457 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M98.667704 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M99.239201 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M99.620199 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M100.001197 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M100.382195 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M100.858443 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M101.525189 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M102.001437 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M102.572934 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M103.049181 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M103.525429 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M104.192175 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M104.573173 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M104.954171 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M105.430419 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M106.001916 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M106.668662 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M107.049660 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M107.525908 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M108.002155 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M108.573652 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M108.954650 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M109.430898 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M109.907145 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M110.383393 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M111.050139 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M111.431137 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M111.907385 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M112.383632 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M112.764630 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M113.145628 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M113.621876 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M114.383872 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M114.860119 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M115.241117 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M115.717365 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M116.479361 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M116.955608 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M117.431856 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M118.003353 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M118.670099 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M119.051097 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M119.432095 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M119.908343 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M120.384590 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M120.956087 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M121.337085 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M121.813333 12.000042V20.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M122.289580 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M122.861077 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M123.242075 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M123.813572 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M124.385069 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M124.766067 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M125.337564 12.000042V20.000000" style="stroke-width:0.190499"/>
+ <path d="M125.813812 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M126.385309 12.000042V20.000000" style="stroke-width:0.380998"/>
+ <path d="M126.861556 12.000042V20.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="126.956806" y="22.873212" font-family="Verdana" font-size="2.877000" text-anchor="end">
+ ABCDEF12QJ31+ </text>
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/my_barcode.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/my_barcode.svg
new file mode 100644
index 00000000000..426fb3de867
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-code39/my_barcode.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="27.177857mm" height="10.873169mm"
+ viewBox="-2.539987 -7.999958 27.177857 10.873169"
+>
+ <g stroke="black">
+ <path d="M0.095249 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M0.666746 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M1.142994 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M1.714491 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M2.190738 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M2.666986 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M3.143233 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M3.524231 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M4.095728 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M4.571976 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M5.048223 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M5.524471 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M6.000718 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M6.572215 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M7.048463 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M7.619960 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M8.191457 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M8.667704 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M9.239201 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M9.620199 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M10.001197 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M10.382195 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M10.858443 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M11.525189 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M12.001437 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M12.572934 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M13.049181 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M13.525429 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M14.192175 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M14.573173 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M14.954171 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M15.430419 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M16.001916 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M16.668662 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M17.049660 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <g stroke="black">
+ <path d="M17.430658 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M17.811656 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M18.192654 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M18.859401 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M19.430898 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M19.907145 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M20.478642 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ <path d="M20.954890 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M21.526387 -7.999958V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M22.002634 -7.999958V-0.000000" style="stroke-width:0.190499"/>
+ </g>
+ <text x="0.000000" y="2.873212" font-family="Verdana" font-size="2.877000">
+ ABCDEFG </text>
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.pdf
new file mode 100644
index 00000000000..0e8abb933f9
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.tex
new file mode 100644
index 00000000000..c0a4db3894e
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/001-13-ean-test.tex
@@ -0,0 +1,220 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+EAN encoder test.
+
+Test 1: one simple barcode EAN13 with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+
+local ean13, err = barcode:new_encoder("ean-13")
+assert(not err, err)
+
+local symbo, err = ean13:from_string("8006194056290")
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\medskip
+Test 2: one simple EAN8 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+
+local ean8, err = barcode:new_encoder("ean-8")
+assert(not err, err)
+
+local symbo, err = ean8:from_string("96385074")
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\medskip
+Test 3: one simple EAN5 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean5, err = barcode:new_encoder("ean-5")
+assert(not err, err)
+local symbo, err = ean5:from_string("54495")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\medskip
+Test 4: one simple EAN2 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean2, err = barcode:new_encoder("ean-2")
+assert(not err, err)
+local symbo, err = ean2:from_string("53")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\medskip
+Test 5: EAN13 + EAN5 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:new_encoder("ean-13+5"); assert(not err, err)
+local n = 123456789012
+local c = ean:checksum(n)
+local s = n .. c
+local symbo, err = ean:from_string(s.."12345")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 5\vrule\box\mybox \vrule Test 5\vrule
+
+\medskip
+Test 6: EAN13 + EAN2 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:new_encoder("ean-13+2"); assert(not err, err)
+local n = 123456789012
+local c = ean:checksum(n)
+local s = n .. c
+local symbo, err = ean:from_string(s.."12")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 6\vrule\box\mybox \vrule Test 6\vrule
+
+\medskip
+Test 7: EAN8 + EAN5 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:new_encoder("ean-8+5"); assert(not err, err)
+local n = 1234567
+local c = ean:checksum(n)
+local s = n .. c
+local symbo, err = ean:from_string(s.."12345")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 7\vrule\box\mybox \vrule Test 7\vrule
+
+\medskip
+Test 8: EAN8 + EAN2 barcode with default parameter:
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:new_encoder("ean-8+2"); assert(not err, err)
+local n = 7865431
+local c = ean:checksum(n)
+local s = n .. c
+local symbo, err = ean:from_string(s.."88")
+assert(not err, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 8\vrule\box\mybox \vrule Test 8\vrule
+
+\medskip
+Test 9: draw an EAN13 symbol with a user defined height.
+
+\smallskip
+We will test also the function barcode:enc\_by\_name(bc\_type, name),
+reusing encoders generated previuosly. The height parameter remain local
+to the object symbol.
+\smallskip
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:enc_by_name("ean-13"); assert(not err, err)
+local n = 818571884348
+local c = ean:checksum(n)
+local s = n .. c
+local symbo, err = ean:from_string(s); assert(not err, err)
+local ok, err = symbo:set_param("height", tex.sp "5mm"); assert(ok, err)
+local canvas = barracuda:new_canvas()
+symbo:append_ga(canvas)
+
+local s2, err = ean:from_uint(8001120972163); assert(not err, err)
+s2:append_ga(canvas, tex.sp "45mm", 0)
+
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 9\vrule\box\mybox \vrule Test 9\vrule
+
+\medskip
+Test 10: draw EAN13 symbols with a user defined height.
+
+\smallskip
+The parameter height is setting up in the encoder so it will be global.
+\smallskip
+
+\directlua{
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local ean, err = barcode:enc_by_name("ean-13"); assert(not err, err)
+local ok, err = ean:set_param("height", tex.sp "5mm"); assert(ok, err)
+local n = 758458535897; local c = ean:checksum(n); local s = n .. c
+local s1, err = ean:from_string(s); assert(not err, err)
+local canvas = barracuda:new_canvas()
+s1:append_ga(canvas)
+local s2, err = ean:from_uint(8001120972163); assert(not err, err)
+s2:append_ga(canvas, tex.sp "40mm", 0)
+local s3, err = ean:from_uint(8000570000310); assert(not err, err)
+local ok, e = s3:set_param{height = tex.sp "10mm"}; assert(ok, e)
+s3:append_ga(canvas, tex.sp "90mm", 0)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule Test 10\vrule\box\mybox \vrule Test 10\vrule
+
+\medskip
+That's all folk!
+
+\bye
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.pdf
new file mode 100644
index 00000000000..568050371c8
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.tex
new file mode 100644
index 00000000000..2c82373b61a
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/002-ean-test.tex
@@ -0,0 +1,12 @@
+% !TeX program = LuaTeX
+\nopagenumbers
+\newbox\mybox
+\directlua{
+ local barracuda = require "barracuda"
+ barracuda:hbox("ean-13", "8006194056290", "mybox")
+}
+\pagewidth=80mm
+\pageheight=60mm
+\box\mybox
+\bye
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.pdf
new file mode 100644
index 00000000000..baa5a5b9cd4
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.tex
new file mode 100644
index 00000000000..59b17c4c073
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/003-ean-test.tex
@@ -0,0 +1,16 @@
+% !TeX program = LuaLaTeX
+\documentclass{standalone}
+\usepackage{fontspec}
+\setmainfont{ocrb10.otf}
+\newbox\mybox
+\directlua{
+ local barracuda = require "barracuda"
+ barracuda:hbox("ean-13", "8006194056290", "mybox")
+}
+
+\begin{document}
+\box\mybox
+\end{document}
+
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/004-ean-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/004-ean-test.lua
new file mode 100644
index 00000000000..017e0725b8b
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/004-ean-test.lua
@@ -0,0 +1,9 @@
+
+local barracuda = require "barracuda"
+barracuda:save("ean-13", "8006194056290", "8006194056290")
+
+
+
+
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/8006194056290.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/8006194056290.svg
new file mode 100644
index 00000000000..f7965e94d4c
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ean/8006194056290.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="37.289804mm" height="25.279878mm"
+ viewBox="-3.629981 -24.499871 37.289804 25.279878"
+>
+ <g stroke="black">
+ <path d="M0.164999 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ <path d="M0.824996 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M2.309988 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ <path d="M3.134984 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M3.794980 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M5.114973 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ </g>
+ <g stroke="black">
+ <path d="M6.104968 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M7.259962 -24.499871V-1.649991" style="stroke-width:1.319993"/>
+ </g>
+ <g stroke="black">
+ <path d="M8.579955 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ <path d="M9.899948 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ </g>
+ <g stroke="black">
+ <path d="M11.054942 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M12.044937 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ </g>
+ <g stroke="black">
+ <path d="M13.034931 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M14.519924 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ </g>
+ <g stroke="black">
+ <path d="M15.344919 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ <path d="M16.004916 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M16.994911 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ <path d="M18.314904 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M18.974900 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M20.294893 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ </g>
+ <g stroke="black">
+ <path d="M21.284888 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ <path d="M21.944885 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M23.759875 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ <path d="M24.749870 -24.499871V-1.649991" style="stroke-width:0.659997"/>
+ </g>
+ <g stroke="black">
+ <path d="M26.234862 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ <path d="M27.224857 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M28.544850 -24.499871V-1.649991" style="stroke-width:0.989995"/>
+ <path d="M29.864843 -24.499871V-1.649991" style="stroke-width:0.329998"/>
+ </g>
+ <g stroke="black">
+ <path d="M30.524839 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ <path d="M31.184836 -24.499871V-0.000000" style="stroke-width:0.329998"/>
+ </g>
+ <text x="-3.629981" y="0.780007" font-family="Verdana" font-size="2.877000">
+ 8 </text>
+ <text y="0.780007" font-family="Verdana" font-size="2.877000" text-anchor="middle">
+ <tspan x="2.043326">0</tspan>
+ <tspan x="4.459979">0</tspan>
+ <tspan x="6.876631">6</tspan>
+ <tspan x="9.293284">1</tspan>
+ <tspan x="11.709936">9</tspan>
+ <tspan x="14.126589">4</tspan>
+ </text>
+ <text y="0.780007" font-family="Verdana" font-size="2.877000" text-anchor="middle">
+ <tspan x="17.223246">0</tspan>
+ <tspan x="19.639899">5</tspan>
+ <tspan x="22.056551">6</tspan>
+ <tspan x="24.473204">2</tspan>
+ <tspan x="26.889856">9</tspan>
+ <tspan x="29.306509">0</tspan>
+ </text>
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.pdf
new file mode 100644
index 00000000000..b8a7477c7fc
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.tex
new file mode 100644
index 00000000000..1a5ed80d0c5
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-pdfliteral/001-ga-pdfliteral-test.tex
@@ -0,0 +1,740 @@
+% !TeX program = LuaTeX
+% test for ga-canvas pdfliteral driver
+%
+% Copyright (C) 2019 Roberto Giacomelli
+% see LICENSE.txt file
+
+---ga--- is a binary format as an istruction set similar to
+a sort of assembler language that describes simple graphic
+objects like lines and rectangles.
+This file contains tests aiming to check the pdfliteral
+driver capability to render such ga streams---usually a Lua
+array.
+
+The pdfliteral driver directly inserts PDF vector graphic
+primitives within the output and should be intented as the
+"native" driver of barracuda package.
+
+The complete reference of the ---ga--- format is available
+throgh out the content of the "ga-grammar.tex" file.
+
+Please note that all dimensions are in scaled point, the
+very small \TeX{} internal unit, in fact we have that
+65536sp = 1pt.
+
+Running the source file with luatex. The typesetting engine
+executes the directlua macro, so vector graphics appear in
+the PDF output file.
+
+\newbox\mybox
+\directlua{
+ driver = require [[lib-driver.brcd-driver]] % global Lua variables
+ pt = tex.sp [[1pt]] % 1pt = 65536sp
+}
+
+Let's start drawing an horizontal line 100pt long:
+\directlua{
+ local ga = {_data = {33, 0*pt, 100*pt, 0*pt}}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+or two different parallel lines 24pt long:
+\directlua{
+ local ga = {_data = {33, 0*pt, 24*pt, 0*pt, 33, 0*pt, 24*pt, 5*pt}}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+and again two horizontal lines 10pt thick, touching a corner:
+\directlua{
+ local ga = {_data = {
+ 1, 10*pt,
+ 33, -24*pt, 0*pt, -5*pt,
+ 33, 0*pt, 24*pt, 5*pt,
+ }}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+Several vertical lines with its horizontal limits:
+\directlua{
+ local ga = { _data = {
+ 34, -20*pt, 20*pt, 0*pt,
+ 34, -15*pt, 15*pt, 5*pt,
+ 34, -10*pt, 10*pt, 10*pt,
+ 34, -5*pt, 5*pt, 15*pt,
+ 34, -.5*pt, .5*pt, 20*pt,
+ 34, -5*pt, 5*pt, 25*pt,
+ 34, -10*pt, 10*pt, 30*pt,
+ 34, -15*pt, 15*pt, 35*pt,
+ 34, -20*pt, 20*pt, 40*pt,
+ 1, .05*pt,
+ 33, 0*pt, 40*pt, -20*pt,
+ 33, 0*pt, 40*pt, 20*pt,
+ }}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+Finally a little rectangle:
+\directlua{
+ local ga = {_data = {
+ 1, 5*pt,
+ 48, 0*pt, 0*pt, 15*pt, 10*pt,
+ }}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+\bigskip
+Test number 1: a vbar 2pt width, 20pt height:
+\directlua{
+ % vbar: <36> y1 y2 <nbars> x1 w1 x2 w2 ... xn wn
+ local ga = {_data = {36, 0, 20*pt, 1, 0.0, 2*pt}}
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+\bigskip
+Test number 2: ten vbars in a row equally spaced by 10pt:
+\directlua{
+ local ga = {36, 0, 10*pt, 10,}
+ for i = 0, 9 do
+ ga[i*2 + 5] = 5*pt + i*20*pt
+ ga[i*2 + 6] = 10*pt
+ end
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 3: two series of vbars 10pt and 5pt large:
+\directlua{
+ local ga = {36, 0, 10*pt, 10,}
+ for i = 0, 9 do
+ ga[i*2 + 5] = 5*pt + i*20*pt
+ ga[i*2 + 6] = 10*pt
+ end
+ ga[25] = 36 % vbar opcode
+ ga[26] = 2.5*pt % y1
+ ga[27] = 7.5*pt % y2
+ ga[28] = 9 % number of bars
+ for i = 0, 8 do
+ ga[i*2 + 29] = 15*pt + i*20*pt
+ ga[i*2 + 30] = 5*pt
+ end
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 4: a bunch of thin vertical bars (25):
+\directlua{
+ local ga = {}
+ ga[1] = 36 % vbar opcode
+ ga[2] = 5*pt % y1
+ ga[3] = 25*pt % y2
+ ga[4] = 25 % number of bars
+ for i = 0, 24 do
+ ga[i*2 + 5] = 1*pt + i*4*pt
+ ga[i*2 + 6] = 2*pt
+ end
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule A\box\mybox A\vrule
+
+\bigskip
+Test number 5: two rows of a bunch of thin bars:
+\directlua{
+ local ga = {}
+ ga[1] = 36 % vbar opcode
+ ga[2] = 5*pt % y1
+ ga[3] = 25*pt % y2
+ ga[4] = 25 % number of bars
+ for i = 0, 24 do
+ ga[i*2 + 5] = 1*pt + i*4*pt
+ ga[i*2 + 6] = 2*pt
+ end
+ ga[55] = 36 % vbar opcode
+ ga[56] = 25*pt % y1
+ ga[57] = 45*pt % y2
+ ga[58] = 24 % number of bars
+ for i = 0, 23 do
+ ga[i*2 + 59] = 3*pt + i*4*pt
+ ga[i*2 + 60] = 2*pt
+ end
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 6: staircase of Vbars (manually data definition):
+\directlua{
+ local ga = {
+ 36, % vbar opcode
+ 0*pt, % y1
+ 20*pt, % y2
+ 1, % number of bars
+ 5*pt, % x
+ 10*pt, % w
+ 36, % vbar opcode
+ 20*pt, % y1
+ 40*pt, % y2
+ 1, % number of bars
+ 15*pt, % x
+ 10*pt, % w
+ 36, % vbar opcode
+ 40*pt, % y1
+ 60*pt, % y2
+ 1, % number of bars
+ 25*pt, % x
+ 10*pt, % w
+ }
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 7: vbars with spaced text, in three different rows:
+\directlua{
+ local ga = {}
+ ga[1] = 36 % vbar opcode
+ ga[2] = 0*pt % y1
+ ga[3] = 20*pt % y2
+ ga[4] = 8 % number of bars
+ for i = 1,8 do
+ ga[3 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[4 + i*2] = 5*pt % bar width
+ end
+ ga[21] = 36 % vbar opcode
+ ga[22] = 30*pt % y1
+ ga[23] = 50*pt % y2
+ ga[24] = 8 % number of bars
+ for i = 1,8 do
+ ga[23 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[24 + i*2] = 5*pt % bar width
+ end
+ % 131 <x1: FLOAT> <xgap: FLOAT> <ay: DIM> <ypos: DIM> <c: CHARS>
+ ga[41] = 131 % opcode text_xspaced
+ ga[42] = 10*pt % x coordinate of the first glyph axis
+ ga[43] = 10*pt % x gap among glyphs
+ ga[44] = 0.5 % half height
+ ga[45] = 25*pt % y coordinate of glyps
+ ga[46] = 65 % A
+ ga[47] = 66 % B
+ ga[48] = 67 % C
+ ga[49] = 68 % D
+ ga[50] = 69 % E
+ ga[51] = 70 % F
+ ga[52] = 71 % G
+ ga[53] = 72 % H
+ ga[54] = 0
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 8: spaced text (checking the correct vertical alignment):
+\directlua{
+ local ga = {}
+ ga[1] = 36 % vbar opcode
+ ga[2] = 0*pt % y1
+ ga[3] = 20*pt % y2
+ ga[4] = 8 % number of bars
+ for i = 1,8 do
+ ga[3 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[4 + i*2] = 1*pt % bar width
+ end
+ ga[21] = 36 % vbar opcode
+ ga[22] = 40*pt % y1
+ ga[23] = 60*pt % y2
+ ga[24] = 8 % number of bars
+ for i = 1,8 do
+ ga[23 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[24 + i*2] = 1*pt % bar width
+ end
+ % 131 <x1: FLOAT> <xgap: FLOAT> <ay: DIM> <ypos: DIM> <c: CHARS>
+ ga[41] = 131 % opcode text_xspaced
+ ga[42] = 10*pt % x coordinate of the first glyph axis
+ ga[43] = 10*pt % x gap among glyphs
+ ga[44] = 0.0 % half height
+ ga[45] = 30*pt % y coordinate of glyps
+ ga[46] = 65 % A
+ ga[47] = 66 % B
+ ga[48] = 67 % C
+ ga[49] = string.byte("Q")
+ ga[50] = 69 % E
+ ga[51] = 70 % F
+ ga[52] = 71 % G
+ ga[53] = 72 % H
+ ga[54] = 0
+ ga[55] = 131 % opcode text_xspaced
+ ga[56] = 10*pt % x coordinate of the first glyph axis
+ ga[57] = 10*pt % x gap among glyphs
+ ga[58] = 1.0 % half height
+ ga[59] = 30*pt % y coordinate of glyps
+ ga[60] = 49 % 1
+ ga[61] = 50 % 2
+ ga[62] = 51 % 3
+ ga[63] = 52 % 4
+ ga[64] = 53 % 5
+ ga[65] = 54 % 6
+ ga[66] = 55 % 7
+ ga[67] = 56 % 8
+ ga[68] = 0
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 9: spaced text, check correct vertical alignment:
+\directlua{
+ local ga = {}
+ ga[1] = 36 % vbar opcode
+ ga[2] = 0*pt % y1
+ ga[3] = 20*pt % y2
+ ga[4] = 8 % number of bars
+ for i = 1,8 do
+ ga[3 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[4 + i*2] = 8*pt % bar width
+ end
+ ga[21] = 36 % vbar opcode
+ ga[22] = 40*pt % y1
+ ga[23] = 60*pt % y2
+ ga[24] = 8 % number of bars
+ for i = 1,8 do
+ ga[23 + i*2] = i * 2 * 5*pt % x coordinate of bar axis
+ ga[24 + i*2] = 8*pt % bar width
+ end
+ % 131 <x1: FLOAT> <xgap: FLOAT> <ay: DIM> <ypos: DIM> <c: CHARS>
+ ga[41] = 131 % opcode text_xspaced
+ ga[42] = 10*pt % x coordinate of the first glyph axis
+ ga[43] = 10*pt % x gap among glyphs
+ ga[44] = 0.0 % half height
+ ga[45] = 20*pt % y coordinate of glyps
+ ga[46] = 65 % A
+ ga[47] = 66 % B
+ ga[48] = 67 % C
+ ga[49] = 68 % D
+ ga[50] = 69 % E
+ ga[51] = 70 % F
+ ga[52] = 71 % G
+ ga[53] = 72 % H
+ ga[54] = 0
+ ga[55] = 131 % opcode text_xspaced
+ ga[56] = 10*pt % x coordinate of the first glyph axis
+ ga[57] = 10*pt % x gap among glyphs
+ ga[58] = 1.0 % half height
+ ga[59] = 40*pt % y coordinate of glyps
+ ga[60] = 49 % 1
+ ga[61] = 50 % 2
+ ga[62] = 51 % 3
+ ga[63] = 52 % 4
+ ga[64] = 53 % 5
+ ga[65] = 54 % 6
+ ga[66] = 55 % 7
+ ga[67] = 56 % 8
+ ga[68] = 0
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 10: two centered texts aligned to the baseline:
+\directlua{
+ local ga = {}
+ % 130 <ax: FLOAT> <ay: FLOAT> <xpos: DIM> <ypos: DIM> <c: CHARS>
+ ga[ 1] = 130 % opcode text
+ ga[ 2] = 0.5 % ax relative x coordinate
+ ga[ 3] = 1.0 % ay relative y coordinate
+ ga[ 4] = 0.0 % x position
+ ga[ 5] = 0.0 % y position
+ ga[ 6] = 65 % A
+ ga[ 7] = string.byte("Q") % Q depth glyph
+ ga[ 8] = 67 % C
+ ga[ 9] = 0
+ ga[10] = 130 % opcode text
+ ga[11] = 0.5 % ax
+ ga[12] = 0.0 % ay
+ ga[13] = 0.0 % x
+ ga[14] = 0.0 % y
+ ga[15] = 48 % 0
+ ga[16] = 49 % 1
+ ga[17] = 50 % 2
+ ga[18] = 51 % 3
+ ga[19] = 52 % 4
+ ga[20] = 53 % 5
+ ga[21] = 54 % 6
+ ga[22] = 55 % 7
+ ga[23] = 56 % 8
+ ga[24] = 57 % 9
+ ga[25] = 0
+ driver:ga_to_hbox({_data = ga}, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+So far, we have manually build data for ga stream. Next we are going to
+use the ga-canvas library.
+
+\bigskip
+In fact, all the previous tests are rebuild with the ga-canvas library.
+
+Test 1: a vbar 2pt width, 20pt height:
+\directlua{
+ gacanvas = require "lib-geo.brcd-gacanvas"
+ local ga = gacanvas:new()
+ local vbar = {_yline = {0.0, 2*pt}}
+ local err = ga:encode_Vbar(vbar, 0.0, 0.0, 20*pt) % x, w
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\box\mybox
+
+\bigskip
+Test 2: ten vbars equally spaced by 10pt:
+\directlua{
+ local ga = gacanvas:new()
+ local data = {}
+ for i = 0, 9 do
+ data[i*2 + 1] = 5*pt + i*20*pt % x
+ data[i*2 + 2] = 10*pt % w
+ end
+ local bars = {_yline = data}
+ local err = ga:encode_Vbar(bars, 0.0, 0.0, 10*pt)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test 3: two series of vbars 10pt and 5pt large:
+\directlua{
+ local b1 = {}
+ for i = 0, 9 do
+ b1[i*2 + 1] = i*20*pt
+ b1[i*2 + 2] = 10*pt
+ end
+ local b2 = {}
+ for i = 0, 8 do
+ b2[i*2 + 1] = i*20*pt
+ b2[i*2 + 2] = 5*pt
+ end
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar({_yline=b1}, 0.0, 0.0, 10*pt)
+ assert(not err, err)
+ err = ga:encode_Vbar({_yline=b2}, 10.0*pt, 2.5*pt, 7.5*pt)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test 4: a bunch of thin bars:
+\directlua{
+ local b = {}
+ for i = 0, 24 do
+ b[i*2 + 1] = 1*pt + i*4*pt
+ b[i*2 + 2] = 2*pt
+ end
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar({_yline=b}, 0.0, 5*pt, 25*pt)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule{ }\box\mybox{ }\vrule
+
+\bigskip
+Test 5: two levels of a bunch of thin bars:
+\directlua{
+ local b = {}
+ for i = 0, 24 do
+ b[i*2 + 1] = i*4*pt
+ b[i*2 + 2] = 2*pt
+ end
+ local b = {_yline=b}
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar(b, 0.0, 5*pt, 25*pt)
+ assert(not err, err)
+ err = ga:encode_Vbar(b, 2*pt, 25*pt, 45*pt, b)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 6: staircase of bars (manual insertion of data):
+\directlua{
+ local b = {_yline={0.0, 10*pt}}
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar(b, 0.0, 0.0, 20*pt)
+ assert(not err, err)
+ err = ga:encode_Vbar(b, 10*pt, 20*pt, 40*pt)
+ assert(not err, err)
+ err = ga:encode_Vbar(b, 20*pt, 40*pt, 60*pt)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 7: vbars with spaced text, all in three rows:
+\directlua{
+ local b = {}
+ for i = 0,7 do
+ b[i*2+1] = i*10*pt
+ b[i*2+2] = 5*pt
+ end
+ local vb = {_yline=b}
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar(vb, 0.0, 0.0, 20*pt)
+ assert(not err, err)
+ local err = ga:encode_Vbar(vb, 0.0, 30*pt, 50*pt)
+ assert(not err, err)
+ local txt = {codepoint = {
+ 65, % A
+ 66, % B
+ 67, % C
+ 68, % D
+ 69, % E
+ 70, % F
+ 71, % G
+ 72, % H
+ }}
+ err = ga:encode_Text_xspaced(txt, 0.0, 10*pt, 25*pt, 0.5)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test 8: spaced text, check correct vertical alignment:
+\directlua{
+ local b = {}
+ for i = 0,7 do
+ b[i*2+1] = i*10*pt
+ b[i*2+2] = 2*pt
+ end
+ b = {_yline=b}
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar(b, 0.0, 0.0, 20*pt)
+ assert(not err, err)
+ local err = ga:encode_Vbar(b, 0.0, 40*pt, 60*pt)
+ assert(not err, err)
+ local c = { codepoint = {
+ 65, % A
+ 66, % B
+ 67, % C
+ string.byte("Q"),
+ 69, % E
+ 70, % F
+ 71, % G
+ 72, % H
+ }}
+ err = ga:encode_Text_xspaced(c, 0.0, 10*pt, 30*pt, 0.0)
+ assert(not err, err)
+ local n = { codepoint = {
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ }}
+ err = ga:encode_Text_xspaced(n, 0.0, 10*pt, 30*pt, 1.0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 9: spaced text, check correct vertical alignment:
+\directlua{
+ local b = {}
+ for i = 0,7 do
+ b[i*2+1] = i*10*pt
+ b[i*2+2] = 8*pt
+ end
+ b = {_yline = b}
+ local ga = gacanvas:new()
+ local err = ga:encode_Vbar(b, 0.0, 0.0, 20*pt)
+ assert(not err, err)
+ local err = ga:encode_Vbar(b, 0.0, 40*pt, 60*pt)
+ assert(not err, err)
+ local c = { codepoint = {
+ 65, % A
+ 66, % B
+ 67, % C
+ string.byte("Q"),
+ 69, % E
+ 70, % F
+ 71, % G
+ 72, % H
+ }}
+ err = ga:encode_Text_xspaced(c, 0.0, 10*pt, 20*pt, 0.0)
+ assert(not err, err)
+ local n = { codepoint = {
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ }}
+ err = ga:encode_Text_xspaced(n, 0.0, 10*pt, 40*pt, 1.0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule{ }\box\mybox{ }\vrule
+
+\bigskip
+Test number 10: two centered texts and baseline aligned:
+\directlua{
+ local n = { codepoint = {
+ 48, % 0
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ 57, % 9
+ }}
+ local ga = gacanvas:new()
+ local err = ga:encode_Text(n, 0, 0, 0.5, 0)
+ assert(not err, err)
+ local a = { codepoint = {
+ 65, % A
+ string.byte("Q"), % Q
+ 67, % C
+ }}
+ err = ga:encode_Text(a, 0, 0, 0.5, 1)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 11: two centered texts aligned:
+\directlua{
+ local n = { codepoint = {
+ 48, % 0
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ 57, % 9
+ }}
+ local ga = gacanvas:new()
+ local err = ga:encode_Text(n, 0, 0, 0.5, 1)
+ assert(not err, err)
+ local a = { codepoint = {
+ 65, % A
+ string.byte("Q"), % Q
+ 67, % C
+ }}
+ err = ga:encode_Text(a, 0, 0, 0.5, 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 12: text\_xwidth opcode:
+
+\directlua{
+ local n = { codepoint = {
+ 48, % 0
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ 57, % 9
+ }}
+ local ga = gacanvas:new()
+ local err = ga:encode_Text_xwidth(n, 0, tex.sp "5cm", 0, 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\vrule\hbox to 5cm{0 \hfill9}\vrule
+
+\bigskip
+Test number 13: text\_xwidth with different size:
+\smallskip
+
+\directlua{
+ local n = {codepoint = {
+ 48, % 0
+ 49, % 1
+ 50, % 2
+ 51, % 3
+ 52, % 4
+ 53, % 5
+ 54, % 6
+ 55, % 7
+ 56, % 8
+ 57, % 9
+ }}
+ local ga = gacanvas:new()
+ % (txt, x1, x2, ypos, ay) --> err
+ local err = ga:encode_Text_xwidth(n, tex.sp "0mm", tex.sp "50mm", 0, 0)
+ assert(not err, err)
+ local err = ga:encode_Text_xwidth(n, tex.sp "5mm", tex.sp "45mm", tex.sp "3mm", 0)
+ assert(not err, err)
+ local err = ga:encode_Text_xwidth(n, tex.sp "10mm", tex.sp "40mm", tex.sp "6mm", 0)
+ assert(not err, err)
+ local err = ga:encode_Text_xwidth(n, tex.sp "15mm", tex.sp "35mm", tex.sp "9mm", 0)
+ assert(not err, err)
+ local err = ga:encode_Text_xwidth(n, tex.sp "20mm", tex.sp "30mm", tex.sp "12mm", 0)
+ assert(not err, err)
+ local err = ga:encode_Text_xwidth(n, tex.sp "24mm", tex.sp "26mm", tex.sp "15mm", 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 14: place bars and text as text\_xwidth:
+\smallskip
+
+\directlua{
+ local b = {}
+ for i = 0, 9 do
+ b[i*2 + 1] = i*12*pt
+ b[i*2 + 2] = 0.4*pt
+ end
+ b = {_yline = b}
+ local n = {codepoint = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,}}
+ local ga = gacanvas:new()
+ % (vbar, x0, y1, y2) --> err
+ local err = ga:encode_Vbar(b, 0.0, 0*pt, 25*pt)
+ local err = ga:encode_Vbar(b, 0.0, 32*pt, 42*pt)
+ assert(not err, err)
+ % (txt, x1, x2, ypos, ay) --> err
+ local err = ga:encode_Text_xwidth(n, 0*pt, 108*pt, 25*pt, 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\smallskip
+\directlua{
+ local b = {}
+ for i = 0, 8 do
+ b[i*2 + 1] = i*12*pt
+ b[i*2 + 2] = 0.2*pt
+ end
+ b = {_yline = b}
+ local n = { 48, 49, 50, 51, string.byte([[x]]), 53, 54, 55, 56,}
+ n = {codepoint = n}
+ local ga = gacanvas:new()
+ % x0, y1, y2, bars
+ local err = ga:encode_Vbar(b, 0.0, 0*pt, 25*pt)
+ local err = ga:encode_Vbar(b, 0.0, 32*pt, 42*pt)
+ assert(not err, err)
+ % (txt, x1, x2, ypos, ay) --> err
+ local err = ga:encode_Text_xwidth(n, 0*pt, 96*pt, 25*pt, 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bigskip
+Test number 15: place text\_xwidth when text is only two chars long:
+
+\directlua{
+ local n = {codepoint = { 48, 56,}} % 0 and 8
+ local ga = gacanvas:new()
+ % (txt, x1, x2, ypos, ay) --> err
+ local err = ga:encode_Text_xwidth(n, 0*pt, 32*pt, 25*pt, 0)
+ assert(not err, err)
+ driver:ga_to_hbox(ga, [[mybox]])
+}\vrule\box\mybox\vrule
+
+\bye
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/001-ga-svg-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/001-ga-svg-test.lua
new file mode 100644
index 00000000000..2f932235cb1
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/001-ga-svg-test.lua
@@ -0,0 +1,28 @@
+-- test SVG driver output
+
+local barracuda = require "barracuda"
+local driver = barracuda:get_driver()
+
+local mm = 186467.9811 -- 1 mm in sp
+local ga1 = { _data = { 1, 1*mm,
+ 34, 10*mm, 100*mm, 0*mm, -- vline, y1, y2, x
+ 34, 20*mm, 90*mm, 10*mm,
+ 34, 30*mm, 80*mm, 20*mm,
+ 34, 40*mm, 70*mm, 30*mm,
+ 34, 50*mm, 60*mm, 40*mm,
+}}
+
+driver:save("svg", ga1, "test-01")
+
+local ga2 = { _data = {
+ 1, 5*mm,
+ 34, 0*mm, 50*mm, 2.5*mm,
+ 33, 0*mm, 50*mm, 40*mm,
+}}
+
+driver:save("svg", ga2, "test-02")
+
+
+
+
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/002-ga-svg-test.lua b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/002-ga-svg-test.lua
new file mode 100644
index 00000000000..8f10d6dfbf7
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/002-ga-svg-test.lua
@@ -0,0 +1,18 @@
+-- test SVG driver output
+
+local barracuda = require "barracuda"
+local barcode = barracuda:get_barcode_class()
+local driver = barracuda:get_driver()
+
+local opt = {module = 15 * 0.0254 * 186467, height = 12 * 186467}
+
+local c39, err = barcode:new_encoder("code39", nil, opt)
+assert(not err, err)
+
+local symbol, err = c39:from_string("ABC000Z")
+assert(not err, err)
+
+local canvas = barracuda:new_canvas()
+symbol:append_ga(canvas)
+
+driver:save("svg", canvas, "test-code39") \ No newline at end of file
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-01.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-01.svg
new file mode 100644
index 00000000000..77e3ba6e0c0
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-01.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="41.000000mm" height="90.000000mm"
+ viewBox="-0.500000 -100.000000 41.000000 90.000000"
+>
+ <path d="M0.000000 -100.000000V-10.000000"
+ style="stroke:#000000;stroke-width:1.000000"
+ />
+ <path d="M10.000000 -90.000000V-20.000000"
+ style="stroke:#000000;stroke-width:1.000000"
+ />
+ <path d="M20.000000 -80.000000V-30.000000"
+ style="stroke:#000000;stroke-width:1.000000"
+ />
+ <path d="M30.000000 -70.000000V-40.000000"
+ style="stroke:#000000;stroke-width:1.000000"
+ />
+ <path d="M40.000000 -60.000000V-50.000000"
+ style="stroke:#000000;stroke-width:1.000000"
+ />
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-02.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-02.svg
new file mode 100644
index 00000000000..ff7862b12f0
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-02.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="50.000000mm" height="50.000000mm"
+ viewBox="0.000000 -50.000000 50.000000 50.000000"
+>
+ <path d="M2.500000 -50.000000V-0.000000"
+ style="stroke:#000000;stroke-width:5.000000"
+ />
+ <path d="M0.000000 -40.000000H50.000000"
+ style="stroke:#000000;stroke-width:5.000000"
+ />
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-code39.svg b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-code39.svg
new file mode 100644
index 00000000000..8453a6bdebc
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-ga-svg/test-code39.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Barracuda package (https://github.com/robitex/barracuda) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="51.815727mm" height="14.873148mm"
+ viewBox="-3.809980 -11.999937 51.815727 14.873148"
+>
+ <g stroke="black">
+ <path d="M0.190499 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M1.333493 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M2.285988 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M3.428982 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M4.381477 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M5.333972 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M6.286467 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M7.048463 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M8.191457 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M9.143952 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ </g>
+ <g stroke="black">
+ <path d="M10.096447 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M11.048942 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M12.001437 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M13.144431 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M14.096926 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ </g>
+ <g stroke="black">
+ <path d="M15.239920 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M16.382914 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M17.335409 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M18.478403 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M19.240399 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M20.002395 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M20.764391 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M22.097884 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M23.240878 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M24.193373 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M24.955369 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M25.717365 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M27.050858 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M28.193852 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M29.146347 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M29.908343 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M30.670339 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M32.003832 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M33.146826 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M34.099321 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M34.861317 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M36.194810 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M37.337804 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M38.290299 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M39.052295 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <g stroke="black">
+ <path d="M39.814291 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M40.957285 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ <path d="M41.909779 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M43.052773 -11.999937V-0.000000" style="stroke-width:0.761996"/>
+ <path d="M44.005268 -11.999937V-0.000000" style="stroke-width:0.380998"/>
+ </g>
+ <text x="0.000000" y="2.873212" font-family="Verdana" font-size="2.877000">
+ ABC000Z </text>
+</svg>
+
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.pdf b/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.pdf
new file mode 100644
index 00000000000..3aa107681c4
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.tex b/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.tex
new file mode 100644
index 00000000000..43c652d66a8
--- /dev/null
+++ b/Master/texmf-dist/doc/luatex/barracuda/test/test-i2of5/001-i2of5-test.tex
@@ -0,0 +1,187 @@
+% !TeX program = LuaTeX
+% Copyright (C) 2019 Roberto Giacomelli
+
+\newbox\mybox
+\nopagenumbers
+
+\directlua{barracuda = require "barracuda"}
+
+Interleaved 2 of 5 encoder test.
+
+Test 1: one simple barcode with default parameters:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+
+local enc, err = barcode:new_encoder("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(54654681); assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 2: one simple barcode with default parameter:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(1234567895); assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+% check digit tests
+
+\directlua{% verify check digits, the last one
+local code = {
+ 7352621,
+ 9624764,
+ 7592881,
+ 5344147,
+ 742238,
+ 199766,
+ 4544739,
+ 2774794,
+ 8509895,
+ 8285157,
+ 5387564,
+ 5534371,
+ 2155678,
+ 4529545,
+ 4689164,
+ 1674910,
+ 5317837,
+ 4117698,
+}
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+for _, n in ipairs(code) do
+ local smbl, err = enc:from_uint(n, {check_digit_policy="verify"})
+ assert(not err, err)
+end
+}
+
+\directlua{% check digits evaluation
+local code = {
+ ["735262"] = 1,
+ ["962476"] = 4,
+ ["759288"] = 1,
+ ["534414"] = 7,
+ ["74223"] = 8,
+ ["19976"] = 6,
+ ["454473"] = 9,
+ ["277479"] = 4,
+ ["850989"] = 5,
+ ["828515"] = 7,
+ ["538756"] = 4,
+ ["553437"] = 1,
+ ["215567"] = 8,
+ ["452954"] = 5,
+ ["468916"] = 4,
+ ["167491"] = 0,
+ ["531783"] = 7,
+ ["411769"] = 8,
+}
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+for sc, ck in pairs(code) do
+ local n = tonumber(sc)
+ local c, err = enc:get_checkdigit(n)
+ assert(not err, err)
+ assert(c == ck, "Wrong check digit "..c.." vs "..ck .." for "..sc)
+end
+}
+
+\bigskip
+Test 3: one simple barcode with check digit automatically added:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(454473, {check_digit_policy="add"})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 4: a second simple barcode with check digit automatically added:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(74223, {check_digit_policy="add"})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 5: a symbol with native check digits:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(121891259, {check_digit_policy="verify"})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 6: bearer bars please:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(747867239, {bearer_bars_enabled = true})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 7: bearer bars all around the symbol:
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_uint(986790868, {bearer_bars_enabled = true, bearer_bars_layout="frame"})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+\bigskip
+Test 8: bearer bars all around the symbol (with string costructor):
+
+\directlua{
+local barcode = barracuda:get_barcode_class()
+local enc, err = barcode:enc_by_name("i2of5"); assert(not err, err)
+local symbo, err = enc:from_string("986790868", {bearer_bars_enabled = true, bearer_bars_layout="frame"})
+assert(not err, err)
+local canvas = barracuda:new_canvas(); symbo:append_ga(canvas)
+local drv = barracuda:get_driver()
+drv:ga_to_hbox(canvas, "mybox")
+}
+\vrule A\vrule\box\mybox \vrule A\vrule
+
+That's all folks!
+
+\bye
+
+