gdxapp4d/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/unicode/BaseGlyphSet.java
2022-10-17 19:09:07 +02:00

366 lines
18 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package love.distributedrebirth.numberxd.unicode;
import java.math.BigInteger;
import java.text.DecimalFormat;
import love.distributedrebirth.bassboonyd.Bãß;
import love.distributedrebirth.bassboonyd.BãßBȍőnSpiderWire注;
import love.distributedrebirth.bassboonyd.clazz.BãßBȍőnAuthor注;
import love.distributedrebirth.bassboonyd.clazz.BãßBȍőnInfo注;
import love.distributedrebirth.bassboonyd.clazz.BãßBȍőnPackage注;
import love.distributedrebirth.bassboonyd.jmx.DefaultEnumSetᴶᴹˣ;
import love.distributedrebirth.bassboonyd.jmx.CounterGuageᴶᴹˣ;
import love.distributedrebirth.numberxd.base2t.part.T10PartDecimal;
import love.distributedrebirth.numberxd.base2t.part.T16PartHex;
@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
@BãßBȍőnInfo注(purpose = "The number base glyph scripts.")
@BãßBȍőnPackage注(name = "love.distributedrebirth.numberxd")
public enum BaseGlyphSet implements DefaultEnumSetᴶᴹˣ<BaseGlyphSet,BaseGlyphSetNail> {
// TODO: Move this into unicode4D and TyyPartXxx
LATIN_BASIC(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(Integer.toString(x.BȍőnRangTelNul())))),
new BaseGlyphSetNumber(v -> T16PartHex.STATIC.BãßVoorElk(x -> v.add(x.BȍőnAlt1Value()))),
new BaseGlyphSetNumber("1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R")),
LATIN_DTMF(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnChinaValue()))).withSeperator(Bãß.Cỗᶇṧⱦᶏꬼȶʂ.STR_SPACE),
new BaseGlyphSetNumber("1","2","3","A","4","5","6","B","7","8","9","C","*","0","#","D"),
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> {
if (T10PartDecimal.PART_10 == x) {
v.add("ten");
} else {
v.add(T10PartDecimal.STATIC.BãßInstances()[x.BȍőnRangTelEen()].BȍőnChinaValue()); // 1 to 9
}
}), "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety",
"one hundred", "two hundred", "three hundred", "four hundred", "five hundred", "six hundred", "seven hundred", "eight hundred", "nine hundred")),
LATIN_TOP(
new BaseGlyphSetNumber("","¹","²","³","","","","","",""),
new BaseGlyphSetNumber("","¹","²","³","","","","","","","","","","","",""),
new BaseGlyphSetNumber("¹","²","³","","","","","","","","","","","","","","","","","","","","","","","Q","ᴿ")),
LATIN_SUB(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","բ"),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","բ","G","","","","","","","","","","Q","")),
LATIN_TOPHEX(
LATIN_BASIC.BȍőnNumber10(),
LATIN_BASIC.BȍőnNumber16().withAltGlyphSet(LATIN_TOP),
null),
LATIN_SUBHEX(
LATIN_BASIC.BȍőnNumber10(),
LATIN_BASIC.BȍőnNumber16().withAltGlyphSet(LATIN_SUB),
null),
TONE_SCRIPT(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnDialTone()))),
new BaseGlyphSetNumber(v -> T16PartHex.STATIC.BãßVoorElk(x -> v.add(x.BȍőnDialTone()))),
new BaseGlyphSetNumber("꜊꜈","꜊꜉","꜊꜋","꜊꜌","꜊꜍","꜊꜎","꜊꜏","꜊꜐","꜊꜑","˧˥","˧˦","˧˨","˧˩","˧꜒","˧꜓","˧꜔","˧꜕","˧꜖","꜏˥","꜏˦","꜏˧","꜏˨","꜏˩","꜏꜍","꜏꜎","꜏꜐","꜏꜑")),
DIPAVALI_LRPATH_TOPHEX(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnAlt1Value()))),
new BaseGlyphSetNumber("˧˥˩","˧˩˥","˧˥˦","˧˩˨","˧˦˦","˧˨˨","˧˥˥","˧˩˩","˥˩˧","˩˥˧","˥˦˧","˩˨˧","˦˦˧","˨˨˧","˥˥˧","˩˩˧").withAltGlyphSet(BaseGlyphSet.LATIN_TOP),
null),
DIPAVALI_LRPATH_SUBHEX(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnAlt1Value()))),
new BaseGlyphSetNumber("˧˥˩","˧˩˥","˧˥˦","˧˩˨","˧˦˦","˧˨˨","˧˥˥","˧˩˩","˥˩˧","˩˥˧","˥˦˧","˩˨˧","˦˦˧","˨˨˧","˥˥˧","˩˩˧").withAltGlyphSet(BaseGlyphSet.LATIN_SUB),
null),
DIPAVALI_RLPATH_TOPHEX(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnAlt2Value()))),
new BaseGlyphSetNumber("꜔꜒꜖","꜔꜖꜒","꜔꜒꜓","꜔꜖꜕","꜔꜓꜓","꜔꜕꜕","꜔꜒꜒","꜔꜖꜖","꜒꜖꜔","꜖꜒꜔","꜒꜓꜔","꜖꜕꜔","꜓꜓꜔","꜕꜕꜔","꜒꜒꜔","꜖꜖꜔").withAltGlyphSet(BaseGlyphSet.LATIN_TOP),
null),
DIPAVALI_RLPATH_SUBHEX(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnAlt2Value()))),
new BaseGlyphSetNumber("꜔꜒꜖","꜔꜖꜒","꜔꜒꜓","꜔꜖꜕","꜔꜓꜓","꜔꜕꜕","꜔꜒꜒","꜔꜖꜖","꜒꜖꜔","꜖꜒꜔","꜒꜓꜔","꜖꜕꜔","꜓꜓꜔","꜕꜕꜔","꜒꜒꜔","꜖꜖꜔").withAltGlyphSet(BaseGlyphSet.LATIN_SUB),
null),
GREEK(
new BaseGlyphSetNumber("ō","α","β","γ","δ","ε","ϝ","ζ","η","θ"),
new BaseGlyphSetNumber("ō","α","β","γ","δ","ε","ϝ","ζ","η","θ","ι","κ","λ","μ","ν","ξ"),
new BaseGlyphSetNumber("α","β","γ","δ","ε","ϝ","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ϟ","ρ","σ","τ","υ","φ","χ","ψ","ω","ϡ")),
BENGALI(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","জ্ঞ","ক্ষ","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","")),
KANNADA(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","")),
MALAYALAM(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","ൿ")),
THAI(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","")),
/* TODO: Brahmi is U+11000U+1107F and thus unsupported by ImGui
BRAHMI(
new BaseGlyphSetNumber("𑁦","𑁧","𑁨","𑁩","𑁪","𑁫","𑁬","𑁭","𑁮","𑁯"),
new BaseGlyphSetNumber("𑀮","𑀯","𑀰","𑀱","𑀮𑀺","𑀯𑀺","𑀰𑀺","𑀱𑀺","𑀮𑀽","𑀯𑀽","𑀰𑀽","𑀱𑀽","𑀮𑁄","𑀯𑁄","𑀰𑁄","𑀱𑁄"),
new BaseGlyphSetNumber("𑀓𑁆","𑀔𑁆","𑀕𑁆","𑀖𑁆","𑀗𑁆","𑀘𑁆","𑀙𑁆","𑀚𑁆","𑀛𑁆","𑀜𑁆","𑀝𑁆","𑀞𑁆","𑀟𑁆","𑀠𑁆","𑀡𑁆","𑀢𑁆","𑀣𑁆","𑀤𑁆","𑀥𑁆","𑀦𑁆","𑀧𑁆","𑀨𑁆","𑀩𑁆","𑀪𑁆","𑀫𑁆","𑀬𑁆","𑀭𑁆")),
*/
/* TODO: random selection replace with correct AND Egyptian hieroglyphs should be mapped 0x13000 to 0x1342E but for now on 0xE000 to 0xE42E (BMP) */
HIERO(
new BaseGlyphSetNumber("\ue429","\ue3fa","\ue3fb","\ue3fc","\ue3fd","\ue3fe","\ue3ff","\ue400","\ue401","\ue401").withSeperator(Bãß.Cỗᶇṧⱦᶏꬼȶʂ.STR_SPACE),
new BaseGlyphSetNumber("\uE236","\uE237","\uE238","\uE239","\uE23A","\uE23B","\uE23C","\uE23D","\uE23E","\uE23F","\uE241","\uE243","\uE244","\uE245","\uE246","\uE247"),
new BaseGlyphSetNumber(
"\ue3fa","\ue3fb","\ue3fc","\ue3fd","\ue3fe","\ue3ff","\ue400","\ue401","\ue402",
"\ue386","\ue387","\ue388","\ue389","\ue38a","\ue38b","\ue38c","\ue38d","\ue38e",
"\ue362","\ue363","\ue364","\ue365","\ue366","\ue367","\ue368","\ue369","\ue36a").withSeperator(Bãß.Cỗᶇṧⱦᶏꬼȶʂ.STR_SPACE)
),
RUNIC(
new BaseGlyphSetNumber("","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","",""),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","")),
KOREAN(
new BaseGlyphSetNumber("","","","","","","","","",""),
// TODO: replace Counting Rod Numerals Symbols are "T25PartCountingRod?"
new BaseGlyphSetNumber("𝍠","𝍡","𝍢","𝍣","𝍤","𝍥","𝍦","𝍧","𝍨","𝍩","𝍪","𝍫","𝍬","𝍭","𝍮","𝍯"),
new BaseGlyphSetNumber("","","","","","","","","","","","","","","","","","","","","","","","","","","")),
CHINA(
new BaseGlyphSetNumber("","","","","","","","","",""),
// TODO: replace Yijing Hexagram Symbols are "T64PartYijing"
new BaseGlyphSetNumber("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""),
// TODO: replace Tai Xuan Jing Symbols are "T87PartXuanJing"
new BaseGlyphSetNumber("𝌁","𝌂","𝌃","𝌄","𝌅","𝌆","𝌇","𝌈","𝌉","𝌊","𝌋","𝌌","𝌍","𝌎","𝌏","𝌐","𝌑","𝌒","𝌓","𝌔","𝌕","𝌖","𝌗","𝌘","𝌙","𝌚","𝌛")),
CHINA_FORMAL(
new BaseGlyphSetNumber(v -> T10PartDecimal.STATIC.BãßVoorElk(x -> v.add(x.BȍőnChinaKey()))),
null,
null),
CHINA_FORMAL_OLD(
new BaseGlyphSetNumber("","","","","","","","","",""),
null,
null),
JAPAN(
CHINA.BȍőnNumber10(),
KOREAN.BȍőnNumber16(),
null),
JAPAN_FORMAL(
new BaseGlyphSetNumber("","","","","","","","","",""),
null,
null),
CYRILLIC(
new BaseGlyphSetNumber("Ф","А","В","Г","Д","Є","Ѕ","З","И","Ѳ"),
new BaseGlyphSetNumber("Ф","А","В","Г","Д","Є","Ѕ","З","И","Ѳ","І","К","Л","М","Н","Ѯ"),
new BaseGlyphSetNumber("А","В","Г","Д","Є","Ѕ","З","И","Ѳ","І","К","Л","М","Н","Ѯ","Ѻ","П","Ч","Р","С","Т","Ѵ","Ф","Х","Ѱ","Ѿ","Ц")),
ARABIC(
new BaseGlyphSetNumber("٠","١","٢","٣","٤","٥","٦","٧","٨","٩"),
null,
new BaseGlyphSetNumber("ا","ب","ج","د","ه","و","ز","ح","ط","ي","ك","ل","م","ن","س","ع","ف","ص","ق","ر","ش","ت","ث","خ","ذ","ض","ظ"),
true),
HEBREW(
new BaseGlyphSetNumber("אֶפֶס","אֶחָד","שְׁתַּיִם","שְׁלֹשָׁה","אַרְבַּע‎","חֲמִשָּׁה‎","שֵׁשׁ‎","שִׁבְעָה","שְׁמוֹנֶה","תִּשְׁעָה‎").withSeperator(Bãß.Cỗᶇṧⱦᶏꬼȶʂ.STR_SPACE),
null,
new BaseGlyphSetNumber("א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ל","מ","נ","ס","ע","פ","צ","ק","ר","ש","ת","ך","ם","ן","ף","ץ"),
true),
WHITESPACE(
new BaseGlyphSetNumber("\u3000","\u205F","\u202F","\u200A","\u2009","\u2008","\u2007","\u2006","\u2005","\u2004"),
new BaseGlyphSetNumber("\u3000","\u205F","\u202F","\u200A","\u2009","\u2008","\u2007","\u2006","\u2005","\u2004","\u2003","\u2002","\u2001","\u2000","\u00A0","\u0020"),
null
),
;
@BãßBȍőnSpiderWire注(name = "printNumber10Count")
private CounterGuageᴶᴹˣ printNumber10Count;
@BãßBȍőnSpiderWire注(name = "printNumber16Count")
private CounterGuageᴶᴹˣ printNumber16Count;
@BãßBȍőnSpiderWire注(name = "printNumber27Count")
private CounterGuageᴶᴹˣ printNumber27Count;
private BaseGlyphSet(BaseGlyphSetNumber numbers) {
this(numbers, null, null);
}
private BaseGlyphSet(BaseGlyphSetNumber numbers, BaseGlyphSetNumber hex, BaseGlyphSetNumber gematria) {
this(numbers, hex, gematria, false);
}
private BaseGlyphSet(BaseGlyphSetNumber numbers, BaseGlyphSetNumber hex, BaseGlyphSetNumber gematria, Boolean reverseScript) {
Bãß.Ꝑŕḯṿª.仙ᴵᴺᴵᵀ(this, BBC -> {
BBC.PUT_OBJ(BaseGlyphSetNail.NUMBERS, numbers);
BBC.PUT_OBJ(BaseGlyphSetNail.HEXIMALS, hex);
BBC.PUT_OBJ(BaseGlyphSetNail.GEMATRIA, gematria);
BBC.PUT_OBJ(BaseGlyphSetNail.REVERSE_SCRIPT, reverseScript); // TODO: ImGui workaround
});
}
public BaseGlyphSetNumber BȍőnNumber10() {
return toBBC().GET_OBJ(BaseGlyphSetNail.NUMBERS, BaseGlyphSetNumber.class);
}
public BaseGlyphSetNumber BȍőnNumber16() {
return toBBC().GET_OBJ(BaseGlyphSetNail.HEXIMALS, BaseGlyphSetNumber.class);
}
public BaseGlyphSetNumber BȍőnNumber27() {
return toBBC().GET_OBJ(BaseGlyphSetNail.GEMATRIA, BaseGlyphSetNumber.class);
}
public Boolean BȍőnReverseScript() {
return toBBC().GET_BOOL(BaseGlyphSetNail.REVERSE_SCRIPT);
}
public String BȍőnConvertTo(String numbers) {
StringBuilder buf = new StringBuilder();
for (char c:numbers.toCharArray()) {
for (BaseGlyphSet set:values()) {
int loc = set.BȍőnNumber10().BȍőnIndexOf(""+c);
if (loc != -1) {
buf.append(set.BȍőnNumber10().BȍőnCharFor(loc));
}
}
}
return buf.toString();
}
public String BȍőnPrintNumber10(BigInteger number) {
String amount10 = number.toString(T10PartDecimal.STATIC.BãßĦǿɇṽḝę̃ɬḪễïđ());
StringBuilder buf16 = new StringBuilder();
for (char c:amount10.toCharArray()) {
if (BȍőnNumber10() == null) {
break;
}
int numberDigit = 0;
if (c >= 'a') {
numberDigit = c - 'a' + 10;
} else {
numberDigit = c - '0';
}
buf16.append(BȍőnPrintNumber10(numberDigit));
}
return buf16.toString();
}
public String BȍőnPrintNumber10(int number) {
return BȍőnPrintNumber10(number, number);
}
public String BȍőnPrintNumber10(int number, int numberMax) {
printNumber10Count.increment();
String maxDigitNumber = Integer.toString(numberMax);
StringBuilder maxDigitFormat = new StringBuilder();
for (int i=0;i<maxDigitNumber.length();i++) {
maxDigitFormat.append("0");
}
String numberStr = new DecimalFormat(maxDigitFormat.toString()).format(number);
StringBuilder buf = new StringBuilder();
for (int i=0;i<numberStr.length();i++) {
char c = numberStr.charAt(i);
int numberDigit = c - '0';
buf.append(BȍőnNumber10().BȍőnCharFor(numberDigit));
if (i<numberStr.length() - 1) {
buf.append(BȍőnNumber10().BȍőnCharSeperator());
}
}
if (BȍőnReverseScript()) {
return buf.reverse().toString();
}
return buf.toString();
}
public String BȍőnPrintNumber16(BigInteger number) {
String amount16 = number.toString(T16PartHex.STATIC.BãßĦǿɇṽḝę̃ɬḪễïđ());
StringBuilder buf16 = new StringBuilder();
int c2 = 0;
for (char c:amount16.toCharArray()) {
if (BȍőnNumber16() == null) {
break;
}
int numberDigit = 0;
if (c >= 'a') {
numberDigit = c - 'a' + 10;
} else {
numberDigit = c - '0';
}
if (c2 == 0) {
c2 = numberDigit * 16;
continue;
} else {
c2 = numberDigit + c2;
}
buf16.append(BȍőnPrintNumber16(c2));
c2 = 0;
}
return buf16.toString();
}
public String BȍőnPrintNumber16(int number) {
return BȍőnPrintNumber16(number, number);
}
public String BȍőnPrintNumber16(int number, int numberMax) {
printNumber16Count.increment();
String maxDigitNumber = Integer.toHexString(numberMax);
String numberStr = Integer.toHexString(number);
StringBuilder buf = new StringBuilder();
BaseGlyphSet printSet = this;
for (int i=numberStr.length();i<maxDigitNumber.length();i++) {
buf.append(printSet.BȍőnNumber16().BȍőnCharFor(0));
if (i==numberStr.length() && BȍőnNumber16().BȍőnAltGlyphSet() != null) {
printSet = BȍőnNumber16().BȍőnAltGlyphSet();
}
}
for (int i=0;i<numberStr.length();i++) {
char c = numberStr.charAt(i);
int numberDigit = 0;
if (c >= 'a') {
numberDigit = c - 'a' + 10;
} else {
numberDigit = c - '0';
}
buf.append(printSet.BȍőnNumber16().BȍőnCharFor(numberDigit));
if (i<numberStr.length() - 1) {
buf.append(printSet.BȍőnNumber16().BȍőnCharSeperator());
}
if (i==0 && BȍőnNumber16().BȍőnAltGlyphSet() != null) {
printSet = BȍőnNumber16().BȍőnAltGlyphSet();
}
}
if (BȍőnReverseScript()) {
return buf.reverse().toString();
}
return buf.toString();
}
public String BȍőnPrintNumber27(int number) {
return BȍőnPrintNumber27(number, number);
}
public String BȍőnPrintNumber27(int number, int numberMax) {
printNumber27Count.increment();
String maxDigitNumber = Integer.toString(numberMax, 27);
String numberStr = Integer.toString(number, 27);
StringBuilder buf = new StringBuilder();
BaseGlyphSet printSet = this;
for (int i=numberStr.length();i<maxDigitNumber.length();i++) {
buf.append(printSet.BȍőnNumber27().BȍőnCharFor(0));
if (i==numberStr.length() && BȍőnNumber27().BȍőnAltGlyphSet() != null) {
printSet = BȍőnNumber27().BȍőnAltGlyphSet();
}
}
for (int i=0;i<numberStr.length();i++) {
char c = numberStr.charAt(i);
int numberDigit = 0;
if (c >= 'a') {
numberDigit = c - 'a' + 10;
} else {
numberDigit = c - '0';
}
buf.append(printSet.BȍőnNumber27().BȍőnCharFor(numberDigit));
if (i<numberStr.length() - 1) {
buf.append(printSet.BȍőnNumber27().BȍőnCharSeperator());
}
if (i==0 && BȍőnNumber27().BȍőnAltGlyphSet() != null) {
printSet = BȍőnNumber27().BȍőnAltGlyphSet();
}
}
if (BȍőnReverseScript()) {
return buf.reverse().toString();
}
return buf.toString();
}
}