JPP: Removed lingua path slugs from dial tone book for smaller size

This commit is contained in:
Willem Cazander 2026-01-29 11:33:28 +01:00
parent 7dd4e80a2a
commit c34b7694c5
7 changed files with 83 additions and 56 deletions

View file

@ -38,11 +38,11 @@ import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAu
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") @DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
public class BabelTest { public class BabelTest {
// ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.xxx // ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.xxx
// ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ(8 times 2^6+2^6+2^6+2^9+2^6+2^6+2^6+2^6+2^6+2^6+2^9 = 12800 interface + mutex + etc) // ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ (2^6+2^6+2^6+2^9+2^6+2^6+2^6+2^6+2^6+2^6+2^9 = x interface + mutex + etc)
// ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᒼᑋᐤᣗᑊᐣ // implement as group marker interface to readout relative distance to marker root // ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᒼᑋᐤᣗᑊᐣ // implement as group marker interface to readout relative distance to marker root
// ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔ (#interfaces; ~31K + file groupings) // ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒻᑊᣕᕐᓑᣔ (#interfaces; ~31K + file groupings)
// ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒃᣔᔆᓫᒄ (#interfaces; 2304 + 2_655_360 + file groupings) // ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᒄᑊᣔᒻ.ᒃᣔᔆᓫᒄ (#interfaces; 2304 + 2_655_360 + file groupings)
// ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒃᐤᣕᓫ.ᣖᑊᣗᣔᐪᓫ.ᒃᐤᣔᐪs // ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒃᐤᣕᓫ.ᣖᑊᣗᣔᐪᓫ.ᒃᐤᣔᐪ
// ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒃᐤᣕᓫ.ᣘᒻᓫᔆᑋ.ᣔᔿᔿᐤ // ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒃᐤᣕᓫ.ᣘᒻᓫᔆᑋ.ᣔᔿᔿᐤ
// ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒼᣔᑊᑉᓫ.ᐪᣔᔆᐪᓫ // ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒼᣔᑊᑉᓫ.ᐪᣔᔆᐪᓫ
// ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒻᐤᣔᑊᐣᓫᣗ // ᒢᐩᐩ.ᑊᑉᒻᣔᔆᔆ.ᒻᐤᣔᑊᐣᓫᣗ

View file

@ -63,6 +63,26 @@ public class NumberMatrixFactoryTest {
Assertions.assertEquals(i, film.geefDimensie()); Assertions.assertEquals(i, film.geefDimensie());
Assertions.assertEquals(film.waardes().sizeᴿᵈ(), film.waardes().getᴿᵈ(0).zerdinalSpaceBoundary()); Assertions.assertEquals(film.waardes().sizeᴿᵈ(), film.waardes().getᴿᵈ(0).zerdinalSpaceBoundary());
} }
// size: 5 result: 120
// size: 6 result: 720
// -- gen line, 7+ has get only dial tones for IDENTITY_LE and IDENTITY_BE
// 18+9=27(-x0) ~: 134217728 (end boundry lehman nether)
// size: 7 result: 5040 (set of sealed or declared interface is too slow)
// size: 8 result: 40320 (T256)
// size: 9 result: 362880 (T512) (larger than max of 18 bit nether slug path)
// size: 10 result: 3628800
// size: 11 result: 39916800
// java.lang.OutOfMemoryError: Java heap space
// for (int i = 5; i < 10; i++) {
// int n = i;
// int[] initial = new int[n];
// for (int ni = 0; ni < n; ni++) {
// initial[ni] = ni;
// }
// List<int[]> allPermutations = new ArrayList<>();
// generatePermutations(initial, 0, allPermutations);
// System.out.println("size: " + i + " result: " + allPermutations.size());
// }
} }
// TODO: redo matrix with lehmer dial tones from jpp-nether-dial-lehmer // TODO: redo matrix with lehmer dial tones from jpp-nether-dial-lehmer

View file

