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

@ -29,7 +29,7 @@ package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐪᣔᒻᑊᑉ;
import java.util.Arrays; import java.util.Arrays;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
/// Builds and formatted and localized text message. /// Builds and formatted and localized text message.
/// ///
@ -45,7 +45,7 @@ public final class KaasTalkTextLocalizer {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
static public String formatToned(final Class<? extends NetherTone> linguaId, final Class<? extends KaasTalkText> babelMsg, final Object...msgArgs) { static public String formatToned(final Class<? extends NetherToneGuide.SpaceGuideSageNX01Lingua> linguaId, final Class<? extends KaasTalkText> babelMsg, final Object...msgArgs) {
if (babelMsg == null) { if (babelMsg == null) {
throw new NullPointerException("No kaas talk message class given."); throw new NullPointerException("No kaas talk message class given.");
} }
@ -56,7 +56,7 @@ public final class KaasTalkTextLocalizer {
return v; return v;
} }
}).toArray(); }).toArray();
Class<? extends NetherTone> putinLinguaId = linguaId; // The put in lingua id Class<? extends NetherToneGuide.SpaceGuideSageNX01Lingua> putinLinguaId = linguaId; // The put in lingua id
if (putinLinguaId == null) { if (putinLinguaId == null) {
putinLinguaId = 嘴ᗮᙿᗮ.guess(); putinLinguaId = 嘴ᗮᙿᗮ.guess();
} }

View file

@ -34,7 +34,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
/// Define kaas talk text. /// Define kaas talk text.
/// ///
@ -46,7 +46,7 @@ import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone;
@Target({ElementType.TYPE}) @Target({ElementType.TYPE})
public @interface KaasTalkText注 { public @interface KaasTalkText注 {
Class<? extends NetherTone> (); Class<? extends NetherToneGuide.SpaceGuideSageNX01Lingua> ();
String txt(); String txt();
} }

View file

