|
1
|
1 #pragma once
|
|
|
2 #include "string_base.h"
|
|
|
3 #include "fixed_map.h"
|
|
|
4
|
|
|
5 // This converts to ASCII *and* lowercases for simplified search matching
|
|
|
6 namespace pfc {
|
|
|
7 class CharStorage {
|
|
|
8 public:
|
|
|
9 CharStorage() { }
|
|
|
10 template<typename TSource> CharStorage(const TSource& in) { Import(in); }
|
|
|
11 template<typename TSource> const CharStorage& operator=(const TSource& in) { Import(in); return *this; }
|
|
|
12
|
|
|
13 const char* ptr() const { return m_data; }
|
|
|
14
|
|
|
15 void Import(t_uint32 c) {
|
|
|
16 t_size l = pfc::utf8_encode_char(c, m_data);
|
|
|
17 m_data[l] = 0;
|
|
|
18 }
|
|
|
19 void Import(const char* c) {
|
|
|
20 PFC_ASSERT(strlen(c) < PFC_TABSIZE(m_data));
|
|
|
21 #ifdef _MSC_VER
|
|
|
22 strcpy_s(m_data, c);
|
|
|
23 #else
|
|
|
24 strcpy(m_data, c);
|
|
|
25 #endif
|
|
|
26 }
|
|
|
27
|
|
|
28 char m_data[16] = {};
|
|
|
29 };
|
|
|
30
|
|
|
31 class CharDownConvert {
|
|
|
32 public:
|
|
|
33 CharDownConvert();
|
|
|
34
|
|
|
35 void TransformCharCachedAppend(t_uint32 c, pfc::string_base& out);
|
|
|
36 void TransformStringAppend(pfc::string_base& out, const char* src, size_t len = SIZE_MAX);
|
|
|
37 void TransformStringHere(pfc::string_base& out, const char* src, size_t len = SIZE_MAX);
|
|
|
38 string8 TransformString(const char* src) { pfc::string8 ret; TransformStringAppend(ret, src); return ret; }
|
|
|
39 void TransformString(pfc::string_base& out, const char* src) {
|
|
|
40 out.reset(); TransformStringAppend(out, src);
|
|
|
41 }
|
|
|
42
|
|
|
43 static CharDownConvert& instance();
|
|
|
44
|
|
|
45 struct charMapping_t {
|
|
|
46 uint16_t from, to;
|
|
|
47 };
|
|
|
48 static const charMapping_t* mappings();
|
|
|
49 static size_t numMappings();
|
|
|
50
|
|
|
51 private:
|
|
|
52 fixed_map<uint32_t, CharStorage> m_charConvertMap;
|
|
|
53 };
|
|
|
54 }
|