----- pst-barcode.tex
0.23  2026-05-18  - fix for lualatex
0.22  2026-05-14  - fix for wrong number of lines 15->17 
0.21  2026-03-30 
  - Alias option handling was simplified and improved.
  - The text rendering system was generalised to support up to 9 independent text groups. The existing text and extratext options are retained as aliases.
  - The position of the whitespace guards for EAN/UPC symbols was simplified and better aligned with the text.
  - The position of the whitespace guards for standalone EAN/UPC addons was fixed.
  - The text{x,y}align=justify options were fixed for the linear and matrix renderers.
  - The text processing for the Code 39 Extended and Code 93 Extended encoders was fixed.
  - The text renderer now centres each character using stringwidth and pathbbox for font-independent alignment in the direct text positioning path.
  - Text offsets were adjusted for EAN/UPC-based symbologies and addons to account for ink-centre anchoring. Non-EAN encoders with per-character text placement were converted to use centre-aligned single string rendering.
  - FMLY was added to the encoder metadata.
  - The C API and SWIG bindings were expanded with support for lazy loading of resource bodies.
  - Input validation was hardened across all encoders, including data length checks, empty data rejection, and implementation limit guards for large allocations.
  - The renderers now validate their input structures and the text renderer handles single-character justify alignment correctly.
  - All resources now clean up the dictionary stack when an error is raised, preventing dict stack leaks in caller contexts.
  - Renderer error handling was improved: correct graphics state restoration, operand stack cleanup for invalid colors, and redundant gsave/grestore removal from composite rendering paths.
  - Raw mode input validation was improved for Code 128, Code 16K, Data Matrix, PosiCode, Ultracode, PDF417 and Micro PDF417, including ^NNN format and codeword range checks.
  - Data exceeding the maximum symbol capacity is now rejected during encoding for QR Code, Data Matrix, Code One, PDF417 and JAB Code.
  - Codablock F, Code 16K and the matrix renderer now handle large symbols without overflowing the operand stack.
  - GS1 input validation was improved for DataBar Expanded, DataBar Stacked Omnidirectional, GS1 Composite Component and GS1 North American Coupon.
  - JAB Code now validates eclevel, mask, colors, rows and columns options. PRNG constants now avoid integer literals exceeding the signed 32-bit range.
  - PDF417 and Micro PDF417: Fixed text submode optimizer crash with long all-text inputs by increasing the sentinel value used in the Viterbi cost comparison.
  - JAB Code: Fixed crash in slave symbol mode where metadata encoding referenced an undefined variable.
  - The AusPost encoder now supports FCC 87 (Routing) and FCC 92 (Redirection) barcodes.
  - The renderers now support a `default_inkspread` global context setting.
  - The GS1 AI linter was realigned with the latest release of the GS1 Syntax Dictionary.
  - User option validation was improved for the Codablock F, Code 16K, Code 49, Micro PDF417 and PDF417 encoders.
  - User option validation was improved for the linear, matrix and maximatrix renderers.
  - The encoder for DotCode was fixed to ensure a minimum symbol dimension when the opposite dimension is large.
  - The performance of the PDF417, Micro PDF417, Code One, OneCode, Data Matrix and GS1 Composite Component encoders was improved.
  - The time to generate error correction polynomials was improved using a FIFO cache for the QR Code, Data Matrix, PDF47, Micro PDF417, MaxiCode, Dot Code, Han Xin and Ultracode symbologies.
  - The performance of the Code 128, Codablock F, Posicode and Code 16K encoders was improved.
  - Stack leaks during error handling were fixed for the Data Matrix, PDF417, Micro PDF417, ISBN, ISMN, AusPost and Telepen symbologies.
  - The performance of generating the error correction codewords for AusPost symbols was improved.
  - Several stack leaks were fixed for GS1 AI and DL data processing.
  - The debug and dontdraw options of all encoders must now be enabled using a pair of global switches.
  - The performance of generating the error correction codewords for Aztec Code, Han Xin Code, QR Code, Data Matrix, Code One, Maxicode, PDF417, Micro PDF417, Ultracode symbols was improved.
  - The Ultracode encoder was fixed so that colours are correctly selected for rendering.
  - The performance of the matrix renderer was further improved.
  - Common colour handling code was factored out of the renderers into its own resource.
  - The performance of the matrix renderer was significantly improved.
  - The QR Code encoder performance was enhanced by precalculating the mask function patterns and applying them simultaneously to the data bitstream.
  - A mechanism to "preload" the lazy variables via global context was added.
  - Switch from loadctx/unloadctx mechanism to a more direct method of preloading static state, with lazy initialisation.
  - The Two-Track Pharmacode encoder's text positioning was fixed.
  - The USPS Intelligent Mail encoder's text positioning was fixed.
  - Common text rendering code was factored out of the linear and matrix renderers into its own resource.
