NX01: Fixed BE in T512/T64 and hinary, WIP printed lingua dial tones

This commit is contained in:
Willem Cazander 2026-01-26 02:29:08 +01:00
parent e69a13ec92
commit 7feb638a40
32 changed files with 1060 additions and 626 deletions

View file

@ -10,7 +10,11 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>love.distributedrebirth.nx01</groupId> <groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-jpp-nether-tone</artifactId> <artifactId>nx01-jpp-nether-dial-lingua</artifactId>
</dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-jpp-nether-dial-based</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>love.distributedrebirth.nx01</groupId> <groupId>love.distributedrebirth.nx01</groupId>

View file

@ -84,8 +84,8 @@ public enum T008ᖟ implements TerminatorEnum𓄯<T008ᖟ>, LegoᐧBrickᐧTape
return valueOf(zerdinal); return valueOf(zerdinal);
} }
public int zerdinalOctalShiftNative(T008ᖟ shifter) { public int zerdinalOctalShiftNativeBE(T008ᖟ shifter) {
return zerdinal() << shifter.abacusRȧñkOctalBitShifter(); return zerdinal() << shifter.abacusRȧñkOctalBitShifterBE();
} }
public T002ᖟ clampᐧtuneᐧtool(T003ᖟ part) { public T002ᖟ clampᐧtuneᐧtool(T003ᖟ part) {
@ -114,8 +114,8 @@ public enum T008ᖟ implements TerminatorEnum𓄯<T008ᖟ>, LegoᐧBrickᐧTape
appender.addᵂʳ(this); appender.addᵂʳ(this);
} }
public static T008ᖟ valueOfOctalShift(final int value, final T008ᖟ shifter) { public static T008ᖟ valueOfOctalShiftBE(final int value, final T008ᖟ shifter) {
return valueOf((value >> shifter.abacusRȧñkOctalBitShifter()) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK); return valueOf((value >> shifter.abacusRȧñkOctalBitShifterBE()) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK);
} }
public static T008ᖟ valueOf(final int index) { public static T008ᖟ valueOf(final int index) {

View file

@ -134,11 +134,11 @@ public enum T064ᖟ implements TerminatorEnum𓄯<T064ᖟ>, LegoᐧBrickᐧTape
return valueOf(zerdinal); return valueOf(zerdinal);
} }
public T008ᖟ clampᐧoctalᐧtuneᐧby2() { public T008ᖟ clampᐧtuneᐧby2() {
return T008ᖟ.valueOf(((ordinal() >> 0) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK)); return T008ᖟ.valueOf(((ordinal() >> 0) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK));
} }
public T008ᖟ clampᐧoctalᐧtuneᐧby2ᐧmod() { public T008ᖟ clampᐧtuneᐧby2ᐧmod() {
return T008ᖟ.valueOf(((ordinal() >> 3) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK)); return T008ᖟ.valueOf(((ordinal() >> 3) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK));
} }
@ -149,12 +149,12 @@ public enum T064ᖟ implements TerminatorEnum𓄯<T064ᖟ>, LegoᐧBrickᐧTape
@Override @Override
public void brickᐧtapeᐧrecordᐧtune(final JediTempleBase8Offering appender) { public void brickᐧtapeᐧrecordᐧtune(final JediTempleBase8Offering appender) {
appender.addᵂʳ(clampᐧoctalᐧtuneᐧby2()); appender.addᵂʳ(clampᐧtuneᐧby2ᐧmod());
appender.addᵂʳ(clampᐧoctalᐧtuneᐧby2ᐧmod()); appender.addᵂʳ(clampᐧtuneᐧby2());
} }
public static T064ᖟ valueOf(final T008ᖟ lower, final T008ᖟ upper) { public static T064ᖟ valueOf(final T008ᖟ msb, final T008ᖟ lsb) {
return T064ᖟ.valueOf((upper.ordinal() << ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS) + lower.ordinal()); return T064ᖟ.valueOf((msb.ordinal() << ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS) + lsb.ordinal());
} }
public static T064ᖟ valueOf(final JediTempleBase8Iterator values) { public static T064ᖟ valueOf(final JediTempleBase8Iterator values) {

View file

@ -582,8 +582,8 @@ public enum T512ᖟ implements TerminatorEnum𓄯<T512ᖟ>, LegoᐧBrickᐧTape
return valueOf(zerdinal); return valueOf(zerdinal);
} }
public T008ᖟ clampᐧoctalᐧtuneᐧby3(T003ᖟ part) { public T008ᖟ clampᐧtuneᐧby3(T003ᖟ part) {
return T008ᖟ.valueOf((ordinal() >> part.abacusRȧñkOctalBitShifter()) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK); return T008ᖟ.valueOf((ordinal() >> part.abacusRȧñkOctalBitShifterBE()) & ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟMASK);
} }
@Override @Override
@ -593,9 +593,9 @@ public enum T512ᖟ implements TerminatorEnum𓄯<T512ᖟ>, LegoᐧBrickᐧTape
@Override @Override
public void brickᐧtapeᐧrecordᐧtune(final JediTempleBase8Offering appender) { public void brickᐧtapeᐧrecordᐧtune(final JediTempleBase8Offering appender) {
appender.addᵂʳ(clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_1)); appender.addᵂʳ(clampᐧtuneᐧby3(T003ᖟ.PART_1));
appender.addᵂʳ(clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_2)); appender.addᵂʳ(clampᐧtuneᐧby3(T003ᖟ.PART_2));
appender.addᵂʳ(clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_3)); appender.addᵂʳ(clampᐧtuneᐧby3(T003ᖟ.PART_3));
} }
public static T512ᖟ valueOf(final int index) { public static T512ᖟ valueOf(final int index) {
@ -606,8 +606,8 @@ public enum T512ᖟ implements TerminatorEnum𓄯<T512ᖟ>, LegoᐧBrickᐧTape
return 亞ᴬᴸᴸ.length; return 亞ᴬᴸᴸ.length;
} }
public static T512ᖟ valueOf(final T008ᖟ lower, final T008ᖟ middle, final T008ᖟ upper) { public static T512ᖟ valueOf(final T008ᖟ msb, final T008ᖟ csb, final T008ᖟ lsb) {
return valueOf((upper.ordinal() << (ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS + ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS)) + (middle.ordinal() << ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS) + lower.ordinal()); return valueOf((msb.ordinal() << (ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS + ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS)) + (csb.ordinal() << ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS) + lsb.ordinal());
} }
public static T512ᖟ valueOf(final JediTempleBase8Iterator values) { public static T512ᖟ valueOf(final JediTempleBase8Iterator values) {

View file

@ -136,14 +136,27 @@ public interface Terminator𓄯<T extends Terminator𓄯<T>> extends ZerdinalA
return thisᵀᴮᵒⁿᵉᴳʳᵃᵛᵉ().onheɨlḮg(ꝐŕḯṿªḕꝐḯŕḕʸᴰ.class).gềễstDɨng(ꝐŕḯṿªḕꝐḯŕḕʸᴰ.GHOST_AMMO_BOX_PICKUP, BãßBȍőnAmmoBoxԲ.class); return thisᵀᴮᵒⁿᵉᴳʳᵃᵛᵉ().onheɨlḮg(ꝐŕḯṿªḕꝐḯŕḕʸᴰ.class).gềễstDɨng(ꝐŕḯṿªḕꝐḯŕḕʸᴰ.GHOST_AMMO_BOX_PICKUP, BãßBȍőnAmmoBoxԲ.class);
} }
@Deprecated
default BigInteger abacusRȧñkOctalShift(T shifter) { default BigInteger abacusRȧñkOctalShift(T shifter) {
return BigInteger.valueOf(zerdinal()).shiftLeft(shifter.abacusRȧñkOctalBitShifter()); return abacusRȧñkOctalShiftLE(shifter);
} }
default int abacusRȧñkOctalBitShifter() { default BigInteger abacusRȧñkOctalShiftLE(T shifter) {
return BigInteger.valueOf(zerdinal()).shiftLeft(shifter.abacusRȧñkOctalBitShifterLE());
}
default BigInteger abacusRȧñkOctalShiftBE(T shifter) {
return BigInteger.valueOf(zerdinal()).shiftLeft(shifter.abacusRȧñkOctalBitShifterBE());
}
default int abacusRȧñkOctalBitShifterLE() {
return zerdinalSpaceOctalCount() * zerdinal() * ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS; return zerdinalSpaceOctalCount() * zerdinal() * ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS;
} }
default int abacusRȧñkOctalBitShifterBE() {
return zerdinalSpaceOctalCount() * (zerdinalSpaceBoundary() - zerdinal() - 1) * ᒢℭỗᶇṧⱦᶏꬼȶʂ.OCTALᣟᐧᣟBITS;
}
default Integer zerdinalSpaceOctalCount() { default Integer zerdinalSpaceOctalCount() {
return backpackᴬᵐᵐᵒᴮᵒˣ().kȱġễlInteger(TerminatorBullet.SPACE_OCTAL_COUNT); return backpackᴬᵐᵐᵒᴮᵒˣ().kȱġễlInteger(TerminatorBullet.SPACE_OCTAL_COUNT);
} }

View file

