annotate foosdk/sdk/pfc/charDownConvert.h @ 1:20d02a178406 default tip

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