@ -62,7 +62,7 @@ public class ModelDialLingua implements KodeGenModel {
@Override @Override
public String generatorModelHash() { public String generatorModelHash() {
return "5"; return "6";
} }
@Override @Override
@ -70,6 +70,13 @@ public class ModelDialLingua implements KodeGenModel {
// Load and convert lingua // Load and convert lingua
List<String> linguaEntries = loadLinguaEntries(); List<String> linguaEntries = loadLinguaEntries();
List<NetherSlugNamed> netherSlugs = convertLinguaEntries(linguaEntries); List<NetherSlugNamed> netherSlugs = convertLinguaEntries(linguaEntries);
List<NetherSlugNamed> netherSlugsRM = new ArrayList<>();
for (int i = 0; i < netherSlugs.size(); i++) {
if (i < netherSlugs.size() - 1 && netherSlugs.get(i).linguaName().equals(netherSlugs.get(i+1).linguaName())) {
netherSlugsRM.add(netherSlugs.get(i));
} // cleans all the parent slugs of a language, this makes the jar file about 6 MB smaller
}
netherSlugs.removeAll(netherSlugsRM);
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
@ -92,13 +99,16 @@ public class ModelDialLingua implements KodeGenModel {
Map<String, Map<String, List<NetherSlugNamed>>> splitSlugs = new HashMap<>(); Map<String, Map<String, List<NetherSlugNamed>>> splitSlugs = new HashMap<>();
for (NetherSlugNamed slug : netherSlugs) { for (NetherSlugNamed slug : netherSlugs) {
int split6Package = slug.view().bl0w() >> 3; // 64 package with 8 files (is 1000+ classes per package folder) int split6Package = slug.view().bl0w() >> 3; // 64 package with 8 files (is 1000+ classes per package folder)
String subPackage = "" + writer.buildPackageInuktitutDots(split6Package, 6); String subPackage = "" + writer.buildInuktitutBinary(split6Package, 6);
StringBuilder fileName = new StringBuilder(); StringBuilder fileName = new StringBuilder();
fileName.append(""); // use full prefix dot id for unique class names over all nether sub packages fileName.append(""); // use full prefix dot id for unique class names over all nether sub packages
fileName.append(writer.buildPackageInuktitutDots(slug.view().ag1(), 3)); fileName.append(writer.buildInuktitutBinary(slug.view().ag1(), 3));
fileName.append(writer.buildPackageInuktitutDots(slug.view().ag2(), 3)); fileName.append("");
fileName.append(writer.buildPackageInuktitutDots(slug.view().ag3(), 3)); fileName.append(writer.buildInuktitutBinary(slug.view().ag2(), 3));
fileName.append(writer.buildPackageInuktitutDots(slug.view().bl0w(), 9)); fileName.append("");
fileName.append(writer.buildInuktitutBinary(slug.view().ag3(), 3));
fileName.append(subPackage);
fileName.append(writer.buildInuktitutBinary(slug.view().bl0w() & 0b111, 3));
String filePackage = fileName.toString(); String filePackage = fileName.toString();
Map<String, List<NetherSlugNamed>> map = splitSlugs.get(subPackage); Map<String, List<NetherSlugNamed>> map = splitSlugs.get(subPackage);
if (map == null) { if (map == null) {
@ -154,13 +164,16 @@ public class ModelDialLingua implements KodeGenModel {
humanKlassPart = humanKlassPart.replaceAll(" ", ""); humanKlassPart = humanKlassPart.replaceAll(" ", "");
// N2L prints LR and read and renders RL // N2L prints LR and read and renders RL
String slugName = "" + slug.view().toNúmero2Lingua() + "" + humanKlassPart; String slugName = "" + slug.view().toNúmero2Lingua() + "" + humanKlassPart;
// old lingua classes are below 400 bytes current 1900+, this line below removes about 80-100 bytes per class.
//String slugName = "" + slug.linguaKey().replaceAll("\\-", "").replaceAll("\\+", "");
// TODO: check class byte code of structure to see if structural changes can drop the total size
buf.append("\t/// "); buf.append("\t/// ");
buf.append(slug.linguaKey); buf.append(slug.linguaKey);
buf.append("\n"); buf.append("\n");
buf.append("\t"); buf.append("\tnon-sealed interface ");
buf.append("non-sealed interface ");
buf.append(slugName); buf.append(slugName);
buf.append(" extends "); buf.append("\n");
buf.append("\t\t\textends ");
buf.append(javaName); buf.append(javaName);
buf.append(", "); buf.append(", ");
List<Class<?>> tones = slug.view().toNetherTones(0); List<Class<?>> tones = slug.view().toNetherTones(0);
@ -173,7 +186,8 @@ public class ModelDialLingua implements KodeGenModel {
buf.append(", "); buf.append(", ");
} }
} }
buf.append(" {}\n"); buf.append(" {\n");
buf.append("\t}\n");
} }
buf.append("}\n"); buf.append("}\n");
} }

View file

@ -30,5 +30,5 @@
/// @version ©Δ 仙上主天 /// @version ©Δ 仙上主天
module jpp.nether.tone { module jpp.nether.tone {
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ; exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ; exports ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ;
} }

View file

@ -50,7 +50,7 @@ public class ModelNetherTones implements KodeGenModel {
@Override @Override
public String generatorModelHash() { public String generatorModelHash() {
return "15"; return "16";
} }
@Override @Override
@ -58,22 +58,15 @@ public class ModelNetherTones implements KodeGenModel {
// TODO: redo tree again, as a Q slug, should be usable to reuse in any other Qx slug // TODO: redo tree again, as a Q slug, should be usable to reuse in any other Qx slug
// but that needs generics and than 2 equals interfaces do not match anymore... // but that needs generics and than 2 equals interfaces do not match anymore...
buildQuadrants(writer, 1); buildToneScript(writer);
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", "NetherToneScript", false);
} }
private void buildQuadrants(ModelKlassWriter writer, int quadrant) { private void buildToneScript(ModelKlassWriter writer) {
String s = writer.buildPackageInuktitutDots(quadrant - 1, 3); String s = "ᔆᒼᣗᑊᣖᐪ";
String q = "Q" + quadrant; String q = "ᐊᐪᔆ";
String e = "NetherToneQ" + quadrant; String e = "NetherToneScript";
buildNetherTreeSlug(writer, s, q + "AG1", 64, e); buildNetherTreeSlug(writer, s, q + "AG1", 64, e);
buildNetherTreeSlug(writer, s, q + "AG2", 64, e); buildNetherTreeSlug(writer, s, q + "AG2", 64, e);

View file

@ -32,38 +32,38 @@ 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;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1AG1; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG1;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1AG2; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG2;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1AG3; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆAG3;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1BL0W; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆBL0W;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1CR1; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆCR1;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1CR2; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆCR2;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1CR3; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆCR3;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB1; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆDB1;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB2; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆDB2;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1DB3; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆDB3;
import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᐧᐧᐧ.ᐊQ1ER0W; import ᒢᐩᐩ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ.ᔆᒼᣗᑊᣖᐪ.ᐊᐪᔆER0W;
public class NetherToneSlugViewTest { public class NetherToneSlugViewTest {
private interface Q1SlugExample extends private interface Q1SlugExample extends
Q1AG1.ᐅ00, ᐪᔆAG1.ᐅ00,
Q1AG2.ᐅ01, ᐪᔆAG2.ᐅ01,
Q1AG3.ᐅ02, ᐪᔆAG3.ᐅ02,
Q1BL0W.ᐅ003, ᐪᔆBL0W.ᐅ003,
Q1CR1.ᐅ04, ᐪᔆCR1.ᐅ04,
Q1CR2.ᐅ05, ᐪᔆCR2.ᐅ05,
Q1CR3.ᐅ06, ᐪᔆCR3.ᐅ06,
Q1DB1.ᐅ07, ᐪᔆDB1.ᐅ07,
Q1DB2.ᐅ08, ᐪᔆDB2.ᐅ08,
Q1DB3.ᐅ09, ᐪᔆDB3.ᐅ09,
Q1ER0W.ᐅ010 ᐪᔆER0W.ᐅ010
{ {
} }
private interface Q1SlugExampleErr extends private interface Q1SlugExampleErr extends
Q1AG1.ᐅ00, ᐪᔆAG1.ᐅ00,
Q1AG2.ᐅ01 ᐪᔆAG2.ᐅ01
{ {
} }
@ -90,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.ᐅ00.class, result.get(0)); Assertions.assertEquals(ᐪᔆAG1.ᐅ00.class, result.get(0));
Assertions.assertEquals(Q1AG2.ᐅ01.class, result.get(1)); Assertions.assertEquals(ᐪᔆAG2.ᐅ01.class, result.get(1));
Assertions.assertEquals(Q1AG3.ᐅ02.class, result.get(2)); Assertions.assertEquals(ᐪᔆAG3.ᐅ02.class, result.get(2));
} }
} }

View file

@ -139,10 +139,10 @@ public class ModelKlassWriter {
} }
} }
public String buildPackageInuktitutDots(int number, int digets) { public String buildInuktitutBinary(int number, int digets) {
String numberBin = String.format("%1$" + digets + "s", Integer.toString(number, 2)); String numberBin = String.format("%1$" + digets + "s", Integer.toString(number, 2));
String result = numberBin.replaceAll("0|\\s", ""); String result = numberBin.replaceAll("0|\\s", "");
result = result.replaceAll("1", ""); result = result.replaceAll("1", ""); //
return result; return result;
} }
} }