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