File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ 2026-04-21
2+
3+ * 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.
4+
5+
162026-04-17
27
38* Reed-Solomon encoding was harmonised and factored into shared rsecbinary and rsecprime helpers.
Original file line number Diff line number Diff line change 7373 /text1xoffset -7.75 def
7474 /text1yoffset -5.25 def
7575 /height -1.0 def
76- /guarddescent 5 def
76+ /guarddescent 5.0 def
77+ /addondescent null def % realtype sentinel: defaults to guarddescent
7778 /width 0 def
7879 /addongap 12.0 def
7980 /addontextfont (unset) def
@@ -136,6 +137,7 @@ begin
136137 /resolve_strictspec //render exec
137138
138139 /descent guarddescent modunit mul 72 div def % Guard bar descent
140+ addondescent null eq { /addondescent guarddescent def } if % Default add-on descent to guard descent
139141
140142 %
141143 % Add checksum digit
@@ -247,7 +249,7 @@ begin
247249 /addopts <<
248250 /includetext true
249251 /height height includetext { 0.15 sub } if
250- /guarddescent guarddescent
252+ /addondescent addondescent
251253 /text1xoffset addontextxoffset null ne {addontextxoffset} {98.25 addongap add} ifelse
252254 addontextyoffset null ne {/text1yoffset addontextyoffset} if
253255 /text1size addontextsize null ne {addontextsize} {text1size} ifelse
Original file line number Diff line number Diff line change 6969 /text1xoffset 3.25 def
7070 /text1yoffset null def % sentinel realtype
7171 /height -1.0 def
72- /guarddescent 5 def
72+ /addondescent 5.0 def
7373 /width 0 def
7474
7575 /propspec false def
@@ -113,7 +113,7 @@ begin
113113
114114 /height /resolve_height //render exec dup -1 eq { pop 0.7 } if def
115115
116- /descent guarddescent modunit mul 72 div def % Guard bar descent
116+ /descent addondescent modunit mul 72 div def % Add-on bar descent
117117
118118 text1yoffset null eq {
119119 /text1yoffset height 72 mul 5.75 add def
Original file line number Diff line number Diff line change 7272 /text1xoffset 3.25 def
7373 /text1yoffset null def % realtype sentinel
7474 /height -1.0 def
75- /guarddescent 5 def
75+ /addondescent 5.0 def
7676 /width 0 def
7777
7878 /propspec false def
@@ -116,7 +116,7 @@ begin
116116
117117 /height /resolve_height //render exec dup -1 eq { pop 0.7 } if def
118118
119- /descent guarddescent modunit mul 72 div def % Guard bar descent
119+ /descent addondescent modunit mul 72 div def % Add-on bar descent
120120
121121 text1yoffset null eq {
122122 /text1yoffset height 72 mul 5.75 add def
Original file line number Diff line number Diff line change 7070 /text1xoffset 7.25 def
7171 /text1yoffset -5.25 def
7272 /height -1.0 def
73- /guarddescent 5 def
73+ /guarddescent 5.0 def
74+ /addondescent null def % realtype sentinel: defaults to guarddescent
7475 /width 0 def
7576
7677 /propspec false def
@@ -138,6 +139,7 @@ begin
138139 /resolve_strictspec //render exec
139140
140141 /descent guarddescent modunit mul 72 div def % Guard bar descent
142+ addondescent null eq { /addondescent guarddescent def } if % Default add-on descent to guard descent
141143
142144 %
143145 % Add checksum digit
@@ -231,7 +233,7 @@ begin
231233 /addopts <<
232234 /includetext true
233235 /height height includetext { 0.15 sub } if
234- /guarddescent guarddescent
236+ /addondescent addondescent
235237 /text1xoffset addontextxoffset null ne {addontextxoffset} {70.25 addongap add} ifelse
236238 addontextyoffset null ne {/text1yoffset addontextyoffset} if
237239 /text1size addontextsize null ne {addontextsize} {text1size} ifelse
Original file line number Diff line number Diff line change 7070 /text1xoffset -5.75 def
7171 /text1yoffset -5.25 def
7272 /height -1.0 def
73- /guarddescent 5 def
73+ /guarddescent 5.0 def
74+ /addondescent null def % realtype sentinel: defaults to guarddescent
7475 /width 0 def
7576
7677 /propspec false def
@@ -183,6 +184,7 @@ begin
183184 /resolve_strictspec //render exec
184185
185186 /descent guarddescent modunit mul 72 div def % Guard bar descent
187+ addondescent null eq { /addondescent guarddescent def } if % Default add-on descent to guard descent
186188
187189 %
188190 % Add checksum digit to barcode
@@ -284,7 +286,7 @@ begin
284286 /addopts <<
285287 /includetext true
286288 /height height includetext { 0.15 sub } if
287- /guarddescent guarddescent
289+ /addondescent addondescent
288290 /text1xoffset addontextxoffset null ne {addontextxoffset} {98.25 addongap add} ifelse
289291 addontextyoffset null ne {/text1yoffset addontextyoffset} if
290292 /text1size addontextsize null ne {addontextsize} {text1size} ifelse
Original file line number Diff line number Diff line change 7575 /text1xoffset -5.75 def
7676 /text1yoffset -5.25 def
7777 /height -1.0 def
78- /guarddescent 5 def
78+ /guarddescent 5.0 def
79+ /addondescent null def % realtype sentinel: defaults to guarddescent
7980 /width 0 def
8081
8182 /propspec false def
@@ -191,6 +192,7 @@ begin
191192 /resolve_strictspec //render exec
192193
193194 /descent guarddescent modunit mul 72 div def % Guard bar descent
195+ addondescent null eq { /addondescent guarddescent def } if % Default add-on descent to guard descent
194196
195197 %
196198 % Derive the equivalent UPC-A for its checksum
@@ -324,7 +326,7 @@ begin
324326 /addopts <<
325327 /includetext true
326328 /height height includetext { 0.15 sub } if
327- /guarddescent guarddescent
329+ /addondescent addondescent
328330 /text1xoffset addontextxoffset null ne {addontextxoffset} {54.25 addongap add} ifelse
329331 addontextyoffset null ne {/text1yoffset addontextyoffset} if
330332 /text1size addontextsize null ne {addontextsize} {text1size} ifelse
Original file line number Diff line number Diff line change 247247 dup /strictspec get exch /loosespec get 2 array astore
248248} [true true] isEqual
249249/uk.co.terryburton.bwipp.global_ctx tmp def
250+
251+ %
252+ % addondescent: primary's add-on descent propagates to the add-on symbol
253+ % and defaults to guarddescent. Inspect bbs[0] (primary left guard) and
254+ % bbs[length-1] (last add-on bar).
255+ %
256+ /descents_tmpl {
257+ 3 1 roll { 0 0 ean13 /bbs get dup 0 get exch dup length 1 sub get 2 array astore }
258+ dup 3 -1 roll 1 exch put dup 3 -1 roll 0 exch put
259+ exch isEqual
260+ } def
261+ (9780123456786 12345) (includetext dontdraw) [-0.0694 -0.0694] descents_tmpl % Default: addon inherits guard
262+ (9780123456786 12345) (includetext dontdraw addondescent=0) [-0.0694 0.0 ] descents_tmpl % Addon only
263+ (9780123456786 12345) (includetext dontdraw addondescent=8) [-0.0694 -0.1111] descents_tmpl % Addon deeper
264+ (9780123456786 12345) (includetext dontdraw guarddescent=8) [-0.1111 -0.1111] descents_tmpl % Addon inherits override
265+ (9780123456786 12345) (includetext dontdraw guarddescent=8 addondescent=0) [-0.1111 0.0 ] descents_tmpl % Both controlled independently
266+ % Same with EAN-2 add-on
267+ (9780123456786 12) (includetext dontdraw addondescent=0) [-0.0694 0.0] descents_tmpl
Original file line number Diff line number Diff line change 2929} def
3030(05) (includetext propspec) ok_tmpl
3131(05) (includetext strictspec xdim=0.330) ok_tmpl
32+
33+
34+ %
35+ % addondescent: controls the descent of the add-on bars below the baseline
36+ % (replaces the former guarddescent option on the add-on)
37+ %
38+ /descent_tmpl {
39+ 3 1 roll { 0 0 ean2 /bbs get 0 get 1 array astore }
40+ dup 3 -1 roll 1 exch put dup 3 -1 roll 0 exch put
41+ exch isEqual
42+ } def
43+ (05) (dontdraw) [-0.0694] descent_tmpl % Default 5X
44+ (05) (dontdraw addondescent=0) [ 0.0 ] descent_tmpl % No descent
45+ (05) (dontdraw addondescent=8) [-0.1111] descent_tmpl % 8X
46+ % Legacy guarddescent option is no longer recognized on the add-on (silently ignored)
47+ (05) (dontdraw guarddescent=0) [-0.0694] descent_tmpl
Original file line number Diff line number Diff line change 2929} def
3030(90200) (includetext propspec) ok_tmpl
3131(90200) (includetext strictspec xdim=0.330) ok_tmpl
32+
33+
34+ %
35+ % addondescent: controls the descent of the add-on bars below the baseline
36+ % (replaces the former guarddescent option on the add-on)
37+ %
38+ /descent_tmpl {
39+ 3 1 roll { 0 0 ean5 /bbs get 0 get 1 array astore }
40+ dup 3 -1 roll 1 exch put dup 3 -1 roll 0 exch put
41+ exch isEqual
42+ } def
43+ (90200) (dontdraw) [-0.0694] descent_tmpl % Default 5X
44+ (90200) (dontdraw addondescent=0) [ 0.0 ] descent_tmpl % No descent
45+ (90200) (dontdraw addondescent=8) [-0.1111] descent_tmpl % 8X
46+ % Legacy guarddescent option is no longer recognized on the add-on (silently ignored)
47+ (90200) (dontdraw guarddescent=0) [-0.0694] descent_tmpl
You can’t perform that action at this time.
0 commit comments