FC18: Added pepper tests and deleted E10 support for FC6

This commit is contained in:
Willem Cazander 2025-09-06 13:19:48 +02:00
parent 2efd06a713
commit c0d16aa4ab
9 changed files with 70 additions and 245 deletions

View file

@ -227,6 +227,12 @@ public enum FCDotCDC1604DashP6 implements FourCornerDotColleZero33 {
}
static public List<FCDotCDC1604DashP6> pepper3SequenceWrite(int mode) {
if (mode < 0) {
throw new IllegalArgumentException("Negative pepper is illegal");
}
if (mode > 7) {
throw new IllegalArgumentException("Pepper spray is only 3 bit");
}
return List.of(
((mode >> 2) & 0b1)==0?_PEPPER_EXCLAMATION:_PEPPER_QUESTION,
((mode >> 1) & 0b1)==0?_PEPPER_EXCLAMATION:_PEPPER_QUESTION,

View file

@ -1,124 +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.cake2.zero33.dec1;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.x4o.fc18.cake2.FourCornerDotCake;
import org.x4o.fc18.cake2.FourCornerX06BaklavaPointSequence;
import org.x4o.fc18.cake2.FourCornerX08MuffinPointSequence;
import org.x4o.fc18.cake2.FourCornerX18CakePointDotName;
import org.x4o.fc18.cake2.FourCornerX18CakePointSequence;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
/**
* "FC.DEC0801-E10" Four Corner dot Directly Escaped Control of 8 embedded control codes.
*
* Select data gram local text symbols for 6 and 8 bit systems.
*
* And these can be used within an user escape sequence and/or in the vt06 sequences as serial switching.
*
* @author Willem Cazander
* @version 1.0 Jan 21, 2025
*/
public enum FCDotDEC0801DashE10 implements FourCornerX06BaklavaPointSequence, FourCornerX08MuffinPointSequence, FourCornerX18CakePointSequence, FourCornerX18CakePointDotName {
/// ¡¡¡
/// Back to normal dough
E10_CDC1604_P6(FourCornerDotCake.FC_CDC1604_P6),
/// ¡¡¿
/// 2 gram of BMW (booleans)
E10_BMW0102_S2(FourCornerDotCake.FC_BMW0102_S2),
/// ¡¿¡
/// 10 gram of AMD (decimals)
E10_AMD0110_SA(FourCornerDotCake.FC_AMD0110_SA),
/// ¡¿¿
/// 27 gram of NES (unvocalized-hebrew)
E10_NES0127_9C(FourCornerDotCake.FC_NES0127_9C),
/// ¿¡¿
/// 3 gram of NXP (3-phase)
E10_NXP0103_S3(FourCornerDotCake.FC_NXP0103_S3),
/// ¿¡¿
/// 1 gram of UWU (white space)
/// Typewriter gram escape the the UWU word space word index register lookup the right white and left width for user.
E10_UWU0101_S1(FourCornerDotCake.FC_UWU0101_S1),
/// ¿¡¡
/// 26 gram of ICL (lowercase)
E10_ICL0126_9B(FourCornerDotCake.FC_ICL0126_9B),
/// ¿¿¿
/// 8 gram of OCE (octals)
E10_OCE0801_H3(FourCornerDotCake.FC_OCE0801_H3),
;
private static final FCDotDEC0801DashE10[] VALUES = values();
private final FourCornerDotCake displayCake;
private FCDotDEC0801DashE10(FourCornerDotCake displayCake) {
this.displayCake = Objects.requireNonNull(displayCake);
}
public FourCornerDotCake displayCake() {
return displayCake;
}
@Override
public List<Integer> baklavaPointSequence() {
return FCDotCDC1604DashP6.pepper3SequenceWritePoints(ordinal());
}
@Override
public List<Integer> muffinPointSequence() {
return baklavaPointSequence();
}
@Override
public List<Integer> cakePointSequence() {
return baklavaPointSequence();
}
public List<Integer> baklavaPointsE10(int offset) {
List<Integer> result = new ArrayList<>();
result.addAll(FCDotDEC2701DashPX0.ESC_DEC0801_E10.baklavaPointSequence());
result.addAll(baklavaPointSequence());
result.add(FCDotCDC1604DashP6.NX01_A.ordinal() + offset);
//result.add(FCDotCDC1604DashP6.SEQ_SALAH__EXCLAMATION.cakePointDotIndex()); // TODO: add api layer snake for head
return result;
}
static public int valuesLength() {
return VALUES.length;
}
static public FCDotDEC0801DashE10 valueOf(int idx) {
return VALUES[idx];
}
}

View file

@ -82,9 +82,7 @@ public enum FCDotDEC2701DashPX0 implements FourCornerX06BaklavaPointSequence, Fo
// =========== Internal escape sequence, to embed symbols,fractions and adult texts.
/// _ESC6_X2 _ESC6_X1 _ESC6_X1 = 10
/// Embed data gram codes with pepper and salt in text and end with
/// In the above 9 "user" escapes and in ESC_VT06 this can be used without this prefix to switch.
ESC_DEC0801_E10,
__ESC_RESERVED_B1,
/// _ESC6_X2 _ESC6_X1 _ESC6_X2 = 11
__ESC_RESERVED_B2,

View file

@ -41,38 +41,38 @@ import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
*/
public enum FCDotINC0801DashP8 implements FourCornerX06BaklavaPointSequence, FourCornerX08MuffinPointSequence, FourCornerX18CakePointSequence, FourCornerX18CakePointDotName {
/// ¡¡¡
/// !!!
/// Select LUA page 7A mode.
INC_LUA0127_P7A(FourCornerDotCake.FC_LUA0127_P7A),
/// ¡¡¿
/// !!?
/// Select LUA page 7B mode.
INC_LUA0127_P7B(FourCornerDotCake.FC_LUA0127_P7B),
/// ¡¿¡
/// !?!
/// Select LUA page 7C mode.
INC_LUA0127_P7C(FourCornerDotCake.FC_LUA0127_P7C),
/// ¡¿¿
/// !??
/// Select LUA page 7D mode.
INC_LUA0127_P7D(FourCornerDotCake.FC_LUA0127_P7D),
/// ¿¡¿
/// ?!!
/// Select BYD page 7E mode.
INC_BYD0127_P7E(FourCornerDotCake.FC_BYD0127_P7E),
/// ¿¡¿
/// ?!?
/// Select BYD page 7F mode.
INC_BYD0127_P7F(FourCornerDotCake.FC_BYD0127_P7F),
/// ¿¡¡
/// ??!
/// Select BYD page 7G mode.
INC_BYD0127_P7G(FourCornerDotCake.FC_BYD0127_P7G),
// Select italic mode.
//INC_PIE9D_27(FourCornerDotCake.FC_PIE9D_27),
/// ¿¿¿
// Select lower case mode.
/// ???
// Select lower case mode. TODO: remove
INC_PIE9C_26(FourCornerDotCake.FC_PIE9C_26),
;
private static final FCDotINC0801DashP8[] VALUES = values();

View file

@ -35,7 +35,6 @@ import org.x4o.fc18.cake2.flag4.FCDotF4TTY0001DashNL;
import org.x4o.fc18.cake2.flag4.FCDotF4TXT0001DashSP;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
import org.x4o.fc18.cake2.zero33.dec1.FCDotCMD5401Dash2D;
import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC0801DashE10;
import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0;
import org.x4o.fc18.cake2.zero33.dec1.FCDotINC0801DashP8;
import org.x4o.fc18.octal8.PrimordialOctal;
@ -69,7 +68,6 @@ public class FourCornerZionStenoLexer implements FourCornerZionStenoPetroglyphs
private int cdcDECScanIndexEnd = 0;
private FCDotDEC2701DashPX0 cdcDECMode = null;
private FCDotINC0801DashP8 cdcDECModeInc = null;
private FCDotDEC0801DashE10 cdcDECModeE10 = null;
private int cdcDECModePie = 0;
private Boolean cdcDECModePieAlt = null;
private FourCornerZionStenoLexerSmoke smokeSignals = CLEAN_SMOKE;
@ -260,7 +258,6 @@ public class FourCornerZionStenoLexer implements FourCornerZionStenoPetroglyphs
private void decModeReset() {
cdcDECMode = null;
cdcDECModeInc = null;
cdcDECModeE10 = null;
cdcDECModePie = 0;
cdcDECModePieAlt = null;
}
@ -728,9 +725,6 @@ public class FourCornerZionStenoLexer implements FourCornerZionStenoPetroglyphs
if (FCDotDEC2701DashPX0.ESC68_CMD5401_2D.equals(cdcDECMode)) {
return handleCMD(lexer);
}
if (FCDotDEC2701DashPX0.ESC_DEC0801_E10.equals(cdcDECMode)) {
return handleE10(lexer);
}
if (FCDotDEC2701DashPX0.ESC68_INC0801_P8.equals(cdcDECMode)) {
return handleINC(lexer);
}
@ -763,43 +757,6 @@ public class FourCornerZionStenoLexer implements FourCornerZionStenoPetroglyphs
return true;
}
private boolean handleE10(FourCornerZionStenoLexer lexer) {
int cdcPoint = lexer.input.get(lexer.cdcDECScanIndex);
if (FCDotCDC1604DashP6.isEscapePepper(cdcPoint)) {
lexer.cdcDECModeE10 = FCDotDEC0801DashE10.valueOf(readEscapePepper3(lexer));
return true;
}
if (FCDotCDC1604DashP6._SALAH_INTERROBANG.baklavaPointDotIndex() == cdcPoint) {
lexer.decModeReset();
return true; // end E10 mode, so no print
}
// if (FCDotCDC1604DashP6._RAKA_QUESTION.baklavaPointDotIndex() == cdcPoint) {
// decModeE10DeckLevel = 0;
// }
// if (FCDotCDC1604DashP6._SALT_COMPARE_LEFT.baklavaPointDotIndex() == cdcPoint) {
// decModeE10DeckLevel = 1;
// return true;
// }
// if (FCDotCDC1604DashP6._SALT_COMPARE_RIGHT.baklavaPointDotIndex() == cdcPoint) {
// decModeE10DeckLevel = 2;
// return true;
// }
if (FCDotDEC0801DashE10.E10_CDC1604_P6.equals(lexer.cdcDECModeE10)) {
lexer.handler.strobeTheWord(cdcPoint); // not A based offset here
//lexer.handler.strobeWord(FourCornerDotCake.FC_CDC1604_P6, cdcPoint); // not A based offset here
return true;
}
FourCornerDotCake displayCake = lexer.cdcDECModeE10.displayCake();
if (cdcPoint < FCDotCDC1604DashP6.NX01_A.ordinal() || cdcPoint > displayCake.getLength() - 1 + FCDotCDC1604DashP6.NX01_A.ordinal()) {
lexer.decModeReset();
return false;
}
//lexer.handler.strobeWord(displayCake, cdcPoint - FCDotCDC1604DashP6.NX01_A.ordinal());
lexer.handler.strobeTheWord(displayCake.getStart() + cdcPoint - FCDotCDC1604DashP6.NX01_A.ordinal());
return true;
}
private boolean handleCMD(FourCornerZionStenoLexer lexer) {
int cdcPoint = lexer.input.get(lexer.cdcDECScanIndex);
FCDotCMD5401Dash2D cmdMode = FCDotCMD5401Dash2D.valueOfCDC(cdcPoint);

View file

@ -32,7 +32,6 @@ import org.x4o.fc18.cake2.pie9c.FCDotPIE9CDash26;
import org.x4o.fc18.cake2.pie9d.FCDotPIE9DDash10;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
import org.x4o.fc18.cake2.zero33.dec1.FCDotCMD5401Dash2D;
import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC0801DashE10;
import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0;
import org.x4o.fc18.cake2.zero33.dec1.FCDotINC0801DashP8;
@ -94,35 +93,6 @@ public class FourCornerUnicodeDisplayTest {
Assertions.assertEquals("B3K", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
/*
@Test
public void testUnicode() throws Exception {
List<Integer> cdc = new ArrayList<>();
cdc.add(FCDotCDC1604DashP6.NX23_W.ordinal());
cdc.add(FCDotCDC1604DashP6.NY09_EQUALS.ordinal());
cdc.addAll(FourCornerRecipe.embedUNI2K("©Δ∞ 仙上主天"));
cdc.add(FCDotCDC1604DashP6.NY20_PLUS.ordinal());
cdc.addAll(FourCornerRecipe.embedUNI2K("𑀳𑁂𑀮𑀺𑀉𑁄𑀤𑁄𑀭𑁂𑀡 𑀪𑀸𑀕"));
cdc.add(FCDotCDC1604DashP6.NY14_SEMICOLON.ordinal());
//cdc.add(FCDotCDC1604DashP6._NEWLINE.ordinal());
String outputExpected = "W=©Δ∞ 仙上主天+𑀳𑁂𑀮𑀺𑀉𑁄𑀤𑁄𑀭𑁂𑀡 𑀪𑀸𑀕;";
Assertions.assertEquals(outputExpected, FourCornerUnicodeDisplay.text().renderFromInt18(cdc));
int bitsUTF8 = outputExpected.getBytes(StandardCharsets.UTF_8).length*8;
int bitsFC18 = cdc.size()*18;
Assertions.assertTrue(bitsFC18 < bitsUTF8, "FC18 is not smaller");
//List<Integer> cdc6 = FourCornerRecipe.embedFC18(cdc);
//Assertions.assertEquals(outputExpected, FourCornerUnicodeDisplay.text().renderFromInt18(cdc6));
//Assertions.assertTrue(cdc6.size() > cdc.size(), "FCx6 is not bigger");
System.out.println("size FC18="+cdc.size());
System.out.println("size 0x21="+outputExpected.length());
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 {
@ -197,33 +167,4 @@ public class FourCornerUnicodeDisplayTest {
// Assertions.assertEquals("𝘩𝘰𝘪╗╞╘hoi", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
Assertions.assertEquals("╗╞╘hoi", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
@Test
public void testDecE10RangeChecks() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(FCDotDEC2701DashPX0.ESC_DEC0801_E10);
cdc.add(FCDotDEC0801DashE10.E10_UWU0101_S1);
cdc.add(FCDotCDC1604DashP6.NX08_H); // H
cdc.add(FCDotDEC2701DashPX0.ESC_DEC0801_E10);
cdc.add(FCDotDEC0801DashE10.E10_UWU0101_S1);
cdc.add(FCDotCDC1604DashP6._SALAH_INTERROBANG);
cdc.add(FCDotCDC1604DashP6.NX15_O); // O
cdc.add(FCDotDEC2701DashPX0.ESC_DEC0801_E10);
cdc.add(FCDotDEC0801DashE10.E10_UWU0101_S1);
cdc.add(FCDotDEC2701DashPX0.ESC_STOP);
cdc.add(FCDotCDC1604DashP6.NX09_I); // I
cdc.add(FCDotDEC2701DashPX0.ESC_DEC0801_E10);
cdc.add(FCDotDEC0801DashE10.E10_UWU0101_S1);
cdc.add(FCDotCDC1604DashP6.NX01_A); // T001__ONE
cdc.add(FCDotCDC1604DashP6._SALAH_INTERROBANG);
cdc.add(FCDotCDC1604DashP6.NX08_H); // HOI
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotDEC2701DashPX0.ESC_DEC0801_E10);
cdc.add(FCDotDEC0801DashE10.E10_UWU0101_S1);
cdc.add(FCDotCDC1604DashP6.NX02_B); // B
cdc.add(FCDotCDC1604DashP6._SALAH_INTERROBANG); // with ! as we droped out of escape mode by B being to large
Assertions.assertEquals("HOIT001__ONEHOIB‽", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
}

View file

@ -27,6 +27,7 @@ import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.x4o.fc18.FourCornerUnicodeDisplay;
/**
* Tests FCDotCDC1604DashP6 encoding.
@ -52,4 +53,27 @@ public class FCDotCDC1604DashP6Test {
Assertions.assertTrue(global.size() > 1);
Assertions.assertFalse(duplicate, "Duplicate ascii core value detected");
}
@Test
public void testPepper3Points() throws Exception {
Assertions.assertEquals("!!!", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(0)));
Assertions.assertEquals("!!?", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(1)));
Assertions.assertEquals("!?!", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(2)));
Assertions.assertEquals("!??", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(3)));
Assertions.assertEquals("?!!", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(4)));
Assertions.assertEquals("?!?", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(5)));
Assertions.assertEquals("??!", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(6)));
Assertions.assertEquals("???", FourCornerUnicodeDisplay.text().renderFromInt18(FCDotCDC1604DashP6.pepper3SequenceWritePoints(7)));
}
@Test
public void testPepper3PointsRange() throws Exception {
Assertions.assertThrows(IllegalArgumentException.class, () -> {
FCDotCDC1604DashP6.pepper3SequenceWritePoints(-1);
});
Assertions.assertThrows(IllegalArgumentException.class, () -> {
FCDotCDC1604DashP6.pepper3SequenceWritePoints(8);
});
}
}

View file

@ -20,13 +20,13 @@
* 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.cake2.zero33;
package org.x4o.fc18.cake2.zero33.dec1;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
/**
* Tests DEC encoding.
@ -34,7 +34,7 @@ import org.x4o.fc18.cake2.zero33.dec1.FCDotDEC2701DashPX0;
* @author Willem Cazander
* @version 1.0 Jan 08, 2025
*/
public class FCDotDEC0127DashPX0Test {
public class FCDotDEC2701DashPX0Test {
@Test
public void testSize() throws Exception {

View file

@ -20,14 +20,37 @@
* 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;
package org.x4o.fc18.cake2.zero33.dec1;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
/**
* Tests FourCornerRecipe methods.
* Tests include LUA pages encoding.
*
* @author Willem Cazander
* @version 1.0 Aug 7, 2025
* @version 1.0 Sep 6, 2025
*/
public class FourCornerRecipeTest {
public class FCDotINC0801DashP8Test {
@Test
public void testSize() throws Exception {
Assertions.assertEquals(8, FCDotINC0801DashP8.values().length);
}
@Test
public void testBaklavaSequence() throws Exception {
List<Integer> seq = null;
seq = FCDotINC0801DashP8.INC_LUA0127_P7D.baklavaPointSequence();
Assertions.assertEquals(6, seq.size());
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X2.ordinal(), seq.get(0));
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X3.ordinal(), seq.get(1));
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X1.ordinal(), seq.get(2));
Assertions.assertEquals(FCDotCDC1604DashP6._PEPPER_EXCLAMATION.ordinal(), seq.get(3));
Assertions.assertEquals(FCDotCDC1604DashP6._PEPPER_QUESTION.ordinal(), seq.get(4));
Assertions.assertEquals(FCDotCDC1604DashP6._PEPPER_QUESTION.ordinal(), seq.get(5));
}
}