@ -2,7 +2,7 @@ package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐪᣔᒻᑊᑉ;
import java.util.Locale; import java.util.Locale;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᐧᐧᣟ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᐧᐧᣟᣟᐧᣟ; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᐧᐧᣟ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᐧᐧᣟᣟᐧᣟ;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᐧ; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᐧ;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᣟ; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᣟ;
@ -43,7 +43,7 @@ public enum 嘴ᗮᙿᗮ {
// temp until data is in No2Lingua // temp until data is in No2Lingua
public static Class<? extends NetherTone> guess() { public static Class<? extends NetherToneGuide.SpaceGuideSageNX01Lingua> guess() {
Locale locale = Locale.getDefault(); Locale locale = Locale.getDefault();
if ("NL".equals(locale.getCountry())) { if ("NL".equals(locale.getCountry())) {
return Dutch.class; return Dutch.class;

View file

@ -30,6 +30,8 @@
/// @author للَّٰهِilLצسُو /// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天 /// @version ©Δ 仙上主天
module ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ { module ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ {
requires transitive ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ;
exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ; exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ;
} }

View file

@ -0,0 +1,65 @@
/*
* 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 ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG1;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG2;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG3;
/// Nether tone guide to help kaas bubble travel.
///
/// @author للَّٰهِilLצسُو
/// @version ©Δ 仙上主天
public sealed interface NetherToneGuide {
// AG1
// - 0 = reserved null
// - 1-31 = locked by legacy
// - 32 = sage master system version space 0x20
// - 33+ = reserved for major schema version upgrades
//
// AG2
// - 0 = reserved null
// - 1-32 = reserved for metatron Atari AI
// - 33 = NX01 sub space
// - 34+ = for other use
//
// AG3 (NX01 ONLY)
// - 0 = reserved null
// - 16 = lehmer up to 16
// - 17 = lehmer size 17
// - 18 = lehmer size 18
// - 34 = lingua
non-sealed interface SpaceGuideSageNX01Lehmer16 extends NetherToneGuide, ᐊᐪᔆAG1.ᐅ32, ᐊᐪᔆAG2.ᐅ33, ᐊᐪᔆAG3.ᐅ16 {}
non-sealed interface SpaceGuideSageNX01Lehmer17 extends NetherToneGuide, ᐊᐪᔆAG1.ᐅ32, ᐊᐪᔆAG2.ᐅ33, ᐊᐪᔆAG3.ᐅ17 {}
non-sealed interface SpaceGuideSageNX01Lehmer18 extends NetherToneGuide, ᐊᐪᔆAG1.ᐅ32, ᐊᐪᔆAG2.ᐅ33, ᐊᐪᔆAG3.ᐅ18 {}
non-sealed interface SpaceGuideSageNX01Lingua extends NetherToneGuide, ᐊᐪᔆAG1.ᐅ32, ᐊᐪᔆAG2.ᐅ33, ᐊᐪᔆAG3.ᐅ34 {}
}

View file

@ -28,6 +28,9 @@
package ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; package ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
/// Nether tone slug view record. /// Nether tone slug view record.
@ -94,8 +97,8 @@ public record NetherToneSlugView(
public List<Class<?>> toNetherTones() { public List<Class<?>> toNetherTones() {
List<Class<?>> result = new ArrayList<>(11); List<Class<?>> result = new ArrayList<>(11);
for (int i = 0; i < 11; i++) { for (int i = 0; i < 11; i++) {
Class<?> subClass = NetherToneScript.class.getPermittedSubclasses()[i]; Class<?> subClass = sortedPermittedSubclasses(NetherToneScript.class).get(i);
Class<?>[] valueClasses = subClass.getPermittedSubclasses(); Class<?>[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {});
result.add(switch (i) { result.add(switch (i) {
case 0: yield valueClasses[ag1]; case 0: yield valueClasses[ag1];
case 1: yield valueClasses[ag2]; case 1: yield valueClasses[ag2];
@ -113,12 +116,31 @@ public record NetherToneSlugView(
return result; return result;
} }
static NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q) { static private List<Class<?>> sortedPermittedSubclasses(Class<?> c) {
Class<?>[] valueArray = c.getPermittedSubclasses();
if (valueArray == null) {
return Collections.emptyList();
}
List<Class<?>> valueList = new ArrayList<>(Arrays.asList(valueArray));
valueList.sort(new Comparator<Class<?>>() {
@Override
public int compare(Class<?> o1, Class<?> o2) {
return o1.getSimpleName().compareTo(o2.getSimpleName());
}
});
return valueList;
}
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q) {
return ofQSluq(q, true);
}
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q, boolean failIncomplete) {
int[] d = new int[11]; int[] d = new int[11];
int dataIdx = 0; int dataIdx = 0;
for (Class<?> subClass : NetherToneScript.class.getPermittedSubclasses()) { for (Class<?> subClass : sortedPermittedSubclasses(NetherToneScript.class)) {
boolean hasValue = false; boolean hasValue = false;
Class<?>[] valueClasses = subClass.getPermittedSubclasses(); Class<?>[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {});
for (int i = 0; i < valueClasses.length; i++) { for (int i = 0; i < valueClasses.length; i++) {
Class<?> valueClass = valueClasses[i]; Class<?> valueClass = valueClasses[i];
if (valueClass.isAssignableFrom(q)) { if (valueClass.isAssignableFrom(q)) {
@ -128,14 +150,14 @@ public record NetherToneSlugView(
break; break;
} }
} }
if (!hasValue) { if (failIncomplete && !hasValue) {
throw new IllegalArgumentException("missing Q value in nether space of: " + subClass); throw new IllegalArgumentException("missing Q value in nether space of: " + subClass);
} }
} }
return new NetherToneSlugView(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10]); return new NetherToneSlugView(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10]);
} }
static boolean slugPresent(Class<? extends NetherToneScript> q) { static public boolean slugPresent(Class<? extends NetherToneScript> q) {
for (Class<?> subClass : NetherToneScript.class.getPermittedSubclasses()) { for (Class<?> subClass : NetherToneScript.class.getPermittedSubclasses()) {
boolean hasValue = false; boolean hasValue = false;
for (Class<?> valueClass : subClass.getPermittedSubclasses()) { for (Class<?> valueClass : subClass.getPermittedSubclasses()) {

View file

@ -35,6 +35,8 @@ import java.util.List;
import love.distributedrebirth.nx01.kode.generator.KodeGenModel; import love.distributedrebirth.nx01.kode.generator.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass; import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter; import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᒻᣔᣕᒄ.KaasLandGenerated注;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
/// Generated the nether dial interface tree forest. /// Generated the nether dial interface tree forest.
@ -52,12 +54,14 @@ public class ModelDial implements KodeGenModel {
@Override @Override
public String generatorModelHash() { public String generatorModelHash() {
return "5"; return "6";
} }
@Override @Override
public void buildModels(ModelKlassWriter writer) throws IOException { public void buildModels(ModelKlassWriter writer) throws IOException {
generateLehmer(writer); List<NetherSlugLehmer> models = generateLehmerModels();
printLehmerSequences(writer, models);
printLehmerEndian(writer, models);
//generateUnicode //generateUnicode
//generateFC18 //generateFC18
@ -72,20 +76,159 @@ public class ModelDial implements KodeGenModel {
buildModuleInfo(writer); buildModuleInfo(writer);
} }
private static final int LEHMER_AG1 = 32; // sage master system version space 0x20 private void buildModuleInfo(ModelKlassWriter writer) {
private static final int LEHMER_AG2 = 33; // No2Lingua sub space ModelKlass klass = new ModelKlass("", "module-info");
private static final int LEHMER_AG3_16 = 16; // Up to size 16 klass.addJavaDescription("The nether dial packs tree slug index.");
private static final int LEHMER_AG3_17 = 17; // size 17 writer.addModelKlass(klass);
private static final int LEHMER_AG3_18 = 18; // size 18 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<>(); List<NetherSlugLehmer> models = new ArrayList<>();
for (int i = 2; i <= 18; i++) { for (int i = 2; i <= 18; i++) {
int[] rankFirst = calculateLehmerFromRank(0, i); int[] rankFirst = calculateLehmerFromRank(0, i);
long amount = calculateTotalPermutations(rankFirst); long amount = calculateTotalPermutations(rankFirst);
int ag1 = LEHMER_AG1; int ag1 = slugSpaceGuide.ag1();
int ag2 = LEHMER_AG2; int ag2 = slugSpaceGuide.ag2();
int ag3 = LEHMER_AG3_16; int ag3 = slugSpaceGuide.ag3();
int bl0w = i - 1; int bl0w = i - 1;
int cr1 = 0; int cr1 = 0;
int cr2 = 0; int cr2 = 0;
@ -107,11 +250,10 @@ public class ModelDial implements KodeGenModel {
bl0w = 0; bl0w = 0;
} }
if (i == 17) { if (i == 17) {
ag3 = LEHMER_AG3_17; ag3 = slugSpaceGuide.ag3() + 1;
} else if (i == 18) { } else if (i == 18) {
ag3 = LEHMER_AG3_18; ag3 = slugSpaceGuide.ag3() + 2;
} }
db3 = 0; db3 = 0;
er0w = 0; er0w = 0;
NetherToneSlugView slugLE = new NetherToneSlugView(ag1, ag2, ag3, bl0w, cr1, cr2, cr3, db1, db2, db3, er0w); 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[] {})); NetherSlugLehmer slugLehmer = new NetherSlugLehmer(i, slugLE, slugBE, indexSequenceSelectors.toArray(new NetherToneSlugView[] {}));
models.add(slugLehmer); models.add(slugLehmer);
} }
return models;
// 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");
} }
private long factorial(int n) { 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.KodeGenModel;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass; import love.distributedrebirth.nx01.kode.generator.klass.ModelKlass;
import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter; import love.distributedrebirth.nx01.kode.generator.klass.ModelKlassWriter;
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᒻᣔᣕᒄ.KaasLandGenerated注;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide;
import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
/// Generated the nether lingua interface tree forest. /// Generated the nether lingua interface tree forest.
@ -50,9 +52,6 @@ import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneSlugView;
public class ModelDialLingua implements KodeGenModel { public class ModelDialLingua implements KodeGenModel {
private static final String BASE_PACK = "ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ"; 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 @Override
public String generatorKey() { public String generatorKey() {
@ -61,7 +60,7 @@ public class ModelDialLingua implements KodeGenModel {
@Override @Override
public String generatorModelHash() { public String generatorModelHash() {
return "6"; return "7";
} }
@Override @Override
@ -79,10 +78,11 @@ public class ModelDialLingua implements KodeGenModel {
System.out.println("Lingua entries: " + linguaEntries.size() + " converted: " + netherSlugs.size()); System.out.println("Lingua entries: " + linguaEntries.size() + " converted: " + netherSlugs.size());
// add top root entry for defaults of all other languages // add top root entry for defaults of all other languages
NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lingua.class, false);
int[] d = new int[11]; int[] d = new int[11];
d[0] = LINGUA_AG1; d[0] = slugSpaceGuide.ag1();
d[1] = LINGUA_AG2; d[1] = slugSpaceGuide.ag2();
d[2] = LINGUA_AG3; d[2] = slugSpaceGuide.ag3();
d[3] = 512 - 1; // 0x1FF d[3] = 512 - 1; // 0x1FF
d[4] = 64 - 1; d[4] = 64 - 1;
d[5] = 64 - 1; d[5] = 64 - 1;
@ -133,17 +133,17 @@ public class ModelDialLingua implements KodeGenModel {
NetherSlugNamed slugTpl = list.get(0); NetherSlugNamed slugTpl = list.get(0);
List<Class<?>> tonesTpl = slugTpl.view().toNetherTones(); List<Class<?>> tonesTpl = slugTpl.view().toNetherTones();
ModelKlass klass = new ModelKlass(BASE_PACK + "." + pack, javaName); ModelKlass klass = new ModelKlass(BASE_PACK + "." + pack, javaName);
for (Class<?> tone : tonesTpl) { klass.addJavaImports(tonesTpl.subList(3, tonesTpl.size()));
klass.addJavaImport(tone.getDeclaringClass().getName()); klass.addJavaImport(NetherToneGuide.class.getName() + ".SpaceGuideSageNX01Lingua");
}
klass.addJavaDescription("Lingua set of supported human text and vocal dialects for terminators."); klass.addJavaDescription("Lingua set of supported human text and vocal dialects for terminators.");
klass.setJavaDocAuthor("Observatoire Human Linguistique"); klass.setJavaDocAuthor("Observatoire Human Linguistique");
klass.addJavaAnno(KaasLandGenerated注.class, "generator = \"model-dial\"");
writer.addModelKlass(klass); writer.addModelKlass(klass);
StringBuilder buf = klass.getBody(); StringBuilder buf = klass.getBody();
buf.append("public sealed interface "); buf.append("public sealed interface ");
buf.append(javaName); buf.append(javaName);
buf.append(" extends "); buf.append(" extends SpaceGuideSageNX01Lingua, ");
for (Iterator<Class<?>> i = tonesTpl.subList(0, 4).iterator(); i.hasNext() ;) { for (Iterator<Class<?>> i = tonesTpl.subList(3, 4).iterator(); i.hasNext() ;) {
Class<?> toneClass = i.next(); Class<?> toneClass = i.next();
buf.append(toneClass.getDeclaringClass().getSimpleName()); buf.append(toneClass.getDeclaringClass().getSimpleName());
buf.append("."); buf.append(".");
@ -212,6 +212,7 @@ public class ModelDialLingua implements KodeGenModel {
} }
private List<NetherSlugNamed> convertLinguaEntries(List<String> linguaEntries) { private List<NetherSlugNamed> convertLinguaEntries(List<String> linguaEntries) {
NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lingua.class, false);
List<NetherSlugNamed> result = new ArrayList<>(linguaEntries.size()); List<NetherSlugNamed> result = new ArrayList<>(linguaEntries.size());
for (String line : linguaEntries) { for (String line : linguaEntries) {
int spaceIndex = line.indexOf(" "); int spaceIndex = line.indexOf(" ");
@ -239,9 +240,9 @@ public class ModelDialLingua implements KodeGenModel {
} else { } else {
continue; continue;
} }
int ag1 = LINGUA_AG1; int ag1 = slugSpaceGuide.ag1();
int ag2 = LINGUA_AG2; int ag2 = slugSpaceGuide.ag2();
int ag3 = LINGUA_AG3; int ag3 = slugSpaceGuide.ag3();
int bl0w = 1+Integer.parseInt(key1); int bl0w = 1+Integer.parseInt(key1);
int cr1 = key2.length()<1?0:1+key2.charAt(0) - 'A'; // A = 1 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 cr2 = key2.length()<2?0:1+key2.charAt(1) - 'A';

View file

@ -29,6 +29,7 @@ package love.distributedrebirth.nx01.kode.generator.klass;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -43,6 +44,7 @@ public class ModelKlass {
private final String javaName; private final String javaName;
private final List<String> javaDescriptions; private final List<String> javaDescriptions;
private final List<String> javaImports; private final List<String> javaImports;
private final List<String> javaAnnos;
private final StringBuilder body; private final StringBuilder body;
private String javaDocAuthor; private String javaDocAuthor;
private String javaDocVersion; private String javaDocVersion;
@ -58,6 +60,7 @@ public class ModelKlass {
} }
this.javaFile = new File(filePath); this.javaFile = new File(filePath);
this.javaImports = new ArrayList<>(); this.javaImports = new ArrayList<>();
this.javaAnnos = new ArrayList<>();
this.body = new StringBuilder(); this.body = new StringBuilder();
this.javaDocAuthor = "للَّٰهِilLצسُو"; this.javaDocAuthor = "للَّٰهِilLצسُو";
this.javaDocVersion = "©Δ∞ 仙上主天"; this.javaDocVersion = "©Δ∞ 仙上主天";
@ -67,6 +70,18 @@ public class ModelKlass {
return javaFile; return javaFile;
} }
public void addJavaImports(Collection<Class<?>> javaKlasses) {
javaKlasses.forEach(v -> addJavaImport(v));
}
public void addJavaImport(Class<?> javaKlass) {
if (javaKlass.getDeclaringClass() == null) {
addJavaImport(javaKlass.getName());
} else {
addJavaImport(javaKlass.getDeclaringClass());
}
}
public void addJavaImport(String javaKlass) { public void addJavaImport(String javaKlass) {
if (javaImports.contains(javaKlass)) { if (javaImports.contains(javaKlass)) {
return; return;
@ -78,6 +93,15 @@ public class ModelKlass {
return javaImports; return javaImports;
} }
public List<String> getJavaAnnos() {
return javaAnnos;
}
public void addJavaAnno(Class<?> anno, String body) {
addJavaImport(anno.getName());
javaAnnos.add("@" + anno.getSimpleName() + "(" + body + ")");
}
public String getJavaPackage() { public String getJavaPackage() {
return javaPackage; return javaPackage;
} }

View file

@ -137,6 +137,10 @@ public class ModelKlassWriter {
buf.append(klass.getJavaDocVersion()); buf.append(klass.getJavaDocVersion());
buf.append("\n"); buf.append("\n");
} }
for (String javaAnno : klass.getJavaAnnos()) {
buf.append(javaAnno);
buf.append("\n");
}
} }
public String buildInuktitutBinary(int number, int digets) { public String buildInuktitutBinary(int number, int digets) {