YSTest: chrproc.h 源文件

YSTest PreAlpha_b500_20140530 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
chrproc.h
浏览该文件的文档.
1 /*
2 © 2009-2014 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef INC_CHRLib_chrproc_h_
29 #define INC_CHRLib_chrproc_h_ 1
30
31 #include "YModules.h"
32 #include YFM_CHRLib_CharacterMapping
33 #include YFM_YBaseMacro
34 #include <cstdio> // for std::FILE;
35 #include <memory> // for std::move;
36 #include <ystdex/string.hpp> // for ystdex::string_traits;
37 #include <algorithm> // for std::copy_n;
38
39 namespace CHRLib
40 {
41
46 template<typename _tChar>
47 yconstfn bool
48 IsASCII(_tChar c)
49 {
50 return !(c & ~0x7F);
51 }
52
57 template<typename _tChar>
58 yconstfn char
59 ToASCII(_tChar c)
60 {
61 static_assert(std::is_integral<_tChar>::value, "Invalid type found.");
62
63 return c & 0x7F;
64 }
65
66
72 YF_API ConversionResult
73 MBCToUC(ucs2_t&, const char*&, Encoding, ConversionState&& = {});
74 inline PDefH(ConversionResult, MBCToUC, ucs2_t& uc, const char*& c,
75 Encoding enc, ConversionState& st)
76 ImplRet(MBCToUC(uc, c, enc, std::move(st)))
78
84 YF_API ConversionResult
85 MBCToUC(ucs2_t&, std::FILE*, Encoding, ConversionState&& = {});
86 inline PDefH(ConversionResult, MBCToUC, ucs2_t& uc, std::FILE* fp, Encoding enc,
87 ConversionState& st)
88 ImplRet(MBCToUC(uc, fp, enc, std::move(st)))
90
95 YF_API ConversionResult
96 MBCToUC(const char*&, Encoding, ConversionState&& = {});
97 inline PDefH(ConversionResult, MBCToUC, const char*& c, Encoding enc,
98 ConversionState& st)
99 ImplRet(MBCToUC(c, enc, std::move(st)))
101
102 YF_API ConversionResult
103 MBCToUC(std::FILE*, Encoding, ConversionState&& = {});
104 inline PDefH(ConversionResult, MBCToUC, std::FILE* fp, Encoding enc,
105 ConversionState& st)
106 ImplRet(MBCToUC(fp, enc, std::move(st)))
108
109
115 YF_API size_t
116 UCToMBC(char*, const ucs2_t&, Encoding);
117
118
120
121
126 YF_API size_t
127 MBCSToUCS2(ucs2_t*, const char*, Encoding = CS_Default);
128
134 YF_API size_t
135 UCS2ToMBCS(char*, const ucs2_t*, Encoding = CS_Default);
136
141 YF_API size_t
142 UCS4ToUCS2(ucs2_t*, const ucs4_t*);
143
148 template<class _tDst, class _tSrc>
149 _tDst
150 GetMBCSOf(const _tSrc& src, Encoding enc = CS_Default)
151 {
152 // FIXME: size for max MBC sequence length > 4;
153 _tDst str(src.length() << 2,
154 typename ystdex::string_traits<_tDst>::value_type());
155
156 str.resize(UCS2ToMBCS(&str[0], src.c_str(), enc));
157 return str;
158 }
159
160
166
168 YF_API std::string
170 strdup(const ucs2_t*, Encoding = CS_Default);
171 template<class _tString>
172 std::string
173 strdup(const _tString& str)
174 {
175 return CHRLib::strdup(str.c_str());
176 }
178
180
181
183 YF_API std::basic_string<ucs2_t>
185 ucsdup(const char*, Encoding = CS_Default);
187 YF_API std::basic_string<ucs2_t>
188 ucsdup(const ucs2_t*);
190 YF_API std::basic_string<ucs2_t>
191 ucsdup(const ucs4_t*);
193 template<class _tString>
194 std::basic_string<ucs2_t>
195 ucsdup(const _tString& str)
196 {
197 return CHRLib::ucsdup(str.c_str());
198 }
200
201
202
204
205 template<class _tDst>
207 _tDst
208 MakeUCS2LEString(const char* s, Encoding enc = CS_Default)
209 {
210 yconstraint(s);
211
212 _tDst str(std::char_traits<char>::length(s),
213 typename ystdex::string_traits<_tDst>::value_type());
214
215 str.resize(MBCSToUCS2(&str[0], s, enc));
216 return str;
217 }
219 template<class _tDst>
220 _tDst
221 MakeUCS2LEString(const ucs2_t* s, Encoding = CharSet::ISO_10646_UCS_2)
222 {
223 yconstraint(s);
224
225 _tDst str(std::char_traits<ucs2_t>::length(s),
226 typename ystdex::string_traits<_tDst>::value_type());
227 using std::begin;
228
229 std::copy_n(s, str.size(), begin(str));
230 return str;
231 }
233 template<class _tDst>
234 _tDst
235 MakeUCS2LEString(const ucs4_t* s, Encoding = CharSet::ISO_10646_UCS_4)
236 {
237 yconstraint(s);
238
239 _tDst str(std::char_traits<ucs4_t>::length(s),
240 typename ystdex::string_traits<_tDst>::value_type());
241
242 str.resize(UCS4ToUCS2(&str[0], s));
243 return str;
244 }
246
247
248 } // namespace CHRLib;
249
250 #endif
251
CHRLib::fp
std::FILE ConversionState fp
Definition: chrproc.h:88
string.hpp
ISO C++ 标准字符串扩展。
CHRLib::strdup
YF_API std::string strdup(const ucs2_t *, Encoding=CS_Default)
复制 UCS-2 字符串为多字节字符串。
Definition: chrproc.cpp:162
CHRLib::ConversionResult
ConversionResult
编码转换结果。
Definition: chrmap.h:75
ImplRet
#define ImplRet(...)
Definition: YBaseMacro.h:97
CHRLib::CS_Default
yconstexpr Encoding CS_Default
默认字符编码。
Definition: chrmap.h:45
CHRLib::PDefH
PDefH(ConversionResult, MBCToUC, ucs2_t &uc, const char *&c, Encoding enc, ConversionState &st) ImplRet(MBCToUC(uc
CHRLib::ToASCII
yconstfn char ToASCII(_tChar c)
任意整数类型字符转换为 ASCII 取值范围兼容的字符。
Definition: chrproc.h:59
CHRLib::enc
enc
Definition: chrproc.h:76
CHRLib::ConversionState
编码转换状态。
Definition: chrmap.h:89
CHRLib::MBCSToUCS2
YF_API size_t MBCSToUCS2(ucs2_t *, const char *, Encoding=CS_Default)
按指定编码转换 MBCS 字符串为 UCS-2 字符串，返回转换的串长。
Definition: chrproc.cpp:112
YF_API
#define YF_API
Definition: Platform.h:64
CHRLib::UCS2ToMBCS
YF_API size_t UCS2ToMBCS(char *, const ucs2_t *, Encoding=CS_Default)
按指定编码转换 UCS-2 字符串为 MBCS 字符串，返回转换的串长。
Definition: chrproc.cpp:132
CHRLib::CharSet::ISO_10646_UCS_2
yconstexpr Encoding ISO_10646_UCS_2(csUnicode)
CHRLib::MBCToUC
YF_API ConversionResult MBCToUC(ucs2_t &, const char *&, Encoding, ConversionState &&={})
按指定编码和转换状态转换字符串中字符为 UCS-2 字符，返回转换的字节数。
Definition: chrproc.cpp:52
CHRLib::ucsdup
YF_API std::basic_string< ucs2_t > ucsdup(const char *, Encoding=CS_Default)
复制多字节字符串为 UCS-2 字符串。
Definition: chrproc.cpp:174
CHRLib::IsASCII
yconstfn bool IsASCII(_tChar c)
判断整数类型字符在 ASCII 字符取值范围内。
Definition: chrproc.h:48
ystdex::string_traits::value_type
remove_rcv_t< decltype(std::declval< string_type >()[0])> value_type
Definition: string.hpp:50
YSLib::string
GSStringTemplate< char >::basic_string string
Definition: ycont.h:164
yconstraint
#define yconstraint
约束：接口语义。
Definition: cassert.h:47
yconstfn
#define yconstfn
指定编译时常量函数。
Definition: ydef.h:463
platform_ex::Windows::s
return s
Definition: MinGW32.cpp:49
CHRLib::ucs2_t
char16_t ucs2_t
UCS-2 字符类型。
Definition: chrdef.h:44
CHRLib::MakeUCS2LEString
_tDst MakeUCS2LEString(const char *s, Encoding enc=CS_Default)
复制指定编码的多字节字符串为指定类型的 UCS-2 字符串。
Definition: chrproc.h:208
CHRLib::Encoding
std::FILE Encoding
Definition: chrproc.h:85
CHRLib::ucs4_t
char32_t ucs4_t
UCS-4 字符类型。
Definition: chrdef.h:45
CHRLib::GetMBCSOf
_tDst GetMBCSOf(const _tSrc &src, Encoding enc=CS_Default)
取 UCS-2 字符串转换的指定编码的多字节字符串。
Definition: chrproc.h:150
CHRLib::CharSet::Encoding
Encoding
Definition: encoding.h:53
CHRLib::UCToMBC
size_t UCToMBC(char *d, const ucs2_t &s, Encoding enc)
Definition: chrproc.cpp:99
CHRLib::UCS4ToUCS2
YF_API size_t UCS4ToUCS2(ucs2_t *, const ucs4_t *)
转换 UCS-4 字符串为 UCS-2 字符串，返回转换的串长。
Definition: chrproc.cpp:147
CHRLib::CharSet::ISO_10646_UCS_4
yconstexpr Encoding ISO_10646_UCS_4(csUCS4)
CHRLib::c
c
Definition: chrproc.h:76
YModules.h