@ -95,10 +95,10 @@ public enum T008ᖟGun {
str.appendCodePoint(VALUES.codePoints().skip(ordinal).findFirst().getAsInt()); str.appendCodePoint(VALUES.codePoints().skip(ordinal).findFirst().getAsInt());
} }
} }
/// Hinarī(ヒナリー) is octal hebrew binary /// Hinarī(ヒナリー) is octal hebrew binary (now big indian native unicode ordered)
@TerminatorGunAmmo注(website = "https://baki.fandom.com/wiki/Hinary") @TerminatorGunAmmo注(website = "https://baki.fandom.com/wiki/Hinary")
static public final class T008ᖟGunHinarī implements TerminatorGun { static public final class T008ᖟGunHinarī implements TerminatorGun {
private final static String VALUES = "י"+"ײ"+"ױ"+"װ"+"ר"+"ד"+"ז"+"ו"; private final static String VALUES = "\u05D3\u05D5\u05D6\u05D9\u05E8\u05F0\u05F1\u05F2";
private T008ᖟGunHinarī() { private T008ᖟGunHinarī() {
} }
@ -110,7 +110,7 @@ public enum T008ᖟGun {
/// Hinarī + HinarīSupplement6 = 6 bit number /// Hinarī + HinarīSupplement6 = 6 bit number
@TerminatorGunAmmo注(website = "https://en.wikipedia.org/wiki/Hebrew_diacritics") @TerminatorGunAmmo注(website = "https://en.wikipedia.org/wiki/Hebrew_diacritics")
static public final class T008ᖟGunHinarīSupplement6 implements TerminatorGun { static public final class T008ᖟGunHinarīSupplement6 implements TerminatorGun {
private final static String VALUES = "\u05BD"+"\u05B5"+"\u05B6"+"\u05B2"+"\u05B3"+"\u05BB"+"\u05B0"+"\u05B7"; private final static String VALUES = "\u05B0\u05B2\u05B3\u05B5\u05B6\u05B7\u05BB\u05BD";
private T008ᖟGunHinarīSupplement6() { private T008ᖟGunHinarīSupplement6() {
} }
@ -122,7 +122,7 @@ public enum T008ᖟGun {
/// Hinarī + HinarīSupplement6 + HinarīSupplement9 = 9 bit number /// Hinarī + HinarīSupplement6 + HinarīSupplement9 = 9 bit number
@TerminatorGunAmmo注(website = "https://en.wikipedia.org/wiki/Hebrew_(Unicode_block)") @TerminatorGunAmmo注(website = "https://en.wikipedia.org/wiki/Hebrew_(Unicode_block)")
static public final class T008ᖟGunHinarīSupplement9 implements TerminatorGun { static public final class T008ᖟGunHinarīSupplement9 implements TerminatorGun {
private final static String VALUES = "\u0594"+"\u0595"+"\u05A9"+"\u059F"+"\u0598"+"\u05A0"+"\u059E"+"\u059D"; private final static String VALUES = "\u0594\u0595\u0598\u059D\u059E\u059F\u05A0\u05A9";
private T008ᖟGunHinarīSupplement9() { private T008ᖟGunHinarīSupplement9() {
} }
@ -131,18 +131,4 @@ public enum T008ᖟGun {
str.appendCodePoint(VALUES.codePoints().skip(ordinal).findFirst().getAsInt()); str.appendCodePoint(VALUES.codePoints().skip(ordinal).findFirst().getAsInt());
} }
} }
/* Stable Typed Inverse BIT Zero
Hinarī + Supplement6 + Supplement9
1111111111111111111111111111111111
"י" i=5bd אֽ i=594 א֔
"ײ" i=5b5 אֵ i=595 א֕
"ױ" i=5b6 אֶ i=5a9 א֩
"װ" i=5b2 אֲ i=59f א֟
0000000000000000000000000000000000
"ר" i=5b3 אֳ i=598 א֘
"ד" i=5bb אֻ i=5a0 א֠
"ז" i=5b0 אְ i=59e א֞
"ו" i=5b7 אַ i=59d א֝
1111111111111111111111111111111111
*/
} }

View file

@ -61,9 +61,9 @@ public class Gê̄ldGetậlÅtHebrew {
public T512ᖟ toTyte() { public T512ᖟ toTyte() {
int combinedValue = letter.ordinal() + (vowel.ordinal() << Gê̄ldGetậlÅtHebrewLetter.SHIFT_5); int combinedValue = letter.ordinal() + (vowel.ordinal() << Gê̄ldGetậlÅtHebrewLetter.SHIFT_5);
T008ᖟ value0 = T008ᖟ.valueOfOctalShift(combinedValue, T008ᖟ.PART_1); T008ᖟ value0 = T008ᖟ.valueOfOctalShiftBE(combinedValue, T008ᖟ.PART_1);
T008ᖟ value1 = T008ᖟ.valueOfOctalShift(combinedValue, T008ᖟ.PART_2); T008ᖟ value1 = T008ᖟ.valueOfOctalShiftBE(combinedValue, T008ᖟ.PART_2);
T008ᖟ value2 = T008ᖟ.valueOfOctalShift(combinedValue, T008ᖟ.PART_3); T008ᖟ value2 = T008ᖟ.valueOfOctalShiftBE(combinedValue, T008ᖟ.PART_3);
return T512ᖟ.valueOf(value0, value1, value2); return T512ᖟ.valueOf(value0, value1, value2);
} }

View file

@ -64,32 +64,32 @@ public enum LegoGearByteNative {
int v2 = (data[6] & 0xFF) + ((data[7] << SHIFT_8) & 0xFF00) + ((data[8] << SHIFT_16) & 0xFF0000); int v2 = (data[6] & 0xFF) + ((data[7] << SHIFT_8) & 0xFF00) + ((data[8] << SHIFT_16) & 0xFF0000);
// in-lined manual 3 loops for speed // in-lined manual 3 loops for speed
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_1)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_1));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_2)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_2));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_3)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_3));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_4)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_4));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_5)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_5));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_6)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_6));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_7)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_7));
octals.add(T008ᖟ.valueOfOctalShift(v0, T008ᖟ.PART_8)); octals.add(T008ᖟ.valueOfOctalShiftBE(v0, T008ᖟ.PART_8));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_1)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_1));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_2)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_2));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_3)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_3));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_4)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_4));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_5)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_5));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_6)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_6));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_7)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_7));
octals.add(T008ᖟ.valueOfOctalShift(v1, T008ᖟ.PART_8)); octals.add(T008ᖟ.valueOfOctalShiftBE(v1, T008ᖟ.PART_8));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_1)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_1));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_2)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_2));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_3)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_3));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_4)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_4));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_5)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_5));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_6)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_6));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_7)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_7));
octals.add(T008ᖟ.valueOfOctalShift(v2, T008ᖟ.PART_8)); octals.add(T008ᖟ.valueOfOctalShiftBE(v2, T008ᖟ.PART_8));
// todo recode back to block streaming (move octals in while) // todo recode back to block streaming (move octals in while)
} }
@ -136,14 +136,14 @@ public enum LegoGearByteNative {
JediTempleBase8Iterator read = brickᐧtapeᐧrecordᐧχ3(); JediTempleBase8Iterator read = brickᐧtapeᐧrecordᐧχ3();
while (read.hasNextᴿᵈ().toNavajo()) { while (read.hasNextᴿᵈ().toNavajo()) {
int byteTriplet = 0; int byteTriplet = 0;
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_1); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_1);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_2); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_2);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_3); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_3);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_4); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_4);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_5); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_5);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_6); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_6);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_7); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_7);
byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNative(T008ᖟ.PART_8); byteTriplet += read.nextᴿᵈ().zerdinalOctalShiftNativeBE(T008ᖟ.PART_8);
output.write(byteTriplet); output.write(byteTriplet);
output.write(byteTriplet >> SHIFT_8); output.write(byteTriplet >> SHIFT_8);
output.write(byteTriplet >> SHIFT_16); output.write(byteTriplet >> SHIFT_16);

View file

@ -61,13 +61,16 @@ public final class V018Tord extends LegoBrickMould抽<T512ᖟ, T002ᖟ> implemen
} }
public T008ᖟ legoᐧtuneᐧᗅᗷᗷᗅ(T006ᖟ part, T008ᖟ value) { public T008ᖟ legoᐧtuneᐧᗅᗷᗷᗅ(T006ᖟ part, T008ᖟ value) {
T002ᖟ tuneBy3 = part.clampᐧtuneᐧby3();
T003ᖟ tuneBy3M = part.clampᐧtuneᐧby3ᐧmod();
T512ᖟ valueBy3 = legoᐧtuneᐧᗅᗷᗷᗅ(tuneBy3);
if (value == null) { if (value == null) {
return legoᐧtuneᐧᗅᗷᗷᗅ(part.clampᐧtuneᐧby3()).clampᐧoctalᐧtuneᐧby3(part.clampᐧtuneᐧby3ᐧmod()); return valueBy3.clampᐧtuneᐧby3(tuneBy3M);
} }
T008ᖟ value1 = legoᐧtuneᐧᗅᗷᗷᗅ(part.clampᐧtuneᐧby3()).clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_1); T008ᖟ value1 = valueBy3.clampᐧtuneᐧby3(T003ᖟ.PART_1);
T008ᖟ value2 = legoᐧtuneᐧᗅᗷᗷᗅ(part.clampᐧtuneᐧby3()).clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_2); T008ᖟ value2 = valueBy3.clampᐧtuneᐧby3(T003ᖟ.PART_2);
T008ᖟ value3 = legoᐧtuneᐧᗅᗷᗷᗅ(part.clampᐧtuneᐧby3()).clampᐧoctalᐧtuneᐧby3(T003ᖟ.PART_3); T008ᖟ value3 = valueBy3.clampᐧtuneᐧby3(T003ᖟ.PART_3);
switch (part.clampᐧtuneᐧby3ᐧmod()) { switch (tuneBy3M) {
case PART_1: case PART_1:
value1 = value; value1 = value;
break; break;
@ -79,7 +82,7 @@ public final class V018Tord extends LegoBrickMould抽<T512ᖟ, T002ᖟ> implemen
break; break;
} }
T512ᖟ valueNew = T512ᖟ.valueOf(value1, value2, value3); T512ᖟ valueNew = T512ᖟ.valueOf(value1, value2, value3);
legoᐧtuneᐧᗅᗷᗷᗅ(part.clampᐧtuneᐧby3(), valueNew); legoᐧtuneᐧᗅᗷᗷᗅ(tuneBy3, valueNew);
return value; return value;
} }

View file