0.20  2025-12-13 
	- updated documentation
	- Common text rendering code was factored out of the linear and matrix renderers into its own resource.
    - The ITF-14 encoder's text positioning was fixed.
    - The Code 128 encoder's raw mode was fixed.
    - The linear and matrix renderers were enhanced to accept top and bottom for the textyalign option.
    - The linear and matrix renderers were enhanced with a textdirection option.
    - The linear and matrix renderer were enhanced with support for extratextsubspace, extratextsplit and extratextlinegaps options corresponding to the alttext equivalents.
    - The linear and matrix renderers were enhanced with alttextsubspace that allows given characters to be substituted for spaces.
    - The linear and matrix renderers were enhanced with alttextsplit and alttextlinegaps options that may be used to render multi-line blocks of text.
    - The GS1 AI linter was realigned with the latest release of the GS1 Syntax Dictionary.
    - The encoder for EAN-8 was changed to forbid the use of a two-digit or five-digit addon unless a permitaddon option is supplied.
    - The high-level encoder for MaxiCode was replaced with a new algorithm that may result in significantly shorter messages.
    - The encoder for Aztec Code was fixed so that punctuation compression works correctly after a binary sequence.
    - The GS1 AI linter now reports the mandatory association specification that is not being met.
    - The baseline of EAN/UPC add-ons is now correctly aligned with the guard bars in the primary symbol.
    - Support for HRI text was added to the GS1 Digital Link variant symbologies.
    - Support for extra text was added to the renlinear and renmatrix renderers.
    - The encoder for QR Code was amended to opportunistically raise the error correction level when better fit to the matrix possible.
