Skip to content

Commit 028c845

Browse files
committed
ean{2,5}: guarddescent -> addondescent; set to primary guarddescent by default
1 parent 32b4c7d commit 028c845

13 files changed

Lines changed: 127 additions & 13 deletions

CHANGES

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
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+
16
2026-04-17
27

38
* Reed-Solomon encoding was harmonised and factored into shared rsecbinary and rsecprime helpers.

src/ean13.ps.src

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ begin
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

src/ean2.ps.src

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ begin
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

src/ean5.ps.src

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ begin
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

src/ean8.ps.src

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ begin
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

src/upca.ps.src

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ begin
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

src/upce.ps.src

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ begin
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

tests/ps_tests/ean13.ps.test

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,21 @@
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

tests/ps_tests/ean2.ps.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,19 @@
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

tests/ps_tests/ean5.ps.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,19 @@
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

0 commit comments

Comments
 (0)