FC18: Removed unicode and kanji rendering support for real systems

This commit is contained in:
Willem Cazander 2025-08-07 19:32:20 +02:00
parent ddda38ffaa
commit c7dee9b006
9 changed files with 14 additions and 225 deletions

View file

@ -48,31 +48,6 @@ final public class FourCornerRecipe {
private FourCornerRecipe() {
}
@Deprecated // TODO: move to sand worm
static public List<Integer> embedUNI2K(String value) {
List<Integer> result = new ArrayList<>(value.length());
PrimitiveIterator.OfInt i = value.codePoints().iterator();
int bankSelect = 0;
while (i.hasNext()) {
int codePoint = i.nextInt();
if (codePoint > 2048) {
int bankSelectNew = codePoint >> 11;
if (bankSelect != bankSelectNew) {
bankSelect = bankSelectNew;
result.add(FourCornerDotCake.FC_UNI2K_22.getStart() + bankSelect);
}
} else if (bankSelect != 0){
bankSelect = 0;
result.add(FourCornerDotCake.FC_UNI2K_22.getStart() + bankSelect);
}
// bank selects output only on change
int bankPoint = codePoint & 0b11111111111;
result.add(FourCornerDotCake.FC_UNI2K_11.getStart() + bankPoint);
}
return result;
}
static public List<Integer> embedNCR1632Denominator(BigInteger value) {
return embedNCR1632Value(new ArrayList<>(), value, FourCornerDotCake.FC_NCR1632_XD.getStart());
}

View file

@ -38,7 +38,6 @@ import org.x4o.fc18.cake2.pie9d.FCDotPIE9DDash09;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
import org.x4o.fc18.octal8.PrimordialOctal;
import org.x4o.fc18.zion7.FourCornerZion7Candlelier;
import org.x4o.fc18.zion7.FourCornerZion7WaterCodex;
import org.x4o.fc18.zion7.FourCornerZionStenoLexer;
import org.x4o.fc18.zion7.FourCornerZionStenoLexerSmoke;
@ -121,7 +120,7 @@ public class FourCornerUnicodeDisplay {
lexer.withSmokeSignals(printer).read(chars);
}
private final class StenoUnicodePrinter implements FourCornerZion7Candlelier, FourCornerZion7WaterCodex, FourCornerZionStenoLexerSmoke.AdapterMonoPipe {
private final class StenoUnicodePrinter implements FourCornerZion7Candlelier, FourCornerZionStenoLexerSmoke.AdapterMonoPipe {
private final StringBuilder output;
private boolean wasExternalWord = false;
@ -239,15 +238,6 @@ public class FourCornerUnicodeDisplay {
public void strobeSandWorm(List<PrimordialOctal> spice) {
}
@Override
public void strobeWaterUnicode(List<Integer> codePoints) {
codePoints.forEach(v -> output.appendCodePoint(v));
}
@Override
public void strobeWaterKanji(List<Integer> kuTenPoints) {
}
@Override
public void burnMonoPipe(int line, int col, String pipeError) {
StringBuilder errBuf = new StringBuilder();

View file

@ -340,12 +340,10 @@ public enum FourCornerDotCake {
/// This can encode sand worm text data like icons, bitmap images or vector images and unicode4D/etc like HolyC of TempleOS.
FC_SAND_KHORKHOI(0x27000, 32768, "Sand octals of large khorkhoi"),
/// Support lower 11 bit of unicode to be encoded with one cake point.
@Deprecated // TODO: move to sand worm
FC_UNI2K_11(0x30000 - 4096, 2048, "Unicode page point"),
/// Optional select for the 11 bit half word, to get full 21 bit unicode-one point.
@Deprecated // TODO: move to sand worm
FC_UNI2K_22(0x30000 - 2048, 2048, "Unicode page select"),
/// free
__RESERVED_F4A(0x30000 - 4096, 2048, "free"),
/// free
__RESERVED_F4B(0x30000 - 2048, 2048, "free"),
// =========== Allow big terminators to learn a computer math

View file

@ -79,24 +79,7 @@ public enum FCDotDEC2701DashPX0 implements FourCornerX06BaklavaPointSequence, Fo
ESC_DEC0801_E10,
/// _ESC6_X2 _ESC6_X1 _ESC6_X2 = 11
/// If your machine has KANJI roms and display engine support than embed using this.
/// Single argument serial bank switching kanji KuTen escape string must end with !
/// Token to select plane;
/// _PEPPER_DOWNUP_EXCLAMATION = JIS X 0208 plane 1 (DEFAULT and in MSX1++ ROMs)
/// _PEPPER_DOWNUP_QUESTION = JIS X 0213 plane 2
/// _SALT_COMPARE_LEFT = JIS X reserved plane 3
/// _SALT_COMPARE_RIGHT = JIS X reserved plane 4
/// Token to select KuTen
/// NY10_CARET - NY18_ASTERISK = posimal(1-9) MSB of KuTen (1=DEFAULT)
/// NY01_AT - NY09_EQUALS = posimal(1-9) LSB of KuTen (1=DEFAULT)
/// NX17_Q - NX22_V = Ten row (0-16-32-48-64-80) (0=DEFAULT)
/// Token to fire a glyph dough character;
/// NX01_A - NX16_P = 0x0 - 0xF
/// Token to reset banking to first value
/// NX27_AMPERSAND = bank reset
/// Example escape for 𪚲鳦; (last used than first used glyph or G=2-94-87 and B=2-94-1)
/// [3*ESC]¿*_VGQB!
ESC_KANJI,
__ESC_RESERVED_B2,
/// _ESC6_X2 _ESC6_X1 _ESC6_X3 = 12
__ESC_RESERVED_B3,

View file

@ -1,49 +0,0 @@
/*
* Copyright (c) 2004-2014, Willem Cazander
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 org.x4o.fc18.zion7;
import java.util.List;
/// Handles the lexer water codex strobes.
///
/// @author Willem Cazander
/// @version 1.0 Jan 22, 2025
public interface FourCornerZion7WaterCodex extends FourCornerZion7Candlelier {
/// To support current code and resources which require unicode to access.
void strobeWaterUnicode(List<Integer> codePoints);
/// To support native rendering on the MSX
void strobeWaterKanji(List<Integer> kuTenPoints);
interface Adapter extends FourCornerZion7WaterCodex, FourCornerZion7Candlelier.Adapter {
@Override
default void strobeWaterUnicode(List<Integer> codePoints) {
}
@Override
default void strobeWaterKanji(List<Integer> kuTenPoints) {
}
}
}

View file

@ -48,7 +48,6 @@ import org.x4o.fc18.octal8.PrimordialOctal;
public class FourCornerZionStenoLexer {
private final static FourCornerZion7AlphaOmega CLEAN_BIBLE = new FourCornerZion7AlphaOmega.Adapter() {};
private final static FourCornerZion7WaterCodex CLEAN_WATER = new FourCornerZion7WaterCodex.Adapter() {};
private final static FourCornerZionStenoLexerFire CLEAN_FIRE = new FourCornerZionStenoLexerFire.Adapter() {};
private final static FourCornerZionStenoLexerSmoke CLEAN_SMOKE = new FourCornerZionStenoLexerSmoke.Adapter() {};
private final static FourCornerZion7SalahSequence CLEAN_PRAYER = new FourCornerZion7SalahSequence.Adapter() {};
@ -56,7 +55,6 @@ public class FourCornerZionStenoLexer {
private final boolean handlerEscape;
private final FourCornerZion7Candlelier handler;
private final FourCornerZion7AlphaOmega handlerDocument;
private final FourCornerZion7WaterCodex handlerCodex;
private final FourCornerZion7SalahSequence handlerSalahSequence;
private final FourCornerZion7TempleScrolls handlerTempleScrolls;
private final int denominatorBank[] = new int[64]; // <== is the terminator select are 6 bit of banks with 9 bit of values.
@ -87,12 +85,12 @@ public class FourCornerZionStenoLexer {
if (FourCornerDotCake.FC_DEC2701_PX0.equals(cakeSlice)) {
continue; // handle DEC manually
}
if (FourCornerDotCake.FC_UNI2K_11.equals(cakeSlice)) {
continue; // parse block manually
}
if (FourCornerDotCake.FC_UNI2K_22.equals(cakeSlice)) {
continue; // parse block manually
}
// if (FourCornerDotCake.FC_UNI2K_11.equals(cakeSlice)) {
// continue; // parse block manually
// }
// if (FourCornerDotCake.FC_UNI2K_22.equals(cakeSlice)) {
// continue; // parse block manually
// }
if (FourCornerDotCake.FC_SAND_OLGOI.equals(cakeSlice)) {
continue; // parse nether head manually
}
@ -109,7 +107,6 @@ public class FourCornerZionStenoLexer {
}
CAKE_SLICE_EATERS.add(new StenoScannerCDCDEC());
CAKE_SLICE_EATERS.add(new StenoScannerNCR18());
CAKE_SLICE_EATERS.add(new StenoScannerUNI21());
CAKE_SLICE_EATERS.add(new StenoScannerSandOlgoi());
CAKE_SLICE_EATERS.add(new StenoScannerSandKhorkhoi());
ArrayList.class.cast(CAKE_SLICE_EATERS).trimToSize();
@ -127,11 +124,6 @@ public class FourCornerZionStenoLexer {
} else {
this.handlerDocument = CLEAN_BIBLE;
}
if (handler instanceof FourCornerZion7WaterCodex) {
this.handlerCodex = FourCornerZion7WaterCodex.class.cast(handler);
} else {
this.handlerCodex = CLEAN_WATER;
}
if (handler instanceof FourCornerZion7SalahSequence) {
this.handlerSalahSequence = FourCornerZion7SalahSequence.class.cast(handler);
} else {
@ -463,38 +455,6 @@ public class FourCornerZionStenoLexer {
}
}
static class StenoScannerUNI21 extends StenoScanner {
public StenoScannerUNI21() {
super(FourCornerDotCake.FC_UNI2K_11.getStart(), FourCornerDotCake.FC_UNI2K_22.getStop());
}
@Override
public void process(FourCornerZionStenoLexer lexer, int idxFirst, int idxLast) {
boolean errorUnusedBigIndian = false; // are optional
List<Integer> result = new ArrayList<>();
int codePoint22 = 0;
for (int i = idxFirst; i <= idxLast; i++) {
int cakePoint = lexer.input.get(i);
if (cakePoint >= FourCornerDotCake.FC_UNI2K_22.getStart() && cakePoint <= FourCornerDotCake.FC_UNI2K_22.getStop()) {
codePoint22 = cakePoint - FourCornerDotCake.FC_UNI2K_22.getStart();
errorUnusedBigIndian = true;
continue;
}
int codePoint11 = cakePoint - FourCornerDotCake.FC_UNI2K_11.getStart();
int codePoint = (codePoint22 << 11) + codePoint11;
result.add(codePoint);
errorUnusedBigIndian = false;
}
if (errorUnusedBigIndian) {
lexer.smokeSignals.burnWaterUnicodeBadBigIndian(lexer.currLine, lexer.currCol);
}
if (!result.isEmpty()) {
lexer.handlerCodex.strobeWaterUnicode(result);
}
}
}
static class StenoScannerCDCDEC extends StenoScanner {
public StenoScannerCDCDEC() {
@ -628,9 +588,6 @@ public class FourCornerZionStenoLexer {
if (FCDotDEC2701DashPX0.ESC68_INC0801_P8.equals(cdcDECMode)) {
return handleINC(lexer);
}
if (FCDotDEC2701DashPX0.ESC_KANJI.equals(cdcDECMode)) {
// TODO: impl
}
return false;
}

View file

@ -38,9 +38,6 @@ public interface FourCornerZionStenoLexerSmoke {
void burnSalahMissingAmen(int line, int col);
void burnWaterUnicodeBadBigIndian(int line, int col);
void burnSandWalkerOutOfRhythm(int line, int col);
void burnSandWalkerStepUnaligned(int line, int col, int size);
@ -64,10 +61,6 @@ public interface FourCornerZionStenoLexerSmoke {
default void burnControlCommandUnsupported(int line, int col, int cakePoint) {
}
@Override
default void burnWaterUnicodeBadBigIndian(int line, int col) {
}
@Override
default void burnSandWalkerOutOfRhythm(int line, int col) {
}
@ -101,11 +94,6 @@ public interface FourCornerZionStenoLexerSmoke {
burnMonoPipe(line, col, "burnControlCommandUnsupported:0x" + Integer.toHexString(cakePoint));
}
@Override
default void burnWaterUnicodeBadBigIndian(int line, int col) {
burnMonoPipe(line, col, "burnWaterUnicodeBadBigIndian");
}
@Override
default void burnSandWalkerOutOfRhythm(int line, int col) {
burnMonoPipe(line, col, "burnSandWalkerOutOfRhythm");

View file

@ -95,7 +95,7 @@ public class FourCornerUnicodeDisplayTest {
Assertions.assertEquals("B3K", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
/*
@Test
public void testUnicode() throws Exception {
List<Integer> cdc = new ArrayList<>();
@ -123,7 +123,7 @@ public class FourCornerUnicodeDisplayTest {
System.out.println("size UTF8="+outputExpected.getBytes(StandardCharsets.UTF_8).length);
//System.out.println("size FCx6="+cdc6.size());
//System.out.println("raw FCx6="+FourCornerUnicodeDisplay.raw().renderFromInt18(cdc6));
}
}*/
@Test
public void testDec2PieText() throws Exception {

View file

@ -1,53 +0,0 @@
/*
* Copyright (c) 2004-2014, Willem Cazander
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 org.x4o.fc18.zion7;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.x4o.fc18.cake2.FourCornerDotCake;
/**
* Tests four corner lexer parts.
*
* @author Willem Cazander
* @version 1.0 Jan 14, 2025
*/
public class LexerUNI21Test {
@Test
public void testUNI21Invalid() throws Exception {
TestSmokeReader smokeReader = new TestSmokeReader();
FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true);
lexer.withSmokeSignals(smokeReader);
List<Integer> cdc = new ArrayList<>();
cdc.add(FourCornerDotCake.FC_UNI2K_22.getStart() + 123);
smokeReader.reset();
Assertions.assertEquals(0, smokeReader.pipeSmokeClouds);
lexer.read(cdc);
Assertions.assertEquals(1, smokeReader.pipeSmokeClouds);
}
}