comparison mupdf-source/thirdparty/zint/backend/tools/gen_iso3166_h.php @ 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 <?php
2 /* Generate ISO 3166 include "backend/iso3166.h" for "backend/gs1.c" */
3 /*
4 libzint - the open source barcode library
5 Copyright (C) 2021-2022 Robin Stuart <rstuart114@gmail.com>
6 */
7 /* SPDX-License-Identifier: BSD-3-Clause */
8
9 /* To create "backend/iso3166.h" (from project directory):
10 *
11 * php backend/tools/gen_iso3166_h.php > backend/iso3166.h
12 */
13
14 $basename = basename(__FILE__);
15 $dirname = dirname(__FILE__);
16 $dirdirname = basename(dirname($dirname)) . '/' . basename($dirname);
17
18 $opts = getopt('c:h:t:');
19
20 $print_copyright = isset($opts['c']) ? (bool) $opts['c'] : true;
21 $print_h_guard = isset($opts['h']) ? (bool) $opts['h'] : true;
22 $tab = isset($opts['t']) ? $opts['t'] : ' ';
23
24 $numeric = array(
25 /*AFG*/ 4, /*ALB*/ 8, /*ATA*/ 10, /*DZA*/ 12, /*ASM*/ 16, /*AND*/ 20, /*AGO*/ 24, /*ATG*/ 28, /*AZE*/ 31, /*ARG*/ 32,
26 /*AUS*/ 36, /*AUT*/ 40, /*BHS*/ 44, /*BHR*/ 48, /*BGD*/ 50, /*ARM*/ 51, /*BRB*/ 52, /*BEL*/ 56, /*BMU*/ 60, /*BTN*/ 64,
27 /*BOL*/ 68, /*BIH*/ 70, /*BWA*/ 72, /*BVT*/ 74, /*BRA*/ 76, /*BLZ*/ 84, /*IOT*/ 86, /*SLB*/ 90, /*VGB*/ 92, /*BRN*/ 96,
28 /*BGR*/ 100, /*MMR*/ 104, /*BDI*/ 108, /*BLR*/ 112, /*KHM*/ 116, /*CMR*/ 120, /*CAN*/ 124, /*CPV*/ 132, /*CYM*/ 136, /*CAF*/ 140,
29 /*LKA*/ 144, /*TCD*/ 148, /*CHL*/ 152, /*CHN*/ 156, /*TWN*/ 158, /*CXR*/ 162, /*CCK*/ 166, /*COL*/ 170, /*COM*/ 174, /*MYT*/ 175,
30 /*COG*/ 178, /*COD*/ 180, /*COK*/ 184, /*CRI*/ 188, /*HRV*/ 191, /*CUB*/ 192, /*CYP*/ 196, /*CZE*/ 203, /*BEN*/ 204, /*DNK*/ 208,
31 /*DMA*/ 212, /*DOM*/ 214, /*ECU*/ 218, /*SLV*/ 222, /*GNQ*/ 226, /*ETH*/ 231, /*ERI*/ 232, /*EST*/ 233, /*FRO*/ 234, /*FLK*/ 238,
32 /*SGS*/ 239, /*FJI*/ 242, /*FIN*/ 246, /*ALA*/ 248, /*FRA*/ 250, /*GUF*/ 254, /*PYF*/ 258, /*ATF*/ 260, /*DJI*/ 262, /*GAB*/ 266,
33 /*GEO*/ 268, /*GMB*/ 270, /*PSE*/ 275, /*DEU*/ 276, /*GHA*/ 288, /*GIB*/ 292, /*KIR*/ 296, /*GRC*/ 300, /*GRL*/ 304, /*GRD*/ 308,
34 /*GLP*/ 312, /*GUM*/ 316, /*GTM*/ 320, /*GIN*/ 324, /*GUY*/ 328, /*HTI*/ 332, /*HMD*/ 334, /*VAT*/ 336, /*HND*/ 340, /*HKG*/ 344,
35 /*HUN*/ 348, /*ISL*/ 352, /*IND*/ 356, /*IDN*/ 360, /*IRN*/ 364, /*IRQ*/ 368, /*IRL*/ 372, /*ISR*/ 376, /*ITA*/ 380, /*CIV*/ 384,
36 /*JAM*/ 388, /*JPN*/ 392, /*KAZ*/ 398, /*JOR*/ 400, /*KEN*/ 404, /*PRK*/ 408, /*KOR*/ 410, /*KWT*/ 414, /*KGZ*/ 417, /*LAO*/ 418,
37 /*LBN*/ 422, /*LSO*/ 426, /*LVA*/ 428, /*LBR*/ 430, /*LBY*/ 434, /*LIE*/ 438, /*LTU*/ 440, /*LUX*/ 442, /*MAC*/ 446, /*MDG*/ 450,
38 /*MWI*/ 454, /*MYS*/ 458, /*MDV*/ 462, /*MLI*/ 466, /*MLT*/ 470, /*MTQ*/ 474, /*MRT*/ 478, /*MUS*/ 480, /*MEX*/ 484, /*MCO*/ 492,
39 /*MNG*/ 496, /*MDA*/ 498, /*MNE*/ 499, /*MSR*/ 500, /*MAR*/ 504, /*MOZ*/ 508, /*OMN*/ 512, /*NAM*/ 516, /*NRU*/ 520, /*NPL*/ 524,
40 /*NLD*/ 528, /*CUW*/ 531, /*ABW*/ 533, /*SXM*/ 534, /*BES*/ 535, /*NCL*/ 540, /*VUT*/ 548, /*NZL*/ 554, /*NIC*/ 558, /*NER*/ 562,
41 /*NGA*/ 566, /*NIU*/ 570, /*NFK*/ 574, /*NOR*/ 578, /*MNP*/ 580, /*UMI*/ 581, /*FSM*/ 583, /*MHL*/ 584, /*PLW*/ 585, /*PAK*/ 586,
42 /*PAN*/ 591, /*PNG*/ 598, /*PRY*/ 600, /*PER*/ 604, /*PHL*/ 608, /*PCN*/ 612, /*POL*/ 616, /*PRT*/ 620, /*GNB*/ 624, /*TLS*/ 626,
43 /*PRI*/ 630, /*QAT*/ 634, /*REU*/ 638, /*ROU*/ 642, /*RUS*/ 643, /*RWA*/ 646, /*BLM*/ 652, /*SHN*/ 654, /*KNA*/ 659, /*AIA*/ 660,
44 /*LCA*/ 662, /*MAF*/ 663, /*SPM*/ 666, /*VCT*/ 670, /*SMR*/ 674, /*STP*/ 678, /*SAU*/ 682, /*SEN*/ 686, /*SRB*/ 688, /*SYC*/ 690,
45 /*SLE*/ 694, /*SGP*/ 702, /*SVK*/ 703, /*VNM*/ 704, /*SVN*/ 705, /*SOM*/ 706, /*ZAF*/ 710, /*ZWE*/ 716, /*ESP*/ 724, /*SSD*/ 728,
46 /*SDN*/ 729, /*ESH*/ 732, /*SUR*/ 740, /*SJM*/ 744, /*SWZ*/ 748, /*SWE*/ 752, /*CHE*/ 756, /*SYR*/ 760, /*TJK*/ 762, /*THA*/ 764,
47 /*TGO*/ 768, /*TKL*/ 772, /*TON*/ 776, /*TTO*/ 780, /*ARE*/ 784, /*TUN*/ 788, /*TUR*/ 792, /*TKM*/ 795, /*TCA*/ 796, /*TUV*/ 798,
48 /*UGA*/ 800, /*UKR*/ 804, /*MKD*/ 807, /*EGY*/ 818, /*GBR*/ 826, /*GGY*/ 831, /*JEY*/ 832, /*IMN*/ 833, /*TZA*/ 834, /*USA*/ 840,
49 /*VIR*/ 850, /*BFA*/ 854, /*URY*/ 858, /*UZB*/ 860, /*VEN*/ 862, /*WLF*/ 876, /*WSM*/ 882, /*YEM*/ 887, /*ZMB*/ 894,
50 );
51
52 $numeric_tab = array();
53 $val = 0;
54 $byte = 0;
55 $max = $numeric[count($numeric) - 1];
56 for ($i = 0; $i <= $max; $i++) {
57 if ($i && $i % 8 == 0) {
58 $numeric_tab[$byte++] = $val;
59 $val = 0;
60 }
61 if (in_array($i, $numeric)) {
62 $val |= 1 << ($i & 0x7);
63 }
64 }
65 $numeric_tab[$byte++] = $val;
66 $numeric_cnt = count($numeric_tab);
67
68 $alpha2 = array(
69 "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR",
70 "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE",
71 "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BQ",
72 "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD",
73 "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR",
74 "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM",
75 "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI",
76 "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF",
77 "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS",
78 "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU",
79 "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS", "IT",
80 "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN",
81 "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK",
82 "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME",
83 "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ",
84 "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA",
85 "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU",
86 "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM",
87 "PN", "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS",
88 "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI",
89 "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV",
90 "SX", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", "TK",
91 "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA",
92 "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI",
93 "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM", "ZW",
94 );
95
96 $alpha2_tab = array();
97 $val = 0;
98 $byte = 0;
99 for ($i = 0; $i < 26; $i++) {
100 for ($j = 0; $j < 26; $j++) {
101 $ij = $i * 26 + $j;
102 if ($ij && $ij % 8 == 0) {
103 $alpha2_tab[$byte++] = $val;
104 $val = 0;
105 }
106 $cc = chr(65 + $i) . chr(65 + $j);
107 if (in_array($cc, $alpha2)) {
108 $val |= 1 << ($ij & 0x7);
109 }
110 }
111 }
112 $alpha2_tab[$byte++] = $val;
113 $alpha2_cnt = count($alpha2_tab);
114
115 print <<<EOD
116 /*
117 * ISO 3166 country codes generated by "$dirdirname/$basename"
118 */
119
120 EOD;
121
122 if ($print_copyright) {
123 print <<<'EOD'
124 /*
125 libzint - the open source barcode library
126 Copyright (C) 2021-2022 Robin Stuart <rstuart114@gmail.com>
127
128 Redistribution and use in source and binary forms, with or without
129 modification, are permitted provided that the following conditions
130 are met:
131
132 1. Redistributions of source code must retain the above copyright
133 notice, this list of conditions and the following disclaimer.
134 2. Redistributions in binary form must reproduce the above copyright
135 notice, this list of conditions and the following disclaimer in the
136 documentation and/or other materials provided with the distribution.
137 3. Neither the name of the project nor the names of its contributors
138 may be used to endorse or promote products derived from this software
139 without specific prior written permission.
140
141 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
142 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
143 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
144 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
145 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
146 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
147 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
148 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
149 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
150 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
151 SUCH DAMAGE.
152 */
153 /* SPDX-License-Identifier: BSD-3-Clause */
154
155
156 EOD;
157 }
158
159 if ($print_h_guard) {
160 print <<<'EOD'
161 #ifndef Z_ISO3166_H
162 #define Z_ISO3166_H
163
164 EOD;
165 }
166
167 print <<<EOD
168
169 /* Whether ISO 3166-1 numeric */
170 static int iso3166_numeric(int cc) {
171 {$tab}static const unsigned char codes[$numeric_cnt] = {
172 EOD;
173
174 for ($i = 0; $i < $numeric_cnt; $i++) {
175 if ($i % 8 == 0) {
176 print "\n$tab$tab";
177 } else {
178 print " ";
179 }
180 printf("0x%02X,", $numeric_tab[$i]);
181 }
182 print <<<EOD
183
184 {$tab}};
185 {$tab}int b = cc >> 3;
186
187 {$tab}if (b < 0 || b >= $numeric_cnt) {
188 {$tab}{$tab}return 0;
189 {$tab}}
190 {$tab}return codes[b] & (1 << (cc & 0x7)) ? 1 : 0;
191 }
192
193 /* Whether ISO 3166-1 alpha2 */
194 static int iso3166_alpha2(const char *cc) {
195 {$tab}static const unsigned char codes[$alpha2_cnt] = {
196 EOD;
197
198 for ($i = 0; $i < $alpha2_cnt; $i++) {
199 if ($i % 8 == 0) {
200 print "\n$tab$tab";
201 } else {
202 print " ";
203 }
204 printf("0x%02X,", $alpha2_tab[$i]);
205 }
206 print <<<EOD
207
208 {$tab}};
209 {$tab}int cc_int;
210
211 {$tab}if (cc[0] < 'A' || cc[0] > 'Z' || cc[1] < 'A' || cc[1] > 'Z') {
212 {$tab}{$tab}return 0;
213 {$tab}}
214 {$tab}cc_int = (cc[0] - 'A') * 26 + (cc[1] - 'A');
215
216 {$tab}return codes[cc_int >> 3] & (1 << (cc_int & 0x7)) ? 1 : 0;
217 }
218
219 EOD;
220
221 if ($print_h_guard) {
222 print <<<'EOD'
223
224 #endif /* Z_ISO3166_H */
225
226 EOD;
227 }
228
229 /* vim: set ts=4 sw=4 et : */