comparison mupdf-source/thirdparty/zxing-cpp/core/src/CharacterSet.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 2016 Nu-book Inc.
3 * Copyright 2016 ZXing authors
4 */
5 // SPDX-License-Identifier: Apache-2.0
6
7 #include "CharacterSet.h"
8
9 #include "ZXAlgorithms.h"
10
11 #include <algorithm>
12 #include <cctype>
13
14 namespace ZXing {
15
16 struct CharacterSetName
17 {
18 std::string_view name;
19 CharacterSet cs;
20 };
21
22 static CharacterSetName NAME_TO_CHARSET[] = {
23 {"Cp437", CharacterSet::Cp437},
24 {"ISO-8859-1", CharacterSet::ISO8859_1},
25 {"ISO-8859-2", CharacterSet::ISO8859_2},
26 {"ISO-8859-3", CharacterSet::ISO8859_3},
27 {"ISO-8859-4", CharacterSet::ISO8859_4},
28 {"ISO-8859-5", CharacterSet::ISO8859_5},
29 {"ISO-8859-6", CharacterSet::ISO8859_6},
30 {"ISO-8859-7", CharacterSet::ISO8859_7},
31 {"ISO-8859-8", CharacterSet::ISO8859_8},
32 {"ISO-8859-9", CharacterSet::ISO8859_9},
33 {"ISO-8859-10", CharacterSet::ISO8859_10},
34 {"ISO-8859-11", CharacterSet::ISO8859_11},
35 {"ISO-8859-13", CharacterSet::ISO8859_13},
36 {"ISO-8859-14", CharacterSet::ISO8859_14},
37 {"ISO-8859-15", CharacterSet::ISO8859_15},
38 {"ISO-8859-16", CharacterSet::ISO8859_16},
39 {"SJIS", CharacterSet::Shift_JIS},
40 {"Shift_JIS", CharacterSet::Shift_JIS},
41 {"Cp1250", CharacterSet::Cp1250},
42 {"windows-1250",CharacterSet::Cp1250},
43 {"Cp1251", CharacterSet::Cp1251},
44 {"windows-1251",CharacterSet::Cp1251},
45 {"Cp1252", CharacterSet::Cp1252},
46 {"windows-1252",CharacterSet::Cp1252},
47 {"Cp1256", CharacterSet::Cp1256},
48 {"windows-1256",CharacterSet::Cp1256},
49 {"UTF-16BE", CharacterSet::UTF16BE},
50 {"UTF-16LE", CharacterSet::UTF16LE},
51 {"UTF-32BE", CharacterSet::UTF32BE},
52 {"UTF-32LE", CharacterSet::UTF32LE},
53 {"UnicodeBigUnmarked", CharacterSet::UTF16BE},
54 {"UnicodeBig", CharacterSet::UTF16BE},
55 {"UTF-8", CharacterSet::UTF8},
56 {"ASCII", CharacterSet::ASCII},
57 {"US-ASCII", CharacterSet::ASCII},
58 {"Big5", CharacterSet::Big5},
59 {"GB2312", CharacterSet::GB2312},
60 {"GB18030", CharacterSet::GB18030},
61 {"EUC-CN", CharacterSet::GB18030},
62 {"GBK", CharacterSet::GB18030},
63 {"EUC-KR", CharacterSet::EUC_KR},
64 {"BINARY", CharacterSet::BINARY},
65 };
66
67 static std::string NormalizeName(std::string_view sv)
68 {
69 std::string str(sv);
70 std::transform(str.begin(), str.end(), str.begin(), [](char c) { return (char)std::tolower(c); });
71 #ifdef __cpp_lib_erase_if
72 std::erase_if(str, [](char c) { return Contains("_-[] ", c); });
73 #else
74 str.erase(std::remove_if(str.begin(), str.end(), [](char c) { return Contains("_-[] ", c); }), str.end());
75 #endif
76 return str;
77 }
78
79 CharacterSet CharacterSetFromString(std::string_view name)
80 {
81 auto i = FindIf(NAME_TO_CHARSET, [str = NormalizeName(name)](auto& v) { return NormalizeName(v.name) == str; });
82 return i == std::end(NAME_TO_CHARSET) ? CharacterSet::Unknown : i->cs;
83 }
84
85 std::string ToString(CharacterSet cs)
86 {
87 auto i = FindIf(NAME_TO_CHARSET, [cs](auto& v) { return v.cs == cs; });
88 return i == std::end(NAME_TO_CHARSET) ? "" : std::string(i->name);
89 }
90
91 } // namespace ZXing