gdxapp4d/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/Gê̄ldGetậl.java

186 lines
6.7 KiB
Java
Raw Normal View History

2022-01-30 22:00:16 +01:00
package love.distributedrebirth.numberxd;
2022-01-28 11:24:54 +01:00
import java.util.ArrayList;
import java.util.List;
2022-02-04 18:00:03 +01:00
import love.distributedrebirth.bassboonyd.BãßBȍőnAuthorInfoʸᴰ;
2022-02-04 22:44:11 +01:00
import love.distributedrebirth.numberxd.base2t.BaseIteratorOctal;
import love.distributedrebirth.numberxd.base2t.part.T04PartQuad;
2022-02-04 18:00:03 +01:00
import love.distributedrebirth.numberxd.base2t.type.V009Tyte;
import love.distributedrebirth.numberxd.base2t.type.V036Teger;
2022-01-28 11:24:54 +01:00
2022-08-24 17:33:39 +02:00
@BãßBȍőnAuthorInfoʸᴰ(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class Gê̄ldGetậl extends AbstractBaseGetậlMatrix1<Gê̄ldGetậl,V009Tyte> {
2022-01-28 11:24:54 +01:00
2022-02-04 18:00:03 +01:00
private final V036Teger value;
2022-01-28 11:24:54 +01:00
private final double totalDecimalValue;
private static final Character LEFT_TO_RIGHT_MARK = 0x200E;
private static final Character RIGHT_TO_LEFT_MARK = 0x200F;
2022-02-04 22:44:11 +01:00
public Gê̄ldGetậl(BaseIteratorOctal values) {
this (new V036Teger(values));
}
2022-02-04 18:00:03 +01:00
public Gê̄ldGetậl(V036Teger value) {
this.value = value;
2022-01-28 11:24:54 +01:00
this.totalDecimalValue = calculateDecimalValue();
}
2022-01-28 18:47:03 +01:00
public Gê̄ldGetậl(String money) {
2022-01-28 11:24:54 +01:00
if (money == null) {
throw new NullPointerException("Can't parse null money");
}
if (money.isEmpty()) {
throw new IllegalArgumentException("Can't parse zero money length");
}
if (money.length() > 8) { // RL + 4 chars + 3 vowels
throw new IllegalArgumentException("Money length should not exceed 8 codepoints");
}
2022-01-31 19:06:09 +01:00
List<Gê̄ldGetậlÅtHebrew> result = new ArrayList<>();
2022-01-28 11:24:54 +01:00
2022-01-31 19:06:09 +01:00
Gê̄ldGetậlÅtHebrew geldDigit = null;
2022-01-28 11:24:54 +01:00
for (int i=0;i<money.length();i++) {
char codePoint = (char) money.codePointAt(i);
if (LEFT_TO_RIGHT_MARK.equals(codePoint)) {
continue;
}
if (RIGHT_TO_LEFT_MARK.equals(codePoint)) {
continue;
}
if (geldDigit != null) {
2022-01-31 19:06:09 +01:00
Gê̄ldGetậlÅtHebrewVowel vowel = Gê̄ldGetậlÅtHebrewVowel.valueOfCharacter(codePoint);
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(vowel)) {
2022-01-28 11:24:54 +01:00
geldDigit.setVowel(vowel);
result.add(geldDigit);
geldDigit = null;
continue;
} else {
result.add(geldDigit);
}
}
2022-01-31 19:06:09 +01:00
Gê̄ldGetậlÅtHebrewLetter letter = Gê̄ldGetậlÅtHebrewLetter.valueOfCharacter(codePoint);
if (Gê̄ldGetậlÅtHebrewLetter.NONE.equals(letter)) {
2022-01-28 11:24:54 +01:00
throw new IllegalArgumentException("Unknown fraction codepoint: 0x"+Integer.toHexString(codePoint));
}
2022-01-31 19:06:09 +01:00
geldDigit = new Gê̄ldGetậlÅtHebrew(letter);
2022-01-28 11:24:54 +01:00
}
if (geldDigit != null) {
result.add(geldDigit);
}
if (result.isEmpty()) {
throw new IllegalArgumentException("No hebrew money found");
}
2022-01-31 19:06:09 +01:00
Gê̄ldGetậlÅtHebrew full = result.get(0);
Gê̄ldGetậlÅtHebrew deelA = null;
Gê̄ldGetậlÅtHebrew deelB = null;
Gê̄ldGetậlÅtHebrew deelC = null;
2022-01-28 11:24:54 +01:00
if (result.size() > 1) {
deelA = result.get(1);
} else {
2022-01-31 19:06:09 +01:00
deelA = new Gê̄ldGetậlÅtHebrew();
2022-01-28 11:24:54 +01:00
}
if (result.size() > 2) {
deelB = result.get(2);
} else {
2022-01-31 19:06:09 +01:00
deelB = new Gê̄ldGetậlÅtHebrew();
2022-01-28 11:24:54 +01:00
}
if (result.size() > 3) {
deelC = result.get(3);
} else {
2022-01-31 19:06:09 +01:00
deelC = new Gê̄ldGetậlÅtHebrew();
2022-01-28 11:24:54 +01:00
}
2022-02-04 18:00:03 +01:00
value = new V036Teger();
value.setTytePart(T04PartQuad.PART_1, full.toTyte());
value.setTytePart(T04PartQuad.PART_2, deelA.toTyte());
value.setTytePart(T04PartQuad.PART_3, deelB.toTyte());
value.setTytePart(T04PartQuad.PART_4, deelC.toTyte());
2022-01-28 11:24:54 +01:00
this.totalDecimalValue = calculateDecimalValue();
}
private double calculateDecimalValue() {
2022-02-04 18:00:03 +01:00
Gê̄ldGetậlÅtHebrew nummerAlphabet = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_1));
Gê̄ldGetậlÅtHebrew nummerDeelA = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_2));
Gê̄ldGetậlÅtHebrew nummerDeelB = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_3));
Gê̄ldGetậlÅtHebrew nummerDeelC = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_4));
2022-01-28 11:24:54 +01:00
boolean hasFourDigits =
2022-01-31 19:06:09 +01:00
!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter()) &&
!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter()) &&
!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter());
2022-01-28 11:24:54 +01:00
double totalDecimalValue = nummerAlphabet.toDecimalValue(hasFourDigits);
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter())) {
2022-01-28 11:24:54 +01:00
totalDecimalValue += nummerDeelA.toDecimalValue(false);
}
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter())) {
2022-01-28 11:24:54 +01:00
totalDecimalValue += nummerDeelB.toDecimalValue(false);
}
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter())) {
2022-01-28 11:24:54 +01:00
totalDecimalValue += nummerDeelC.toDecimalValue(false);
}
return totalDecimalValue;
}
public double getTotalDecimalValue() {
return totalDecimalValue;
}
public String toHebrewString() {
return toHebrewString(false);
}
public String toHebrewString(boolean reverse) {
2022-02-04 18:00:03 +01:00
Gê̄ldGetậlÅtHebrew nummerAlphabet = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_1));
Gê̄ldGetậlÅtHebrew nummerDeelA = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_2));
Gê̄ldGetậlÅtHebrew nummerDeelB = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_3));
Gê̄ldGetậlÅtHebrew nummerDeelC = new Gê̄ldGetậlÅtHebrew(value.getTytePart(T04PartQuad.PART_4));
2022-01-28 11:24:54 +01:00
StringBuilder buf = new StringBuilder();
buf.append(RIGHT_TO_LEFT_MARK);
buf.append(nummerAlphabet.getLetter().getCharacter());
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerAlphabet.getVowel())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerAlphabet.getVowel().getCharacter());
}
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelA.getLetter().getCharacter());
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelA.getVowel())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelA.getVowel().getCharacter());
}
}
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelB.getLetter().getCharacter());
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelB.getVowel())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelB.getVowel().getCharacter());
}
}
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelC.getLetter().getCharacter());
2022-01-31 19:06:09 +01:00
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelC.getVowel())) {
2022-01-28 11:24:54 +01:00
buf.append(nummerDeelC.getVowel().getCharacter());
}
}
if (reverse) {
buf.reverse(); // ImGui skips RL marker so renders wrong....
}
return buf.toString();
}
2022-02-04 18:00:03 +01:00
@Override
public int getMatrix1Length() {
2022-10-08 17:14:21 +02:00
return T04PartQuad.DEFAULT.BãßĦǿɇṽḝę̃ɬḪễïđ();
2022-02-04 18:00:03 +01:00
}
@Override
public V009Tyte getValue() {
return value.getTytePart(T04PartQuad.values()[matrix1]);
2022-02-04 18:00:03 +01:00
}
@Override
2022-02-04 22:44:11 +01:00
public Gê̄ldGetậl toClone(BaseIteratorOctal values) {
return new Gê̄ldGetậl(values);
}
@Override
public BaseIteratorOctal iteratorOctalsByClone() {
return value.iteratorOctalsByClone();
2022-02-04 18:00:03 +01:00
}
2022-01-28 11:24:54 +01:00
}