Mercurial > hgrepos > Python2 > PyMuPDF
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 : |