0.19  2022-08-23 
 - The parse option was extended to perform replacement 
                   of control character names such as ^NUL and ^RS with their ASCII value.
 - The horizontal alignment of text in matrix symbols was fixed.
 - Various fixes were made for the encoding of Data Matrix, DotCode and Micro QR Code symbols.
 - The encoding of QR Code symbols was optimised.
 - The encoding of Rectangular Micro QR Code symbols was aligned with the final release of the specification.
 - The linear render now uses filled polygons rather than stroked lines.
 - Code 93 Extended was amended to not shift encode "$%+/" symbols.
 - Support was added for USPS FIM E marks.
 - Support for AI (715) was added to the GS1 linter.
 - Ultracode tile colours are now defined as RGB rather than CMYK. New tile colour patterns are defined for the upcoming revision.
 - A bug in the encoding of certain Aztec Code symbols was fixed.
 - A bug in the encoding of certain Dotcode symbols was fixed.
 - A bug in the encoding of QR Code symbols containing Kanji compression was fixed.
 - The rMQR encoding was optimised, potentially resulting in smaller symbols.
 - The colours for Ultracode symbols were changed to RGB values rather than CMYK.
 - The metrics for Ultracode symbols was updated and a raw mode was added.
 - Linting of GS1 AI (4308) was fixed.
 - Linting of the check character pair for AI (8013) was added.
 - Linting for GS1 coupon AIs (8110) and (8112) was added.
 - Linting for GS1 AI syntax data was expanded and fixed.
 - A convenience encoder for GS1 DotCode was added.
 - GS1 Composite Component symbols were fixed.
 - Linting was added to GS1 Composite Components.
 - Linting for GS1 AI syntax data was added.
 - A bug in the compact encoding methods 0110X for GS1 DataBar Expanded formats was fixed.
 - The parse and parsefnc options are now processed by a single routine that allows their escape patterns to coexist in the input data.
 - Bugs in ECI processing with PDF417 and MicroPDF417 were fixed.
 - A bug in the seperator pattern for GS1 DataBar Expanded Stacked Composite was fixed.
 - A bug in leaving punctuation mode in Aztec Code was fixed.
 - An inefficiency in the QR Code encoding was fixed.
 - ECI support was added to Code One.
 - A bug in Data Matrix for ECI checks at end of data was fixed.
 - ECI support was added to Data Matrix, Aztec Code, QR Code, PDF417, MicroPDF417, Maxicode and DotCode.
 - GS1 DataBar Limited was updated to include a righthand whitespace guard.
 - Code 32 was fixed to avoid overwriting the provided barcode string.
 - A new encoder for Swiss QR Code was added.
 - The Codablock F encoding was optimised potentially resulting in smaller symbols.
 - The GS1 DataBar Stacked, GS1 DataBar Stacked Omnidirectional and GS1 DataBar Expanded Stacked separator patterns were fixed.
 - A bug in GS1-128 that sometimes prevented encoding with a Composite Component was fixed.
 - Bugs in GS1 Composite Component encoding were fixed.
 - The GS1 QR Code encoder was fixed.
 - Changes were required to the package build script due to new defaults in recent versions of GhostScript.
 - Preliminary support for the Rectangular Micro QR Code symbology was added.
 - The encoders were amended to workaround a non-standard operator on Harlequin RIPs.
 - A distict encoder was added for Data Matrix Rectangular Extension.
 - The Data Matrix encoder was enhanced to include the ISO formats for DMRE.
 - A crash with a certain encoding of data in GS1 Databar Expanded based symbologies was fixed.
 - A bug in the Code 128 encoder when composite component linkage flags were used with data terminating in mode C was fixed.
 - An encoder for the Royal Mail Mailmark symbology was added.
 - The performance of the renmatrix renderer was slightly optimised.
 - The performance of the renmatrix renderer was significantly improved.
 - A recent regression in the Data Matrix encoder was fixed.
 - The Data Matrix encoder was fixed to avoid certain cases where switching between C40, Text and X12 encoding might latch repeatedly.
 - Preliminary support for the JAB Code symbology was added.
 - The raw option was added to the Data Matrix encoder.
 - The base size of Ultracode symbols was increased.
 - Support for symbols composed of dots was added to the renmatrix renderer.
 - The DotCode encoder was amended to use the dotty matrix feature.
 - A bug in the DotCode encoder's handling of FNC3 message separator characters was fixed.
 - The DotCode encoder was fixed to support optimised handling of "FNC1 in First" for leading numeric input.
 - The performance of the Channel Code encoder was improved.
 - The base symbol size of the DotCode encoder was increased.
 - The DotCode encoder was enhanced to fix weaknesses with the mask evaluation algorithm.
 - The Channel Code encoder checksum calculation for channels 4 and 7 was fixed.
 - Fixed end of data region encoding error with EDIFACT encoding in Data Matrix.
 - Preliminary support for the Ultracode symbology was added.
 - The renmatrix renderer was improved to support colour symbols.
0.18  2017-08-22 - changed fonts to URW nimbus
                 - fix bug in pst-barcode.pro 
0.17  2017-08-05 - new font file to embed the Type 1 fonts
                   uses the GhostScript fonts with an alias
                   for the defrault names
0.16a 2017-04-12 - modified documentation
0.16  2017-04-12 - new pro file, new codes
                 - The GS1 North American Coupon encoder was fixed to support the 
                   textyalign option.
                 - Support for the GS1 North American Coupon barcode was added.
                 - Symbologies accepting GS1 Application Identifier formatted 
                   data were fixed so as not to clobber successive field values 
                   when multiple identical AIs are given.
0.15  2016-04-22 - new pro file, new codes
0.14  2015-10-10 - updated documentation, new pro file
0.13  2015-05-11 - updated documentation, new pro file
0.12  2013-10-26 - added option file for including an external file
0.11  2013-10-06 - added more options for data matrix
0.10  2012-08-25 - using another code for loading the ps code
0.09  2012-06-25 - using another code for loading the ps code
0.08  2011-03-10 - take care of the function interface of the pro file
0.07  2009-08-12 - take care of the function interface of the pro file
0.04  2006-07-23 - adding support for the ISBN-13 code
                 - printing the code from the current point and
                   no more from the origin
