8 #ifndef SIG_UTIL_REPLACE_HPP
9 #define SIG_UTIL_REPLACE_HPP
11 #include "../sigutil.hpp"
12 #include <unordered_map>
28 std::unordered_map<wchar_t, wchar_t> alphabet_;
29 std::unordered_map<wchar_t, wchar_t> number_;
30 std::unordered_map<wchar_t, wchar_t> katakana_;
31 std::unordered_map<std::wstring, wchar_t> katakana_d_;
35 wchar_t zen1[2] = L
"A";
38 for (uint i = 0; i < 26; ++i, ++zen1[0], ++han1){
39 alphabet_[zen1[0]] = han1;
44 for (uint i = 0; i < 26; ++i, ++zen2, ++han2){
45 alphabet_[zen2] = han2;
58 katakana_[L
'ー'] = L
'ー';
59 katakana_[L
'ァ'] = L
'ァ';
60 katakana_[L
'ィ'] = L
'ィ';
61 katakana_[L
'ゥ'] = L
'ゥ';
62 katakana_[L
'ェ'] = L
'ェ';
63 katakana_[L
'ォ'] = L
'ォ';
64 katakana_[L
'ア'] = L
'ア';
65 katakana_[L
'イ'] = L
'イ';
66 katakana_[L
'ウ'] = L
'ウ';
67 katakana_[L
'エ'] = L
'エ';
68 katakana_[L
'オ'] = L
'オ';
72 for (uint i = 0; i < 12; ++i, ++han3, zen3 += 2){
73 katakana_[han3] = zen3;
75 katakana_[L
'ッ'] = L
'ッ';
76 katakana_[L
'テ'] = L
'テ';
77 katakana_[L
'ト'] = L
'ト';
79 for (uint i = 0; i < 6; ++i, ++han3, ++zen3){
80 katakana_[han3] = zen3;
82 for (uint i = 0; i < 5; ++i, ++han3, zen3 += 3){
83 katakana_[han3] = zen3;
85 for (uint i = 0; i < 5; ++i, ++han3, ++zen3){
86 katakana_[han3] = zen3;
88 katakana_[L
'ヤ'] = L
'ヤ';
89 katakana_[L
'ャ'] = L
'ャ';
90 katakana_[L
'ユ'] = L
'ユ';
91 katakana_[L
'ュ'] = L
'ュ';
92 katakana_[L
'ヨ'] = L
'ヨ';
93 katakana_[L
'ョ'] = L
'ョ';
95 for (uint i = 0; i < 5; ++i, ++han3, ++zen3){
96 katakana_[han3] = zen3;
98 katakana_[L
'ワ'] = L
'ワ';
99 katakana_[L
'ヲ'] = L
'ヲ';
100 katakana_[L
'ン'] = L
'ン';
102 wchar_t han4[3] = L
"ガ";
104 for (uint i = 0; i < 12; ++i, ++han4[0], zen4 += 2){
105 katakana_d_[han4] = zen4;
107 katakana_d_[L
"ヅ"] = L
'ヅ';
108 katakana_d_[L
"デ"] = L
'デ';
109 katakana_d_[L
"ド"] = L
'ド';
110 han4[0] += 8; zen4 += 12;
111 for (uint i = 0; i < 5; ++i, ++han4[0], zen4 += 3){
112 katakana_d_[han4] = zen4;
114 wchar_t han5[3] = L
"パ";
116 for (uint i = 0; i < 5; ++i, ++han5[0], zen5 += 3){
117 katakana_d_[han5] = zen5;
137 for (
auto& c : sentence){
138 if (alphabet_.count(c)) c = alphabet_.at(c);
144 for (
auto& c : sentence){
145 for (
auto const& v : alphabet_){
146 if (v.second == c) c = v.first;
153 for (
auto& c : sentence){
154 if (number_.count(c)) c = number_.at(c);
160 for (
auto& c : sentence){
161 for (
auto const& v : number_){
162 if (v.second == c) c = v.first;
169 for (uint i = 0; i<sentence.size(); ++i){
170 for (
auto const& v : katakana_d_){
171 if (v.second == sentence[i]){
172 sentence.replace(i, 1, v.first);
176 for (
auto& c : sentence){
177 for (
auto const& v : katakana_){
178 if (v.second == c) c = v.first;
186 for (
unsigned i = 1; i < sentence.size(); ++i){
187 if (sentence[i] == L
'゙' || sentence[i] == L
'゚'){
188 auto ttmp = std::wstring(sentence.substr(i - 1, 2));
189 if (katakana_d_.count(ttmp)){
190 sentence.replace(i - 1, 2, 1, katakana_d_.at(ttmp));
195 for (
auto& c : sentence){
196 if (katakana_.count(c)) c = katakana_.at(c);
void number_zen2han(std::wstring &sentence) const
数字 全角 -> 半角
void alphabet_han2zen(std::wstring &sentence) const
アルファベット 半角 -> 全角
void katakana_zen2han(std::wstring &sentence) const
カタカナ 全角 -> 半角
void alphabet_zen2han(std::wstring &sentence) const
アルファベット 全角 -> 半角
void katakana_han2zen(std::wstring &sentence) const
カタカナ 半角 -> 全角
static ZenHanReplace & get_instance()
インスタンスの参照を取得
void number_han2zen(std::wstring &sentence) const
数字 半角 -> 全角