comparison mupdf-source/thirdparty/zint/backend/tests/tools/bwipp_dump-barcode.ps.cat @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 %!PS
2
3 % libzint - the open source barcode library
4 % Copyright (C) 2022-2023 Robin Stuart <rstuart114@gmail.com>
5 % SPDX-License-Identifier: BSD-3-Clause
6
7 % Append to BWIPP barcode.ps: cat <bwipp-dir>/build/monolithic/barcode.ps bwipp_dump-barcode.ps.cat > bwipp_dump.ps
8 %
9 % To compress: tar cv bwipp_dump.ps | xz -e9 > bwipp_dump.ps.tar.xz
10
11 % Dumps BWIPP barcode binary to stdout. If `-sn` given, appends a newline after each symbol row, otherwise doesn't.
12 %
13 % To run e.g. gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=databarexpanded -sd='(01)98898765432106' -so='includetext segments=6' bwipp_dump.ps
14 % where
15 % `-sb=` is the BWIPP barcode routine name
16 % `-sd=` is the data (`sd2=`, `sd3=`, `sd4=` are also available for overspill data > ~2K to get around Ghostscript's arg_str_max)
17 % `-so=` are options (as space separated key=val pairs (or just key if boolean true))
18
19 % For debugging the barcode can be rendered by leaving out `-dBATCH -dNODISPLAY`. Scaling can be specified by `-ss=` (default 2).
20
21 % Command line "-s" options put into system dictionary as strings
22 /n systemdict /n known def
23
24 % Append d2 to d if given
25 systemdict /d2 known {
26 /d d length d2 length add string dup dup 0 d putinterval d length d2 putinterval def
27 % Append d3 to d if given
28 systemdict /d3 known {
29 /d d length d3 length add string dup dup 0 d putinterval d length d3 putinterval def
30 % Append d4 to d if given
31 systemdict /d4 known {
32 /d d length d4 length add string dup dup 0 d putinterval d length d4 putinterval def
33 } if
34 } if
35 } if
36
37 % Strip start/end parens from data if any
38 d 0 1 getinterval (\() eq d d length 1 sub 1 getinterval (\)) eq and {
39 /d d 1 d length 2 sub getinterval d length 2 sub string copy def
40 } if
41
42 % Options
43 systemdict /o known {
44 o type /stringtype eq o length 0 gt and {
45 o length 2 ge {
46 % Strip start/end parens from options if any
47 o 0 1 getinterval (\() eq o o length 1 sub 1 getinterval (\)) eq and {
48 /o o 1 o length 2 sub getinterval o length 2 sub string copy def
49 } if
50 } if
51 3 dict begin
52 o {
53 token not {exit} if
54 dup length string cvs (=) search {
55 cvlit exch pop exch def
56 } {
57 cvlit true def
58 } ifelse
59 } loop
60 currentdict end /o exch def
61 } {
62 /o 1 dict def
63 } ifelse
64 } {
65 /o 1 dict def
66 } ifelse
67
68 o (dontdraw) true put
69
70 /ret d o b cvn /uk.co.terryburton.bwipp findresource exec def
71
72 % pixs is renmatrix input
73 ret /pixs known {
74 b (maxicode) eq {
75 /pixs 990 array def
76 0 1 989 { pixs exch 0 put } for
77 ret /pixs get { pixs exch 1 put } forall
78 } {
79 /pixs ret /pixs get def
80 } ifelse
81
82 /pixx ret /pixx known { ret /pixx get } { 0 } ifelse def
83
84 b (codablockf) eq b (hibccodablockf) eq or b (code16k) eq or b (code49) eq or {
85 % Strip separators and boundary bars
86 /testi b (code16k) eq { 16 } { b (code49) eq { 11 } { 21 } ifelse } ifelse def
87 /tmppixs pixs length array def
88 /j 0 def
89 0 pixx pixs length 1 sub {
90 /i exch def
91 pixs i testi add get 1 ne {
92 tmppixs j pixs i pixx getinterval putinterval
93 /j j pixx add def
94 } if
95 } for
96 /pixs j array def
97 pixs 0 tmppixs 0 j getinterval putinterval
98 } if
99
100 /xs systemdict /xs known { systemdict /xs get cvi } { 0 } ifelse def
101 /xe systemdict /xe known { systemdict /xe get cvi } { 0 } ifelse def
102
103 n xs 0 ne or xe 0 ne or pixx 0 ne and { % If newlines or start/end indexes requested and have row width
104 /pixx ret /pixx get def
105 xs pixx pixs length 1 sub xe sub { % For i = xs; i < pixs length - xe; i += pixx
106 pixs exch pixx xs sub xe sub getinterval { % For j = i; j < i + pixx - xs -xe; j++
107 1 string cvs print
108 } forall
109 n { (\n) print } if
110 } for
111 } { % Else dump the whole thing, no newlines
112 pixs { 1 string cvs print } forall
113 } ifelse
114 } {
115 % sbs is renlinear input
116 ret /sbs known {
117 /sbs ret /sbs get def
118
119 % Check if given preprocessor override
120 systemdict /p known {
121 /p systemdict /p get cvx def
122 } {
123 /p { false } def
124 } ifelse
125
126 % Check if given ratio arg to adjust width of bars/spaces (e.g. "0.6" reduces 3 -> 2, "1.3" increases 2 -> 3)
127 systemdict /r known {
128 /r systemdict /r get cvr def
129 systemdict /c known { % Apply ceiling ratio beforehand
130 /c systemdict /c get cvr def
131 /f { c mul ceiling cvi r mul round cvi } def
132 } {
133 /f { r mul round cvi } def
134 } ifelse
135 } {
136 /f {} def
137 } ifelse
138
139 % If should begin with space
140 systemdict /bs known { (0) print } if
141
142 % If should end sbs loop on bar (i.e. ignore last index of even-length sbs)
143 /limit systemdict /elb known {
144 sbs length 1 add 2 idiv 2 mul 2 sub
145 } {
146 sbs length 1 sub
147 } ifelse def
148
149 /nosbs false def
150
151 % Check for pharmacode2
152 b (pharmacode2) eq {
153 /nosbs true def
154 /bhs ret /bhs get def
155 /bbs ret /bbs get def
156 0 1 bbs length 1 sub {
157 /i exch def
158 i 0 ne { (0) print } if
159 bbs i get 0.1 lt {
160 bhs i get 0.3 gt { (1) print } { (0) print } ifelse
161 } {
162 bhs i get 0.1 gt { (1) print } { (0) print } ifelse
163 } ifelse
164 } for
165 n { (\n) print } if
166 0 1 bbs length 1 sub {
167 /i exch def
168 i 0 ne { (0) print } if
169 bbs i get 0.1 lt {
170 bhs i get 0.1 gt { (1) print } { (0) print } ifelse
171 } {
172 bhs i get 0.3 gt { (1) print } { (0) print } ifelse
173 } ifelse
174 } for
175 n { (\n) print } if
176 } if
177
178 % Check for 2-track postal
179 b (postnet) eq b (planet) eq or {
180 /nosbs true def
181 /bhs ret /bhs get def
182 0 1 bhs length 1 sub {
183 /i exch def
184 i 0 ne { (0) print } if
185 bhs i get 0.1 gt { (1) print } { (0) print } ifelse
186 } for
187 n { (\n) print } if
188 0 1 bhs length 1 sub {
189 /i exch def
190 i 0 ne { (0) print } if
191 bhs i get 0.01 lt { (0) print } { (1) print } ifelse
192 } for
193 n { (\n) print } if
194 } if
195
196 % Check for 4-track postal
197 b (auspost) eq b (kix) eq or b (royalmail) eq or b (onecode) eq or b (japanpost) eq or b (daft) eq or {
198 /nosbs true def
199 /bhs ret /bhs get def
200 /bbs ret /bbs get def
201 0 1 bbs length 1 sub {
202 /i exch def
203 i 0 ne { (0) print } if
204 bbs i get 0.05 lt {
205 bhs i get 0.14 gt { (1) print } { (0) print } ifelse
206 } {
207 bhs i get 0.09 gt { (1) print } { (0) print } ifelse
208 } ifelse
209 } for
210 n { (\n) print } if
211 0 1 bbs length 1 sub {
212 /i exch def
213 i 0 ne { (0) print } if
214 (1) print
215 } for
216 n { (\n) print } if
217 0 1 bbs length 1 sub {
218 /i exch def
219 i 0 ne { (0) print } if
220 bbs i get 0.05 lt {
221 bhs i get 0.09 gt { (1) print } { (0) print } ifelse
222 } {
223 (0) print
224 } ifelse
225 } for
226 n { (\n) print } if
227 } if
228
229 % Process sbs
230 nosbs not {
231 0 1 limit {
232 /i exch def
233 p not { % If not preprocessed
234 i 2 mod 0 eq { % i is even
235 sbs i get f cvi { (1) print } repeat
236 } {
237 sbs i get f cvi { (0) print } repeat
238 } ifelse
239 } if
240 } for
241 n { (\n) print } if
242 } if
243 } if
244 } ifelse
245
246 % If have renderer
247 ret /ren known {
248 % Scale
249 /s systemdict /s known { systemdict /s get cvi } { 2 } ifelse def
250 % If not -dNODISPLAY then render for debugging
251 currentpagedevice /Name get (nullpage) ne { s s scale 10 10 moveto ret ret /ren get exec } if
252 } if
253
254 % vim: set ts=4 sw=4 et :