0.03  2005-07-26 - Changes to the documentation and the syntax
                   of psbarcode (hv) 
0.02  2005-07-26 - first version (hv) 


----- pst-barcode.sty
0.02  2025-12-13 first version (hv) 


----- pst-barcode.pro
2025-12-13 - The encoder for QR Code was amended to opportunistically raise the error 
             correction level when better fit to the matrix possible.
2022-08-21 - bug fixes and optimisations for QR Code, Micro QR Code, Data
             Matrix, DotCode, Aztec Code, GS1 Composite Components, GS1
             DataBar, Code 32, Codablock F, GS1-128, Channel Code and Code 93.
           - new barcodes for Swiss QR Code, Rectangular Micro QR Code, Data
             Matrix Rectanguar Extension, Royal Mail Mailmark and FIM E marks,
             GS1 Digital Link QR Code, GS1 Digital Link Data Matrix.
           - validation of GS1 AI syntax data and GS1 Digital Link URIs.
           - ECI support for all supported symbologies.
           - parsing of named escape sequences for ASCII control characters,
             e.g. ^NUL and ^RS.
           - linear render uses filled polygons rather than stroked lines.
           - matrix render performance improvements.
2017-08-22 - fix bug with Times
2017-04-12 - some new barcodes
2016-04-21 - some new barcodes
2015-05-11 - several fixes for the code
2013-10-06 - the Data Matrix encoder now supports C40, Text and 
             ANSI X12 encoding modes as well as the FNC1, PROG, 
             05 Macro and 06 Macro prefixes
2012-11-15 - renlinear was modified to avoid a clash with a 
             predefined name in Distiller.
2012-06-26 - The QR Code encoder was modified so that Micro QR Code 
             symbols do not require the use of raw mode. 
           - Support for the alphanumeric, numeric, and kanji encodings
             was added to the QR Code encoder. 
           - The PZN symbology was extended with support
             for PZN8. 
           - Support for the GS1 DataMatrix symbology was added. 
           - A bug in double digit ASCII encodation of the Data Matrix 
             symbology was fixed. 
           - The EDIFACT, C40, TEXT, and X12 encodation schemes were 
             removed from the Data Matrix symbology, as
             these were buggy. 
           - Support for FNC1 character as added to the Data Matrix symbology.
2012-06-25 - The QR Code encoder was modified to select an 
             optimal encoder based on the data.
	   - A bug in the symbol size selection for 
	     QR Code was fixed.
           - The QR Code encoder was optimised by 
             allowing the terminator pattern to be trimmed.
           - Support for the alphanumeric, numeric and 
             kanji encodings was added to the qrcode encoder.
           - The PZN symbology was extended with support for PZN8.
           - The 1.5 scale factor was removed from the 
             DataMatrix encoder.

