223 lines
8.7 KiB
Java
223 lines
8.7 KiB
Java
package love.distributedrebirth.numberxd;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
import love.distributedrebirth.bassboonyd.BãßBȍőnAuthorInfoʸᴰ;
|
||
import love.distributedrebirth.bassboonyd.BãßBȍőnConstantsʸᴰ;
|
||
import love.distributedrebirth.numberxd.base2t.BaseIteratorOctal;
|
||
import love.distributedrebirth.numberxd.base2t.part.T04PartQuad;
|
||
import love.distributedrebirth.numberxd.base2t.type.V009Tyte;
|
||
import love.distributedrebirth.numberxd.base2t.type.V036Teger;
|
||
import love.distributedrebirth.numberxd.unicode.BaseGlyphSet;
|
||
import love.distributedrebirth.numberxd.unicode.SourceGlyph;
|
||
import love.distributedrebirth.numberxd.unicode.SourceGlyphCharSet;
|
||
|
||
@BãßBȍőnAuthorInfoʸᴰ(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
|
||
public class Gê̄ldGetậl extends AbstractBaseGetậlMatrix1<Gê̄ldGetậl,V009Tyte> {
|
||
|
||
private final V036Teger value;
|
||
private static final Character LEFT_TO_RIGHT_MARK = 0x200E;
|
||
private static final Character RIGHT_TO_LEFT_MARK = 0x200F;
|
||
|
||
public Gê̄ldGetậl(BaseIteratorOctal values) {
|
||
this (new V036Teger(values));
|
||
}
|
||
|
||
public Gê̄ldGetậl(V036Teger value) {
|
||
this.value = value;
|
||
}
|
||
|
||
public Gê̄ldGetậl(String money) {
|
||
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() > 9) { // RL + 4 chars + 4 vowels
|
||
throw new IllegalArgumentException("Money length should not exceed 9 codepoints");
|
||
}
|
||
List<Gê̄ldGetậlÅtHebrew> result = new ArrayList<>();
|
||
|
||
Gê̄ldGetậlÅtHebrew geldDigit = null;
|
||
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) {
|
||
Gê̄ldGetậlÅtHebrewVowel vowel = Gê̄ldGetậlÅtHebrewVowel.valueOfCharacter(codePoint);
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(vowel)) {
|
||
geldDigit.setVowel(vowel);
|
||
result.add(geldDigit);
|
||
geldDigit = null;
|
||
continue;
|
||
} else {
|
||
result.add(geldDigit);
|
||
}
|
||
}
|
||
Gê̄ldGetậlÅtHebrewVowel vowel = Gê̄ldGetậlÅtHebrewVowel.valueOfCharacter(codePoint);
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(vowel)) {
|
||
continue; // ignore multiple vowels on letters
|
||
}
|
||
Gê̄ldGetậlÅtHebrewLetter letter = Gê̄ldGetậlÅtHebrewLetter.valueOfCharacter(codePoint);
|
||
if (Gê̄ldGetậlÅtHebrewLetter.NONE.equals(letter)) {
|
||
throw new IllegalArgumentException("Unknown fraction codepoint: 0x"+Integer.toHexString(codePoint));
|
||
}
|
||
geldDigit = new Gê̄ldGetậlÅtHebrew(letter);
|
||
}
|
||
if (geldDigit != null) {
|
||
result.add(geldDigit);
|
||
}
|
||
|
||
if (result.isEmpty()) {
|
||
throw new IllegalArgumentException("No hebrew money found");
|
||
}
|
||
Gê̄ldGetậlÅtHebrew full0 = result.get(0);
|
||
Gê̄ldGetậlÅtHebrew deelA = null;
|
||
Gê̄ldGetậlÅtHebrew deelB = null;
|
||
Gê̄ldGetậlÅtHebrew deelC = null;
|
||
if (result.size() > 1) {
|
||
deelA = result.get(1);
|
||
} else {
|
||
deelA = new Gê̄ldGetậlÅtHebrew();
|
||
}
|
||
if (result.size() > 2) {
|
||
deelB = result.get(2);
|
||
} else {
|
||
deelB = new Gê̄ldGetậlÅtHebrew();
|
||
}
|
||
if (result.size() > 3) {
|
||
deelC = result.get(3);
|
||
} else {
|
||
deelC = new Gê̄ldGetậlÅtHebrew();
|
||
}
|
||
value = new V036Teger();
|
||
value.setTytePart(T04PartQuad.PART_1, full0.toTyte());
|
||
value.setTytePart(T04PartQuad.PART_2, deelA.toTyte());
|
||
value.setTytePart(T04PartQuad.PART_3, deelB.toTyte());
|
||
value.setTytePart(T04PartQuad.PART_4, deelC.toTyte());
|
||
}
|
||
|
||
private boolean hasHebrewLetters(Gê̄ldGetậlÅtHebrew...nummers) {
|
||
for (Gê̄ldGetậlÅtHebrew nummer:nummers) {
|
||
if (Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummer.getLetter())) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public double toDecimalValue() {
|
||
Gê̄ldGetậlÅtHebrew nummerFull0 = 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));
|
||
boolean hasFourDigits = hasHebrewLetters(nummerDeelA, nummerDeelB, nummerDeelC);
|
||
double totalDecimalValue = nummerFull0.toDecimalValue(hasFourDigits);
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter())) {
|
||
totalDecimalValue += nummerDeelA.toDecimalValue(false);
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter())) {
|
||
totalDecimalValue += nummerDeelB.toDecimalValue(false);
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter())) {
|
||
totalDecimalValue += nummerDeelC.toDecimalValue(false);
|
||
}
|
||
return totalDecimalValue;
|
||
}
|
||
|
||
public String toFractionNotation(BaseGlyphSet glyphCharset, SourceGlyphCharSet sourceCharset) {
|
||
Gê̄ldGetậlÅtHebrew nummerFull0 = 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));
|
||
boolean hasFourDigits = hasHebrewLetters(nummerDeelA, nummerDeelB, nummerDeelC);
|
||
StringBuilder buf = new StringBuilder();
|
||
buf.append(LEFT_TO_RIGHT_MARK);
|
||
nummerFull0.toFractionNotation(hasFourDigits, buf, glyphCharset, sourceCharset);
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter())) {
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
buf.append(sourceCharset.print(SourceGlyph.MATH_PLUS));
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
nummerDeelA.toFractionNotation(false, buf, glyphCharset, sourceCharset);
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter())) {
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
buf.append(sourceCharset.print(SourceGlyph.MATH_PLUS));
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
nummerDeelB.toFractionNotation(false, buf, glyphCharset, sourceCharset);
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter())) {
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
buf.append(sourceCharset.print(SourceGlyph.MATH_PLUS));
|
||
buf.append(BãßBȍőnConstantsʸᴰ.STR_SPACE);
|
||
nummerDeelC.toFractionNotation(false, buf, glyphCharset, sourceCharset);
|
||
}
|
||
return buf.toString();
|
||
}
|
||
|
||
public String toHebrewString() {
|
||
return toHebrewString(false);
|
||
}
|
||
|
||
public String toHebrewString(boolean reverse) {
|
||
Gê̄ldGetậlÅtHebrew nummerFull0 = 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));
|
||
StringBuilder buf = new StringBuilder();
|
||
buf.append(RIGHT_TO_LEFT_MARK);
|
||
buf.append(nummerFull0.getLetter().getCharacter());
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerFull0.getVowel())) {
|
||
buf.append(nummerFull0.getVowel().getCharacter());
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelA.getLetter())) {
|
||
buf.append(nummerDeelA.getLetter().getCharacter());
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelA.getVowel())) {
|
||
buf.append(nummerDeelA.getVowel().getCharacter());
|
||
}
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelB.getLetter())) {
|
||
buf.append(nummerDeelB.getLetter().getCharacter());
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelB.getVowel())) {
|
||
buf.append(nummerDeelB.getVowel().getCharacter());
|
||
}
|
||
}
|
||
if (!Gê̄ldGetậlÅtHebrewLetter.NONE.equals(nummerDeelC.getLetter())) {
|
||
buf.append(nummerDeelC.getLetter().getCharacter());
|
||
if (!Gê̄ldGetậlÅtHebrewVowel.NONE.equals(nummerDeelC.getVowel())) {
|
||
buf.append(nummerDeelC.getVowel().getCharacter());
|
||
}
|
||
}
|
||
if (reverse) {
|
||
return buf.reverse().toString(); // ImGui skips RL marker so renders wrong....
|
||
}
|
||
return buf.toString();
|
||
}
|
||
|
||
@Override
|
||
public int getMatrix1Length() {
|
||
return T04PartQuad.STATIC.BãßĦǿɇṽḝę̃ɬḪễïđ();
|
||
}
|
||
|
||
@Override
|
||
public V009Tyte getValue() {
|
||
return value.getTytePart(T04PartQuad.values()[matrix1]);
|
||
}
|
||
|
||
@Override
|
||
public Gê̄ldGetậl toClone(BaseIteratorOctal values) {
|
||
return new Gê̄ldGetậl(values);
|
||
}
|
||
|
||
@Override
|
||
public BaseIteratorOctal iteratorOctalsByClone() {
|
||
return value.iteratorOctalsByClone();
|
||
}
|
||
}
|