nx01/nx01-jpp-nether-dial-lingua/src/test/java/ᒢᐩᐩ/ᣕᓫᐪᑋᓫᣗ/ᒄᑊᣔᒻ/ᒻᑊᣕᕐᓑᣔ/ModelDialLingua.java

407 lines
15 KiB
Java

/*
* 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");
}
}