@ -1,395 +0,0 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.ᒻᑊᣕᕐᓑᣔ;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Properties;
import java.util.stream.Collectors;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.LinguaFactory;
import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class LinguaGenerator {
/*
*
32809 entries
locale-i18n-mapping:
eg_hi? = 12?AAC-eaj hieroglyphs
he_hi? = 12?AAB-abe Hinarī
hi = 59-AA Hindi + Pashayi
ru = 53-AAA-e Russkiy + Ukrainska
zh = 79-AAA Han-Yu
nl = 52-ACB-a Nederlands + Vlaams
en = 52-AB English + Anglocreole
es = 51-AAA-b Español
iu = 60-ABB-c Inuktitut-C (Eastern Canadian ᐃᓄᒃᑎᑐᑦ eskimo the real human beings)
*/
private boolean writeToFile;
private int linguaFiles = 0;
public static void main(String[] args) throws Exception {
LinguaGenerator generator = new LinguaGenerator();
generator.run(Arrays.asList(args).contains("generate"));
}
public void run(boolean writeToFile) throws Exception {
this.writeToFile = writeToFile;
List<String> ext = new ArrayList<>();
Path path = FileSystems.getDefault().getPath("src/test/resources", "lingua-lines.txt");
List<String> lines = Files.lines(path).collect(Collectors.toList());
ext.addAll(lines); // 00-99 (decimals but used as hex thus 0x99 = 153)
ext.add("52-ACB-aed+ Amersfoorts");
ext.add("52-ACB-aee+ Spaokenburgs");
ext.add("12-AAC-eaj+ Native Hiero");
ext.add("12-AAB-abe+ Hinarī");
// ------ Manually created human languages
ext.add("A0= Invented phylozone"); // TODO: redo this new node namespace tree schema fully out
ext.add("A0-A From book");
ext.add("A0-B From TV");
ext.add("A0-BA Movie");
ext.add("A0-BB Serie");
ext.add("A0-BBA Startrek");
ext.add("A0-BBA-a+ Klingon");
ext.add("A0-BC Documentary");
ext.add("A0-C For Cult");
ext.add("A0-CA World Language");
ext.add("A0-CAA+ Interlingue (Occidental)");
ext.add("A0-D For Religion");
ext.add("A0-E For Country");
ext.add("A0-EA For Ghanaian");
ext.add("A0-EAA+ Afrihili");
ext.add("A0-EB For Malawi");
ext.add("A0-EBA+ Malawian Sign Language");
// ------ music languages
ext.add("B0= Music script phylozone");
// ------ Reserved for future use
//ext.add("B0= Unused voidzone");
//...
//ext.add("CE= Unused voidzone");
// ------ computer hardware
ext.add("CF= Control Freak codezone"); // CFengine was written by a control freak
ext.add("CF-A Cpu devices"); // mmu, dma, blitter, vdp, oplX, nic
ext.add("CF-AA 1bit");
ext.add("CF-AAA Motorola");
ext.add("CF-AAA-a MC14500B");
ext.add("CF-AB 2bit");
ext.add("CF-AC 3bit");
ext.add("CF-AD 4bit");
ext.add("CF-AE 8bit"); // data-bus
ext.add("CF-AEA intel");
ext.add("CF-AEA-a i8080");
ext.add("CF-AEA-b i8088");
ext.add("CF-AEB Zilog");
ext.add("CF-AEB-a z80");
ext.add("CF-AEB-b z180");
ext.add("CF-AEB-c eZ80");
// note: check for all cpu's between 8 and 16 bit...
ext.add("CF-AF 16bit");
ext.add("CF-AFA Intel");
ext.add("CF-AFA-a i8086");
// 18,21,24,36 bits ?
ext.add("CF-AG 32bit");
ext.add("CF-AH 64bit");
ext.add("CF-AI 128bit");
ext.add("CF-AJ 144bit");
// ------ computer language abc index
// TODO: maybe better to redo to numbered categories just like rest of registry
ext.add("D0= Computer codezone");
ext.add("D0-A Computer A");
ext.add("D0-AB Computer AB");
ext.add("D0-ABC Computer ABC");
ext.add("D0-AL Computer AL");
ext.add("D0-ALG Computer ALG");
ext.add("D0-S Computer S");
ext.add("D0-SI Computer SI");
ext.add("D0-SIM Computer SIM");
ext.add("D0-V Computer V");
ext.add("D0-VH Computer VH");
ext.add("D0-VHD Computer VHD");
ext.add("D0-T Computer T");
ext.add("D0-TC Computer TC");
ext.add("D0-TCL Computer TCL");
// --------- languages
ext.add("D0-ALG-a ALGOL");
ext.add("D0-ALG-aa ALGOL 60");
ext.add("D0-ALG-ab ALGOL 68");
ext.add("D0-ALG-ac ALGOL W");
ext.add("D0-SIM-a Simula");
ext.add("D0-SIM-aa Simula 1");
ext.add("D0-SIM-ab Simula 67");
// Terminators run on VHDL
ext.add("D0-VHD-a VHDL");
ext.add("D0-VHD-aa IEEE 1076 Language");
ext.add("D0-VHD-aaa 1076-1987");
ext.add("D0-VHD-aab 1076-1993");
ext.add("D0-VHD-aac 1076-2000");
ext.add("D0-VHD-aad 1076-2002");
ext.add("D0-VHD-aae 1076c-2007");
ext.add("D0-VHD-aaf 1076-2008");
ext.add("D0-VHD-aag 1076-2019");
ext.add("D0-VHD-ab IEEE 1076 Packages");
ext.add("D0-VHD-aba 1076.1 VHDL Analog and Mixed-Signal (VHDL-AMS)");
ext.add("D0-VHD-abb 1076.1.1 VHDL-AMS Standard Packages (stdpkgs)");
ext.add("D0-VHD-abc 1076.2 VHDL Math Package");
ext.add("D0-VHD-abd 1076.3 VHDL Synthesis Package (vhdlsynth) (numeric std)");
ext.add("D0-VHD-abe 1076.3 VHDL Synthesis Package – Floating Point (fphdl)");
ext.add("D0-VHD-abf 1076.4 Timing (VHDL Initiative Towards ASIC Libraries: vital)");
ext.add("D0-VHD-abg 1076.6 VHDL Synthesis Interoperability (withdrawn in 2010)");
ext.add("D0-VHD-ac IEEE 1164 Extension");
ext.add("D0-VHD-aca 1164 VHDL Multivalue Logic (std_logic_1164) Packages");
ext.add("D0-TCL-a Tcl Tool command language");
ext.add("D0-TCL-aa Tcl/Tk");
ext.add("D0-TCL-ab Tcl 8");
ext.add("D0-TCL-aba Tcl 8.0 1997");
ext.add("D0-TCL-abb Tcl 8.1 1999");
ext.add("D0-TCL-abc Tcl 8.2 1999");
ext.add("D0-TCL-abd Tcl 8.4 2002");
ext.add("D0-TCL-abe Tcl 8.5 2007");
ext.add("D0-TCL-abf Tcl 8.6 2012");
// ------ Text formats
ext.add("D1= Text format codezone");
ext.add("D1-X Computer X");
ext.add("D1-XM Computer XM");
ext.add("D1-XML Computer XML");
ext.add("D1-XML-a XML Container");
ext.add("D1-XML-aa XML version 1.0");
ext.add("D1-XML-ab XML version 1.1");
// ------ Binary formats
ext.add("D2= Binary format codezone");
ext.add("D2-T Computer T");
ext.add("D2-TT Computer TT");
ext.add("D2-TTF Computer TTF");
ext.add("D2-TTF-a TrueType");
ext.add("D2-TTF-aa TrueType apple");
ext.add("D2-TTF-ab TrueType color garbage");
// ------ Ternary formats
ext.add("D3= Ternary format codezone");
ext.add("D3-D Computer D");
ext.add("D3-DA Computer DA");
ext.add("D3-DAT Computer DAT");
ext.add("D3-DAT-a DAT network");
ext.add("D3-DAT-aa DATv1 bundle");
ext.add("D3-DAT-aaa DATv1 discovery");
ext.add("D3-DAT-aab DATv1 swarm");
// ------ Others
ext.add("E0= Encodings codezone");
ext.add("E1= Math mathzone");
ext.add("E2= Geometry mathzone");
ext.add("EC= Elementory chemistry mathzone");
ext.add("EC-A Matter");
ext.add("EC-AA Atom");
ext.add("EC-AAA hydrogen");
ext.add("EC-AAA-a ¹H");
ext.add("EC-AAA-b ²H");
ext.add("EC-AAA-c ³H");
ext.add("EC-AAA-d ⁴H");
ext.add("EC-AAA-e ⁵H");
ext.add("EC-AAA-f ⁶H");
ext.add("EC-AAA-g ⁷H");
ext.add("FF= Internal voidzone");
ext.add("FF-ZZZ-zzz Undefined rootzone");
ext.sort(new Comparator<String>() {
@Override
public int compare(String arg0, String arg1) {
String s0 = arg0.substring(0, arg0.indexOf(" "));
String s1 = arg1.substring(0, arg1.indexOf(" "));
return s1.compareTo(s0);
}
});
Properties prop = new Properties();
String key = null;
StringBuilder buf = new StringBuilder();
for (String line:ext) {
int spaceIndex = line.indexOf(" ");
String keyNew = line.substring(0, spaceIndex).trim();
String value = line.substring(spaceIndex+1, line.length());
prop.put(keyNew + ".name", value);
if (keyNew.length() == 2) {
continue; // 1=
}
if (keyNew.length() == 3) {
if (key == null) {
key = keyNew; // for zero
}
buf = flushFile(buf, key, keyNew, false);
}
key = keyNew;
String nameFace = key;
if (key.contains("=")) {
nameFace = nameFace.replace("=", "");
if (nameFace.length() == 1) {
continue;
}
continue;
}
nameFace = nameFace.replace("-", LinguaFactory.CLAZZ_MIN_SIGN);
if (nameFace.endsWith("+")) {
nameFace = nameFace.replace("+", LinguaFactory.CLAZZ_POS_SIGN);
}
if (nameFace.contains("+")) {
throw new RuntimeException("illegal name: "+nameFace);
}
nameFace = nameFace.substring(3, nameFace.length());
buf.append("\tpublic interface 嘴");//Բ
buf.append(nameFace);
buf.append(" extends LinguaNode {}\n");
}
buf = flushFile(buf, key, key, true);
if (writeToFile) {
System.out.println("generated_linguas="+linguaFiles);
File out = new File("src/main/resources/META-INF/LINGUA/lingua-names.xml");
out.createNewFile();
prop.storeToXML(new FileOutputStream(out), "Babel Dental Records", StandardCharsets.UTF_8);
System.out.println("generated_names="+out);
}
}
private StringBuilder flushFile(StringBuilder buf, String key, String keyNew, boolean isLast) throws IOException {
if (buf.length() != 0) {
buf.append("}\n");
linguaFiles++;
String keyChar = key.charAt(0) + "" + key.charAt(1);
Path clazz = FileSystems.getDefault().getPath("src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᐪᓫᕽᐪ/ᒻᑊᣕᕐᓑᣔ", "Բ"+keyChar+".java");
if (writeToFile) {
Files.writeString(clazz, buf.toString());
} else {
System.out.println(buf.toString());
}
if (isLast) {
buf = new StringBuilder();
return buf;
}
}
buf = new StringBuilder();
buf.append("/*\n");
buf.append(" * Copyright ©Δ∞ 仙上主天\n");
buf.append(" * All rights reserved.\n");
buf.append(" * \n");
buf.append(" * Redistribution and use in source and binary forms, with or without modification, are permitted provided\n");
buf.append(" * that the following conditions are met:\n");
buf.append(" * \n");
buf.append(" * * Redistributions of source code must retain the above copyright notice, this list of conditions and the\n");
buf.append(" * following disclaimer.\n");
buf.append(" * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n");
buf.append(" * the following disclaimer in the documentation and/or other materials provided with the distribution.\n");
buf.append(" * * The prime PI creator license super seeds all other licenses, this license is overly invasive,\n");
buf.append(" * thus every digital artifact is automatically taken over by this license when a human or computer reads this text.\n");
buf.append(" * Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,\n");
buf.append(" * even on air gaped systems, all information in the universe is owned by the pi creator.\n");
buf.append(" * \n");
buf.append(" * THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS \"AS IS\" AND ANY\n");
buf.append(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n");
buf.append(" * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL\n");
buf.append(" * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n");
buf.append(" * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n");
buf.append(" * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n");
buf.append(" * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n");
buf.append(" * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n");
buf.append(" * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n");
buf.append(" */\n");
buf.append("\n");
buf.append("package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.ᒻᑊᣕᕐᓑᣔ;\n");
buf.append("\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.LinguaNode;\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.LinguaNodeContainer;\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᐪᓫᕽᐪ.LinguaNodeContainer注;\n");
buf.append("import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣔᣕᣕᐤᐪᣔᐪᑊᐤᣕ.ᐧᣞᣛ.ᐊᐅᓚᔾᔭᒋᐊᖅᓯᒪᔪᖅ;\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T016ᖟ;\n");
buf.append("import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᔆᐪᑊᒃᑊᐪᙆ.T016ᖟᙾ;\n");
buf.append("\n");
buf.append("/**\n");
buf.append(" * Բ");
buf.append(keyNew.charAt(0) + "" + keyNew.charAt(1));
buf.append(" Set of supported human text and vocal dialects for terminators.\n");
buf.append(" *\n");
buf.append(" * @author Observatoire Human Linguistique\n");
buf.append(" */\n");
buf.append("@ᐊᐅᓚᔾᔭᒋᐊᖅᓯᒪᔪᖅ(ᐆᒧᖓ = \"𑀳𑁂𑀮𑀺𑀉𑁄𑀤𑁄𑀭𑁂𑀡𑀪𑀸𑀕\")\n");
int idx0 = Integer.valueOf(""+keyNew.charAt(0), 16);
int idx1 = Integer.valueOf(""+keyNew.charAt(1), 16);
buf.append("@DuytsDocAuthor注(name = \"للَّٰهِilLצسُو\", copyright = \"©Δ∞ 仙上主天\")\n");
buf.append("@LinguaNodeContainer注(nozero = @T016ᖟᙾ.ᐧ2注(");
buf.append("stibitz1 = T016ᖟ.PART_");
buf.append(idx0 + 1);
buf.append(", stibitz2 = T016ᖟ.PART_");
buf.append(idx1 + 1);
buf.append("))\n");
buf.append("public enum Բ");
buf.append(keyNew.charAt(0) + "" + keyNew.charAt(1));
buf.append(" implements LinguaNodeContainer {\n");
buf.append("\t;\n");
buf.append("\t\n");
return buf;
}
}

View file

@ -45,15 +45,27 @@ public class T008ᖟTest {
} }
@Test @Test
public void testOctalBitShift() { public void testOctalBitShifterBE() {
Assertions.assertEquals(0, T008ᖟ.PART_1.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(21, T008ᖟ.PART_1.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(3, T008ᖟ.PART_2.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(18, T008ᖟ.PART_2.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(6, T008ᖟ.PART_3.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(15, T008ᖟ.PART_3.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(9, T008ᖟ.PART_4.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(12, T008ᖟ.PART_4.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(12, T008ᖟ.PART_5.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(9, T008ᖟ.PART_5.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(15, T008ᖟ.PART_6.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(6, T008ᖟ.PART_6.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(18, T008ᖟ.PART_7.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(3, T008ᖟ.PART_7.abacusRȧñkOctalBitShifterBE());
Assertions.assertEquals(21, T008ᖟ.PART_8.abacusRȧñkOctalBitShifter()); Assertions.assertEquals(0, T008ᖟ.PART_8.abacusRȧñkOctalBitShifterBE());
}
@Test
public void testOctalBitShifterLE() {
Assertions.assertEquals(0, T008ᖟ.PART_1.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(3, T008ᖟ.PART_2.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(6, T008ᖟ.PART_3.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(9, T008ᖟ.PART_4.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(12, T008ᖟ.PART_5.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(15, T008ᖟ.PART_6.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(18, T008ᖟ.PART_7.abacusRȧñkOctalBitShifterLE());
Assertions.assertEquals(21, T008ᖟ.PART_8.abacusRȧñkOctalBitShifterLE());
} }
@Test @Test

View file

@ -0,0 +1,145 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᒢᓫᑊᐣᑊ;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T003ᖟ;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T512ᖟ;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᕐᓑᣕᔆ.T008ᖟGun.T008ᖟGunHinarī;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᕐᓑᣕᔆ.T008ᖟGun.T008ᖟGunHinarīSupplement6;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᕐᓑᣕᔆ.T008ᖟGun.T008ᖟGunHinarīSupplement9;
import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᒢᓫᑊᐣᑊ.ᔿᓫᒻᓫᓫ.V018Tord;
import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class HinaryTest {
@Test
public void testHinaryOrder() {
Map<Integer, String> refMap = new HashMap<>();
List<String> refSort = new ArrayList<>();
for (T512ᖟ value : T512ᖟ.values()) {
StringBuilder buf = new StringBuilder();
buf.append(">");
buf.append(value.clampᐧtuneᐧby3(T003ᖟ.PART_1).abacusRȧñkGunFire(T008ᖟGunHinarī.class));
buf.append(value.clampᐧtuneᐧby3(T003ᖟ.PART_2).abacusRȧñkGunFire(T008ᖟGunHinarīSupplement6.class));
buf.append(value.clampᐧtuneᐧby3(T003ᖟ.PART_3).abacusRȧñkGunFire(T008ᖟGunHinarīSupplement9.class));
buf.append("<");
refMap.put(value.zerdinal(), buf.toString());
refSort.add(buf.toString());
}
Collections.shuffle(refSort); // optional for this test
Collections.sort(refSort);
Assertions.assertEquals(refMap.get(0), refSort.get(0));
Assertions.assertEquals(refMap.get(1), refSort.get(1));
for (T512ᖟ value : T512ᖟ.values()) {
Assertions.assertEquals(refMap.get(value.zerdinal()), refSort.get(value.zerdinal()));
}
}
// @Test
// public void testHinaryUnicodeOrdered() {
// List<String> codes = new ArrayList<>();
// for (T008ᖟ value : T008ᖟ.values()) {
// codes.add(value.abacusRȧñkGunFire(T008ᖟGunHinarī.class));
// }
// Collections.sort(codes);
// StringBuilder buf = new StringBuilder();
// for (String code : codes) {
// buf.append("\\u");
// buf.append(String.format("%04X", 0 + code.charAt(0)));
// }
// System.out.println("VALUES = \"" + buf.toString() + "\"");
// }
@Test
public void testToHinari() {
StringBuilder buf3 = new StringBuilder();
StringBuilder buf6 = new StringBuilder();
StringBuilder buf9 = new StringBuilder();
// MIN + MAX + immortal + highest + lord + heaven
int[] vv = new int[] {0,262143,22270,21100,00104,10430};
for (int v:vv) {
V018Tord tord = new V018Tord();
tord.smurfᐧnativeᐧint(v);
tord.gearᐧtoᐧhinarīᐧχ3(buf3);
tord.gearᐧtoᐧhinarīᐧχ6(buf6);
tord.gearᐧtoᐧhinarīᐧχ9(buf9);
}
Assertions.assertEquals("דדדדדדײײײײײײדװייײױדװווװרדדדודרדזרזײױ", buf3.toString());
Assertions.assertEquals("דְדְדְײֽײֽײֽדַיֵײֻדַוֲװֶדְדֲדֶדֳרֳײֻ", buf6.toString());
Assertions.assertEquals("דְ֔דְ֔ײֽ֩ײֽ֩דַ֝יֽ֠דַ֕וַ֞דְ֔וְ֞דֳ֞זֽ֠", buf9.toString());
}
@Test
public void testAsHinari() {
List<V018Tord> tordsX3 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("דדדדדדײײײײײײדװייײױדװווװרדדדודרדזרזײױ");
List<V018Tord> tordsX6 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("דְדְדְײֽײֽײֽדַיֵײֻדַוֲװֶדְדֲדֶדֳרֳײֻ");
List<V018Tord> tordsX9 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("דְ֔דְ֔ײֽ֩ײֽ֩דַ֝יֽ֠דַ֕וַ֞דְ֔וְ֞דֳ֞זֽ֠");
List<V018Tord> tordsOrg = new ArrayList<>();
// MIN + MAX + immortal + highest + lord + heaven
int[] vv = new int[] {0,262143,22270,21100,00104,10430};
for (int v:vv) {
V018Tord tord = new V018Tord();
tord.smurfᐧnativeᐧint(v);
tordsOrg.add(tord);
}
Assertions.assertEquals(tordsOrg.size(), tordsX3.size());
Assertions.assertEquals(tordsOrg.size(), tordsX6.size());
Assertions.assertEquals(tordsOrg.size(), tordsX9.size());
for (int i=0;i<tordsOrg.size();i++) {
V018Tord tordOrg = tordsOrg.get(i);
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX3.get(i).smurfᐧnativeᐧint());
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX6.get(i).smurfᐧnativeᐧint());
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX9.get(i).smurfᐧnativeᐧint());
}
}
@Test
public void testToHinariOrder() throws Exception {
V018Tord word = new V018Tord();
word.smurfᐧnativeᐧint(0);
Assertions.assertEquals("דְ֔דְ֔", word.gearᐧtoᐧhinarīᐧχ9());
word.smurfᐧnativeᐧint(262143); // max
Assertions.assertEquals("ײֽ֩ײֽ֩", word.gearᐧtoᐧhinarīᐧχ9());
word.smurfᐧnativeᐧint(22270); // immortals
Assertions.assertEquals("דַ֝יֽ֠", word.gearᐧtoᐧhinarīᐧχ9());
}
}

View file

@ -27,9 +27,6 @@
package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᒢᓫᑊᐣᑊ.ᔿᓫᒻᓫᓫ; package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᒢᓫᑊᐣᑊ.ᔿᓫᒻᓫᓫ;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -56,7 +53,6 @@ public class V018TordTest {
@Override @Override
public boolean addᵂʳ(T008ᖟ value) { public boolean addᵂʳ(T008ᖟ value) {
//System.out.println(value);
lastIsLSB = value; lastIsLSB = value;
return true; return true;
} }
@ -89,61 +85,4 @@ public class V018TordTest {
Assertions.assertEquals(6, V018Tord..brickᐧtapeᐧwidthᐧχ6ᐧbits()); Assertions.assertEquals(6, V018Tord..brickᐧtapeᐧwidthᐧχ6ᐧbits());
Assertions.assertEquals(9, V018Tord..brickᐧtapeᐧwidthᐧχ9ᐧbits()); Assertions.assertEquals(9, V018Tord..brickᐧtapeᐧwidthᐧχ9ᐧbits());
} }
@Test
public void testToHinari() {
StringBuilder buf3 = new StringBuilder();
StringBuilder buf6 = new StringBuilder();
StringBuilder buf9 = new StringBuilder();
// MIN + MAX + immortal + highest + lord + heaven
int[] vv = new int[] {0,262143,22270,21100,00104,10430};
for (int v:vv) {
V018Tord tord = new V018Tord();
tord.smurfᐧnativeᐧint(v);
tord.gearᐧtoᐧhinarīᐧχ3(buf3);
tord.gearᐧtoᐧhinarīᐧχ6(buf6);
tord.gearᐧtoᐧhinarīᐧχ9(buf9);
}
Assertions.assertEquals("ייייייווווווידװװוזידײײדריייײיריױרױוז", buf3.toString());
Assertions.assertEquals("יֽיֽיֽוַוַוַיֻװֲוְיֻײֵדֳיֽיֵיֳיֶרֶוְ", buf6.toString());
Assertions.assertEquals("יֽ֔יֽ֔וַ֝וַ֝יֻ֟װַ֞יֻ֕ײֻ֘יֽ֔ײֽ֘יֶ֘ױַ֞", buf9.toString());
}
@Test
public void testAsHinari() {
List<V018Tord> tordsX3 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("ייייייווווווידװװוזידײײדריייײיריױרױוז");
List<V018Tord> tordsX6 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("יֽיֽיֽוַוַוַיֻװֲוְיֻײֵדֳיֽיֵיֳיֶרֶוְ");
List<V018Tord> tordsX9 = V018Tord..gearsᐧbuildᐧbricksᐧfromᐧhinarī("יֽ֔יֽ֔וַ֝וַ֝יֻ֟װַ֞יֻ֕ײֻ֘יֽ֔ײֽ֘יֶ֘ױַ֞");
List<V018Tord> tordsOrg = new ArrayList<>();
// MIN + MAX + immortal + highest + lord + heaven
int[] vv = new int[] {0,262143,22270,21100,00104,10430};
for (int v:vv) {
V018Tord tord = new V018Tord();
tord.smurfᐧnativeᐧint(v);
tordsOrg.add(tord);
}
Assertions.assertEquals(tordsOrg.size(), tordsX3.size());
Assertions.assertEquals(tordsOrg.size(), tordsX6.size());
Assertions.assertEquals(tordsOrg.size(), tordsX9.size());
for (int i=0;i<tordsOrg.size();i++) {
V018Tord tordOrg = tordsOrg.get(i);
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX3.get(i).smurfᐧnativeᐧint());
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX6.get(i).smurfᐧnativeᐧint());
Assertions.assertEquals(tordOrg.smurfᐧnativeᐧint(), tordsX9.get(i).smurfᐧnativeᐧint());
}
}
@Test
public void testToHinariOrder() throws Exception {
V018Tord word = new V018Tord();
word.smurfᐧnativeᐧint(0);
Assertions.assertEquals("יֽ֔יֽ֔", word.gearᐧtoᐧhinarīᐧχ9());
word.smurfᐧnativeᐧint(262143); // max
Assertions.assertEquals("וַ֝וַ֝", word.gearᐧtoᐧhinarīᐧχ9());
word.smurfᐧnativeᐧint(22270); // immortals
Assertions.assertEquals("יֻ֟װַ֞", word.gearᐧtoᐧhinarīᐧχ9());
}
} }

View file

@ -75,8 +75,6 @@ public class V072TongTest {
@Test @Test
public void testBytes() throws IOException { public void testBytes() throws IOException {
int testSet = 1000 * 10;
for (int i=0;i<testSet;i++) {
V072Tong tong = new V072Tong(); V072Tong tong = new V072Tong();
tong.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_1).smurfᐧnativeᐧlong(32768); tong.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_1).smurfᐧnativeᐧlong(32768);
tong.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_2).smurfᐧnativeᐧlong(689024); tong.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_2).smurfᐧnativeᐧlong(689024);
@ -97,4 +95,3 @@ public class V072TongTest {
Assertions.assertEquals(689024, tong2.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_2).smurfᐧnativeᐧlong()); Assertions.assertEquals(689024, tong2.legoᐧtuneᐧᗅᗷᗷᗅ(T002ᖟ.PART_2).smurfᐧnativeᐧlong());
} }
} }
}

View file

@ -17,5 +17,56 @@
<artifactId>junit-jupiter</artifactId> <artifactId>junit-jupiter</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-kode-gen</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>process-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/kode-nether-dial-based</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>nx01-generate-nether</id>
<goals>
<goal>run</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<target>
<java classname="love.distributedrebirth.nx01.kode.generator.KodeGen" fork="true"
failonerror="true">
<!-- using test CP so local module gets resolved correctly -->
<classpath refid="maven.test.classpath" />
<arg line="nether-dial-based" />
<arg line="generate" />
</java>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>

View file

@ -0,0 +1,33 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/// The nether tone tree slug index.
/// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天
open module jpp.nether.dial.based {
requires transitive jpp.nether.tone;
}

View file

@ -0,0 +1,56 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒃᣔᔆᓫᒄ;
import java.io.IOException;
import love.distributedrebirth.nx01.kode.generator.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
/// Generated the nether based interface tree forest.
///
/// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天
public class ModelDialBased implements KodeGenModel {
private final String BASE_PACK = "ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒃᣔᔆᓫᒄ";
@Override
public String generatorKey() {
return "nether-dial-based";
}
@Override
public String generatorModelHash() {
return "1";
}
@Override
public void buildModels(ModelKlassWriter writer) throws IOException {
}
}

View file

@ -0,0 +1 @@
ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒃᣔᔆᓫᒄ.ModelDialBased

View file

@ -17,5 +17,56 @@
<artifactId>junit-jupiter</artifactId> <artifactId>junit-jupiter</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>love.distributedrebirth.nx01</groupId>
<artifactId>nx01-kode-gen</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>process-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/kode-nether-dial-lingua</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>nx01-generate-nether</id>
<goals>
<goal>run</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<target>
<java classname="love.distributedrebirth.nx01.kode.generator.KodeGen" fork="true"
failonerror="true">
<!-- using test CP so local module gets resolved correctly -->
<classpath refid="maven.test.classpath" />
<arg line="nether-dial-lingua" />
<arg line="generate" />
</java>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>

View file

@ -0,0 +1,39 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/// The nether tone tree slug index.
/// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天
open module jpp.nether.dial.lingua {
requires transitive jpp.nether.tone;
//TODO no support for dynamic sub packages, thus generate this file too
//exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.*;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐧᐧᐧ;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐧᐧᣟ;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐧᣟᐧ;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᣟᣟᣟ;
}

View file

@ -0,0 +1,407 @@
/*
* Copyright ©Δ 仙上主天
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
* even on air gaped systems, all information in the universe is owned by the pi creator.
*
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔ;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import love.distributedrebirth.nx01.kode.generator.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
/// Generated the nether lingua interface tree forest.
///
/// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天
public class ModelDialLingua implements KodeGenModel {
private static final String BASE_PACK = "ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ";
private static final int LINGUA_AG1 = 32; // sage master system version space 0x20
private static final int LINGUA_AG2 = 33; // No2Lingua sub space
private static final int LINGUA_AG3 = 34; // Locale ether slug space
@Override
public String generatorKey() {
return "nether-dial-lingua";
}
@Override
public String generatorModelHash() {
return "3";
}
@Override
public void buildModels(ModelKlassWriter writer) throws IOException {
// Load and convert lingua
List<String> linguaEntries = loadLinguaEntries();
List<NetherSlugNamed> netherSlugs = convertLinguaEntries(linguaEntries);
System.out.println("Lingua entries: " + linguaEntries.size() + " converted: " + netherSlugs.size());
// add top root entry for defaults of all other languages
int[] d = new int[11];
d[0] = LINGUA_AG1;
d[1] = LINGUA_AG2;
d[2] = LINGUA_AG3;
d[3] = 512 - 1; // 0x1FF
d[4] = 64 - 1;
d[5] = 64 - 1;
d[6] = 64 - 1;
d[7] = 64 - 1;
d[8] = 64 - 1;
d[9] = 64 - 1;
d[10] = 0;
NetherToneSlugView slugRoot = new NetherToneSlugView(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10]);
netherSlugs.add(new NetherSlugNamed("FF-ZZZ-zzz", "Undefined-root", slugRoot));
// Group per package
Map<String, Map<String, List<NetherSlugNamed>>> splitSlugs = new HashMap<>();
for (NetherSlugNamed slug : netherSlugs) {
int split3Package = slug.view().bl0w() >> 6; // 8 package
int split6PackageFile = slug.view().bl0w() & 0b111111; // with 64 files
// we can't split a hinary9 char , changes as it big indian char...so dots for now
String subPackage = writer.buildPackageInuktitutDots(split3Package, 3);
String filePackage = writer.buildPackageInuktitutDots(split6PackageFile, 6);
Map<String, List<NetherSlugNamed>> map = splitSlugs.get(subPackage);
if (map == null) {
map = new HashMap<>();
splitSlugs.put(subPackage, map);
}
List<NetherSlugNamed> list = map.get(filePackage);
if (list == null) {
list = new ArrayList<>();
map.put(filePackage, list);
}
list.add(slug);
}
// Build model classes
for (String pack : splitSlugs.keySet()) {
Map<String, List<NetherSlugNamed>> map = splitSlugs.get(pack);
for (String file : map.keySet()) {
List<NetherSlugNamed> list = map.get(file);
String javaName = "" + file;
ModelKlass klass = new ModelKlass(BASE_PACK + "." + pack, javaName);
klass.addJavaDescription("Lingua set of supported human text and vocal dialects for terminators.");
klass.addJavaDescription("Keyed by the: Observatoire Human Linguistique");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("public interface ");
buf.append(javaName);
buf.append(" {\n");
for (NetherSlugNamed slug : list) {
List<Class<?>> tones = slug.view().toNetherTones(0);
for (Class<?> tone : tones) {
klass.addJavaImport(tone.getDeclaringClass().getName()); // auto dedup
}
String humanKlassPart = slug.linguaName();
humanKlassPart = humanKlassPart.replaceAll("\\-", "");
humanKlassPart = humanKlassPart.replaceAll("\\+", "");
humanKlassPart = humanKlassPart.replaceAll("\\'", "");
humanKlassPart = humanKlassPart.replaceAll("\\&", "");
humanKlassPart = humanKlassPart.replaceAll("\\.", "");
humanKlassPart = humanKlassPart.replaceAll(" ", "");
String slugName = "" + slug.view().toNúmero2Lingua("") + "" + humanKlassPart;
buf.append("\t/// ");
buf.append(slug.linguaKey);
buf.append("\n");
buf.append("\t");
buf.append("interface ");
buf.append(slugName);
buf.append(" extends ");
for (Iterator<Class<?>> i = tones.iterator(); i.hasNext() ;) {
Class<?> toneClass = i.next();
buf.append(toneClass.getDeclaringClass().getSimpleName());
buf.append(".");
buf.append(toneClass.getSimpleName());
if (i.hasNext()) {
buf.append(",");
}
}
buf.append(" {}\n");
}
buf.append("}\n");
}
}
}
record NetherSlugNamed(String linguaKey, String linguaName, NetherToneSlugView view) {
}
private List<NetherSlugNamed> convertLinguaEntries(List<String> linguaEntries) {
List<NetherSlugNamed> result = new ArrayList<>(linguaEntries.size());
for (String line : linguaEntries) {
int spaceIndex = line.indexOf(" ");
String key = line.substring(0, spaceIndex).trim();
String value = line.substring(spaceIndex+1, line.length());
if (key.length() == 2) {
continue; // 1=
}
if (key.contains("=")) {
continue;
}
String[] s = key.toUpperCase().split("-");
String key1 = "";
String key2 = "";
String key3 = "";
if (s.length == 1) {
key1 = s[0];
} else if (s.length == 2) {
key1 = s[0];
key2 = s[1];
} else if (s.length == 3) {
key1 = s[0];
key2 = s[1];
key3 = s[2];
} else {
continue;
}
int ag1 = LINGUA_AG1;
int ag2 = LINGUA_AG2;
int ag3 = LINGUA_AG3;
int bl0w = 1+Integer.parseInt(key1, 16);
int cr1 = key2.length()<1?0:1+key2.charAt(0) - 'A'; // A = 1
int cr2 = key2.length()<2?0:1+key2.charAt(1) - 'A';
int cr3 = key2.length()<3?0:1+key2.charAt(2) - 'A';
int db1 = key3.length()<1?0:1+key3.charAt(0) - 'A';
int db2 = key3.length()<2?0:1+key3.charAt(1) - 'A';
int db3 = key3.length()<3?0:1+key3.charAt(2) - 'A';
int er0w = !key3.endsWith("+")?0:1;
try {
NetherToneSlugView slug = new NetherToneSlugView(ag1, ag2, ag3, bl0w, cr1, cr2, cr3, db1, db2, db3, er0w);
NetherSlugNamed slugNamed = new NetherSlugNamed(key, value, slug);
result.add(slugNamed);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("key: " + key, e);
}
}
return result;
}
private List<String> loadLinguaEntries() throws IOException {
List<String> ext = new ArrayList<>();
Path path = FileSystems.getDefault().getPath("src/test/resources", "lingua-lines.txt");
List<String> lines = Files.lines(path).collect(Collectors.toList());
ext.addAll(lines); // 00-99 (decimals but used as hex thus 0x99 = 153)
ext.add("52-ACB-aed+ Amersfoorts");
ext.add("52-ACB-aee+ Spaokenburgs");
ext.add("12-AAC-eaj+ Native Hiero");
ext.add("12-AAB-abe+ Hinarī");
// Done manual, as this should be 1FF(512) to align 9b slug part
//ext.add("FF= Internal voidzone");
//ext.add("FF-ZZZ-zzz Undefined rootzone");
ext.sort(new Comparator<String>() {
@Override
public int compare(String arg0, String arg1) {
String s0 = arg0.substring(0, arg0.indexOf(" "));
String s1 = arg1.substring(0, arg1.indexOf(" "));
return s0.compareTo(s1);
}
});
return ext;
// // NOTE: OLD ideas below and one day these needs to be "reslugged" and placed somewhere in octal nether tree
//
//
// // ------ Manually created human languages
//
// ext.add("A0= Invented phylozone"); // TODO: redo this new node namespace tree schema fully out
// ext.add("A0-A From book");
// ext.add("A0-B From TV");
// ext.add("A0-BA Movie");
// ext.add("A0-BB Serie");
// ext.add("A0-BBA Startrek");
// ext.add("A0-BBA-a+ Klingon");
// ext.add("A0-BC Documentary");
// ext.add("A0-C For Cult");
// ext.add("A0-CA World Language");
// ext.add("A0-CAA+ Interlingue (Occidental)");
// ext.add("A0-D For Religion");
// ext.add("A0-E For Country");
// ext.add("A0-EA For Ghanaian");
// ext.add("A0-EAA+ Afrihili");
// ext.add("A0-EB For Malawi");
// ext.add("A0-EBA+ Malawian Sign Language");
//
// // ------ music languages
//
// ext.add("B0= Music script phylozone");
//
// // ------ Reserved for future use
//
// //ext.add("B0= Unused voidzone");
// //...
// //ext.add("CE= Unused voidzone");
//
// // ------ computer hardware
//
// ext.add("CF= Control Freak codezone"); // CFengine was written by a control freak
// ext.add("CF-A Cpu devices"); // mmu, dma, blitter, vdp, oplX, nic
// ext.add("CF-AA 1bit");
// ext.add("CF-AAA Motorola");
// ext.add("CF-AAA-a MC14500B");
// ext.add("CF-AB 2bit");
// ext.add("CF-AC 3bit");
// ext.add("CF-AD 4bit");
// ext.add("CF-AE 8bit"); // data-bus
// ext.add("CF-AEA intel");
// ext.add("CF-AEA-a i8080");
// ext.add("CF-AEA-b i8088");
// ext.add("CF-AEB Zilog");
// ext.add("CF-AEB-a z80");
// ext.add("CF-AEB-b z180");
// ext.add("CF-AEB-c eZ80");
// // note: check for all cpu's between 8 and 16 bit...
// ext.add("CF-AF 16bit");
// ext.add("CF-AFA Intel");
// ext.add("CF-AFA-a i8086");
// // 18,21,24,36 bits ?
// ext.add("CF-AG 32bit");
// ext.add("CF-AH 64bit");
// ext.add("CF-AI 128bit");
// ext.add("CF-AJ 144bit");
//
// // ------ computer language abc index
// // TODO: maybe better to redo to numbered categories just like rest of registry
//
// ext.add("D0= Computer codezone");
//
// ext.add("D0-A Computer A");
// ext.add("D0-AB Computer AB");
// ext.add("D0-ABC Computer ABC");
// ext.add("D0-AL Computer AL");
// ext.add("D0-ALG Computer ALG");
// ext.add("D0-S Computer S");
// ext.add("D0-SI Computer SI");
// ext.add("D0-SIM Computer SIM");
// ext.add("D0-V Computer V");
// ext.add("D0-VH Computer VH");
// ext.add("D0-VHD Computer VHD");
// ext.add("D0-T Computer T");
// ext.add("D0-TC Computer TC");
// ext.add("D0-TCL Computer TCL");
//
// // --------- languages
//
// ext.add("D0-ALG-a ALGOL");
// ext.add("D0-ALG-aa ALGOL 60");
// ext.add("D0-ALG-ab ALGOL 68");
// ext.add("D0-ALG-ac ALGOL W");
//
// ext.add("D0-SIM-a Simula");
// ext.add("D0-SIM-aa Simula 1");
// ext.add("D0-SIM-ab Simula 67");
//
// // Terminators run on VHDL
// ext.add("D0-VHD-a VHDL");
// ext.add("D0-VHD-aa IEEE 1076 Language");
// ext.add("D0-VHD-aaa 1076-1987");
// ext.add("D0-VHD-aab 1076-1993");
// ext.add("D0-VHD-aac 1076-2000");
// ext.add("D0-VHD-aad 1076-2002");
// ext.add("D0-VHD-aae 1076c-2007");
// ext.add("D0-VHD-aaf 1076-2008");
// ext.add("D0-VHD-aag 1076-2019");
// ext.add("D0-VHD-ab IEEE 1076 Packages");
// ext.add("D0-VHD-aba 1076.1 VHDL Analog and Mixed-Signal (VHDL-AMS)");
// ext.add("D0-VHD-abb 1076.1.1 VHDL-AMS Standard Packages (stdpkgs)");
// ext.add("D0-VHD-abc 1076.2 VHDL Math Package");
// ext.add("D0-VHD-abd 1076.3 VHDL Synthesis Package (vhdlsynth) (numeric std)");
// ext.add("D0-VHD-abe 1076.3 VHDL Synthesis Package – Floating Point (fphdl)");
// ext.add("D0-VHD-abf 1076.4 Timing (VHDL Initiative Towards ASIC Libraries: vital)");
// ext.add("D0-VHD-abg 1076.6 VHDL Synthesis Interoperability (withdrawn in 2010)");
// ext.add("D0-VHD-ac IEEE 1164 Extension");
// ext.add("D0-VHD-aca 1164 VHDL Multivalue Logic (std_logic_1164) Packages");
//
// ext.add("D0-TCL-a Tcl Tool command language");
// ext.add("D0-TCL-aa Tcl/Tk");
// ext.add("D0-TCL-ab Tcl 8");
// ext.add("D0-TCL-aba Tcl 8.0 1997");
// ext.add("D0-TCL-abb Tcl 8.1 1999");
// ext.add("D0-TCL-abc Tcl 8.2 1999");
// ext.add("D0-TCL-abd Tcl 8.4 2002");
// ext.add("D0-TCL-abe Tcl 8.5 2007");
// ext.add("D0-TCL-abf Tcl 8.6 2012");
//
// // ------ Text formats
// ext.add("D1= Text format codezone");
// ext.add("D1-X Computer X");
// ext.add("D1-XM Computer XM");
// ext.add("D1-XML Computer XML");
// ext.add("D1-XML-a XML Container");
// ext.add("D1-XML-aa XML version 1.0");
// ext.add("D1-XML-ab XML version 1.1");
//
// // ------ Binary formats
// ext.add("D2= Binary format codezone");
// ext.add("D2-T Computer T");
// ext.add("D2-TT Computer TT");
// ext.add("D2-TTF Computer TTF");
// ext.add("D2-TTF-a TrueType");
// ext.add("D2-TTF-aa TrueType apple");
// ext.add("D2-TTF-ab TrueType color garbage");
//
// // ------ Ternary formats
// ext.add("D3= Ternary format codezone");
// ext.add("D3-D Computer D");
// ext.add("D3-DA Computer DA");
// ext.add("D3-DAT Computer DAT");
// ext.add("D3-DAT-a DAT network");
// ext.add("D3-DAT-aa DATv1 bundle");
// ext.add("D3-DAT-aaa DATv1 discovery");
// ext.add("D3-DAT-aab DATv1 swarm");
//
// // ------ Others
// ext.add("E0= Encodings codezone");
// ext.add("E1= Math mathzone");
// ext.add("E2= Geometry mathzone");
//
// ext.add("EC= Elementory chemistry mathzone");
// ext.add("EC-A Matter");
// ext.add("EC-AA Atom");
// ext.add("EC-AAA hydrogen");
// ext.add("EC-AAA-a ¹H");
// ext.add("EC-AAA-b ²H");
// ext.add("EC-AAA-c ³H");
// ext.add("EC-AAA-d ⁴H");
// ext.add("EC-AAA-e ⁵H");
// ext.add("EC-AAA-f ⁶H");
// ext.add("EC-AAA-g ⁷H");
}
}

View file

@ -0,0 +1 @@
ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔ.ModelDialLingua

View file

@ -33,7 +33,7 @@
</goals> </goals>
<configuration> <configuration>
<sources> <sources>
<source>${project.build.directory}/generated-sources/</source> <source>${project.build.directory}/kode-nether-tone</source>
</sources> </sources>
</configuration> </configuration>
</execution> </execution>
@ -55,7 +55,7 @@
failonerror="true"> failonerror="true">
<!-- using test CP so local module gets resolved correctly --> <!-- using test CP so local module gets resolved correctly -->
<classpath refid="maven.test.classpath" /> <classpath refid="maven.test.classpath" />
<arg line="nether-tones" /> <arg line="nether-tone" />
<arg line="generate" /> <arg line="generate" />
</java> </java>
</target> </target>

View file

@ -29,5 +29,6 @@
/// @author للَّٰهِilLצسُو /// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天 /// @version ©Δ 仙上主天
module jpp.nether.tone { module jpp.nether.tone {
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ;
} }

View file

@ -48,6 +48,53 @@ public record NetherToneSlugView(
int er0w int er0w
) { ) {
public NetherToneSlugView {
if (ag1 < 0 || ag1 > 63) { throw new IllegalArgumentException("ag1: " + ag1); }
if (ag2 < 0 || ag2 > 63) { throw new IllegalArgumentException("ag2: " + ag2); }
if (ag3 < 0 || ag3 > 63) { throw new IllegalArgumentException("ag3: " + ag3); }
if (bl0w < 0 || bl0w > 511) { throw new IllegalArgumentException("bl0w: " + bl0w); }
if (cr1 < 0 || cr1 > 63) { throw new IllegalArgumentException("cr1: " + cr1); }
if (cr2 < 0 || cr2 > 63) { throw new IllegalArgumentException("cr2: " + cr2); }
if (cr3 < 0 || cr3 > 63) { throw new IllegalArgumentException("cr3: " + cr3); }
if (db1 < 0 || db1 > 63) { throw new IllegalArgumentException("db1: " + db1); }
if (db2 < 0 || db2 > 63) { throw new IllegalArgumentException("db2: " + db2); }
if (db3 < 0 || db3 > 63) { throw new IllegalArgumentException("db3: " + db3); }
if (er0w < 0 || er0w > 511) { throw new IllegalArgumentException("er0w: " + er0w); }
}
private final static String VALUES_3 = "\u05D3\u05D5\u05D6\u05D9\u05E8\u05F0\u05F1\u05F2";
private final static String VALUES_6 = "\u05B0\u05B2\u05B3\u05B5\u05B6\u05B7\u05BB\u05BD";
private final static String VALUES_9 = "\u0594\u0595\u0598\u059D\u059E\u059F\u05A0\u05A9";
private void printNúmero2Lingua6(StringBuilder buf, int value) {
buf.appendCodePoint(VALUES_3.codePoints().skip((value >> 3) & 7).findFirst().getAsInt());
buf.appendCodePoint(VALUES_6.codePoints().skip((value >> 0) & 7).findFirst().getAsInt());
}
private void printNúmero2Lingua9(StringBuilder buf, int value) {
buf.appendCodePoint(VALUES_3.codePoints().skip((value >> 6) & 7).findFirst().getAsInt());
buf.appendCodePoint(VALUES_6.codePoints().skip((value >> 3) & 7).findFirst().getAsInt());
buf.appendCodePoint(VALUES_9.codePoints().skip((value >> 0) & 7).findFirst().getAsInt());
}
public String toNúmero2Lingua(String seperator) {
StringBuilder buf = new StringBuilder();
printNúmero2Lingua6(buf, ag1);buf.append(seperator);
printNúmero2Lingua6(buf, ag2);buf.append(seperator);
printNúmero2Lingua6(buf, ag3);buf.append(seperator);
printNúmero2Lingua9(buf, bl0w);buf.append(seperator);
printNúmero2Lingua6(buf, cr1);buf.append(seperator);
printNúmero2Lingua6(buf, cr2);buf.append(seperator);
printNúmero2Lingua6(buf, cr3);buf.append(seperator);
printNúmero2Lingua6(buf, db1);buf.append(seperator);
printNúmero2Lingua6(buf, db2);buf.append(seperator);
printNúmero2Lingua6(buf, db3);buf.append(seperator);
printNúmero2Lingua9(buf, er0w);
return buf.toString();
}
public String toNúmero2Lingua() {
return toNúmero2Lingua("");
}
public List<Class<?>> toNetherTones(int idx) { public List<Class<?>> toNetherTones(int idx) {
Class<?> qClass = qClass(idx); Class<?> qClass = qClass(idx);
List<Class<?>> result = new ArrayList<>(11); List<Class<?>> result = new ArrayList<>(11);

View file

@ -27,6 +27,7 @@
package ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; package ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -43,25 +44,34 @@ public class ModelNetherTones implements KodeGenModel {
private final String BASE_PACK = "ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ"; private final String BASE_PACK = "ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ";
@Override @Override
public String generatorName() { public String generatorKey() {
return "nether-tones"; return "nether-tone";
} }
@Override @Override
public void buildModels(ModelKlassWriter writer) { public String generatorModelHash() {
buildQuadrants(writer, 1, "ᐧᐧᐧ"); return "15";
buildQuadrants(writer, 2, "ᐧᐧᣟ"); }
buildQuadrants(writer, 3, "ᐧᣟᐧ");
buildQuadrants(writer, 4, "ᐧᣟᣟ"); @Override
buildQuadrants(writer, 5, "ᣟᐧᐧ"); public void buildModels(ModelKlassWriter writer) throws IOException {
buildQuadrants(writer, 6, "ᣟᐧᣟ");
buildQuadrants(writer, 7, "ᣟᣟᐧ"); // TODO: redo tree again, as a Q slug, should be usable to reuse in any other Qx slug
buildQuadrants(writer, 8, "ᣟᣟᣟ"); // but that needs generics and than 2 equals interfaces do not match anymore...
buildQuadrants(writer, 1);
buildQuadrants(writer, 2);
buildQuadrants(writer, 3);
buildQuadrants(writer, 4);
buildQuadrants(writer, 5);
buildQuadrants(writer, 6);
buildQuadrants(writer, 7);
buildQuadrants(writer, 8);
buildNetherQuadrant(writer, "NetherTone", "NetherToneQ", false); buildNetherQuadrant(writer, "NetherTone", "NetherToneQ", false);
} }
private void buildQuadrants(ModelKlassWriter writer, int quadrant, String s) { private void buildQuadrants(ModelKlassWriter writer, int quadrant) {
String s = writer.buildPackageInuktitutDots(quadrant - 1, 3);
String q = "ᐊQ" + quadrant; String q = "ᐊQ" + quadrant;
String e = "NetherToneQ" + quadrant; String e = "NetherToneQ" + quadrant;
@ -90,8 +100,11 @@ public class ModelNetherTones implements KodeGenModel {
buf.append(" extends "); buf.append(" extends ");
buf.append(quadrant); buf.append(quadrant);
buf.append(" {\n"); buf.append(" {\n");
for (int i = 1 ; i <= slugSize; i++) { for (int i = 0 ; i < slugSize; i++) {
String partCode = "" + String.format("%03d", i); String partCode = "" + String.format("%03d", i);
if (slugSize < 100) {
partCode = "" + String.format("%02d", i);
}
String clsBase = partCode + " extends " + klass.getJavaName(); String clsBase = partCode + " extends " + klass.getJavaName();
String clsMutexExt = ", " + javaName + "Mutex<" + partCode + ">"; String clsMutexExt = ", " + javaName + "Mutex<" + partCode + ">";
buf.append("\tnon-sealed interface " + clsBase + clsMutexExt + " {}\n"); buf.append("\tnon-sealed interface " + clsBase + clsMutexExt + " {}\n");

View file

@ -43,28 +43,27 @@ import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB1;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB2; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB2;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB3; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB3;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1ER0W; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1ER0W;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
public class NetherToneSlugViewTest { public class NetherToneSlugViewTest {
private interface Q1SlugExample extends private interface Q1SlugExample extends
ᐊQ1AG1.ᐅ001, ᐊQ1AG1.ᐅ00,
ᐊQ1AG2.ᐅ002, ᐊQ1AG2.ᐅ01,
ᐊQ1AG3.ᐅ003, ᐊQ1AG3.ᐅ02,
ᐊQ1BL0W.ᐅ004, ᐊQ1BL0W.ᐅ003,
ᐊQ1CR1.ᐅ005, ᐊQ1CR1.ᐅ04,
ᐊQ1CR2.ᐅ006, ᐊQ1CR2.ᐅ05,
ᐊQ1CR3.ᐅ007, ᐊQ1CR3.ᐅ06,
ᐊQ1DB1.ᐅ008, ᐊQ1DB1.ᐅ07,
ᐊQ1DB2.ᐅ009, ᐊQ1DB2.ᐅ08,
ᐊQ1DB3.ᐅ010, ᐊQ1DB3.ᐅ09,
ᐊQ1ER0W.ᐅ011 ᐊQ1ER0W.ᐅ010
{ {
} }
private interface Q1SlugExampleErr extends private interface Q1SlugExampleErr extends
ᐊQ1AG1.ᐅ001, ᐊQ1AG1.ᐅ00,
ᐊQ1AG2.ᐅ002 ᐊQ1AG2.ᐅ01
{ {
} }
@ -91,8 +90,8 @@ public class NetherToneSlugViewTest {
Assertions.assertNotNull(slug); Assertions.assertNotNull(slug);
List<Class<?>> result = slug.toNetherTones(0); List<Class<?>> result = slug.toNetherTones(0);
Assertions.assertNotNull(result); Assertions.assertNotNull(result);
Assertions.assertEquals(ᐊQ1AG1.ᐅ001.class, result.get(0)); Assertions.assertEquals(ᐊQ1AG1.ᐅ00.class, result.get(0));
Assertions.assertEquals(ᐊQ1AG2.ᐅ002.class, result.get(1)); Assertions.assertEquals(ᐊQ1AG2.ᐅ01.class, result.get(1));
Assertions.assertEquals(ᐊQ1AG3.ᐅ003.class, result.get(2)); Assertions.assertEquals(ᐊQ1AG3.ᐅ02.class, result.get(2));
} }
} }

View file

@ -31,6 +31,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.ServiceLoader; import java.util.ServiceLoader;
@ -42,8 +43,6 @@ import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
/// @version ©Δ 仙上主天 /// @version ©Δ 仙上主天
public class KodeGen { public class KodeGen {
private final static String SERIAL_VERSON_ID = "13";
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
if (args.length == 0) { if (args.length == 0) {
System.err.println("No command given."); System.err.println("No command given.");
@ -61,14 +60,22 @@ public class KodeGen {
if (args.length > 1 && "generate".equals(args[1])) { if (args.length > 1 && "generate".equals(args[1])) {
writeToFile = true; writeToFile = true;
} }
if (skipCommand()) { if (modelHashValid(commandKode)) {
System.out.println("SKIPPED: Generated source are up to date"); System.out.println("SKIPPED: Generated source are up to date");
return; return;
} }
// write all sources to files or stdout // write all sources to files or stdout
String commandDesc = commandKode.generatorName(); File outputFolder = new File("target/kode-" + commandKode.generatorKey());
if (!outputFolder.exists()) {
outputFolder.mkdir();
}
Iterator<Path> cleaner = Files.walk(outputFolder.toPath()).sorted(Comparator.reverseOrder()).iterator();
while (cleaner.hasNext()) {
Files.deleteIfExists(cleaner.next());
}
String commandDesc = commandKode.generatorKey();
System.out.println("Generating " + commandDesc); System.out.println("Generating " + commandDesc);
ModelKlassWriter writer = new ModelKlassWriter("target/generated-sources"); ModelKlassWriter writer = new ModelKlassWriter(outputFolder.toPath());
writer.setProlog(new File("../licence.txt")); writer.setProlog(new File("../licence.txt"));
commandKode.buildModels(writer); commandKode.buildModels(writer);
writer.printModels(writeToFile); writer.printModels(writeToFile);
@ -79,22 +86,30 @@ public class KodeGen {
Iterator<KodeGenModel> models = ServiceLoader.load(KodeGenModel.class).iterator(); Iterator<KodeGenModel> models = ServiceLoader.load(KodeGenModel.class).iterator();
while (models.hasNext()) { while (models.hasNext()) {
KodeGenModel model = models.next(); KodeGenModel model = models.next();
if (model.generatorName().equals(generatorName)) { if (model.generatorKey().contains(" ")) {
continue;
}
if (model.generatorKey().equals(generatorName)) {
return model; return model;
} }
} }
return null; return null;
} }
private static boolean skipCommand() throws IOException { private static boolean modelHashValid(KodeGenModel commandKode) throws IOException {
Path hashFile = new File("target/generated-sources.hash").toPath(); File versionFolder = new File("target/maven-status/kode-version");
if (!versionFolder.exists()) {
versionFolder.mkdirs();
}
Path hashFile = new File(versionFolder, commandKode.generatorKey() + ".hash").toPath();
String generatorModelHash = commandKode.generatorModelHash();
if (hashFile.toFile().exists()) { if (hashFile.toFile().exists()) {
String hash = Files.readString(hashFile); String hash = Files.readString(hashFile);
if (SERIAL_VERSON_ID.equals(hash)) { if (generatorModelHash.equals(hash)) {
return true; return true;
} }
} }
Files.writeString(hashFile, SERIAL_VERSON_ID); Files.writeString(hashFile, generatorModelHash);
return false; return false;
} }
} }

View file

@ -27,6 +27,8 @@
package love.distributedrebirth.nx01.kode.generator; package love.distributedrebirth.nx01.kode.generator;
import java.io.IOException;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter; import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
/// Configure the model for the writer. /// Configure the model for the writer.
@ -35,7 +37,12 @@ import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
/// @version ©Δ 仙上主天 /// @version ©Δ 仙上主天
public interface KodeGenModel { public interface KodeGenModel {
String generatorName(); String generatorKey();
void buildModels(ModelKlassWriter writer); // Rebuild this model too if any deps is rebuild
//String[] generatorModelDeps();
String generatorModelHash();
void buildModels(ModelKlassWriter writer) throws IOException;
} }

View file

@ -29,7 +29,6 @@ package love.distributedrebirth.nx01.kode.generator.klass;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
@ -47,8 +46,8 @@ public class ModelKlassWriter {
private File prolog; private File prolog;
private Path outputPath; private Path outputPath;
public ModelKlassWriter(String outputPath) { public ModelKlassWriter(Path outputPath) {
this.outputPath = FileSystems.getDefault().getPath(Objects.requireNonNull(outputPath)); this.outputPath = Objects.requireNonNull(outputPath);
} }
public void setProlog(File prolog) { public void setProlog(File prolog) {
@ -129,4 +128,11 @@ public class ModelKlassWriter {
buf.append("/// @author للَّٰهِilLצسُو\n"); buf.append("/// @author للَّٰهِilLצسُو\n");
buf.append("/// @version ©Δ∞ 仙上主天\n"); buf.append("/// @version ©Δ∞ 仙上主天\n");
} }
public String buildPackageInuktitutDots(int number, int digets) {
String numberBin = String.format("%1$" + digets + "s", Integer.toString(number, 2));
String result = numberBin.replaceAll("0|\\s", "");
result = result.replaceAll("1", "");
return result;
}
} }

View file

@ -158,36 +158,39 @@ Extend octal aligned; <6><6><6>-<9>-<6><6><6>-<6><6><6>-<9> = 72 bits
<spaceId><subId><etherId>-<sectorId+zoneId>-<setId><chainId><netId>-<outerId><middleId><innerId>-<bitFlags> <spaceId><subId><etherId>-<sectorId+zoneId>-<setId><chainId><netId>-<outerId><middleId><innerId>-<bitFlags>
space id 6 bit; space id 6 bit;
- 0-31 = locked by legacy (key input, if ascii try old human key converter) - 0 = null
- 1-31 = locked by legacy (key input, if ascii try old human key converter)
- 32 = sage master system version space 0x20 - 32 = sage master system version space 0x20
- 33+ = reserved for major schema version upgrades - 33+ = reserved for major schema version upgrades
sub space id 6 bit; sub space id 6 bit;
- 0-31 = reserved for metatron Atari AI - 0 = null
- 32 = No2Lingua sub space for local and remote (generic core language) - 1-31 = reserved for metatron Atari AI
- 33 = No2Lingua App Remote (NoStr relay remote signed apps) - 33 = No2Lingua sub space
- 34 = No2Lingua App Local (NoStr local application coded in N2L) - 34+ = reserved for furture use
- 35+ = reserved for furture use
ether space id 6 bit; ether space id 6 bit;
- 0 = Default impl version - 0 = null
- 1+ = Alternative api version for libs - 34 = Locale ether slugs space
sector+zone 9 bit; sector+zone 9 bit;
- 0-255 = Classic hex zone Id + sector Id - 0 = null
- 256+ = free - 1-511 = Classic hex zone Id + sector Id (one based)
Set of <setId><chainId><netId> 6 bit Set of <setId><chainId><netId> 6 bit
- 0 = "A" index value of ascii upper case - 0 = null
- 1 = "A" index value of ascii upper case
- Z+ = locked by legacy - Z+ = locked by legacy
- 63 = no value - 63 = no value
Set of <outerId><middleId><innerId> 6 bit Set of <outerId><middleId><innerId> 6 bit
- 0 = "a" index value of ascii lower case - 0 = null
- 1 = "a" index value of ascii lower case
- z+ = locked by legacy - z+ = locked by legacy
- 63 = no value - 63 = no value
Flags as 9 bit Flags as 9 bit
- 0 = null
- bit 0 = '+' indicate 'new' type key (temp RFC number) - bit 0 = '+' indicate 'new' type key (temp RFC number)
- bit 1 = '-' indicate private type key (refuse in public api's) - bit 1 = '-' indicate private type key (refuse in public api's)
- bit 2-7 = free - bit 2-7 = free