diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zint/backend/tests/tools/bwipp_dump-barcode.ps.cat	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,254 @@
+%!PS
+
+% libzint - the open source barcode library
+% Copyright (C) 2022-2023 Robin Stuart <rstuart114@gmail.com>
+% SPDX-License-Identifier: BSD-3-Clause
+
+% Append to BWIPP barcode.ps: cat <bwipp-dir>/build/monolithic/barcode.ps bwipp_dump-barcode.ps.cat > bwipp_dump.ps
+%
+% To compress: tar cv bwipp_dump.ps | xz -e9 > bwipp_dump.ps.tar.xz
+
+% Dumps BWIPP barcode binary to stdout. If `-sn` given, appends a newline after each symbol row, otherwise doesn't.
+%
+% To run e.g. gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=databarexpanded -sd='(01)98898765432106' -so='includetext segments=6' bwipp_dump.ps
+% where
+% `-sb=` is the BWIPP barcode routine name
+% `-sd=` is the data (`sd2=`, `sd3=`, `sd4=` are also available for overspill data > ~2K to get around Ghostscript's arg_str_max)
+% `-so=` are options (as space separated key=val pairs (or just key if boolean true))
+
+% For debugging the barcode can be rendered by leaving out `-dBATCH -dNODISPLAY`. Scaling can be specified by `-ss=` (default 2).
+
+% Command line "-s" options put into system dictionary as strings
+/n systemdict /n known def
+
+% Append d2 to d if given
+systemdict /d2 known {
+    /d d length d2 length add string dup dup 0 d putinterval d length d2 putinterval def
+    % Append d3 to d if given
+    systemdict /d3 known {
+        /d d length d3 length add string dup dup 0 d putinterval d length d3 putinterval def
+        % Append d4 to d if given
+        systemdict /d4 known {
+            /d d length d4 length add string dup dup 0 d putinterval d length d4 putinterval def
+        } if
+    } if
+} if
+
+% Strip start/end parens from data if any
+d 0 1 getinterval (\() eq d d length 1 sub 1 getinterval (\)) eq and {
+    /d d 1 d length 2 sub getinterval d length 2 sub string copy def
+} if
+
+% Options
+systemdict /o known {
+    o type /stringtype eq o length 0 gt and {
+        o length 2 ge {
+            % Strip start/end parens from options if any
+            o 0 1 getinterval (\() eq o o length 1 sub 1 getinterval (\)) eq and {
+                /o o 1 o length 2 sub getinterval o length 2 sub string copy def
+            } if
+        } if
+        3 dict begin
+        o {
+            token not {exit} if
+            dup length string cvs (=) search {
+                cvlit exch pop exch def
+            } {
+                cvlit true def
+            } ifelse
+        } loop
+        currentdict end /o exch def
+    } {
+        /o 1 dict def
+    } ifelse
+} {
+    /o 1 dict def
+} ifelse
+
+o (dontdraw) true put
+
+/ret d o b cvn /uk.co.terryburton.bwipp findresource exec def
+
+% pixs is renmatrix input
+ret /pixs known {
+    b (maxicode) eq {
+        /pixs 990 array def
+        0 1 989 { pixs exch 0 put } for
+        ret /pixs get { pixs exch 1 put } forall
+    } {
+        /pixs ret /pixs get def
+    } ifelse
+
+    /pixx ret /pixx known { ret /pixx get } { 0 } ifelse def
+
+    b (codablockf) eq b (hibccodablockf) eq or b (code16k) eq or b (code49) eq or {
+        % Strip separators and boundary bars
+        /testi b (code16k) eq { 16 } { b (code49) eq { 11 } { 21 } ifelse } ifelse def
+        /tmppixs pixs length array def
+        /j 0 def
+        0 pixx pixs length 1 sub {
+            /i exch def
+            pixs i testi add get 1 ne {
+                tmppixs j pixs i pixx getinterval putinterval
+                /j j pixx add def
+            } if
+        } for
+        /pixs j array def
+        pixs 0 tmppixs 0 j getinterval putinterval
+    } if
+
+    /xs systemdict /xs known { systemdict /xs get cvi } { 0 } ifelse def
+    /xe systemdict /xe known { systemdict /xe get cvi } { 0 } ifelse def
+
+    n xs 0 ne or xe 0 ne or pixx 0 ne and {  % If newlines or start/end indexes requested and have row width
+        /pixx ret /pixx get def
+        xs pixx pixs length 1 sub xe sub {  % For i = xs; i < pixs length - xe; i += pixx
+            pixs exch pixx xs sub xe sub getinterval {  % For j = i; j < i + pixx - xs -xe; j++
+                1 string cvs print
+            } forall
+            n { (\n) print } if
+        } for
+    } {  % Else dump the whole thing, no newlines
+        pixs { 1 string cvs print } forall
+    } ifelse
+} {
+    % sbs is renlinear input
+    ret /sbs known {
+        /sbs ret /sbs get def
+
+        % Check if given preprocessor override
+        systemdict /p known {
+            /p systemdict /p get cvx def
+        } {
+            /p { false } def
+        } ifelse
+
+        % Check if given ratio arg to adjust width of bars/spaces (e.g. "0.6" reduces 3 -> 2, "1.3" increases 2 -> 3)
+        systemdict /r known {
+            /r systemdict /r get cvr def
+            systemdict /c known {  % Apply ceiling ratio beforehand
+                /c systemdict /c get cvr def
+                /f { c mul ceiling cvi r mul round cvi } def
+            } {
+                /f { r mul round cvi } def
+            } ifelse
+        } {
+            /f {} def
+        } ifelse
+
+        % If should begin with space
+        systemdict /bs known { (0) print } if
+
+        % If should end sbs loop on bar (i.e. ignore last index of even-length sbs)
+        /limit systemdict /elb known {
+            sbs length 1 add 2 idiv 2 mul 2 sub
+        } {
+            sbs length 1 sub
+        } ifelse def
+
+        /nosbs false def
+
+        % Check for pharmacode2
+        b (pharmacode2) eq {
+            /nosbs true def
+            /bhs ret /bhs get def
+            /bbs ret /bbs get def
+            0 1 bbs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bbs i get 0.1 lt {
+                    bhs i get 0.3 gt { (1) print } { (0) print } ifelse
+                } {
+                    bhs i get 0.1 gt { (1) print } { (0) print } ifelse
+                } ifelse
+            } for
+            n { (\n) print } if
+            0 1 bbs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bbs i get 0.1 lt {
+                    bhs i get 0.1 gt { (1) print } { (0) print } ifelse
+                } {
+                    bhs i get 0.3 gt { (1) print } { (0) print } ifelse
+                } ifelse
+            } for
+            n { (\n) print } if
+        } if
+
+        % Check for 2-track postal
+        b (postnet) eq b (planet) eq or {
+            /nosbs true def
+            /bhs ret /bhs get def
+            0 1 bhs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bhs i get 0.1 gt { (1) print } { (0) print } ifelse
+            } for
+            n { (\n) print } if
+            0 1 bhs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bhs i get 0.01 lt { (0) print } { (1) print } ifelse
+            } for
+            n { (\n) print } if
+        } if
+
+        % Check for 4-track postal
+        b (auspost) eq b (kix) eq or b (royalmail) eq or b (onecode) eq or b (japanpost) eq or b (daft) eq or {
+            /nosbs true def
+            /bhs ret /bhs get def
+            /bbs ret /bbs get def
+            0 1 bbs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bbs i get 0.05 lt {
+                    bhs i get 0.14 gt { (1) print } { (0) print } ifelse
+                } {
+                    bhs i get 0.09 gt { (1) print } { (0) print } ifelse
+                } ifelse
+            } for
+            n { (\n) print } if
+            0 1 bbs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                (1) print
+            } for
+            n { (\n) print } if
+            0 1 bbs length 1 sub {
+                /i exch def
+                i 0 ne { (0) print } if
+                bbs i get 0.05 lt {
+                    bhs i get 0.09 gt { (1) print } { (0) print } ifelse
+                } {
+                    (0) print
+                } ifelse
+            } for
+            n { (\n) print } if
+        } if
+
+        % Process sbs
+        nosbs not {
+            0 1 limit {
+                /i exch def
+                p not {  % If not preprocessed
+                    i 2 mod 0 eq {           % i is even
+                        sbs i get f cvi { (1) print } repeat
+                    } {
+                        sbs i get f cvi { (0) print } repeat
+                    } ifelse
+                } if
+            } for
+            n { (\n) print } if
+        } if
+    } if
+} ifelse
+
+% If have renderer
+ret /ren known {
+    % Scale
+    /s systemdict /s known { systemdict /s get cvi } { 2 } ifelse def
+    % If not -dNODISPLAY then render for debugging
+    currentpagedevice /Name get (nullpage) ne { s s scale 10 10 moveto ret ret /ren get exec } if
+} if
+
+% vim: set ts=4 sw=4 et :