diff --git a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkTextLocalizer.java b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkTextLocalizer.java index f24d84b..9cfae4b 100644 --- a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkTextLocalizer.java +++ b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkTextLocalizer.java @@ -29,7 +29,7 @@ package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐪᣔᒻᑊᑉ; import java.util.Arrays; -import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; +import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide; /// Builds and formatted and localized text message. /// @@ -45,7 +45,7 @@ public final class KaasTalkTextLocalizer { } @SuppressWarnings("unchecked") - static public String formatToned(final Class linguaId, final Class babelMsg, final Object...msgArgs) { + static public String formatToned(final Class linguaId, final Class babelMsg, final Object...msgArgs) { if (babelMsg == null) { throw new NullPointerException("No kaas talk message class given."); } @@ -56,7 +56,7 @@ public final class KaasTalkTextLocalizer { return v; } }).toArray(); - Class putinLinguaId = linguaId; // The put in lingua id + Class putinLinguaId = linguaId; // The put in lingua id if (putinLinguaId == null) { putinLinguaId = 嘴ᗮᙿᗮ.guess(); } diff --git a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkText注.java b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkText注.java index 9a885c0..df565a7 100644 --- a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkText注.java +++ b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/KaasTalkText注.java @@ -34,7 +34,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; +import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide; /// Define kaas talk text. /// @@ -46,7 +46,7 @@ import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; @Target({ElementType.TYPE}) public @interface KaasTalkText注 { - Class 嘴(); + Class 嘴(); String txt(); } diff --git a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/嘴ᗮᙿᗮ.java b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/嘴ᗮᙿᗮ.java index f4191cd..133abf0 100644 --- a/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/嘴ᗮᙿᗮ.java +++ b/nx01-jpp0-kaas-talk/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/ᐪᣔᒻᑊᑉ/嘴ᗮᙿᗮ.java @@ -2,7 +2,7 @@ package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐪᣔᒻᑊᑉ; import java.util.Locale; -import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherTone; +import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.NetherToneGuide; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᐧᐧᣟ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᐧᐧᣟᣟᐧᣟ; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᐧ; import ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔᓫ.ᐞᐧᐧᐧᣟᣟᐧ.ᐃᣟᐧᐧᐧᐧᐧᐞᣟᐧᐧᐧᐧᣟᐞᣟᐧᐧᐧᣟᐧᐞᐧᐧᐧᣟᣟᐧᣟᐧᣟ; @@ -43,7 +43,7 @@ public enum 嘴ᗮᙿᗮ { // temp until data is in No2Lingua - public static Class guess() { + public static Class guess() { Locale locale = Locale.getDefault(); if ("NL".equals(locale.getCountry())) { return Dutch.class; diff --git a/nx01-jpp0-nether-tone/src/main/java/module-info.java b/nx01-jpp0-nether-tone/src/main/java/module-info.java index d022f74..fda7d92 100644 --- a/nx01-jpp0-nether-tone/src/main/java/module-info.java +++ b/nx01-jpp0-nether-tone/src/main/java/module-info.java @@ -30,6 +30,8 @@ /// @author للَّٰهِilLצسُو /// @version ©Δ∞ 仙上主天 module ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ { + requires transitive ᣕᕁᐤᣳ.ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ; + exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; exports ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ; } diff --git a/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneGuide.java b/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneGuide.java new file mode 100644 index 0000000..3a4e864 --- /dev/null +++ b/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneGuide.java @@ -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 {} +} diff --git a/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneSlugView.java b/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneSlugView.java index f4527d9..9aca2d9 100644 --- a/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneSlugView.java +++ b/nx01-jpp0-nether-tone/src/main/java/ᒢᣘᐧᐧ/ᣕᓫᐪᑋᓫᣗ/ᐪᐤᣕᓫ/NetherToneSlugView.java @@ -28,6 +28,9 @@ package ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /// Nether tone slug view record. @@ -94,8 +97,8 @@ public record NetherToneSlugView( public List> toNetherTones() { List> result = new ArrayList<>(11); for (int i = 0; i < 11; i++) { - Class subClass = NetherToneScript.class.getPermittedSubclasses()[i]; - Class[] valueClasses = subClass.getPermittedSubclasses(); + Class subClass = sortedPermittedSubclasses(NetherToneScript.class).get(i); + Class[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {}); result.add(switch (i) { case 0: yield valueClasses[ag1]; case 1: yield valueClasses[ag2]; @@ -113,12 +116,31 @@ public record NetherToneSlugView( return result; } - static NetherToneSlugView ofQSluq(Class q) { + static private List> sortedPermittedSubclasses(Class c) { + Class[] valueArray = c.getPermittedSubclasses(); + if (valueArray == null) { + return Collections.emptyList(); + } + List> valueList = new ArrayList<>(Arrays.asList(valueArray)); + valueList.sort(new Comparator>() { + @Override + public int compare(Class o1, Class o2) { + return o1.getSimpleName().compareTo(o2.getSimpleName()); + } + }); + return valueList; + } + + static public NetherToneSlugView ofQSluq(Class q) { + return ofQSluq(q, true); + } + + static public NetherToneSlugView ofQSluq(Class q, boolean failIncomplete) { int[] d = new int[11]; int dataIdx = 0; - for (Class subClass : NetherToneScript.class.getPermittedSubclasses()) { + for (Class subClass : sortedPermittedSubclasses(NetherToneScript.class)) { boolean hasValue = false; - Class[] valueClasses = subClass.getPermittedSubclasses(); + Class[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {}); for (int i = 0; i < valueClasses.length; i++) { Class valueClass = valueClasses[i]; if (valueClass.isAssignableFrom(q)) { @@ -128,14 +150,14 @@ public record NetherToneSlugView( break; } } - if (!hasValue) { + if (failIncomplete && !hasValue) { 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]); } - static boolean slugPresent(Class q) { + static public boolean slugPresent(Class q) { for (Class subClass : NetherToneScript.class.getPermittedSubclasses()) { boolean hasValue = false; for (Class valueClass : subClass.getPermittedSubclasses()) { diff --git a/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDial.java b/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDial.java index 2654d29..de63bef 100644 --- a/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDial.java +++ b/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDial.java @@ -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 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 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> 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> 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> 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 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> 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> tonesLE = model.identityEndianLittle().toNetherTones(); + for (Iterator> 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> tonesBE = model.identityEndianBig().toNetherTones(); + for (Iterator> 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 generateLehmerModels() { + NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lehmer16.class, false); List 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> 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> 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> 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> 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> 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) { diff --git a/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDialLingua.java b/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDialLingua.java index 71ee1de..1f3310a 100644 --- a/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDialLingua.java +++ b/nx01-kode-gen-nether/src/main/java/love/distributedrebirth/nx01/kode/generator/nether/ModelDialLingua.java @@ -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> 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> i = tonesTpl.subList(0, 4).iterator(); i.hasNext() ;) { + buf.append(" extends SpaceGuideSageNX01Lingua, "); + for (Iterator> 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 convertLinguaEntries(List linguaEntries) { + NetherToneSlugView slugSpaceGuide = NetherToneSlugView.ofQSluq(NetherToneGuide.SpaceGuideSageNX01Lingua.class, false); List 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'; diff --git a/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlass.java b/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlass.java index 45c0fad..b0dc0a2 100644 --- a/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlass.java +++ b/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlass.java @@ -29,6 +29,7 @@ package love.distributedrebirth.nx01.kode.generator.klass; import java.io.File; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Objects; @@ -43,6 +44,7 @@ public class ModelKlass { private final String javaName; private final List javaDescriptions; private final List javaImports; + private final List javaAnnos; private final StringBuilder body; private String javaDocAuthor; private String javaDocVersion; @@ -58,6 +60,7 @@ public class ModelKlass { } this.javaFile = new File(filePath); this.javaImports = new ArrayList<>(); + this.javaAnnos = new ArrayList<>(); this.body = new StringBuilder(); this.javaDocAuthor = "للَّٰهِilLצسُو"; this.javaDocVersion = "©Δ∞ 仙上主天"; @@ -67,6 +70,18 @@ public class ModelKlass { return javaFile; } + public void addJavaImports(Collection> 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) { if (javaImports.contains(javaKlass)) { return; @@ -78,6 +93,15 @@ public class ModelKlass { return javaImports; } + public List getJavaAnnos() { + return javaAnnos; + } + + public void addJavaAnno(Class anno, String body) { + addJavaImport(anno.getName()); + javaAnnos.add("@" + anno.getSimpleName() + "(" + body + ")"); + } + public String getJavaPackage() { return javaPackage; } diff --git a/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlassWriter.java b/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlassWriter.java index f4301a1..48bd408 100644 --- a/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlassWriter.java +++ b/nx01-kode-gen/src/main/java/love/distributedrebirth/nx01/kode/generator/klass/ModelKlassWriter.java @@ -137,6 +137,10 @@ public class ModelKlassWriter { buf.append(klass.getJavaDocVersion()); buf.append("\n"); } + for (String javaAnno : klass.getJavaAnnos()) { + buf.append(javaAnno); + buf.append("\n"); + } } public String buildInuktitutBinary(int number, int digets) {