comparison mupdf-source/thirdparty/zxing-cpp/core/src/ECI.cpp @ 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 /*
2 * Copyright 2022 Axel Waggershauser
3 */
4 // SPDX-License-Identifier: Apache-2.0
5
6 #include "ECI.h"
7
8 #include "ZXAlgorithms.h"
9
10 #include <map>
11
12 namespace ZXing {
13
14 static const std::map<ECI, CharacterSet> ECI_TO_CHARSET = {
15 {ECI(0), CharacterSet::Cp437}, // Obsolete
16 {ECI(1), CharacterSet::ISO8859_1}, // Obsolete
17 {ECI::Cp437, CharacterSet::Cp437}, // Obsolete but still used by PDF417 Macro fields (ISO/IEC 15438:2015 Annex H.2.3)
18 {ECI::ISO8859_1, CharacterSet::ISO8859_1},
19 {ECI::ISO8859_2, CharacterSet::ISO8859_2},
20 {ECI::ISO8859_3, CharacterSet::ISO8859_3},
21 {ECI::ISO8859_4, CharacterSet::ISO8859_4},
22 {ECI::ISO8859_5, CharacterSet::ISO8859_5},
23 {ECI::ISO8859_6, CharacterSet::ISO8859_6},
24 {ECI::ISO8859_7, CharacterSet::ISO8859_7},
25 {ECI::ISO8859_8, CharacterSet::ISO8859_8},
26 {ECI::ISO8859_9, CharacterSet::ISO8859_9},
27 {ECI::ISO8859_10, CharacterSet::ISO8859_10},
28 {ECI::ISO8859_11, CharacterSet::ISO8859_11},
29 {ECI::ISO8859_13, CharacterSet::ISO8859_13},
30 {ECI::ISO8859_14, CharacterSet::ISO8859_14},
31 {ECI::ISO8859_15, CharacterSet::ISO8859_15},
32 {ECI::ISO8859_16, CharacterSet::ISO8859_16},
33 {ECI::Shift_JIS, CharacterSet::Shift_JIS},
34 {ECI::Cp1250, CharacterSet::Cp1250},
35 {ECI::Cp1251, CharacterSet::Cp1251},
36 {ECI::Cp1252, CharacterSet::Cp1252},
37 {ECI::Cp1256, CharacterSet::Cp1256},
38 {ECI::UTF8, CharacterSet::UTF8},
39 {ECI::UTF16BE, CharacterSet::UTF16BE},
40 {ECI::UTF16LE, CharacterSet::UTF16LE},
41 {ECI::UTF32BE, CharacterSet::UTF32BE},
42 {ECI::UTF32LE, CharacterSet::UTF32LE},
43 {ECI::ASCII, CharacterSet::ASCII},
44 {ECI::Big5, CharacterSet::Big5},
45 {ECI::GB18030, CharacterSet::GB18030},
46 {ECI::GB2312, CharacterSet::GB2312},
47 {ECI::EUC_KR, CharacterSet::EUC_KR},
48 {ECI::ISO646_Inv, CharacterSet::ASCII},
49 {ECI::Binary, CharacterSet::BINARY},
50 };
51
52 std::string ToString(ECI eci)
53 {
54 return '\\' + ToString(ToInt(eci), 6);
55 }
56
57 CharacterSet ToCharacterSet(ECI eci)
58 {
59 if (auto it = ECI_TO_CHARSET.find(eci); it != ECI_TO_CHARSET.end())
60 return it->second;
61
62 return CharacterSet::Unknown;
63 }
64
65 ECI ToECI(CharacterSet cs)
66 {
67 // Special case ISO8859_1 to avoid obsolete ECI 1
68 if (cs == CharacterSet::ISO8859_1)
69 return ECI::ISO8859_1;
70 // Special case Cp437 to avoid obsolete ECI 0 for slightly less obsolete ECI 2
71 if (cs == CharacterSet::Cp437)
72 return ECI::Cp437;
73
74 for (auto& [key, value] : ECI_TO_CHARSET)
75 if (value == cs)
76 return key;
77
78 return ECI::Unknown;
79 }
80
81 } // namespace ZXing