2011-03-10 - The error correction code for Maxicode symbols was improved.
           - Codablock F was fixed for short data inputs.
           - Support for the Codablock F symbology was added.
           - Support for the HIBC Codablock F symbology was added.
           - The optimised encoding of Code 16K symbols was simplified.
	   - The optimised encoding of Code 128 symbols was simplified and
	     improved.
           - The optimised encoding of Code 128 symbols was improved.
	   - Support for the extended datalength option was added to the Code
	     16K symbology.
           - Support for the Code 16K symbology was added.
	   - The optimal start character selection for Code 128 symbols was
	     improved.
           - Support for the Code 49 symbology was added.
           - Support for the Code One symbology was added.
	   - The GS1 DataBar Expanded Composite and GS1 DataBar Expanded
	     Stacked Composite symbologies were amended so that their separator
             patterns are correctly generated.
	   - The GS1 DataBar Omnidirectional Composite, GS1 DataBar Stacked
	     Composite, GS1 DataBar Stacked Omnidirectional Composite, GS1
	     DataBar Truncated symbologies were amended so that their separator
             patterns are correctly generated.
	   - GS1-128 Composite was fixed so that the 2D component is correctly
	     aligned.
	   - Preliminary support for the GS1 DataBar Omnidirectional Composite,
	     GS1 DataBar Stacked Composite, GS1 DataBar Stacked Omnidirectional
	     Composite, GS1 DataBar Truncated, GS1 DataBar Limited, GS1 DataBar
             Expanded, GS1 DataBar Expanded Stacked symbologies were added.
           - The default height for the GS1-128 symbologies was changed.
	   - Preliminary support for the GS1 DataBar Limited Composite
	     symbology was added.
	   - Preliminary support for the EAN-8 Composite, UPC-A Composite and
	     UPC-E Composite symbologies was added.
           - Support for the GS1 Composite 2D components was added.
           - Preliminary support for the EAN-13 Composite symbology was added.
	   - Renamed rss14 to databaromni, rsslimited to databarlimited,
	     rssexpanded to databarexpanded.
	   - Added convenience encoders for GS1 DataBar Stacked, GS1 DataBar
	     Stacked Omnidirectional, GS1 DataBar Truncated and GS1 DataBar
             Expanded Stacked.
           - Support for the HIBC MicroPDF417 symbology was added.
           - Support for the MicroPDF417 symbology was added.
	   - Support for CC-A/B amd CC-C composite linkage was added to the
	     GS1-128 symbology.
	   - The Code 128 symbology was extended with support for composite
	     linkage pseudo characters.
	   - PDF417 was amended to automatically select an appropriate number
	     of columns when not provided.
           - The default error correction levels for PDF417 symbols were updated.
	   - A bug in the encoding of the general purpose field ending in
	     numeric mode of GS1 DataBar expanded symbols was fixed.
	   - Renamed occurrences of alpha mode to alphanumeric in GS1 Databar
	     Expanded symbology to disambiguate from the standard GS1 alpha
             encoding.
	   - The list of FNC1 exempt GS-1 application identifiers was fixed in
	     the GS1-128 and GS1 DataBar symbologies.
	   - Fixed occurances of a bad programming paradigm that could result
	     in the incorrect generation of certain symbols when including
             multiple instances.
           - Support for the Deutsche Post Leitcode Symbology was added.
           - Support for the Deutsche Post Identcode Symbology was added.
	   - A checkoffset option was added to the posicode encoder to
	     facilitate multirow symbols.
           - Support for the Flattermarken symbology was added.
           - Checksum support for the Channel Code encoder was added.
           - Support for the PosiCode symbology was added.
	   - An option to use a short finder pattern was added to the Channel
	     Code encoder.
           - Support for the Channel Code symbology was added.
	   - Support for the HIBC Code 39, HIBC Code 128, HIBC Data Matrix,
	     HIBC PDF417 and HIBC QR Code symbologies was added.
           - The efficiency of the Two-Track Pharmacode encoder was improved.
           - The escape sequences for the special shift characters were changed.
           - Support for the Code 93 Extended symbology was added.
           - Support for the Code 39 Extended symbology was added.
           - Support for the ITF-14 symbology was added.
           - Support for the SSCC-18 symbology was added.
           - Support for the GS1-14 symbology was added.
           - Support for the GS1-128 symbology was added.
           - The code128 encoder was modified to automatically encode the input.
           - Support for the Pharmazentralnummer (PZN) symbology was added.
           - The text parameters for EAN an UPC symbols are now applied to the addons.
           - A bug in the display of the ISSN check digit was fixed.
           - Support for Code 32 (Italian Pharmacode) was added.
	   - Added daft encoder to make it easier to create miscellaneous
	     symbols in a custom 4 state symbology.
	   - Support was added to the Plessey symbology for the unidirectional
	     variant.
           - Support for the BC412 symbology was added.
           - A bug in the calculation of the border height was fixed.
           - The example for Two-track Pharmacode was changes to display a border.
           - Support for the Two-track Pharmacode symbology was added.
           - Support for the ISSN symbology was added.
           - Support for the ISMN symbology was added.
           - The ISBN encoder was improved to upgrade ISBN-10 input to ISBN-13.
	   - The code2of5 encoder was improved to support the IATA, matrix,
	     COOP, and Datalogic versions of the symbology.
	   - A bug was fixed that could allow the generation of invalid MSI
	     symbols when using a modulus 11 check digit.
           - Support for the Telepen symbology was added.
	   - A bug in the placement of human readable text for Plessey and MSI
	     symbols was fixed.
	   - The bar-space widths were amended for Plessey and MSI symbols were
	     amended to better conform to their specifications.
           - A bug in the calculation of the checksum of Plessey symbols was fixed.
           - A bug in the calculation of the checksum of MSI symbols was fixed.
           - Additional checksum types where added to the MSI symbology.
	   - A bug in the determination of the error correction level of PDF417
	     symbols was fixed.
           - A bug in QR Code mask evaluation was fixed.
           - Support for the USPS PLANET symbology was added.
	   - An input handling bug in the USPS POSTNET encoder was fixed.
	   - The list of FNC1 exempt application identifiers in GS1 DataBar
	     Expanded was fixed.
	   - A bug in the numeric encoding of the general purpose field of GS1
	     DataBar Expanded symbols was fixed.
           - Support for UPC-E1 was added to the upce encoder.
	   - Converted to a set of PostScript named resources rather than a
	     procedure list.
           - A bug in the symbol selection algorithm for QR Code was fixed.
	   - Ensure that auto-encoding a micro-format QR Code symbol fails
	     rather than produces a full-format symbol.
	   - Convert interleaved2of5 encoder to use barratio and spaceratio to
	     set the narrow to wide bar ratio.
	   - Ensure that the UPC-E encoder does not fail silently when an
	     invalid input is given.
