JPP: Split lehmer endian and added space guide navigation dial slugs
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 1m23s

This commit is contained in:
Willem Cazander 2026-02-16 23:58:30 +01:00
parent 0e0b107094
commit fc90187bcf
10 changed files with 304 additions and 153 deletions

View file

@ -35,6 +35,8 @@ import java.util.List;
import love.distributedrebirth.nx01.kode.generator.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᒻᣔᣕᒄ.KaasLandGenerated注;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
/// Generated the nether dial interface tree forest.
@ -52,12 +54,14 @@ public class ModelDial implements KodeGenModel {
@Override
public String generatorModelHash() {
return "5";
return "6";
}
@Override
public void buildModels(ModelKlassWriter writer) throws IOException {
generateLehmer(writer);
List<NetherSlugLehmer> models = generateLehmerModels();
printLehmerSequences(writer, models);
printLehmerEndian(writer, models);
//generateUnicode
//generateFC18
@ -72,20 +76,159 @@ public class ModelDial implements KodeGenModel {
buildModuleInfo(writer);
}
private static final int LEHMER_AG1 = 32; // sage master system version space 0x20
private static final int LEHMER_AG2 = 33; // No2Lingua sub space
private static final int LEHMER_AG3_16 = 16; // Up to size 16
private static final int LEHMER_AG3_17 = 17; // size 17
private static final int LEHMER_AG3_18 = 18; // size 18
private void buildModuleInfo(ModelKlassWriter writer) {
ModelKlass klass = new ModelKlass("", "module-info");
klass.addJavaDescription("The nether dial packs tree slug index.");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("module ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ {\n");
buf.append("\trequires transitive ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;\n");
//buf.append("\trequires transitive ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ;\n");
buf.append("\t\n");
buf.append("\texports " + BASE_PACK + ".ᒻᓫᑋᔿᓫᣗ;\n");
buf.append("}\n");
}
private void generateLehmer(ModelKlassWriter writer) {
private void printLehmerSequences(ModelKlassWriter writer, List<NetherSlugLehmer> models) {
for (NetherSlugLehmer model : models) {
if (model.sequences.length == 0) {
continue;
}
String sizeStr = String.format("%02d", model.size());
String javaName = "DialCodeLehmer" + sizeStr;
ModelKlass klass = new ModelKlass(BASE_PACK + ".ᒻᓫᑋᔿᓫᣗ" , javaName);
List<Class<?>> tones = model.identityEndianLittle().toNetherTones();
klass.addJavaImports(tones.subList(3, tones.size()));
klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lehmer16");
klass.addJavaDescription("Lehmer code unique sequence index number sets.");
klass.setJavaDocAuthor("Lehmer");
klass.addJavaAnno(KaasLandGenerated注.class, "generator = \"model-dial\"");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("public sealed interface ");
buf.append(javaName);
buf.append(" extends SpaceGuideSageNX01Lehmer16, ");
for (Iterator<Class<?>> i = tones.subList(3, 4).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");
for (NetherToneSlugView sequnceIndex : model.sequences()) {
String slugName = "" + sequnceIndex.toNúmero2Lingua() + "";
buf.append("\tnon-sealed interface ");
buf.append(slugName);
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
tones =sequnceIndex.toNetherTones();
for (Iterator<Class<?>> i = tones.subList(4, tones.size()).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("\t}\n");
}
buf.append("}\n");
}
}
private void printLehmerEndian(ModelKlassWriter writer, List<NetherSlugLehmer> models) {
String javaName = "DialCodeLehmerEndian";
ModelKlass klass = new ModelKlass(BASE_PACK + ".ᒻᓫᑋᔿᓫᣗ" , javaName);
klass.addJavaDescription("Lehmer code Endian dial codes.");
klass.setJavaDocAuthor("Lehmer");
klass.addJavaAnno(KaasLandGenerated注.class, "generator = \"model-dial\"");
List<Class<?>> tonesImport = models.get(0).identityEndianLittle().toNetherTones();
klass.addJavaImports(tonesImport.subList(3, tonesImport.size()));
klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lehmer16");
klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lehmer17");
klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lehmer18");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("public sealed interface ");
buf.append(javaName);
//buf.append(" extends ");
buf.append(" {\n");
for (NetherSlugLehmer model : models) {
String sizeStr = String.format("%02d", model.size());
buf.append("\tnon-sealed interface ");
buf.append("LehmerTone" + sizeStr + "LE");
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
if (model.size <= 16) {
buf.append("SpaceGuideSageNX01Lehmer16, ");
} else if (model.size == 17) {
buf.append("SpaceGuideSageNX01Lehmer17, ");
} else if (model.size == 18) {
buf.append("SpaceGuideSageNX01Lehmer18, ");
}
List<Class<?>> tonesLE = model.identityEndianLittle().toNetherTones();
for (Iterator<Class<?>> i = tonesLE.subList(3, tonesLE.size()).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("\t}\n");
buf.append("\tnon-sealed interface ");
buf.append("LehmerTone" + sizeStr + "BE");
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
if (model.size <= 16) {
buf.append("SpaceGuideSageNX01Lehmer16, ");
} else if (model.size == 17) {
buf.append("SpaceGuideSageNX01Lehmer17, ");
} else if (model.size == 18) {
buf.append("SpaceGuideSageNX01Lehmer18, ");
}
List<Class<?>> tonesBE = model.identityEndianBig().toNetherTones();
for (Iterator<Class<?>> i = tonesBE.subList(3, tonesBE.size()).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("\t}\n");
}
buf.append("}\n");
}
record NetherSlugLehmer(int size, NetherToneSlugView identityEndianLittle, NetherToneSlugView identityEndianBig, NetherToneSlugView...sequences) {
}
private List<NetherSlugLehmer> generateLehmerModels() {
NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lehmer16.class, false);
List<NetherSlugLehmer> models = new ArrayList<>();
for (int i = 2; i <= 18; i++) {
int[] rankFirst = calculateLehmerFromRank(0, i);
long amount = calculateTotalPermutations(rankFirst);
int ag1 = LEHMER_AG1;
int ag2 = LEHMER_AG2;
int ag3 = LEHMER_AG3_16;
int ag1 = slugSpaceGuide.ag1();
int ag2 = slugSpaceGuide.ag2();
int ag3 = slugSpaceGuide.ag3();
int bl0w = i - 1;
int cr1 = 0;
int cr2 = 0;
@ -107,11 +250,10 @@ public class ModelDial implements KodeGenModel {
bl0w = 0;
}
if (i == 17) {
ag3 = LEHMER_AG3_17;
ag3 = slugSpaceGuide.ag3() + 1;
} else if (i == 18) {
ag3 = LEHMER_AG3_18;
ag3 = slugSpaceGuide.ag3() + 2;
}
db3 = 0;
er0w = 0;
NetherToneSlugView slugLE = new NetherToneSlugView(ag1, ag2, ag3, bl0w, cr1, cr2, cr3, db1, db2, db3, er0w);
@ -130,116 +272,7 @@ public class ModelDial implements KodeGenModel {
NetherSlugLehmer slugLehmer = new NetherSlugLehmer(i, slugLE, slugBE, indexSequenceSelectors.toArray(new NetherToneSlugView[] {}));
models.add(slugLehmer);
}
// print models
for (NetherSlugLehmer model : models) {
String sizeStr = String.format("%02d", model.SIZE());
String javaName = "DialCodeLehmer" + sizeStr;
ModelKlass klass = new ModelKlass(BASE_PACK + ".ᒻᓫᑋᔿᓫᣗ" , javaName);
List<Class<?>> tones = model.IDLE().toNetherTones();
for (Class<?> tone : tones) {
klass.addJavaImport(tone.getDeclaringClass().getName());
}
klass.addJavaDescription("Lehmer code unique sequence index number sets.");
klass.setJavaDocAuthor("Lehmer");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("public sealed interface ");
buf.append(javaName);
buf.append(" extends ");
for (Iterator<Class<?>> i = tones.subList(0, 3).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("\tnon-sealed interface ");
buf.append("IdentityLittleEndian");
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
tones = model.IDLE().toNetherTones();
for (Iterator<Class<?>> i = tones.subList(3, tones.size()).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("\t}\n");
buf.append("\tnon-sealed interface ");
buf.append("IdentityBigEndian");
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
tones = model.IDBE().toNetherTones();
for (Iterator<Class<?>> i = tones.subList(3, tones.size()).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("\t}\n");
for (NetherToneSlugView sequnceIndex : model.SLUGS()) {
String slugName = "" + sequnceIndex.toNúmero2Lingua() + "";
buf.append("\tnon-sealed interface ");
buf.append(slugName);
buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName);
buf.append(", ");
tones =sequnceIndex.toNetherTones();
for (Iterator<Class<?>> i = tones.subList(3, tones.size()).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("\t}\n");
}
buf.append("}\n");
}
}
record NetherSlugLehmer(int SIZE, NetherToneSlugView IDLE, NetherToneSlugView IDBE, NetherToneSlugView...SLUGS) {
}
private void buildModuleInfo(ModelKlassWriter writer) {
ModelKlass klass = new ModelKlass("", "module-info");
klass.addJavaDescription("The nether dial packs tree slug index.");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("module ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ {\n");
buf.append("\trequires transitive ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;\n");
buf.append("\t\n");
buf.append("\texports " + BASE_PACK + ".ᒻᓫᑋᔿᓫᣗ;\n");
// for (String pack : splitSlugs.keySet()) {
// buf.append("\texports ");
// buf.append(BASE_PACK + "." + pack);
// buf.append(";\n");
// }
buf.append("}\n");
return models;
}
private long factorial(int n) {

View file

@ -41,6 +41,8 @@ import java.util.Map;
import love.distributedrebirth.nx01.kode.generator.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᒻᣔᣕᒄ.KaasLandGenerated注;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
/// Generated the nether lingua interface tree forest.
@ -50,9 +52,6 @@ import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
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() {
@ -61,7 +60,7 @@ public class ModelDialLingua implements KodeGenModel {
@Override
public String generatorModelHash() {
return "6";
return "7";
}
@Override
@ -79,10 +78,11 @@ public class ModelDialLingua implements KodeGenModel {
System.out.println("Lingua entries: " + linguaEntries.size() + " converted: " + netherSlugs.size());
// add top root entry for defaults of all other languages
NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lingua.class, false);
int[] d = new int[11];
d[0] = LINGUA_AG1;
d[1] = LINGUA_AG2;
d[2] = LINGUA_AG3;
d[0] = slugSpaceGuide.ag1();
d[1] = slugSpaceGuide.ag2();
d[2] = slugSpaceGuide.ag3();
d[3] = 512 - 1; // 0x1FF
d[4] = 64 - 1;
d[5] = 64 - 1;
@ -133,17 +133,17 @@ public class ModelDialLingua implements KodeGenModel {
NetherSlugNamed slugTpl = list.get(0);
List<Class<?>> tonesTpl = slugTpl.view().toNetherTones();
ModelKlass klass = new ModelKlass(BASE_PACK + "." + pack, javaName);
for (Class<?> tone : tonesTpl) {
klass.addJavaImport(tone.getDeclaringClass().getName());
}
klass.addJavaImports(tonesTpl.subList(3, tonesTpl.size()));
klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lingua");
klass.addJavaDescription("Lingua set of supported human text and vocal dialects for terminators.");
klass.setJavaDocAuthor("Observatoire Human Linguistique");
klass.addJavaAnno(KaasLandGenerated注.class, "generator = \"model-dial\"");
writer.addModelKlass(klass);
StringBuilder buf = klass.getBody();
buf.append("public sealed interface ");
buf.append(javaName);
buf.append(" extends ");
for (Iterator<Class<?>> i = tonesTpl.subList(0, 4).iterator(); i.hasNext() ;) {
buf.append(" extends SpaceGuideSageNX01Lingua, ");
for (Iterator<Class<?>> i = tonesTpl.subList(3, 4).iterator(); i.hasNext() ;) {
Class<?> toneClass = i.next();
buf.append(toneClass.getDeclaringClass().getSimpleName());
buf.append(".");
@ -212,6 +212,7 @@ public class ModelDialLingua implements KodeGenModel {
}
private List<NetherSlugNamed> convertLinguaEntries(List<String> linguaEntries) {
NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lingua.class, false);
List<NetherSlugNamed> result = new ArrayList<>(linguaEntries.size());
for (String line : linguaEntries) {
int spaceIndex = line.indexOf(" ");
@ -239,9 +240,9 @@ public class ModelDialLingua implements KodeGenModel {
} else {
continue;
}
int ag1 = LINGUA_AG1;
int ag2 = LINGUA_AG2;
int ag3 = LINGUA_AG3;
int ag1 = slugSpaceGuide.ag1();
int ag2 = slugSpaceGuide.ag2();
int ag3 = slugSpaceGuide.ag3();
int bl0w = 1+Integer.parseInt(key1);
int cr1 = key2.length()<1?0:1+key2.charAt(0) - 'A'; // A = 1
int cr2 = key2.length()<2?0:1+key2.charAt(1) - 'A';