@urbit-xyz/azimuth-hanzi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/core-325c2f1f.js +989 -0
- package/dist/core-325c2f1f.js.map +1 -0
- package/dist/core-7919ab70.js +2 -0
- package/dist/core-7919ab70.js.map +1 -0
- package/dist/core-b72e8d27.js +1009 -0
- package/dist/core-b72e8d27.js.map +1 -0
- package/dist/core.cjs.development.js +15 -0
- package/dist/core.cjs.development.js.map +1 -0
- package/dist/core.cjs.production.min.js +2 -0
- package/dist/core.cjs.production.min.js.map +1 -0
- package/dist/core.d.ts +22 -0
- package/dist/core.esm.js +3 -0
- package/dist/core.esm.js.map +1 -0
- package/dist/core.js +8 -0
- package/dist/hanzi-sigil.d.ts +24 -0
- package/dist/index.cjs.development.js +126 -0
- package/dist/index.cjs.development.js.map +1 -0
- package/dist/index.cjs.production.min.js +2 -0
- package/dist/index.cjs.production.min.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.esm.js +105 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/mapping.d.ts +581 -0
- package/dist/types.d.ts +68 -0
- package/package.json +71 -0
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var memoize = require('lodash.memoize');
|
|
4
|
+
|
|
5
|
+
function _arrayLikeToArray(r, a) {
|
|
6
|
+
(null == a || a > r.length) && (a = r.length);
|
|
7
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
8
|
+
return n;
|
|
9
|
+
}
|
|
10
|
+
function _construct(t, e, r) {
|
|
11
|
+
if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
|
|
12
|
+
var o = [null];
|
|
13
|
+
o.push.apply(o, e);
|
|
14
|
+
var p = new (t.bind.apply(t, o))();
|
|
15
|
+
return r && _setPrototypeOf(p, r.prototype), p;
|
|
16
|
+
}
|
|
17
|
+
function _defineProperties(e, r) {
|
|
18
|
+
for (var t = 0; t < r.length; t++) {
|
|
19
|
+
var o = r[t];
|
|
20
|
+
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function _createClass(e, r, t) {
|
|
24
|
+
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
|
|
25
|
+
writable: !1
|
|
26
|
+
}), e;
|
|
27
|
+
}
|
|
28
|
+
function _createForOfIteratorHelperLoose(r, e) {
|
|
29
|
+
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
30
|
+
if (t) return (t = t.call(r)).next.bind(t);
|
|
31
|
+
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
|
|
32
|
+
t && (r = t);
|
|
33
|
+
var o = 0;
|
|
34
|
+
return function () {
|
|
35
|
+
return o >= r.length ? {
|
|
36
|
+
done: !0
|
|
37
|
+
} : {
|
|
38
|
+
done: !1,
|
|
39
|
+
value: r[o++]
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
44
|
+
}
|
|
45
|
+
function _extends() {
|
|
46
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
47
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
48
|
+
var t = arguments[e];
|
|
49
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
50
|
+
}
|
|
51
|
+
return n;
|
|
52
|
+
}, _extends.apply(null, arguments);
|
|
53
|
+
}
|
|
54
|
+
function _getPrototypeOf(t) {
|
|
55
|
+
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
|
|
56
|
+
return t.__proto__ || Object.getPrototypeOf(t);
|
|
57
|
+
}, _getPrototypeOf(t);
|
|
58
|
+
}
|
|
59
|
+
function _inheritsLoose(t, o) {
|
|
60
|
+
t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
|
|
61
|
+
}
|
|
62
|
+
function _isNativeFunction(t) {
|
|
63
|
+
try {
|
|
64
|
+
return -1 !== Function.toString.call(t).indexOf("[native code]");
|
|
65
|
+
} catch (n) {
|
|
66
|
+
return "function" == typeof t;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function _isNativeReflectConstruct() {
|
|
70
|
+
try {
|
|
71
|
+
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
72
|
+
} catch (t) {}
|
|
73
|
+
return (_isNativeReflectConstruct = function () {
|
|
74
|
+
return !!t;
|
|
75
|
+
})();
|
|
76
|
+
}
|
|
77
|
+
function _setPrototypeOf(t, e) {
|
|
78
|
+
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
|
|
79
|
+
return t.__proto__ = e, t;
|
|
80
|
+
}, _setPrototypeOf(t, e);
|
|
81
|
+
}
|
|
82
|
+
function _toPrimitive(t, r) {
|
|
83
|
+
if ("object" != typeof t || !t) return t;
|
|
84
|
+
var e = t[Symbol.toPrimitive];
|
|
85
|
+
if (void 0 !== e) {
|
|
86
|
+
var i = e.call(t, r || "default");
|
|
87
|
+
if ("object" != typeof i) return i;
|
|
88
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
89
|
+
}
|
|
90
|
+
return ("string" === r ? String : Number)(t);
|
|
91
|
+
}
|
|
92
|
+
function _toPropertyKey(t) {
|
|
93
|
+
var i = _toPrimitive(t, "string");
|
|
94
|
+
return "symbol" == typeof i ? i : i + "";
|
|
95
|
+
}
|
|
96
|
+
function _unsupportedIterableToArray(r, a) {
|
|
97
|
+
if (r) {
|
|
98
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
99
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
100
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function _wrapNativeSuper(t) {
|
|
104
|
+
var r = "function" == typeof Map ? new Map() : void 0;
|
|
105
|
+
return _wrapNativeSuper = function (t) {
|
|
106
|
+
if (null === t || !_isNativeFunction(t)) return t;
|
|
107
|
+
if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
|
|
108
|
+
if (void 0 !== r) {
|
|
109
|
+
if (r.has(t)) return r.get(t);
|
|
110
|
+
r.set(t, Wrapper);
|
|
111
|
+
}
|
|
112
|
+
function Wrapper() {
|
|
113
|
+
return _construct(t, arguments, _getPrototypeOf(this).constructor);
|
|
114
|
+
}
|
|
115
|
+
return Wrapper.prototype = Object.create(t.prototype, {
|
|
116
|
+
constructor: {
|
|
117
|
+
value: Wrapper,
|
|
118
|
+
enumerable: !1,
|
|
119
|
+
writable: !0,
|
|
120
|
+
configurable: !0
|
|
121
|
+
}
|
|
122
|
+
}), _setPrototypeOf(Wrapper, t);
|
|
123
|
+
}, _wrapNativeSuper(t);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The 256 prefix syllables and 256 suffix syllables fixed by Urbit phonotactics.
|
|
128
|
+
* These arrays never change; the character assignments below them do.
|
|
129
|
+
*
|
|
130
|
+
* Position in the array IS the byte value. `PREFIXES[0] === 'doz'`,
|
|
131
|
+
* `SUFFIXES[0] === 'zod'`, etc. The Hanzi maps below are keyed by byte for the
|
|
132
|
+
* same reason: the byte is canonical, the syllable is one rendering of it,
|
|
133
|
+
* the character is another.
|
|
134
|
+
*/
|
|
135
|
+
var PREFIXES = ['doz', 'mar', 'bin', 'wan', 'sam', 'lit', 'sig', 'hid', 'fid', 'lis', 'sog', 'dir', 'wac', 'sab', 'wis', 'sib', 'rig', 'sol', 'dop', 'mod', 'fog', 'lid', 'hop', 'dar', 'dor', 'lor', 'hod', 'fol', 'rin', 'tog', 'sil', 'mir', 'hol', 'pas', 'lac', 'rov', 'liv', 'dal', 'sat', 'lib', 'tab', 'han', 'tic', 'pid', 'tor', 'bol', 'fos', 'dot', 'los', 'dil', 'for', 'pil', 'ram', 'tir', 'win', 'tad', 'bic', 'dif', 'roc', 'wid', 'bis', 'das', 'mid', 'lop', 'ril', 'nar', 'dap', 'mol', 'san', 'loc', 'nov', 'sit', 'nid', 'tip', 'sic', 'rop', 'wit', 'nat', 'pan', 'min', 'rit', 'pod', 'mot', 'tam', 'tol', 'sav', 'pos', 'nap', 'nop', 'som', 'fin', 'fon', 'ban', 'mor', 'wor', 'sip', 'ron', 'nor', 'bot', 'wic', 'soc', 'wat', 'dol', 'mag', 'pic', 'dav', 'bid', 'bal', 'tim', 'tas', 'mal', 'lig', 'siv', 'tag', 'pad', 'sal', 'div', 'dac', 'tan', 'sid', 'fab', 'tar', 'mon', 'ran', 'nis', 'wol', 'mis', 'pal', 'las', 'dis', 'map', 'rab', 'tob', 'rol', 'lat', 'lon', 'nod', 'nav', 'fig', 'nom', 'nib', 'pag', 'sop', 'ral', 'bil', 'had', 'doc', 'rid', 'moc', 'pac', 'rav', 'rip', 'fal', 'tod', 'til', 'tin', 'hap', 'mic', 'fan', 'pat', 'tac', 'lab', 'mog', 'sim', 'son', 'pin', 'lom', 'ric', 'tap', 'fir', 'has', 'bos', 'bat', 'poc', 'hac', 'tid', 'hav', 'sap', 'lin', 'dib', 'hos', 'dab', 'bit', 'bar', 'rac', 'par', 'lod', 'dos', 'bor', 'toc', 'hil', 'mac', 'tom', 'dig', 'fil', 'fas', 'mit', 'hob', 'har', 'mig', 'hin', 'rad', 'mas', 'hal', 'rag', 'lag', 'fad', 'top', 'mop', 'hab', 'nil', 'nos', 'mil', 'fop', 'fam', 'dat', 'nol', 'din', 'hat', 'nac', 'ris', 'fot', 'rib', 'hoc', 'nim', 'lar', 'fit', 'wal', 'rap', 'sar', 'nal', 'mos', 'lan', 'don', 'dan', 'lad', 'dov', 'riv', 'bac', 'pol', 'lap', 'tal', 'pit', 'nam', 'bon', 'ros', 'ton', 'fod', 'pon', 'sov', 'noc', 'sor', 'lav', 'mat', 'mip', 'fip'];
|
|
136
|
+
var SUFFIXES = ['zod', 'nec', 'bud', 'wes', 'sev', 'per', 'sut', 'let', 'ful', 'pen', 'syt', 'dur', 'wep', 'ser', 'wyl', 'sun', 'ryp', 'syx', 'dyr', 'nup', 'heb', 'peg', 'lup', 'dep', 'dys', 'put', 'lug', 'hec', 'ryt', 'tyv', 'syd', 'nex', 'lun', 'mep', 'lut', 'sep', 'pes', 'del', 'sul', 'ped', 'tem', 'led', 'tul', 'met', 'wen', 'byn', 'hex', 'feb', 'pyl', 'dul', 'het', 'mev', 'rut', 'tyl', 'wyd', 'tep', 'bes', 'dex', 'sef', 'wyc', 'bur', 'der', 'nep', 'pur', 'rys', 'reb', 'den', 'nut', 'sub', 'pet', 'rul', 'syn', 'reg', 'tyd', 'sup', 'sem', 'wyn', 'rec', 'meg', 'net', 'sec', 'mul', 'nym', 'tev', 'web', 'sum', 'mut', 'nyx', 'rex', 'teb', 'fus', 'hep', 'ben', 'mus', 'wyx', 'sym', 'sel', 'ruc', 'dec', 'wex', 'syr', 'wet', 'dyl', 'myn', 'mes', 'det', 'bet', 'bel', 'tux', 'tug', 'myr', 'pel', 'syp', 'ter', 'meb', 'set', 'dut', 'deg', 'tex', 'sur', 'fel', 'tud', 'nux', 'rux', 'ren', 'wyt', 'nub', 'med', 'lyt', 'dus', 'neb', 'rum', 'tyn', 'seg', 'lyx', 'pun', 'res', 'red', 'fun', 'rev', 'ref', 'mec', 'ted', 'rus', 'bex', 'leb', 'dux', 'ryn', 'num', 'pyx', 'ryg', 'ryx', 'fep', 'tyr', 'tus', 'tyc', 'leg', 'nem', 'fer', 'mer', 'ten', 'lus', 'nus', 'syl', 'tec', 'mex', 'pub', 'rym', 'tuc', 'fyl', 'lep', 'deb', 'ber', 'mug', 'hut', 'tun', 'byl', 'sud', 'pem', 'dev', 'lur', 'def', 'bus', 'bep', 'run', 'mel', 'pex', 'dyt', 'byt', 'typ', 'lev', 'myl', 'wed', 'duc', 'fur', 'fex', 'nul', 'luc', 'len', 'ner', 'lex', 'rup', 'ned', 'lec', 'ryd', 'lyd', 'fen', 'wel', 'nyd', 'hus', 'rel', 'rud', 'nes', 'hes', 'fet', 'des', 'ret', 'dun', 'ler', 'nyr', 'seb', 'hul', 'ryl', 'lud', 'rem', 'lys', 'fyn', 'wer', 'ryc', 'sug', 'nys', 'nyl', 'lyn', 'dyn', 'dem', 'lux', 'fed', 'sed', 'bec', 'mun', 'lyr', 'tes', 'mud', 'nyt', 'byr', 'sen', 'weg', 'fyr', 'mur', 'tel', 'rep', 'teg', 'pec', 'nel', 'nev', 'fes'];
|
|
137
|
+
// ===== Prefix → character mapping (keyed by byte 0-255) ======================
|
|
138
|
+
// Prefixes are universal adjectives. Edit here to retune the mapping.
|
|
139
|
+
// Group keys ARE the category; each byte appears in exactly one group.
|
|
140
|
+
var PREFIX_GROUPS = {
|
|
141
|
+
'Colors & Light': {
|
|
142
|
+
0: ['红', 'hóng', 'red'],
|
|
143
|
+
1: ['青', 'qīng', 'azure'],
|
|
144
|
+
2: ['白', 'bái', 'white'],
|
|
145
|
+
3: ['黑', 'hēi', 'black'],
|
|
146
|
+
4: ['金', 'jīn', 'golden'],
|
|
147
|
+
5: ['银', 'yín', 'silver'],
|
|
148
|
+
6: ['紫', 'zǐ', 'purple'],
|
|
149
|
+
7: ['碧', 'bì', 'jade-green'],
|
|
150
|
+
8: ['明', 'míng', 'bright'],
|
|
151
|
+
9: ['暗', 'àn', 'dark'],
|
|
152
|
+
10: ['灿', 'càn', 'radiant'],
|
|
153
|
+
11: ['辉', 'huī', 'brilliant'],
|
|
154
|
+
12: ['彤', 'tóng', 'vermillion'],
|
|
155
|
+
13: ['玄', 'xuán', 'dark'],
|
|
156
|
+
14: ['素', 'sù', 'plain'],
|
|
157
|
+
15: ['丹', 'dān', 'cinnabar'],
|
|
158
|
+
16: ['苍', 'cāng', 'grey-blue'],
|
|
159
|
+
17: ['黛', 'dài', 'indigo'],
|
|
160
|
+
18: ['朱', 'zhū', 'scarlet'],
|
|
161
|
+
19: ['翠', 'cuì', 'emerald'],
|
|
162
|
+
20: ['皓', 'hào', 'luminous'],
|
|
163
|
+
21: ['曜', 'yào', 'blazing']
|
|
164
|
+
},
|
|
165
|
+
'Size & Scale': {
|
|
166
|
+
22: ['大', 'dà', 'great'],
|
|
167
|
+
23: ['小', 'xiǎo', 'small'],
|
|
168
|
+
24: ['辽', 'liáo', 'vast'],
|
|
169
|
+
25: ['深', 'shēn', 'deep'],
|
|
170
|
+
26: ['高', 'gāo', 'high'],
|
|
171
|
+
27: ['远', 'yuǎn', 'far'],
|
|
172
|
+
28: ['长', 'cháng', 'long'],
|
|
173
|
+
29: ['阔', 'kuò', 'broad'],
|
|
174
|
+
30: ['宏', 'hóng', 'grand'],
|
|
175
|
+
31: ['纤', 'xiān', 'minute'],
|
|
176
|
+
32: ['浩', 'hào', 'immense'],
|
|
177
|
+
33: ['渺', 'miǎo', 'boundless'],
|
|
178
|
+
34: ['巍', 'wēi', 'towering'],
|
|
179
|
+
35: ['峻', 'jùn', 'lofty'],
|
|
180
|
+
36: ['广', 'guǎng', 'extensive'],
|
|
181
|
+
37: ['厚', 'hòu', 'thick'],
|
|
182
|
+
38: ['薄', 'báo', 'thin'],
|
|
183
|
+
39: ['细', 'xì', 'fine'],
|
|
184
|
+
40: ['粗', 'cū', 'coarse'],
|
|
185
|
+
41: ['满', 'mǎn', 'full'],
|
|
186
|
+
42: ['空', 'kōng', 'empty'],
|
|
187
|
+
43: ['虚', 'xū', 'hollow'],
|
|
188
|
+
44: ['实', 'shí', 'solid'],
|
|
189
|
+
45: ['疏', 'shū', 'sparse'],
|
|
190
|
+
46: ['密', 'mì', 'dense'],
|
|
191
|
+
47: ['窄', 'zhǎi', 'narrow'],
|
|
192
|
+
48: ['宽', 'kuān', 'wide'],
|
|
193
|
+
49: ['无', 'wú', 'boundless']
|
|
194
|
+
},
|
|
195
|
+
'Texture & Sensation': {
|
|
196
|
+
50: ['柔', 'róu', 'soft'],
|
|
197
|
+
51: ['刚', 'gāng', 'hard'],
|
|
198
|
+
52: ['温', 'wēn', 'warm'],
|
|
199
|
+
53: ['凉', 'liáng', 'cool'],
|
|
200
|
+
54: ['寒', 'hán', 'cold'],
|
|
201
|
+
55: ['暖', 'nuǎn', 'warm'],
|
|
202
|
+
56: ['滑', 'huá', 'smooth'],
|
|
203
|
+
57: ['涩', 'sè', 'rough'],
|
|
204
|
+
58: ['脆', 'cuì', 'crisp'],
|
|
205
|
+
59: ['韧', 'rèn', 'supple'],
|
|
206
|
+
60: ['润', 'rùn', 'moist'],
|
|
207
|
+
61: ['燥', 'zào', 'dry'],
|
|
208
|
+
62: ['轻', 'qīng', 'light'],
|
|
209
|
+
63: ['重', 'zhòng', 'heavy'],
|
|
210
|
+
64: ['香', 'xiāng', 'fragrant'],
|
|
211
|
+
65: ['馥', 'fù', 'aromatic'],
|
|
212
|
+
66: ['清', 'qīng', 'fresh'],
|
|
213
|
+
67: ['浓', 'nóng', 'rich'],
|
|
214
|
+
68: ['淡', 'dàn', 'faint'],
|
|
215
|
+
69: ['烈', 'liè', 'intense'],
|
|
216
|
+
70: ['醇', 'chún', 'mellow'],
|
|
217
|
+
71: ['涓', 'juān', 'trickling'],
|
|
218
|
+
72: ['澈', 'chè', 'clear'],
|
|
219
|
+
73: ['浊', 'zhuó', 'murky'],
|
|
220
|
+
74: ['莹', 'yíng', 'lustrous'],
|
|
221
|
+
75: ['晶', 'jīng', 'crystalline']
|
|
222
|
+
},
|
|
223
|
+
'Age & Permanence': {
|
|
224
|
+
76: ['古', 'gǔ', 'ancient'],
|
|
225
|
+
77: ['新', 'xīn', 'new'],
|
|
226
|
+
78: ['永', 'yǒng', 'eternal'],
|
|
227
|
+
79: ['恒', 'héng', 'constant'],
|
|
228
|
+
80: ['久', 'jiǔ', 'lasting'],
|
|
229
|
+
81: ['暂', 'zàn', 'transient'],
|
|
230
|
+
82: ['初', 'chū', 'first'],
|
|
231
|
+
83: ['终', 'zhōng', 'final'],
|
|
232
|
+
84: ['昔', 'xī', 'past'],
|
|
233
|
+
85: ['今', 'jīn', 'present'],
|
|
234
|
+
86: ['幼', 'yòu', 'young'],
|
|
235
|
+
87: ['老', 'lǎo', 'old'],
|
|
236
|
+
88: ['稚', 'zhì', 'tender'],
|
|
237
|
+
89: ['耄', 'mào', 'aged'],
|
|
238
|
+
90: ['旧', 'jiù', 'former'],
|
|
239
|
+
91: ['鲜', 'xiān', 'fresh'],
|
|
240
|
+
92: ['残', 'cán', 'remnant'],
|
|
241
|
+
93: ['全', 'quán', 'whole'],
|
|
242
|
+
94: ['半', 'bàn', 'half'],
|
|
243
|
+
95: ['始', 'shǐ', 'beginning'],
|
|
244
|
+
96: ['末', 'mò', 'ending'],
|
|
245
|
+
97: ['元', 'yuán', 'original'],
|
|
246
|
+
98: ['本', 'běn', 'original'],
|
|
247
|
+
99: ['真', 'zhēn', 'true']
|
|
248
|
+
},
|
|
249
|
+
'Emotional Tone': {
|
|
250
|
+
100: ['恬', 'tián', 'serene'],
|
|
251
|
+
101: ['暴', 'bào', 'fierce'],
|
|
252
|
+
102: ['婉', 'wǎn', 'gentle'],
|
|
253
|
+
103: ['狂', 'kuáng', 'wild'],
|
|
254
|
+
104: ['安', 'ān', 'calm'],
|
|
255
|
+
105: ['乱', 'luàn', 'chaotic'],
|
|
256
|
+
106: ['宁', 'níng', 'peaceful'],
|
|
257
|
+
107: ['悲', 'bēi', 'sorrowful'],
|
|
258
|
+
108: ['欢', 'huān', 'joyful'],
|
|
259
|
+
109: ['怒', 'nù', 'wrathful'],
|
|
260
|
+
110: ['哀', 'āi', 'mournful'],
|
|
261
|
+
111: ['乐', 'lè', 'happy'],
|
|
262
|
+
112: ['忧', 'yōu', 'melancholy'],
|
|
263
|
+
113: ['喜', 'xǐ', 'delighted'],
|
|
264
|
+
114: ['惊', 'jīng', 'startled'],
|
|
265
|
+
115: ['惧', 'jù', 'fearful'],
|
|
266
|
+
116: ['慕', 'mù', 'longing'],
|
|
267
|
+
117: ['恋', 'liàn', 'devoted'],
|
|
268
|
+
118: ['傲', 'ào', 'proud'],
|
|
269
|
+
119: ['谦', 'qiān', 'humble'],
|
|
270
|
+
120: ['勇', 'yǒng', 'brave'],
|
|
271
|
+
121: ['怯', 'qiè', 'timid'],
|
|
272
|
+
122: ['坚', 'jiān', 'resolute'],
|
|
273
|
+
123: ['绵', 'mián', 'tender'],
|
|
274
|
+
124: ['猛', 'měng', 'fierce'],
|
|
275
|
+
125: ['静', 'jìng', 'secluded'],
|
|
276
|
+
126: ['闲', 'xián', 'leisurely'],
|
|
277
|
+
127: ['逸', 'yì', 'carefree'],
|
|
278
|
+
128: ['倦', 'juàn', 'weary'],
|
|
279
|
+
129: ['醒', 'xǐng', 'alert']
|
|
280
|
+
},
|
|
281
|
+
'Virtues & Character': {
|
|
282
|
+
130: ['仁', 'rén', 'benevolent'],
|
|
283
|
+
131: ['义', 'yì', 'righteous'],
|
|
284
|
+
132: ['礼', 'lǐ', 'courteous'],
|
|
285
|
+
133: ['智', 'zhì', 'wise'],
|
|
286
|
+
134: ['信', 'xìn', 'trustworthy'],
|
|
287
|
+
135: ['忠', 'zhōng', 'loyal'],
|
|
288
|
+
136: ['孝', 'xiào', 'filial'],
|
|
289
|
+
137: ['廉', 'lián', 'incorrupt'],
|
|
290
|
+
138: ['耻', 'chǐ', 'honorable'],
|
|
291
|
+
139: ['慎', 'shèn', 'prudent'],
|
|
292
|
+
140: ['敬', 'jìng', 'reverent'],
|
|
293
|
+
141: ['诚', 'chéng', 'sincere'],
|
|
294
|
+
142: ['笃', 'dǔ', 'devoted'],
|
|
295
|
+
143: ['睿', 'ruì', 'sagacious'],
|
|
296
|
+
144: ['哲', 'zhé', 'philosophical'],
|
|
297
|
+
145: ['纯', 'chún', 'pure'],
|
|
298
|
+
146: ['毅', 'yì', 'resolute'],
|
|
299
|
+
147: ['贤', 'xián', 'virtuous'],
|
|
300
|
+
148: ['善', 'shàn', 'good'],
|
|
301
|
+
149: ['美', 'měi', 'beautiful'],
|
|
302
|
+
150: ['德', 'dé', 'virtuous'],
|
|
303
|
+
151: ['正', 'zhèng', 'upright'],
|
|
304
|
+
152: ['直', 'zhí', 'honest'],
|
|
305
|
+
153: ['公', 'gōng', 'fair'],
|
|
306
|
+
154: ['晰', 'xī', 'clear'],
|
|
307
|
+
155: ['达', 'dá', 'enlightened'],
|
|
308
|
+
156: ['通', 'tōng', 'understanding'],
|
|
309
|
+
157: ['博', 'bó', 'learned'],
|
|
310
|
+
158: ['儒', 'rú', 'refined'],
|
|
311
|
+
159: ['卓', 'zhuó', 'distinguished']
|
|
312
|
+
},
|
|
313
|
+
'Beauty & Refinement': {
|
|
314
|
+
160: ['雅', 'yǎ', 'elegant'],
|
|
315
|
+
161: ['秀', 'xiù', 'graceful'],
|
|
316
|
+
162: ['丽', 'lì', 'beautiful'],
|
|
317
|
+
163: ['妙', 'miào', 'exquisite'],
|
|
318
|
+
164: ['华', 'huá', 'splendid'],
|
|
319
|
+
165: ['瑰', 'guī', 'magnificent'],
|
|
320
|
+
166: ['绮', 'qǐ', 'gorgeous'],
|
|
321
|
+
167: ['艳', 'yàn', 'dazzling'],
|
|
322
|
+
168: ['媚', 'mèi', 'charming'],
|
|
323
|
+
169: ['娴', 'xián', 'refined'],
|
|
324
|
+
170: ['曼', 'màn', 'gracious'],
|
|
325
|
+
171: ['端', 'duān', 'dignified'],
|
|
326
|
+
172: ['庄', 'zhuāng', 'stately'],
|
|
327
|
+
173: ['典', 'diǎn', 'classic'],
|
|
328
|
+
174: ['朴', 'pǔ', 'simple'],
|
|
329
|
+
175: ['简', 'jiǎn', 'plain'],
|
|
330
|
+
176: ['淳', 'chún', 'unspoiled'],
|
|
331
|
+
177: ['俊', 'jùn', 'handsome'],
|
|
332
|
+
178: ['飘', 'piāo', 'elegant'],
|
|
333
|
+
179: ['灵', 'líng', 'ethereal'],
|
|
334
|
+
180: ['奇', 'qí', 'wondrous'],
|
|
335
|
+
181: ['异', 'yì', 'unique'],
|
|
336
|
+
182: ['殊', 'shū', 'special'],
|
|
337
|
+
183: ['绝', 'jué', 'peerless']
|
|
338
|
+
},
|
|
339
|
+
'Intensity & Clarity': {
|
|
340
|
+
184: ['剧', 'jù', 'intense'],
|
|
341
|
+
185: ['微', 'wēi', 'faint'],
|
|
342
|
+
186: ['稠', 'chóu', 'dense'],
|
|
343
|
+
187: ['稀', 'xī', 'sparse'],
|
|
344
|
+
188: ['亮', 'liàng', 'clear'],
|
|
345
|
+
189: ['昧', 'mèi', 'dim'],
|
|
346
|
+
190: ['锐', 'ruì', 'sharp'],
|
|
347
|
+
191: ['钝', 'dùn', 'dull'],
|
|
348
|
+
192: ['显', 'xiǎn', 'vivid'],
|
|
349
|
+
193: ['隐', 'yǐn', 'hidden'],
|
|
350
|
+
194: ['透', 'tòu', 'transparent'],
|
|
351
|
+
195: ['朦', 'méng', 'hazy'],
|
|
352
|
+
196: ['耀', 'yào', 'dazzling'],
|
|
353
|
+
197: ['暧', 'ài', 'dim'],
|
|
354
|
+
198: ['盛', 'shèng', 'flourishing'],
|
|
355
|
+
199: ['衰', 'shuāi', 'fading'],
|
|
356
|
+
200: ['旺', 'wàng', 'thriving'],
|
|
357
|
+
201: ['枯', 'kū', 'withered'],
|
|
358
|
+
202: ['荣', 'róng', 'glorious'],
|
|
359
|
+
203: ['凋', 'diāo', 'wilted'],
|
|
360
|
+
204: ['茂', 'mào', 'lush'],
|
|
361
|
+
205: ['萎', 'wěi', 'withering'],
|
|
362
|
+
206: ['焕', 'huàn', 'radiant'],
|
|
363
|
+
207: ['黯', 'àn', 'shadowy']
|
|
364
|
+
},
|
|
365
|
+
'Rarity & Wonder': {
|
|
366
|
+
208: ['珍', 'zhēn', 'rare'],
|
|
367
|
+
209: ['怪', 'guài', 'strange'],
|
|
368
|
+
210: ['幽', 'yōu', 'mysterious'],
|
|
369
|
+
211: ['巧', 'qiǎo', 'wondrous'],
|
|
370
|
+
212: ['圣', 'shèng', 'sacred'],
|
|
371
|
+
213: ['神', 'shén', 'divine'],
|
|
372
|
+
214: ['仙', 'xiān', 'immortal'],
|
|
373
|
+
215: ['慧', 'huì', 'spiritual'],
|
|
374
|
+
216: ['幻', 'huàn', 'illusory'],
|
|
375
|
+
217: ['梦', 'mèng', 'dreamlike'],
|
|
376
|
+
218: ['魔', 'mó', 'magical'],
|
|
377
|
+
219: ['祥', 'xiáng', 'auspicious'],
|
|
378
|
+
220: ['瑞', 'ruì', 'propitious'],
|
|
379
|
+
221: ['吉', 'jí', 'fortunate'],
|
|
380
|
+
222: ['福', 'fú', 'blessed'],
|
|
381
|
+
223: ['禅', 'chán', 'zen'],
|
|
382
|
+
224: ['道', 'dào', 'enlightened'],
|
|
383
|
+
225: ['奥', 'ào', 'arcane'],
|
|
384
|
+
226: ['秘', 'mì', 'secret'],
|
|
385
|
+
227: ['藏', 'cáng', 'hidden'],
|
|
386
|
+
228: ['僻', 'pì', 'secluded'],
|
|
387
|
+
229: ['冥', 'míng', 'profound'],
|
|
388
|
+
230: ['邃', 'suì', 'abstruse'],
|
|
389
|
+
231: ['蕴', 'yùn', 'mysterious']
|
|
390
|
+
},
|
|
391
|
+
'State & Condition': {
|
|
392
|
+
232: ['动', 'dòng', 'moving'],
|
|
393
|
+
233: ['定', 'dìng', 'still'],
|
|
394
|
+
234: ['流', 'liú', 'flowing'],
|
|
395
|
+
235: ['凝', 'níng', 'frozen'],
|
|
396
|
+
236: ['散', 'sàn', 'scattered'],
|
|
397
|
+
237: ['聚', 'jù', 'gathered'],
|
|
398
|
+
238: ['起', 'qǐ', 'rising'],
|
|
399
|
+
239: ['落', 'luò', 'falling'],
|
|
400
|
+
240: ['浮', 'fú', 'floating'],
|
|
401
|
+
241: ['沉', 'chén', 'sinking'],
|
|
402
|
+
242: ['飞', 'fēi', 'flying'],
|
|
403
|
+
243: ['栖', 'qī', 'resting'],
|
|
404
|
+
244: ['觉', 'jué', 'awakened'],
|
|
405
|
+
245: ['眠', 'mián', 'sleeping'],
|
|
406
|
+
246: ['生', 'shēng', 'living'],
|
|
407
|
+
247: ['逝', 'shì', 'passing'],
|
|
408
|
+
248: ['兴', 'xīng', 'flourishing'],
|
|
409
|
+
249: ['干', 'gān', 'withered'],
|
|
410
|
+
250: ['盈', 'yíng', 'full'],
|
|
411
|
+
251: ['亏', 'kuī', 'waning'],
|
|
412
|
+
252: ['升', 'shēng', 'ascending'],
|
|
413
|
+
253: ['降', 'jiàng', 'descending'],
|
|
414
|
+
254: ['开', 'kāi', 'opening'],
|
|
415
|
+
255: ['合', 'hé', 'closing']
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
// ===== Suffix → character mapping (keyed by byte 0-255) ======================
|
|
419
|
+
// Suffixes are universal nouns. Edit here to retune the mapping.
|
|
420
|
+
var SUFFIX_GROUPS = {
|
|
421
|
+
'Flora & Botanicals': {
|
|
422
|
+
0: ['松', 'sōng', 'pine'],
|
|
423
|
+
1: ['竹', 'zhú', 'bamboo'],
|
|
424
|
+
2: ['梅', 'méi', 'plum blossom'],
|
|
425
|
+
3: ['兰', 'lán', 'orchid'],
|
|
426
|
+
4: ['菊', 'jú', 'chrysanthemum'],
|
|
427
|
+
5: ['莲', 'lián', 'lotus'],
|
|
428
|
+
6: ['柳', 'liǔ', 'willow'],
|
|
429
|
+
7: ['桃', 'táo', 'peach'],
|
|
430
|
+
8: ['荷', 'hé', 'lotus leaf'],
|
|
431
|
+
9: ['杏', 'xìng', 'apricot'],
|
|
432
|
+
10: ['桂', 'guì', 'osmanthus'],
|
|
433
|
+
11: ['椿', 'chūn', 'toon tree'],
|
|
434
|
+
12: ['柏', 'bǎi', 'cypress'],
|
|
435
|
+
13: ['杉', 'shān', 'fir'],
|
|
436
|
+
14: ['槐', 'huái', 'scholar tree'],
|
|
437
|
+
15: ['榆', 'yú', 'elm'],
|
|
438
|
+
16: ['枫', 'fēng', 'maple'],
|
|
439
|
+
17: ['藤', 'téng', 'vine'],
|
|
440
|
+
18: ['苔', 'tái', 'moss'],
|
|
441
|
+
19: ['蕨', 'jué', 'fern'],
|
|
442
|
+
20: ['茗', 'míng', 'tea leaf'],
|
|
443
|
+
21: ['芝', 'zhī', 'lingzhi'],
|
|
444
|
+
22: ['萍', 'píng', 'duckweed'],
|
|
445
|
+
23: ['蒿', 'hāo', 'artemisia'],
|
|
446
|
+
24: ['蓼', 'liǎo', 'knotweed'],
|
|
447
|
+
25: ['薇', 'wēi', 'fern frond'],
|
|
448
|
+
26: ['芦', 'lú', 'reed'],
|
|
449
|
+
27: ['蓑', 'suō', 'rush']
|
|
450
|
+
},
|
|
451
|
+
'Gems & Minerals': {
|
|
452
|
+
28: ['瑾', 'jǐn', 'fine jade'],
|
|
453
|
+
29: ['瑜', 'yú', 'jade luster'],
|
|
454
|
+
30: ['琼', 'qióng', 'jasper'],
|
|
455
|
+
31: ['璧', 'bì', 'jade disc'],
|
|
456
|
+
32: ['琳', 'lín', 'beautiful jade'],
|
|
457
|
+
33: ['瑶', 'yáo', 'precious jade'],
|
|
458
|
+
34: ['珩', 'héng', 'jade pendant'],
|
|
459
|
+
35: ['珏', 'jué', 'paired jade'],
|
|
460
|
+
36: ['琅', 'láng', 'jade-like stone'],
|
|
461
|
+
37: ['珂', 'kē', 'white jade'],
|
|
462
|
+
38: ['璞', 'pú', 'uncut jade'],
|
|
463
|
+
39: ['璜', 'huáng', 'half-ring jade'],
|
|
464
|
+
40: ['珉', 'mín', 'jade-like stone'],
|
|
465
|
+
41: ['珈', 'jiā', 'jade ornament'],
|
|
466
|
+
42: ['玮', 'wěi', 'rare jade'],
|
|
467
|
+
43: ['瑁', 'mào', 'tortoiseshell'],
|
|
468
|
+
44: ['珊', 'shān', 'coral'],
|
|
469
|
+
45: ['瑚', 'hú', 'coral gem'],
|
|
470
|
+
46: ['玛', 'mǎ', 'agate'],
|
|
471
|
+
47: ['瑙', 'nǎo', 'chalcedony'],
|
|
472
|
+
48: ['珣', 'xún', 'fine jade'],
|
|
473
|
+
49: ['钻', 'zuàn', 'diamond'],
|
|
474
|
+
50: ['琥', 'hǔ', 'amber'],
|
|
475
|
+
51: ['珀', 'pò', 'amber gem']
|
|
476
|
+
},
|
|
477
|
+
'Celestial Forms': {
|
|
478
|
+
52: ['星', 'xīng', 'star'],
|
|
479
|
+
53: ['月', 'yuè', 'moon'],
|
|
480
|
+
54: ['日', 'rì', 'sun'],
|
|
481
|
+
55: ['云', 'yún', 'cloud'],
|
|
482
|
+
56: ['霞', 'xiá', 'sunset glow'],
|
|
483
|
+
57: ['虹', 'hóng', 'rainbow'],
|
|
484
|
+
58: ['霓', 'ní', 'secondary rainbow'],
|
|
485
|
+
59: ['露', 'lù', 'dew'],
|
|
486
|
+
60: ['霜', 'shuāng', 'frost'],
|
|
487
|
+
61: ['雪', 'xuě', 'snow'],
|
|
488
|
+
62: ['雾', 'wù', 'fog'],
|
|
489
|
+
63: ['岚', 'lán', 'mountain mist'],
|
|
490
|
+
64: ['霭', 'ǎi', 'haze'],
|
|
491
|
+
65: ['霰', 'xiàn', 'sleet'],
|
|
492
|
+
66: ['雹', 'báo', 'hail'],
|
|
493
|
+
67: ['霏', 'fēi', 'falling snow'],
|
|
494
|
+
68: ['烟', 'yān', 'mist'],
|
|
495
|
+
69: ['辰', 'chén', 'celestial body'],
|
|
496
|
+
70: ['宿', 'xiù', 'constellation'],
|
|
497
|
+
71: ['斗', 'dǒu', 'dipper'],
|
|
498
|
+
72: ['极', 'jí', 'pole star'],
|
|
499
|
+
73: ['霄', 'xiāo', 'sky'],
|
|
500
|
+
74: ['穹', 'qióng', 'firmament'],
|
|
501
|
+
75: ['昊', 'hào', 'vast sky'],
|
|
502
|
+
76: ['旻', 'mín', 'autumn sky'],
|
|
503
|
+
77: ['曦', 'xī', 'sunlight']
|
|
504
|
+
},
|
|
505
|
+
'Winged Creatures': {
|
|
506
|
+
78: ['莺', 'yīng', 'oriole'],
|
|
507
|
+
79: ['雀', 'què', 'sparrow'],
|
|
508
|
+
80: ['鹂', 'lí', 'oriole'],
|
|
509
|
+
81: ['鸥', 'ōu', 'gull'],
|
|
510
|
+
82: ['鸾', 'luán', 'mythic bird'],
|
|
511
|
+
83: ['鸢', 'yuān', 'kite'],
|
|
512
|
+
84: ['鹊', 'què', 'magpie'],
|
|
513
|
+
85: ['鸽', 'gē', 'dove'],
|
|
514
|
+
86: ['鹃', 'juān', 'cuckoo'],
|
|
515
|
+
87: ['鹄', 'hú', 'swan'],
|
|
516
|
+
88: ['鹤', 'hè', 'crane'],
|
|
517
|
+
89: ['蝶', 'dié', 'butterfly'],
|
|
518
|
+
90: ['蛾', 'é', 'moth'],
|
|
519
|
+
91: ['蝉', 'chán', 'cicada'],
|
|
520
|
+
92: ['萤', 'yíng', 'firefly'],
|
|
521
|
+
93: ['蜂', 'fēng', 'bee'],
|
|
522
|
+
94: ['蚕', 'cán', 'silkworm'],
|
|
523
|
+
95: ['蟋', 'xī', 'cricket'],
|
|
524
|
+
96: ['螳', 'táng', 'mantis'],
|
|
525
|
+
97: ['蜻', 'qīng', 'dragonfly'],
|
|
526
|
+
98: ['蜓', 'tíng', 'damselfly'],
|
|
527
|
+
99: ['燕', 'yàn', 'swallow']
|
|
528
|
+
},
|
|
529
|
+
'Water Forms': {
|
|
530
|
+
100: ['波', 'bō', 'wave'],
|
|
531
|
+
101: ['涛', 'tāo', 'billows'],
|
|
532
|
+
102: ['澜', 'lán', 'ripples'],
|
|
533
|
+
103: ['浪', 'làng', 'waves'],
|
|
534
|
+
104: ['漪', 'yī', 'ripple'],
|
|
535
|
+
105: ['湍', 'tuān', 'rapids'],
|
|
536
|
+
106: ['溟', 'míng', 'dark sea'],
|
|
537
|
+
107: ['沧', 'cāng', 'ocean'],
|
|
538
|
+
108: ['瀚', 'hàn', 'vast water'],
|
|
539
|
+
109: ['汐', 'xī', 'tide'],
|
|
540
|
+
110: ['潮', 'cháo', 'tidal wave'],
|
|
541
|
+
111: ['泉', 'quán', 'spring'],
|
|
542
|
+
112: ['溪', 'xī', 'brook'],
|
|
543
|
+
113: ['涧', 'jiàn', 'mountain stream'],
|
|
544
|
+
114: ['潭', 'tán', 'pool'],
|
|
545
|
+
115: ['渊', 'yuān', 'abyss'],
|
|
546
|
+
116: ['渚', 'zhǔ', 'islet'],
|
|
547
|
+
117: ['浦', 'pǔ', 'riverbank'],
|
|
548
|
+
118: ['汀', 'tīng', 'sandbar'],
|
|
549
|
+
119: ['洄', 'huí', 'whirlpool'],
|
|
550
|
+
120: ['漩', 'xuán', 'vortex'],
|
|
551
|
+
121: ['濑', 'lài', 'shoals']
|
|
552
|
+
},
|
|
553
|
+
'Textiles & Threads': {
|
|
554
|
+
122: ['绫', 'líng', 'damask silk'],
|
|
555
|
+
123: ['罗', 'luó', 'gauze silk'],
|
|
556
|
+
124: ['绸', 'chóu', 'silk'],
|
|
557
|
+
125: ['缎', 'duàn', 'satin'],
|
|
558
|
+
126: ['锦', 'jǐn', 'brocade'],
|
|
559
|
+
127: ['绣', 'xiù', 'embroidery'],
|
|
560
|
+
128: ['纱', 'shā', 'gauze'],
|
|
561
|
+
129: ['帛', 'bó', 'silk fabric'],
|
|
562
|
+
130: ['纬', 'wěi', 'weft'],
|
|
563
|
+
131: ['绢', 'juàn', 'thin silk'],
|
|
564
|
+
132: ['绪', 'xù', 'silk thread'],
|
|
565
|
+
133: ['缕', 'lǚ', 'thread'],
|
|
566
|
+
134: ['纶', 'lún', 'silk cord'],
|
|
567
|
+
135: ['绳', 'shéng', 'rope'],
|
|
568
|
+
136: ['缨', 'yīng', 'tassel'],
|
|
569
|
+
137: ['络', 'luò', 'net'],
|
|
570
|
+
138: ['纹', 'wén', 'pattern'],
|
|
571
|
+
139: ['绯', 'fēi', 'crimson silk'],
|
|
572
|
+
140: ['缃', 'xiāng', 'yellow silk'],
|
|
573
|
+
141: ['绦', 'tāo', 'silk ribbon']
|
|
574
|
+
},
|
|
575
|
+
'Literature & Arts': {
|
|
576
|
+
142: ['诗', 'shī', 'poem'],
|
|
577
|
+
143: ['词', 'cí', 'verse'],
|
|
578
|
+
144: ['赋', 'fù', 'rhapsody'],
|
|
579
|
+
145: ['曲', 'qǔ', 'melody'],
|
|
580
|
+
146: ['谣', 'yáo', 'ballad'],
|
|
581
|
+
147: ['歌', 'gē', 'song'],
|
|
582
|
+
148: ['赞', 'zàn', 'hymn'],
|
|
583
|
+
149: ['铭', 'míng', 'inscription'],
|
|
584
|
+
150: ['志', 'zhì', 'record'],
|
|
585
|
+
151: ['传', 'zhuàn', 'biography'],
|
|
586
|
+
152: ['笺', 'jiān', 'letter paper'],
|
|
587
|
+
153: ['札', 'zhá', 'note'],
|
|
588
|
+
154: ['牍', 'dú', 'tablet'],
|
|
589
|
+
155: ['牒', 'dié', 'bamboo slip'],
|
|
590
|
+
156: ['册', 'cè', 'volume'],
|
|
591
|
+
157: ['卷', 'juàn', 'scroll'],
|
|
592
|
+
158: ['帙', 'zhì', 'book case'],
|
|
593
|
+
159: ['墨', 'mò', 'ink'],
|
|
594
|
+
160: ['砚', 'yàn', 'inkstone'],
|
|
595
|
+
161: ['笔', 'bǐ', 'brush'],
|
|
596
|
+
162: ['纸', 'zhǐ', 'paper'],
|
|
597
|
+
163: ['章', 'zhāng', 'chapter'],
|
|
598
|
+
164: ['篇', 'piān', 'essay'],
|
|
599
|
+
165: ['句', 'jù', 'phrase']
|
|
600
|
+
},
|
|
601
|
+
'Light & Shadow': {
|
|
602
|
+
166: ['曙', 'shǔ', 'dawn'],
|
|
603
|
+
167: ['晖', 'huī', 'sunlight'],
|
|
604
|
+
168: ['晕', 'yùn', 'halo'],
|
|
605
|
+
169: ['光', 'guāng', 'radiance'],
|
|
606
|
+
170: ['晃', 'huǎng', 'gleam'],
|
|
607
|
+
171: ['晔', 'yè', 'splendor'],
|
|
608
|
+
172: ['晟', 'shèng', 'brightness'],
|
|
609
|
+
173: ['晨', 'chén', 'morning'],
|
|
610
|
+
174: ['暮', 'mù', 'dusk'],
|
|
611
|
+
175: ['暝', 'míng', 'twilight'],
|
|
612
|
+
176: ['宵', 'xiāo', 'night'],
|
|
613
|
+
177: ['昏', 'hūn', 'dusk'],
|
|
614
|
+
178: ['晓', 'xiǎo', 'daybreak'],
|
|
615
|
+
179: ['旭', 'xù', 'sunrise'],
|
|
616
|
+
180: ['影', 'yǐng', 'shadow'],
|
|
617
|
+
181: ['彩', 'cǎi', 'color'],
|
|
618
|
+
182: ['晴', 'qíng', 'clear sky'],
|
|
619
|
+
183: ['映', 'yìng', 'reflection'],
|
|
620
|
+
184: ['照', 'zhào', 'illumination'],
|
|
621
|
+
185: ['焰', 'yàn', 'flame'],
|
|
622
|
+
186: ['烛', 'zhú', 'candle'],
|
|
623
|
+
187: ['灯', 'dēng', 'lamp']
|
|
624
|
+
},
|
|
625
|
+
'Sound & Echo': {
|
|
626
|
+
188: ['韵', 'yùn', 'rhyme'],
|
|
627
|
+
189: ['音', 'yīn', 'sound'],
|
|
628
|
+
190: ['律', 'lǜ', 'rhythm'],
|
|
629
|
+
191: ['调', 'diào', 'tone'],
|
|
630
|
+
192: ['弦', 'xián', 'string'],
|
|
631
|
+
193: ['簧', 'huáng', 'reed'],
|
|
632
|
+
194: ['磬', 'qìng', 'chime stone'],
|
|
633
|
+
195: ['铃', 'líng', 'bell'],
|
|
634
|
+
196: ['箫', 'xiāo', 'flute'],
|
|
635
|
+
197: ['筝', 'zhēng', 'zither'],
|
|
636
|
+
198: ['鼓', 'gǔ', 'drum'],
|
|
637
|
+
199: ['钹', 'bó', 'cymbal'],
|
|
638
|
+
200: ['笙', 'shēng', 'mouth organ'],
|
|
639
|
+
201: ['埙', 'xūn', 'ocarina'],
|
|
640
|
+
202: ['琴', 'qín', 'lute'],
|
|
641
|
+
203: ['瑟', 'sè', 'zither'],
|
|
642
|
+
204: ['钟', 'zhōng', 'bell'],
|
|
643
|
+
205: ['磐', 'pán', 'stone chime']
|
|
644
|
+
},
|
|
645
|
+
'Essence & Spirit': {
|
|
646
|
+
206: ['魂', 'hún', 'soul'],
|
|
647
|
+
207: ['魄', 'pò', 'spirit'],
|
|
648
|
+
208: ['气', 'qì', 'vital force'],
|
|
649
|
+
209: ['息', 'xī', 'breath'],
|
|
650
|
+
210: ['君', 'jūn', 'noble spirit'],
|
|
651
|
+
211: ['侠', 'xiá', 'hero'],
|
|
652
|
+
212: ['师', 'shī', 'master'],
|
|
653
|
+
213: ['者', 'zhě', 'one who'],
|
|
654
|
+
214: ['悟', 'wù', 'zen'],
|
|
655
|
+
215: ['理', 'lǐ', 'the way'],
|
|
656
|
+
216: ['行', 'xíng', 'virtue'],
|
|
657
|
+
217: ['心', 'xīn', 'heart'],
|
|
658
|
+
218: ['愿', 'yuàn', 'will'],
|
|
659
|
+
219: ['念', 'niàn', 'thought'],
|
|
660
|
+
220: ['意', 'yì', 'intent'],
|
|
661
|
+
221: ['情', 'qíng', 'feeling'],
|
|
662
|
+
222: ['性', 'xìng', 'nature'],
|
|
663
|
+
223: ['命', 'mìng', 'destiny'],
|
|
664
|
+
224: ['缘', 'yuán', 'fate'],
|
|
665
|
+
225: ['佑', 'yòu', 'blessing'],
|
|
666
|
+
226: ['禄', 'lù', 'fortune'],
|
|
667
|
+
227: ['寿', 'shòu', 'longevity'],
|
|
668
|
+
228: ['庆', 'qìng', 'auspice'],
|
|
669
|
+
229: ['兆', 'zhào', 'omen']
|
|
670
|
+
},
|
|
671
|
+
'Nature Parts': {
|
|
672
|
+
230: ['峰', 'fēng', 'peak'],
|
|
673
|
+
231: ['岳', 'yuè', 'mountain'],
|
|
674
|
+
232: ['岭', 'lǐng', 'ridge'],
|
|
675
|
+
233: ['崖', 'yá', 'cliff'],
|
|
676
|
+
234: ['壑', 'hè', 'ravine'],
|
|
677
|
+
235: ['谷', 'gǔ', 'valley'],
|
|
678
|
+
236: ['林', 'lín', 'forest'],
|
|
679
|
+
237: ['丛', 'cóng', 'grove'],
|
|
680
|
+
238: ['野', 'yě', 'wilderness'],
|
|
681
|
+
239: ['原', 'yuán', 'plain'],
|
|
682
|
+
240: ['坪', 'píng', 'meadow'],
|
|
683
|
+
241: ['畔', 'pàn', 'shore'],
|
|
684
|
+
242: ['滨', 'bīn', 'waterside'],
|
|
685
|
+
243: ['洲', 'zhōu', 'islet'],
|
|
686
|
+
244: ['屿', 'yǔ', 'isle'],
|
|
687
|
+
245: ['礁', 'jiāo', 'reef'],
|
|
688
|
+
246: ['岩', 'yán', 'rock'],
|
|
689
|
+
247: ['石', 'shí', 'stone'],
|
|
690
|
+
248: ['砂', 'shā', 'sand'],
|
|
691
|
+
249: ['土', 'tǔ', 'earth'],
|
|
692
|
+
250: ['尘', 'chén', 'dust'],
|
|
693
|
+
251: ['埃', 'āi', 'fine dust'],
|
|
694
|
+
252: ['泥', 'ní', 'clay'],
|
|
695
|
+
253: ['沙', 'shā', 'sand'],
|
|
696
|
+
254: ['洞', 'dòng', 'cave'],
|
|
697
|
+
255: ['穴', 'xué', 'grotto']
|
|
698
|
+
}
|
|
699
|
+
};
|
|
700
|
+
// ===== Derived indices and lookups ===========================================
|
|
701
|
+
/**
|
|
702
|
+
* Flatten the byte-keyed group structure into a phoneme-keyed map. Asserts that
|
|
703
|
+
* every byte 0..N appears exactly once (catches drops, duplicates, out-of-range
|
|
704
|
+
* keys at module load time, before tests).
|
|
705
|
+
*/
|
|
706
|
+
function flattenByteGroups(groups, phonemes) {
|
|
707
|
+
var out = {};
|
|
708
|
+
var seenBytes = new Set();
|
|
709
|
+
for (var _i = 0, _Object$entries = Object.entries(groups); _i < _Object$entries.length; _i++) {
|
|
710
|
+
var _Object$entries$_i = _Object$entries[_i],
|
|
711
|
+
category = _Object$entries$_i[0],
|
|
712
|
+
entries = _Object$entries$_i[1];
|
|
713
|
+
for (var _i2 = 0, _Object$entries2 = Object.entries(entries); _i2 < _Object$entries2.length; _i2++) {
|
|
714
|
+
var _Object$entries2$_i = _Object$entries2[_i2],
|
|
715
|
+
byteStr = _Object$entries2$_i[0],
|
|
716
|
+
tuple = _Object$entries2$_i[1];
|
|
717
|
+
var _byte = Number(byteStr);
|
|
718
|
+
if (!Number.isInteger(_byte) || _byte < 0 || _byte >= phonemes.length) {
|
|
719
|
+
throw new Error("Invalid byte key " + byteStr + " in category " + category);
|
|
720
|
+
}
|
|
721
|
+
if (seenBytes.has(_byte)) {
|
|
722
|
+
throw new Error("Duplicate byte " + _byte + " (already assigned before category " + category + ")");
|
|
723
|
+
}
|
|
724
|
+
seenBytes.add(_byte);
|
|
725
|
+
var character = tuple[0],
|
|
726
|
+
pinyin = tuple[1],
|
|
727
|
+
meaning = tuple[2];
|
|
728
|
+
out[phonemes[_byte]] = {
|
|
729
|
+
character: character,
|
|
730
|
+
pinyin: pinyin,
|
|
731
|
+
meaning: meaning,
|
|
732
|
+
category: category
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
if (seenBytes.size !== phonemes.length) {
|
|
737
|
+
var missing = [];
|
|
738
|
+
for (var i = 0; i < phonemes.length; i++) {
|
|
739
|
+
if (!seenBytes.has(i)) missing.push(i);
|
|
740
|
+
}
|
|
741
|
+
throw new Error("Missing bytes: " + missing.join(', '));
|
|
742
|
+
}
|
|
743
|
+
return out;
|
|
744
|
+
}
|
|
745
|
+
var PREFIX_CHARACTERS = /*#__PURE__*/flattenByteGroups(PREFIX_GROUPS, PREFIXES);
|
|
746
|
+
var SUFFIX_CHARACTERS = /*#__PURE__*/flattenByteGroups(SUFFIX_GROUPS, SUFFIXES);
|
|
747
|
+
var PREFIX_INDEX = /*#__PURE__*/Object.fromEntries(/*#__PURE__*/Object.entries(PREFIX_CHARACTERS).map(function (_ref) {
|
|
748
|
+
var k = _ref[0],
|
|
749
|
+
v = _ref[1];
|
|
750
|
+
return [k, v.character];
|
|
751
|
+
}));
|
|
752
|
+
var SUFFIX_INDEX = /*#__PURE__*/Object.fromEntries(/*#__PURE__*/Object.entries(SUFFIX_CHARACTERS).map(function (_ref2) {
|
|
753
|
+
var k = _ref2[0],
|
|
754
|
+
v = _ref2[1];
|
|
755
|
+
return [k, v.character];
|
|
756
|
+
}));
|
|
757
|
+
var PHONEME_INDEX = /*#__PURE__*/_extends({}, PREFIX_INDEX, SUFFIX_INDEX);
|
|
758
|
+
function isPrefix(phoneme) {
|
|
759
|
+
return phoneme in PREFIX_INDEX;
|
|
760
|
+
}
|
|
761
|
+
function isSuffix(phoneme) {
|
|
762
|
+
return phoneme in SUFFIX_INDEX;
|
|
763
|
+
}
|
|
764
|
+
function getCharacter(phoneme) {
|
|
765
|
+
return PHONEME_INDEX[phoneme];
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
var DEFAULTS = {
|
|
769
|
+
background: '#000',
|
|
770
|
+
foreground: '#FFF',
|
|
771
|
+
size: 128,
|
|
772
|
+
space: 'default',
|
|
773
|
+
fontWeight: 400,
|
|
774
|
+
fontFamily: 'Noto Sans SC, Noto Sans TC, Microsoft YaHei, SimHei, sans-serif'
|
|
775
|
+
};
|
|
776
|
+
function withDefaults(config) {
|
|
777
|
+
return _extends({}, DEFAULTS, config);
|
|
778
|
+
}
|
|
779
|
+
var POINT_TYPES = {
|
|
780
|
+
1: 'galaxy',
|
|
781
|
+
2: 'star',
|
|
782
|
+
4: 'planet',
|
|
783
|
+
8: 'moon'
|
|
784
|
+
};
|
|
785
|
+
/**
|
|
786
|
+
* Split a string into equal-sized substrings.
|
|
787
|
+
*/
|
|
788
|
+
function chunkStr(str, size) {
|
|
789
|
+
var _str$match;
|
|
790
|
+
return (_str$match = str.match(new RegExp(".{1," + size + "}", 'g'))) != null ? _str$match : [];
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Normalize a point name by removing the sigil prefix, hyphens, and casing.
|
|
794
|
+
* @example deSig('~sampel-palnet') => 'sampelpalnet'
|
|
795
|
+
*/
|
|
796
|
+
function deSig(point) {
|
|
797
|
+
return point.replace(/[\^~-]/g, '').toLowerCase();
|
|
798
|
+
}
|
|
799
|
+
/**
|
|
800
|
+
* Parse a point name into phonemes and characters.
|
|
801
|
+
*/
|
|
802
|
+
function parsePoint(point) {
|
|
803
|
+
if (!point) throw new Error('Point name is required');
|
|
804
|
+
var cleaned = deSig(point);
|
|
805
|
+
var phonemes = chunkStr(cleaned, 3);
|
|
806
|
+
var type = POINT_TYPES[phonemes.length];
|
|
807
|
+
if (!type) {
|
|
808
|
+
throw new Error("Invalid point name length: " + phonemes.length + " phonemes. Expected 1 (galaxy), 2 (star), 4 (planet), or 8 (moon).");
|
|
809
|
+
}
|
|
810
|
+
for (var _iterator = _createForOfIteratorHelperLoose(phonemes), _step; !(_step = _iterator()).done;) {
|
|
811
|
+
var phoneme = _step.value;
|
|
812
|
+
if (!isPrefix(phoneme) && !isSuffix(phoneme)) {
|
|
813
|
+
throw new Error("Invalid phoneme: '" + phoneme + "' is not a valid Urbit syllable.");
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
var characters = phonemes.map(function (p) {
|
|
817
|
+
return PHONEME_INDEX[p];
|
|
818
|
+
});
|
|
819
|
+
return {
|
|
820
|
+
point: point,
|
|
821
|
+
phonemes: phonemes,
|
|
822
|
+
type: type,
|
|
823
|
+
characters: characters,
|
|
824
|
+
hanziName: characters.join('')
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
var centeredOne = function centeredOne(s) {
|
|
828
|
+
return [{
|
|
829
|
+
x: s / 2,
|
|
830
|
+
y: s / 2
|
|
831
|
+
}];
|
|
832
|
+
};
|
|
833
|
+
var starPair = function starPair(s, h, inset) {
|
|
834
|
+
return [{
|
|
835
|
+
x: s * inset,
|
|
836
|
+
y: h / 2
|
|
837
|
+
}, {
|
|
838
|
+
x: s * (1 - inset),
|
|
839
|
+
y: h / 2
|
|
840
|
+
}];
|
|
841
|
+
};
|
|
842
|
+
var planetGrid = function planetGrid(s, offset) {
|
|
843
|
+
var c = s / 2;
|
|
844
|
+
var d = s * offset;
|
|
845
|
+
return [{
|
|
846
|
+
x: c - d,
|
|
847
|
+
y: c - d
|
|
848
|
+
}, {
|
|
849
|
+
x: c + d,
|
|
850
|
+
y: c - d
|
|
851
|
+
}, {
|
|
852
|
+
x: c - d,
|
|
853
|
+
y: c + d
|
|
854
|
+
}, {
|
|
855
|
+
x: c + d,
|
|
856
|
+
y: c + d
|
|
857
|
+
}];
|
|
858
|
+
};
|
|
859
|
+
var moonGrid = function moonGrid(s) {
|
|
860
|
+
var c = s / 2;
|
|
861
|
+
var xOffsets = [-0.375, -0.125, 0.125, 0.375];
|
|
862
|
+
var yOffsets = [-0.25, 0.25];
|
|
863
|
+
var positions = [];
|
|
864
|
+
for (var _i = 0, _yOffsets = yOffsets; _i < _yOffsets.length; _i++) {
|
|
865
|
+
var yo = _yOffsets[_i];
|
|
866
|
+
for (var _iterator2 = _createForOfIteratorHelperLoose(xOffsets), _step2; !(_step2 = _iterator2()).done;) {
|
|
867
|
+
var xo = _step2.value;
|
|
868
|
+
positions.push({
|
|
869
|
+
x: c + s * xo,
|
|
870
|
+
y: c + s * yo
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
return positions;
|
|
875
|
+
};
|
|
876
|
+
var LAYOUTS = {
|
|
877
|
+
galaxy: {
|
|
878
|
+
none: {
|
|
879
|
+
fontScale: 0.8,
|
|
880
|
+
positions: centeredOne
|
|
881
|
+
},
|
|
882
|
+
"default": {
|
|
883
|
+
fontScale: 0.6,
|
|
884
|
+
positions: centeredOne
|
|
885
|
+
},
|
|
886
|
+
large: {
|
|
887
|
+
fontScale: 0.4,
|
|
888
|
+
positions: centeredOne
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
star: {
|
|
892
|
+
none: {
|
|
893
|
+
fontScale: 0.45,
|
|
894
|
+
heightScale: 0.5,
|
|
895
|
+
positions: function positions(s, h) {
|
|
896
|
+
return starPair(s, h, 0.25);
|
|
897
|
+
}
|
|
898
|
+
},
|
|
899
|
+
"default": {
|
|
900
|
+
fontScale: 0.35,
|
|
901
|
+
positions: function positions(s, h) {
|
|
902
|
+
return starPair(s, h, 0.3);
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
large: {
|
|
906
|
+
fontScale: 0.25,
|
|
907
|
+
positions: function positions(s, h) {
|
|
908
|
+
return starPair(s, h, 0.3);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
},
|
|
912
|
+
planet: {
|
|
913
|
+
none: {
|
|
914
|
+
fontScale: 0.4,
|
|
915
|
+
positions: function positions(s) {
|
|
916
|
+
return planetGrid(s, 0.25);
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
"default": {
|
|
920
|
+
fontScale: 0.28,
|
|
921
|
+
positions: function positions(s) {
|
|
922
|
+
return planetGrid(s, 0.27);
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
large: {
|
|
926
|
+
fontScale: 0.2,
|
|
927
|
+
positions: function positions(s) {
|
|
928
|
+
return planetGrid(s, 0.3);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
moon: {
|
|
933
|
+
none: {
|
|
934
|
+
fontScale: 0.2,
|
|
935
|
+
positions: function positions(s) {
|
|
936
|
+
return moonGrid(s);
|
|
937
|
+
}
|
|
938
|
+
},
|
|
939
|
+
"default": {
|
|
940
|
+
fontScale: 0.15,
|
|
941
|
+
positions: function positions(s) {
|
|
942
|
+
return moonGrid(s);
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
large: {
|
|
946
|
+
fontScale: 0.12,
|
|
947
|
+
positions: function positions(s) {
|
|
948
|
+
return moonGrid(s);
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
};
|
|
953
|
+
/**
|
|
954
|
+
* Generate an SVG sigil for a point using Chinese characters.
|
|
955
|
+
*/
|
|
956
|
+
function hanziSigil(config) {
|
|
957
|
+
var _spec$heightScale;
|
|
958
|
+
var _withDefaults = withDefaults(config),
|
|
959
|
+
point = _withDefaults.point,
|
|
960
|
+
background = _withDefaults.background,
|
|
961
|
+
foreground = _withDefaults.foreground,
|
|
962
|
+
size = _withDefaults.size,
|
|
963
|
+
space = _withDefaults.space,
|
|
964
|
+
fontWeight = _withDefaults.fontWeight,
|
|
965
|
+
fontFamily = _withDefaults.fontFamily;
|
|
966
|
+
var _parsePoint = parsePoint(point),
|
|
967
|
+
characters = _parsePoint.characters,
|
|
968
|
+
type = _parsePoint.type;
|
|
969
|
+
var spec = LAYOUTS[type][space];
|
|
970
|
+
var width = size;
|
|
971
|
+
var height = size * ((_spec$heightScale = spec.heightScale) != null ? _spec$heightScale : 1);
|
|
972
|
+
var fontSize = size * spec.fontScale;
|
|
973
|
+
var positions = spec.positions(size, height);
|
|
974
|
+
var textElements = characters.map(function (_char, i) {
|
|
975
|
+
var _positions$i = positions[i],
|
|
976
|
+
x = _positions$i.x,
|
|
977
|
+
y = _positions$i.y;
|
|
978
|
+
return "<text\n x=\"" + x + "\"\n y=\"" + y + "\"\n font-family=\"" + fontFamily + "\"\n font-size=\"" + fontSize + "\"\n font-weight=\"" + fontWeight + "\"\n fill=\"" + foreground + "\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n >" + _char + "</text>";
|
|
979
|
+
}).join('\n ');
|
|
980
|
+
return "<svg\n style=\"display: block;\"\n width=\"" + width + "\"\n height=\"" + height + "\"\n viewBox=\"0 0 " + width + " " + height + "\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <rect fill=\"" + background + "\" width=\"" + width + "\" height=\"" + height + "\" x=\"0\" y=\"0\" />\n " + textElements + "\n</svg>";
|
|
981
|
+
}
|
|
982
|
+
function createCacheKey(config) {
|
|
983
|
+
var c = withDefaults(config);
|
|
984
|
+
return c.point + "|" + c.size + "|" + c.background + "|" + c.foreground + "|" + c.space + "|" + c.fontWeight + "|" + c.fontFamily;
|
|
985
|
+
}
|
|
986
|
+
var memoizedHanziSigil = /*#__PURE__*/memoize(function (config) {
|
|
987
|
+
return hanziSigil(config);
|
|
988
|
+
}, createCacheKey);
|
|
989
|
+
|
|
990
|
+
exports.PHONEME_INDEX = PHONEME_INDEX;
|
|
991
|
+
exports.PREFIXES = PREFIXES;
|
|
992
|
+
exports.PREFIX_CHARACTERS = PREFIX_CHARACTERS;
|
|
993
|
+
exports.PREFIX_GROUPS = PREFIX_GROUPS;
|
|
994
|
+
exports.PREFIX_INDEX = PREFIX_INDEX;
|
|
995
|
+
exports.SUFFIXES = SUFFIXES;
|
|
996
|
+
exports.SUFFIX_CHARACTERS = SUFFIX_CHARACTERS;
|
|
997
|
+
exports.SUFFIX_GROUPS = SUFFIX_GROUPS;
|
|
998
|
+
exports.SUFFIX_INDEX = SUFFIX_INDEX;
|
|
999
|
+
exports._createClass = _createClass;
|
|
1000
|
+
exports._inheritsLoose = _inheritsLoose;
|
|
1001
|
+
exports._wrapNativeSuper = _wrapNativeSuper;
|
|
1002
|
+
exports.deSig = deSig;
|
|
1003
|
+
exports.getCharacter = getCharacter;
|
|
1004
|
+
exports.hanziSigil = hanziSigil;
|
|
1005
|
+
exports.isPrefix = isPrefix;
|
|
1006
|
+
exports.isSuffix = isSuffix;
|
|
1007
|
+
exports.memoizedHanziSigil = memoizedHanziSigil;
|
|
1008
|
+
exports.parsePoint = parsePoint;
|
|
1009
|
+
//# sourceMappingURL=core-b72e8d27.js.map
|