2009-08-13 - Added support for pdf417
2009-08-06 - Added support for several 2D matrix codes
2007-07-10 - Added QR code, Aztex code.
2007-05-22 - Added parsable example options field to each encoder.
	   - An encoder for the Pharmaceutical Binary Code symbology was added.
2007-04-22 - Added CMYK colorspace support.
	   - Fixed incorrect checksum calculation for UPC-E symbols.
	   - Added raw encoder to make it easier to create 
	     miscellaneous symbols in a custom symbology.
	   - Functional comments were added to the head of the encoders 
	     to allow applications to extract the symbology name and 
	     example input data.
	   - An encoder for the Reduced Space Symbology RSS Expanded was added.
	   - The incorrect definition of the USPS FIM-B symbol was fixed.
	   - An encoder for the Reduced Space Symbology RSS Limited was added.
	   - The efficiency of RSS-14 was improved.
	   - An encoder for the Reduced Space Symbology RSS-14 was added.
	   - An encoder for the new OneCode symbology used by the 
	     US Postal Service was added.
2006-03-04 - An encoder for the Reduced Space Symbology RSS Expanded 
             was added.
           - The incorrect definition of the USPS FIM-B symbol was fixed.
           - An encoder for the Reduced Space Symbology RSS Limited was added.
             The efficiency of RSS-14 was improved.
           - An encoder for the new OneCode symbology used by the US 
             Postal Service was added.
           - The FIM symbols now render according to their specification.
           - The Postnet, Royal Mail, AusPost and KIX encoders were amended 
             so that the metrics of their default symbols confirms 
             strongly to their respective specifications.
           - The encoders now pass an array containing the widths of the 
             bar space succession to the renderer allowing for sub-point 
             horizontal precision.
           - The default border positions for EAN and UPC symbols were 
             amended to properly enclose the human readable text.
           - The colour support code was fixed to prevent overwriting of 
             the current colour when values are left unspecified.
           - The logic to guard whitespace in EAN symbols was migrated 
             from the encoders to the renderer.
           - The whitespace guard symbols are now drawn directly making them 
             independant of any font.
           - The inter-guard bar height of EANs and UPCs was amended.
           - The renderer was amended to support the passing of encoder 
             specific arguments.
           - The options barcolor, textcolor, bordercolor, showbackground 
             and backgroundcolor were added to the renderer.
           - A flaw in the derivation of the top border height was fixed.
           - add support for the new ISBN-13
           - printing the code from the current point
           - The performance of the renderer was improved by avoiding 
             unnecessary calls of setfont
           - The auspost encoder was extended to support the customer 
             information field. 
2005-10-24 - A new encoder for the bar codes used by the 
             Australian Postal Service was added. 
2005-10-17 - adding a checksum for code 2of5 encoder
2005-10-14 - some more changes to the possible charcters
2005-09-26  - A new encoder was added to support the generation 
              of miscellaneous symbols.
            - Support for generation of FIM symbols used on 
	      US Postal service reply mail was added.
2005-09-15  added Kix -- Dutch mail
2005-09-17  choose the right syntax for saving the length
2005-09-08  some more tweaks to the code
