407 lines
15 KiB
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");
|
|
}
|
|
}
|