Repository navigation
Expand file tree
/
Copy pathCHANGES
More file actions
2693 lines (1251 loc) · 79.8 KB
/
Copy pathCHANGES
File metadata and controls
2693 lines (1251 loc) · 79.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
XXXX-XX-XX
* The performance of the matrix renderer was improved.
* The Han Xin Code encoder was enhanced with support for ECIs.
* The EMV QR Code encoder was removed since the standard is not followed in practice.
2026-10-26
* The encoders were fixed to leave nothing on the stack when an option is given a value of the wrong type.
* Option passing was improved.
* The performance of most encoders, and of GS1 data processing, input parsing and the Reed-Solomon caches, was improved by sizing their working dictionaries for the entries that they hold.
* The Data Matrix encoder was fixed to make Reader Programming the first codeword, which a latch to C40 could precede.
* The GS1 encoders were fixed to refuse bracketed AI data that ends with an opening parenthesis, which was dropped.
* The Ultracode encoder was fixed to count data positions without ECIs, which let FNC1 in second data position through after a leading ECI and misreported FNC1 in first position after one.
* The DotCode encoder was fixed to keep symbols within its limits of 200 rows and 200 columns, which automatic sizing and fixed rows or columns exceeded, holding a dimension at its limit where the data fits and refusing the data otherwise.
* The DotCode encoder was enhanced with the dotcode.maxrows and dotcode.maxcols global context settings, which change the limits on the rows and columns of a symbol.
* The 2D and stacked encoders were enhanced to report their choices of version, error correction level, mask, columns, rows, format, layers and mode, and the composite encoders their choices of ccversion and cccolumns, in the report dictionary, as the values of the options that select them.
* The Data Matrix encoder was enhanced with the iso144 option, which places the error correction codewords of 144x144 symbols in the order of the ISO/IEC standard.
* The Data Matrix, Code 128, Code 16K, Codablock F, Code One, DotCode, Ultracode and PosiCode encoders were enhanced with the readerinit option, which marks the symbol for programming the reader, and the Data Matrix, Ultracode, PDF417 and MicroPDF417 encoders accept it with raw codewords.
2026-10-25
* Support for Aztec Mesas was added, attached to Code 128, Code 39, Code 93, Code 93i, Interleaved 2 of 5, EAN-13 and UPC-A host symbols.
* The Code 128 encoder was fixed to refuse empty raw data.
2026-10-24
* The Ultracode encoder was fixed to refuse the link1 option without raw codewords, which produced symbols that signalled a Symbol Control Region that was absent.
* The Ultracode encoder was enhanced with the adctype option, which links the symbol to an Associated Data Carrier.
* The Ultracode encoder was enhanced with the rows and columns options, which specify the symbol size.
* The Ultracode encoder was changed to raise the error correction level to fill the symbol, unless the new fixedeclevel option is given.
* The Code 128, Interleaved 2 of 5, Aztec Code, Code 16K and Code 49 encoders, and the encoders based on them, were changed to state their quiet zones in the structure that they return.
* The Codablock F encoder was fixed to provide its 10X quiet zones to the left and right of the symbol, which widens the background and the border when they are drawn.
* The renderers were enhanced to record in the report the factors by which grid-fitting rescales the physical dimensions, as gridscale.
2026-10-23
* The HIBC encoders were enhanced to check that the data has the structure of the HIBC Supplier Labeling Standard or the HIBC Provider Applications Standard, unless the new dontlint option is given.
* The HIBC encoders were changed to raise the shared errors bwipp.HIBCbadCharacter and bwipp.HIBCbadCheckDigit in place of their own.
* The Ultracode encoder was enhanced to choose the shortest encodation, compacting digits in Numeric Submode and text in C43 groups, which makes most symbols smaller.
* The Ultracode encoder was changed to use the Start Characters of ISO/IEC CD 25449, [256] for ISO/IEC 8859-1 data and [273] for GS1 data, in place of [257], except in legacy revision 1.
* The Ultracode encoder was enhanced to encode ECIs.
* The Ultracode encoder was enhanced to compress ISO/IEC 15434 Format 06 messages with the Insert 06 Macro.
* The start option of the Ultracode encoder was restricted to raw codewords and legacy revision 1.
* The Ultracode encoder was changed to refuse ECIs with FNC1 in first position, and FNC1 in second position, which readers do not transmit faithfully.
2026-10-22
* Support for Code 93i was added.
2026-10-21
* The QR Code encoder was fixed to choose the mask by evaluating the complete symbol, including its format and version information, as the specification requires, which changes the mask of some symbols.
* The Code 128 encoder was fixed to encode the extended ASCII digits (byte values 176 to 185), which it could encode in code set C, losing their extended value.
* The Code 128 encoder was enhanced to always choose a shortest encodation, resolving ties in a fixed order of preference, which changes some symbols, including GS1-128 and other symbols based on Code 128.
* The suppressc and unlatchextbeforec options of the Code 128 encoder were made to apply without the newencoder option, which was removed.
* The GS1 Composite encoders were fixed to encode an X that follows the leading digits of AI (90), which readers decoded as a W.
* The GS1 Composite encoders were enhanced to encode a W that follows the leading digits of AI (90) in the shorter form, which can make symbols smaller.
* The GS1 DataBar Limited Composite encoder was fixed to make the four leftmost modules of the separator pattern light, rather than three.
* The GS1 DataBar Expanded Stacked Composite encoder was fixed to align the 2D component with the first symbol character of the linear component when it has other than four segments.
* The GS1-128 Composite encoder was fixed to give CC-C components with just over 40, 160 or 320 data codewords the recommended minimum error correction level.
* The GS1-128 Composite encoder was fixed to make CC-C components of automatic width narrower than four times their height, counting the start, stop and row indicator columns.
* The GS1 DataBar Limited Composite encoder was fixed to leave a quiet zone to the left of a CC-B component.
* The composite encoders other than GS1-128 Composite were fixed to refuse ccversion=c, which built a CC-C component that the specification does not permit.
* The GS1 DataBar Expanded Composite encoder was fixed to raise an error for ccversion=c, which caused a PostScript error.
* The GS1 DataBar Omnidirectional, Truncated and Limited Composite and GS1-128 Composite encoders were fixed to centre the human readable text on the linear component, from which it could be offset.
* The GS1 DataBar and GS1-128 Composite encoders were fixed to make the linear component no shorter than the linear symbol, which a specification height could lose up to a module from.
* The Rectangular Micro QR Code encoder was enhanced to select the smallest symbol that holds the data when no version is given, and the narrowest symbol of a given height with version=R7 to version=R17.
* The Code One encoder was enhanced to select the smallest S-type or T-type symbol that holds the data with version=S or version=T.
* The Code One encoder was enhanced to encode a final character in ASCII in the last codeword after Decimal data, which can make symbols smaller.
* The DotCode encoder was fixed to evaluate the masks of large symbols without exceeding the operand stack limit of some interpreters.
* The DotCode and GS1 DotCode encoders were fixed to accept input up to the capacity of the largest symbol, which they refused beyond 2000 characters.
* The Telepen and Telepen Numeric encoders were enhanced with an aimstartstop option for the AIM start and stop characters that mark compressed numeric data, with which DLE in Telepen data switches to compressed numeric.
* The PDF417 and MicroPDF417 encoders were enhanced to encode a short run of text in Text Compaction where that needs no further latch, which can make symbols smaller.
* The Australia Post encoder was enhanced to encode the Null Customer Barcode, FCC 00, at the shortest length that holds the customer information.
* The Code 11 encoder was amended to use two check digits for data of any length with includecheck or validatecheck, as the symbology is designed to use, which changes symbols of fewer than 10 characters that previously had one.
* The Code 11 encoder was enhanced with a numcheckdigits option, which selects one check digit for data of up to 10 characters.
2026-10-20
* Support for Stacked PosiCode was added to the PosiCode encoder.
* The PosiCode encoder was fixed to encode digits at the widths of the specification, which readers following the reference decode algorithm rejected.
* The PosiCode encoder was fixed to encode the start character of PosiCode A at the widths of the specification.
* The Han Xin Code encoder was enhanced to choose the shortest encodation among its numeric, text, binary byte and Chinese character modes, making symbols smaller.
* The Grid Matrix encoder was improved to use less memory for large symbols.
2026-10-19
* The Codablock A encoder was fixed to run the start and stop characters through the row separators, which interrupted them.
* The Codablock A encoder was fixed to extend the top and bottom row separators across the start and stop characters.
* The quiet zones of the Mailmark 4-state, PostBar, CEPNet, DPD, LOGMARS, Codablock A, PPN-Code and DX Film Edge encoders, and of the patch codes of the symbol encoder, were set to those of their specifications.
2026-10-18
* Kodak patch codes were added to the symbol encoder.
* Support for the Royal Mail Mailmark 4-state barcodes C and L was added.
* Support for EPC QR Code (GiroCode) was added, with validation of the SEPA credit transfer data.
* Support for UPU S10 postal item identifiers was added.
* Support for DPD parcel label barcodes was added.
* Support for Vehicle Identification Number (VIN) barcodes was added.
* Support for the Brazilian CEPNet postal barcode was added.
* Support for the IFA PPN-Code for pharmaceutical packs was added.
* Support for Anker Code, a variant of Plessey, was added.
* Support for the Codablock A symbology was added.
* Support for the Canada Post PostBar 4-state barcodes C10, D22, G12 and S21 was added.
* Support for the DX Film Edge barcode was added.
* Support for LOGMARS was added.
* Support for the EMV merchant-presented QR Code for payments was added, with validation of the payment data.
* Support for UPS MaxiCode was added, with validation of the UPS message.
* Support for the Korea Post customer barcode was added.
* The USPS Intelligent Mail encoder was fixed to render at the specified width under strictspec.
* The USPS Intelligent Mail encoder was fixed to derive bar heights in proportion to the bar width under propspec.
* The strictspec option was fixed to refuse, and loosespec to fall back from, an X-dimension of zero, which raised a PostScript error.
* The strictspec option was fixed to refuse, and loosespec to fall back from, a negative X-dimension, which drew the symbol reflected through its origin.
* The linear encoders were fixed to leave the stack clean when propspec refuses an hnom without a nominal X-dimension.
* The renderers were fixed to leave the stack clean when the background, border or bearer bar color is invalid.
* The matrix renderer was fixed to refuse a colormap that is not a dictionary, which raised a PostScript error.
* The Ultracode encoder was fixed to refuse a start character or link1 flag out of range, which raised a PostScript error.
* The PosiCode encoder was fixed to refuse an unknown encoding, which raised a PostScript error.
* The Aztec Code encoder was fixed to refuse raw data other than the bits 0 and 1, which raised a PostScript error that disrupted later symbols.
* The Aztec Code encoder was fixed to refuse raw data of digits other than 0 and 1, which was encoded wrongly.
* The GS1 encoders were fixed to leave the stack clean when the parse option refuses an invalid ordinal in an AI value.
* The GS1 DataBar Expanded encoders and the Composite Components were fixed to refuse characters that they cannot encode when dontlint is given, which raised a PostScript error.
* The GS1 encoders were fixed to refuse bracketed data without AIs, which produced a symbol without data.
* The GS1 DataBar Expanded encoders were fixed to refuse bracketed data without AIs, which raised a PostScript error.
* The GS1 DataBar Expanded encoders were fixed to refuse data that needs more than 21 data characters, which raised a PostScript error.
* The GS1 DataBar Expanded Stacked Composite encoder was fixed to refuse a composite component wider than the rows, which raised a PostScript error.
* The Swiss QR Code encoder was fixed to restore the graphics state when rendering raises an error, which disrupted later symbols.
* The MSI Plessey encoder was fixed to calculate the mod10 check digit of long data, which raised a PostScript error.
* The Datastrip 2D encoder was changed to render the quiet zone as a border, which excludes it from the modules and dimensions of the symbol.
* The Swiss QR Code, Royal Mail Mailmark, GS1 Digital Link QR Code and GS1 Digital Link Data Matrix encoders were fixed to ignore the parsefnc option, which altered data containing a caret.
* The Swiss QR Code, Royal Mail Mailmark, GS1 Digital Link QR Code and GS1 Digital Link Data Matrix encoders were fixed to ignore the parsefnc option, which refused data containing a caret.
2026-10-17
* Support for the Grid Matrix symbology was added.
* Support for the Datastrip 2D symbology was added.
2026-10-16
* Support for reader initialisation was added to the PDF417 and MicroPDF417 encoders via a new readerinit option.
* Support for FNC1 in second position was added to the Code 128, Code 16K, Code 49, PosiCode, Data Matrix, Aztec Code, Code One, DotCode, QR Code, Rectangular Micro QR Code and MicroPDF417 encoders, declared with ^FNC@ followed by an AIM application indicator of one letter or two digits.
* The QR Code, Data Matrix, Aztec Code, DotCode and Code One encoders were changed to refuse ECIs with FNC1 in first position, which denotes GS1 AI syntax.
* The QR Code encoder, including GS1 QR Code, was fixed in FNC1 mode so that a % encoded in byte mode is no longer doubled.
* The QR Code encoder was fixed in FNC1 mode so that an FNC1 followed by % or another FNC1 is no longer misread.
* The Code 49 encoder was fixed to encode a numeric run of one more than a multiple of five digits that follows other data, which raised an error.
2026-10-15
* Support for Structured Append was added to the QR Code, Data Matrix, PDF417, MicroPDF417, Aztec Code, DotCode, Code One and Ultracode encoders via new sampos, samtotal, samid and samparity options.
* The Code 16K, Code 49 and MaxiCode encoders were amended to accept sampos and samtotal as alternatives to sam.
* The validatecheck option was added to the Interleaved 2 of 5, Code 93 and MSI encoders.
* The QR Code encoder was amended to report the Structured Append parity of its message, and the Code 93 encoder to report the check characters that it adds.
* The ITF-14 encoder was fixed so that includecheck no longer adds a further check digit.
* The Two-track Pharmacode encoder was changed to take the height option in inches, like the other encoders, rather than millimetres.
* The Two-track Pharmacode encoder was fixed to honour hdim under strictspec.
* The Swiss QR Code encoder was amended to always use error correction level M, as required by the Swiss Implementation Guidelines, and to refuse any other eclevel.
* The MaxiCode encoder was fixed to accept an empty secondary message in modes 2 and 3.
* The spacing of the FIM B symbol was fixed.
* The GS1 DataBar Expanded encoder was fixed to validate barxmult only for the expandedstacked format.
* The QR Code encoder was fixed to accept FNC1 in first position following ECIs, and to raise a proper error for FNC1 following data.
* The EAN/UPC light margin indicators were fixed so that their ink, rather than the centre of their stroke, meets the edge of the quiet zone, regardless of the caller's line join and miter limit.
2026-10-14
* The report dictionary was amended to also receive the message of the error that loosespec suppressed.
2026-10-13
* The gridfit option was fixed so that a griddpi equal to the device resolution gives the same output as leaving it unset.
2026-10-12
* The gridfit option was fixed to align to the griddpi pixel grid when it differs from the device resolution.
* The renderers were amended so that a background without a border or bearer bars covers the whole quiet zone.
2026-10-11
* Check digit errors were amended to give the expected and the provided check digit.
* The report dictionary was amended to receive the check characters that an encoder adds on the user's behalf.
2026-10-10
* The report dictionary was amended to receive the bar height that the specification calls for.
* The mag option was fixed to also scale the bar height of wrapper and composite symbols under strictspec.
* The SSCC-18 and EAN-14 encoders were amended to use the GS1-128 Application Specification Tables.
2026-10-09
* The width and height options of matrix symbols were amended to behave as for linear symbols under strictspec and loosespec.
* Support for reporting the rendered physical dimensions via a caller-provided uk.co.terryburton.bwipp.report dictionary was added.
2026-10-08
* The GS1 Application Specification Table profiles were reconciled with Release 26.0 of the GS1 General Specifications.
* The gs1.sst2 profile for EAN-8 and the gs1.sst1, gs1.sst1.dl and gs1.sst8 profiles for GS1 QR Code were removed, since the GS1 General Specifications do not define them.
* Each AST profile was added to the encoder metadata.
2026-10-03
* Wrapper encoders were fixed to validate spec options and apply the global spec defaults.
2026-09-28
* The metadata for MaxiCode was fixed.
2026-09-17
* The performance of Reed-Solomon error correction was improved for the Aztec Code, PDF417, MicroPDF417, QR Code, Data Matrix, Han Xin Code, MaxiCode, Code One and Ultracode encoders.
* The Aztec Code encoder was fixed to account for bit stuffing when selecting the symbol size, and to limit compact symbols to 64 data codewords.
2026-09-16
* The MaxiCode renderer was reworked to draw hexagons at their specified size, to apply inkspread as for other symbologies, and to render pixel-exact symbols under gridfit.
* The matrix renderer was amended to draw dotty symbols with uniform round dots under gridfit.
2026-09-06
* The Data Matrix encoder was fixed to always emit the Macro 05/06 codeword in the first position, and to never emit an empty Base 256 segment.
* The Data Matrix and DotCode encoders were amended so that their output does not depend on the precision of real number arithmetic.
* The performance of the QR Code encoder was improved for data that mixes character classes.
2026-07-06
* The performance of the DotCode encoder was improved by sharing a single codeword placement walk between the mask candidates, by deriving each candidate's error correction codewords from those of the unmasked message, and by scoring each candidate together with its lit-edge variant in a single evaluation pass.
2026-07-04
* The QR Code, Han Xin Code and Aztec Code encoders were optimised.
* The performance of QR Code, Aztec Code, MaxiCode, Data Matrix, Code One and the Han Xin Code symbologies was optimised by preparing log-domain coefficients and two-period anti-log tables once in advance of Reed Solomon computation.
* The performance of punctuation compression in the Aztec Code encoder was improved via using lookahead.
2026-06-13
* The bearer bars were reworked to render as filled paths rather than stroked lines, matching the border and the data bars for consistent rendering at small scales.
* The hooks framework was amended so that hook procedures are activated by the presence of a hooks dictionary in the global context, without requiring the enabledebug option.
2026-05-31
* The PDF417, MicroPDF417 and Aztec Code encoding was optimised.
* Reed-Solomon error correction for the QR Code, Aztec Code, MaxiCode, Data Matrix, Code One and Han Xin Code symbologies was made more efficient.
2026-05-29
* The GS1 Application Identifier element string parsing and validation was made more efficient.
2026-05-28
* The QR Code, Aztec Code, Ultracode, PDF417, MicroPDF417, MaxiCode, Data Matrix, Han Xin Code, Code One and Codablock F encoders were amended to bound their parsed message length.
* The DotCode encoder was amedned to cap the rows and columns options at 200.
* The renmatrix intermediate dictionary key for per-row module heights was renamed from rowmult (a per-row array) to rowheights, eliminating a collision with the public scalar rowmult option of the PDF417 and MicroPDF417 encoders.
* The Code 128, Codablock F and Code 16K encoders were amended to avoid quadratic-time encoding of long digit runs.
2026-05-06
* The D3 AQR encoder was amended to invert the p0 parity module.
2026-05-05
* A provisional encoder for the D3 AQR symbology was added based on a draft specification. Details are likely to change if it is standardised.
* The Han Xin Code encoder was expanded with support for GS1 mode and numeric compaction.
* The JAB Code encoder was removed since the standard is unstable.
2026-04-26
* The ISBN, ISMN, ISSN and GS1 North American Coupon encoders were amended so that all regular text processing options work.
* The textsubspace and textsplit options were added as aliases of text1subspace and text1split, complementing the other text* aliases. The legacy alttextsubspace and alttextsplit aliases continue to work.
2026-04-22
* The DataBar variants were fixed to honour the mandatory 1X LHS guard space and 5X RHS guard space for DataBar Limited.
2026-04-21
* An addondescent option was added to EAN/UPC symbols to control the descent of add-on bars independently of guarddescent. It defaults to the value of guarddescent so the add-on matches the primary unless overridden.
2026-04-17
* Reed-Solomon encoding was harmonised and factored into shared rsecbinary and rsecprime helpers.
2026-04-16
* The renderer was changed to gridfit in the same direction when fitting independent axes.
2026-04-15
* The modunit option may now only be set within global context.
2026-04-09
* A guarddescent option was added to specify the descent of EAN/UPC guard bars in multiples of the X-dimension.
* EAN/UPC guards now correctly descend below the baseline so that height relates to the nominal bars.
2026-04-08
* Under propspec, the height option now acts as a multiplier on the spec-derived bar height.
2026-04-07
* The spec-based options were renamed to propspec, strictspec and loosespec and can be set via global_ctx.
* The hdim option now correctly sets bar height under strictspec and loosespec.
* EAN/UPC guard bar descent is now 5X.
2026-04-05
* Text alignment options for composite symbols was fixed.
* The primary symbol height option for composite symbols was fixed.
2026-04-03
* Text group support was added to the MaxiCode symbology.
* A new physspec option was added to simplify the generation of vector symbols with specification-compliant physical dimensions.
* Nominal and bounding metrics can be looked up in per-symbology application specific tables with the new ast option.
* In physspec mode the gridfit option validates the effective X-dimension against specification bounds, trying alternate rounding directions when the initial snap falls outside the allowed range.
2026-03-31
* gridfit and griddpi options were added to the renderers to snap module boundaries to device pixel grid.
2026-03-30
* Alias option handling was simplified and improved.
2026-03-29
* The text rendering system was generalised to support up to 9 independent text groups. The existing text and extratext options are retained as aliases.
2026-03-28
* The position of the whitespace guards for EAN/UPC symbols was simplified and better aligned with the text.
2026-03-27
* The position of the whitespace guards for standalone EAN/UPC addons was fixed.
2026-03-26
* The text{x,y}align=justify options were fixed for the linear and matrix renderers.
2026-03-25
* The text processing for the Code 39 Extended and Code 93 Extended encoders was fixed.
2026-03-24
* 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.
2026-03-13
* FMLY was added to the encoder metadata.
* The C API and SWIG bindings were expanded with support for lazy loading of resource bodies.
2026-03-03
* 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.
2026-02-27
* The AusPost encoder now supports FCC 87 (Routing) and FCC 92 (Redirection) barcodes.
* The renderers now support a `default_inkspread` global context setting.
2026-02-01
* 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.
2026-01-21
* 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.
2026-01-15
* 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.
2026-01-13
* Stack leaks during error handling were fixed for the Data Matrix, PDF417, Micro PDF417, ISBN, ISMN, AusPost and Telepen symbologies.
2026-01-12
* 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.
2026-01-09
* 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.
2026-01-07
* The Ultracode encoder was fixed so that colours are correctly selected for rendering.
2026-01-06
* The performance of the matrix renderer was further improved.
* Common colour handling code was factored out of the renderers into its own resource.
2026-01-05
* The performance of the matrix renderer was significantly improved.
2026-01-04
* 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.
2026-01-02
* 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.
2025-11-18
* Common text rendering code was factored out of the linear and matrix renderers into its own resource.
2025-10-24
* The ITF-14 encoder's text positioning was fixed.
2025-10-16
* 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.
2025-06-16
* The linear and matrix renderer were enhanced with support for extratextsubspace, extratextsplit and extratextlinegaps options corresponding to the alttext equivalents.
2025-06-13
* 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.
2025-04-19
* The GS1 AI linter was realigned with the latest release of the GS1 Syntax Dictionary.
2025-04-09
* 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.
2025-03-14
* 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.
2024-11-16
* The GS1 AI linter now reports the mandatory association specification that is not being met.
2024-10-13
* The baseline of EAN/UPC add-ons is now correctly aligned with the guard bars in the primary symbol.
2024-08-17
* Support for HRI text was added to the GS1 Digital Link variant symbologies.
2024-08-15
* Support for extra text was added to the renlinear and renmatrix renderers.
2024-07-20
* The encoder for QR Code was amended to opportunistically raise the error correction level when better fit to the matrix possible.
2024-07-07
* The renders were amended to lookup default colours from the global context when unset and available.
2024-07-06
* The renlinear render was amended to not apply inkspread compensation in the vertical direction.
* The composite encoders were amended to not clobber the separator pattern when a background colour is set.
2024-07-05
* The renderers were amended to apply inkspread compensation to the no-border background.
2024-07-04
* The renderers were amended to not stretch the background when no border or bearer is present.
2024-06-18
* The encoder for QR Code was amended to avoid encoding certain double byte pairs using Kanji Mode encoding.
2024-06-14
* The QR Code was fixed so that certain message characters will not be erroneously adopted as the low-order byte of a Kanji Mode pair.
2024-06-05
* Hex digit evaluation via data as code constructions were removed from the GS1 linter and renderers.
2024-04-31
* Support for named colours was added to the renderers.
2024-04-23
* The GS1 DL URI linter now permits an uppercase scheme.
2024-01-03
* The default whitespace guard position, test position and border positions for standalone EAN/UPC add-ons was amended to align with their use alongside EAN/UPC symbols.
2023-12-25
* The GS1 Digital Link validation no longer allows an AI to be specified as a regular attribute (within query parameters) if it would be a valid key qualifier (within path information).
2023-12-11
* The GS1-128 Composite, GS1 Expanded Stacked Composite and GS1 North American Coupon Code symbologies were fixed to honour the parse options for their 2D component.
2023-12-07
* A workaround was introduced to address an issue with the packager creating a broken resource due to improper binarisation of large integers.
2023-07-23
* A showbearer option was added to the linear renderer to render bearer bars above and below the symbol.
* The encoder for ITF-14 was amended to ensure that border and bearers in their default position will touch the bars when default inkspread is used.
2023-07-12
* The encoder for Aztec Code was fixed to allow encoding of long messages that end with binary data.
* The GS1 AI linter was realigned with the latest release of the GS1 Syntax Dictionary.
* The encoders for EAN and UPC variants were amended so that exterior digits and guard symbols better protect the quiet zone.
* The default options for the border positions were amended to align with the symbology-specific quiet zones, where appropriate.
* The border options were enabled for the MaxiCode symbology.
* The matrix and maximatrix renderer were altered to provide a small amount of inkspread compensation by default.
2023-07-05
* The renlinear renderer was changed so that any border is plotted outside of the zone defined by the border{left,right,top,bottom} options and so that inkspread is applied to the border.
* Border support was added to the renmatrix renderer.
2023-06-22
* The encoder for MaxiCode was amended to apply hexagon size reduction which can be adjusted by inkspread.
* The encoder for MicroPDF417 was improved to provide automatic Macro 05/06 compression of structured data.
2023-04-11
* Input validation fixes where applied to the Australia Post 4-State barcode, KIX, Code 11, Japan Post, Code 39, Code 39 Extended, Code 2 of 5, DataBar family, EAN-14, SSCC-18, Plessey, Posicode, Codabar, Composite Component, DAFT and HIBC symbologies.
2023-04-03
* The MSI symbology was fixed to permit the madmod11 options with the mod11 check type.
* The encoder for Data Matrix was fixed.
* The PDF417 symbology was fixed to perform ECC levels from 0 to 8.
* The Code 49 symbology option concat was renamed to append.
2023-04-01
* User option validation was added to Code 93 Extended, Codablock F, GS1-128, US Postal Service Intelligent Mail, Code 16K, Code 49, MSI, Code One, GS1 Composite Components, Hanxin, DotCode, GS1 DataBar Omnidirectional and GS1 DataBar Expanded.
* The GS1 AI linter was realigned with the latest release of the GS1 Syntax Dictionary, including the addition of a linter for AIDC media types.
2023-03-26
* User option validation was added to PDF417 and MicroPDF417.
2023-03-24
* User option validation was added to MaxiCode and the Australian Postal 4-state barcode.
2023-03-23
* The version information for QR Code version 33 symbols was fixed.
* User option validation was added to the Telepen and Japan Post QR Code.
* A font sizes less than or equal to zero is now forbidden.
2023-03-20
* User option validation was added to the encoders for QR Code, Aztec Code and Data Matrix.
* Aztec Code was amended to generate only full-range symbols by default.
* Support for legacy DIN DMRE models was removed from Data Matrix.
2023-03-16
* User input validation was added to the setting of RGB and CMYK colours.
2023-02-16
* The mailmark option in the encoder for Data Matrix was replaced with a generic c40headerlength option.
2022-10-19
* The GS1 North American Coupon Code symbology was fixed.
2022-10-15
* The text positioning options for renlinear and renmatrix were fixed.
2022-10-14
* The value type validation of the options parser has been further improved.
2022-10-13
* The vertical position of the left whitespace guard was fixed.
* User input validation was added to JapanPost and Code 93.
2022-10-10
* The options parser has improved value type validation.
2022-09-28
* Documentation updates only, to reflect GS1 example data ranges.
2022-09-26
* No user-visible changes.
2022-09-18
* The Composite symbologies now honour the dontdraw option.
2022-08-21
* The codeword generation for QR Code and Micro QR Code symbols was optimised.
2022-07-29
* GS1 data processing was significantly refactored.
2022-07-25
* The GS1 linter was extended to add support for Digital Link URIs.
* Helper encoders for GS1 Digital Link URI variants of QR Code and Data Matrix were added.
2022-07-20
* Mandatory AI linting is now disabled by default and can be enabled using the new lintreqs option.
2022-07-18
* The GS1 linter was fixed to work with GS1 DataBar Truncated Composite Composite symbols by considering the combined AI element string.
* A GS1 linter error message was fixed.
2022-07-17
* The GS1 linter was fixed to work with Composite symbols by considering the combined AI element string.
2022-07-16
* The GS1 linter was enhanced to apply mandatory and exclusive AI association rules.
2022-07-06
* A mechanism for preserving initialisation data between encoder invocations was added.
2022-07-01
* The parse option was extended to perform replacement of control character names such as ^NUL and ^RS with their ASCII value.
2022-06-10
* 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.
2022-04-04
* 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.
2021-09-28
* 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.
2021-07-15
* The colours for Ultracode symbols were changed to RGB values rather than CMYK.
2021-07-14
* The metrics for Ultracode symbols was updated and a raw mode was added.
2021-02-06
* Linting of GS1 AI (4308) was fixed.
* Linting of the check character pair for AI (8013) was added.
2021-01-15
* Linting for GS1 coupon AIs (8110) and (8112) was added.
2021-01-05
* Linting for GS1 AI syntax data was expanded and fixed.
2020-12-28
* A convenience encoder for GS1 DotCode was added.
2020-12-26
* GS1 Composite Component symbols were fixed.
2020-12-25
* Linting was added to GS1 Composite Components.
2020-12-24
* Linting for GS1 AI syntax data was added.
2020-12-09
* A bug in the compact encoding methods 0110X for GS1 DataBar Expanded formats was fixed.
2020-10-23
* 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 separator pattern for GS1 DataBar Expanded Stacked Composite was fixed.
2020-10-11
* A bug in leaving punctuation mode in Aztec Code was fixed.
2020-10-02
* An inefficiency in the QR Code encoding was fixed.
* ECI support was added to Code One.
2020-09-13
* A bug in Data Matrix for ECI checks at end of data was fixed.
2020-09-11
* ECI support was added to Data Matrix, Aztec Code, QR Code, PDF417, MicroPDF417, MaxiCode and DotCode.
* GS1 DataBar Limited was updated to include a right whitespace guard.
* Code 32 was fixed to avoid overwriting the provided barcode string.
2020-07-20
* A new encoder for Swiss QR Code was added.
* The Codablock F encoding was optimised potentially resulting in smaller symbols.
2020-07-09
* 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.
2020-04-01
* The encoder for GS1 QR Code was fixed.
2020-03-08
* 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.
2019-11-08
* The encoders were amended to workaround a non-standard operator on Harlequin RIPs.
2019-10-31
* A distinct encoder was added for Data Matrix Rectangular Extension.
2019-10-29
* The encoder for Data Matrix was enhanced to include the ISO formats for DMRE.
2019-10-13
* A crash with a certain encoding of data in GS1 DataBar Expanded based symbologies was fixed.
2019-10-10
* A bug in the encoder for Code 128 when composite component linkage flags were used with data terminating in mode C was fixed.
2019-09-24
* An encoder for the Royal Mail Mailmark symbology was added.
2019-08-05
* The performance of the renmatrix renderer was slightly optimised.
2019-08-03
* The performance of the renmatrix renderer was significantly improved.
2019-04-24
* A recent regression in the encoder for Data Matrix was fixed.
2019-04-23
* The encoder for Data Matrix was fixed to avoid certain cases where switching between C40, Text and X12 encoding might latch repeatedly.
2018-08-27
* Preliminary support for the JAB Code symbology was added.
2018-07-27
* The raw option was added to the encoder for Data Matrix.
2018-05-20
* The base size of Ultracode symbols was increased.
* Support for symbols composed of dots was added to the renmatrix renderer.
* The encoder for DotCode was amended to use the dotty matrix feature.
* A bug in the encoder for DotCode's handling of FNC3 message separator characters was fixed.
* The encoder for DotCode was fixed to support optimised handling of "FNC1 in First" for leading numeric input.
2018-02-04
* The performance of the encoder for Channel Code was improved.
* The base symbol size of the encoder for DotCode was increased.