Moved pie to two connected elevator ESC68_2PIE9C and ESC68_2PIE9D

This commit is contained in:
Willem Cazander 2025-05-25 12:30:46 +02:00
parent 9c1ff8522e
commit 905bec88e2
7 changed files with 109 additions and 78 deletions

View file

@ -260,11 +260,8 @@ public class FourCornerUnicodeImport {
}
if (ctx.codePoint >= '0' && ctx.codePoint <= '9') {
if (!FCDotCDC1604DashP6.NY10_CARET.equals(ctx.cdcNumberTerminator)) {
if (ctx.bits == 6) {
ctx.output.addAll(toX06BaklavaPoints(FCDotCDC1604DashP6.NY10_CARET));
} else {
ctx.output.addAll(toX08MuffinPoints(FCDotCDC1604DashP6.NY10_CARET));
}
ctx.output.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
ctx.output.add(FCDotCDC1604DashP6.NY10_CARET);
ctx.cdcNumberTerminator = FCDotCDC1604DashP6.NY10_CARET;
}
int cdcNumberOff = ctx.codePoint - '0';
@ -274,11 +271,7 @@ public class FourCornerUnicodeImport {
}
if (ctx.cdcNumberTerminator != null) {
ctx.cdcNumberTerminator = null;
if (ctx.bits == 6) {
ctx.output.addAll(toX06BaklavaEscStop());
} else {
ctx.output.add(FCDotDEC2701DashPX0.ESC_STOP);
}
ctx.output.add(FCDotDEC2701DashPX0.ESC_STOP);
}
return false;
}
@ -289,11 +282,8 @@ public class FourCornerUnicodeImport {
}
if (ctx.codePoint >= 'a' && ctx.codePoint <= 'z') {
if (!FCDotCDC1604DashP6.NY26_SQUARE_RIGHT.equals(ctx.cdcCaseTerminator)) {
if (ctx.bits == 6) {
ctx.output.addAll(toX06BaklavaPoints(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT));
} else {
ctx.output.addAll(toX08MuffinPoints(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT));
}
ctx.output.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
ctx.output.add(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT);
ctx.cdcCaseTerminator = FCDotCDC1604DashP6.NY26_SQUARE_RIGHT;
}
int cdcNumberOff = ctx.codePoint - 'a';
@ -303,39 +293,11 @@ public class FourCornerUnicodeImport {
}
if (ctx.cdcCaseTerminator != null) {
ctx.cdcCaseTerminator = null;
if (ctx.bits == 6) {
ctx.output.addAll(toX06BaklavaEscStop());
} else {
ctx.output.add(FCDotDEC2701DashPX0.ESC_STOP);
}
ctx.output.add(FCDotDEC2701DashPX0.ESC_STOP);
}
return false;
}
private List<FourCornerX06BaklavaPointSequence> toX06BaklavaEscStop() {
List<FourCornerX06BaklavaPointSequence> result = new ArrayList<>();
result.addAll(FCDotDEC2701DashPX0.ESC_STOP.baklavaPointSequence().stream().map(v -> FCDotCDC1604DashP6.valueOf(v)).toList());
return result;
}
private List<FourCornerX08MuffinPointSequence> toX08MuffinPoints(FCDotCDC1604DashP6... letters) {
List<FourCornerX08MuffinPointSequence> result = new ArrayList<>();
result.add(FCDotDEC2701DashPX0.ESC68_2PIE);
for (FCDotCDC1604DashP6 letter : letters) {
result.add(letter);
}
return result;
}
private List<FourCornerX06BaklavaPointSequence> toX06BaklavaPoints(FCDotCDC1604DashP6... letters) {
List<FourCornerX06BaklavaPointSequence> result = new ArrayList<>();
result.add(FCDotDEC2701DashPX0.ESC68_2PIE);
for (FCDotCDC1604DashP6 letter : letters) {
result.add(letter);
}
return result;
}
private boolean handleDiacritics(ImportState ctx) {
if (convertDiacritics) {
FCDotCDC1604DashP6 alias = checkDiacriticAlias(ctx.codePoint);

View file

@ -62,7 +62,7 @@ public interface FourCornerDotCollePie9 extends FourCornerX06BaklavaPointSequenc
default List<Integer> baklavaPointsPIE9C(FCDotCDC1604DashP6 letter, int offset) {
List<Integer> result = new ArrayList<>();
result.addAll(FCDotDEC2701DashPX0.ESC68_2PIE.baklavaPointSequence());
result.addAll(FCDotDEC2701DashPX0.ESC68_2PIE9C.baklavaPointSequence());
result.add(letter.baklavaPointDotIndex());
result.add(FCDotCDC1604DashP6.NX01_A.ordinal() + offset);
//result.add(FCDotCDC1604DashP6.SEQ_SALAH__EXCLAMATION.cakePointDotIndex()); // TODO: add api layer snake for head
@ -71,9 +71,8 @@ public interface FourCornerDotCollePie9 extends FourCornerX06BaklavaPointSequenc
default List<Integer> baklavaPointsPIE9D(FCDotCDC1604DashP6 letter, int offset) {
List<Integer> result = new ArrayList<>();
result.addAll(FCDotDEC2701DashPX0.ESC68_2PIE.baklavaPointSequence());
result.addAll(FCDotDEC2701DashPX0.ESC68_2PIE9D.baklavaPointSequence());
result.add(letter.baklavaPointDotIndex());
result.add(FCDotCDC1604DashP6._SALT_COMPARE_RIGHT.baklavaPointDotIndex());
result.add(FCDotCDC1604DashP6.NX01_A.ordinal() - offset);
//result.add(FCDotCDC1604DashP6.SEQ_SALAH__EXCLAMATION.cakePointDotIndex()); // TODO: add api layer snake for head
return result;

View file

@ -105,15 +105,26 @@ public enum FCDotDEC2701DashPX0 implements FourCornerX06BaklavaPointSequence, Fo
__ESC_RESERVED_B4,
/// _ESC6_X2 _ESC6_X2 _ESC6_X2 = 14
__ESC_RESERVED_B5,
/// Select packed pie 9C terminator symbol on 6 and 8 bit systems.
/// NX_xx = pie candy printing
/// NY_yy = pie ring selector
/// ¡ = one ring up
/// ¿ = one ring down
/// < = goto 9C left cake
/// > = goto 9D right cake
/// out of range or ! or ? = end mode
ESC68_2PIE9C,
/// _ESC6_X2 _ESC6_X2 _ESC6_X3 = 15
/// Select psacked pie terminator symbol on 6 and 8 bit systems.
/// A = 1, first P6 is terminator select, than next P6 _A++ select pie part 1-27, until other P6 stops it.
/// Example ascii "012" is
/// 012 = __PIE NX10_J NX01_A NX02_B NX02_C
/// TODO: Add negative AT for -1 to -27 as P6 symbols to select PIE9D + map in __RESERVED_PIE_SYMBOLS
ESC68_2PIE,
/// Select packed pie 9D terminator symbol on 6 and 8 bit systems.
/// NX_xx = pie candy printing
/// NY_yy = pie ring selector
/// ¡ = one ring up
/// ¿ = one ring down
/// < = goto 9C left cake
/// > = goto 9D right cake
/// out of range or ! or ? = end mode
ESC68_2PIE9D,
/// _ESC6_X2 _ESC6_X3 _ESC6_X1 = 16
/// Embed symbol mode starts in CDC, use sequence of 3 UPDOWN letters to select mode and end with !

View file

@ -69,7 +69,7 @@ public class FourCornerZionStenoLexer {
private FCDotDEC0801DashE10 cdcDECModeE10 = null;
private Integer cdcDECModeNcr = null;
private int cdcDECModePie = 0;
private boolean cdcDECModePieAlt = false;
private Boolean cdcDECModePieAlt = null;
private FourCornerZionStenoLexerSmoke smokeSignals = CLEAN_SMOKE;
private FourCornerZionStenoLexerFire fireSignals = CLEAN_FIRE;
@ -257,7 +257,7 @@ public class FourCornerZionStenoLexer {
cdcDECModeE10 = null;
cdcDECModeNcr = null;
cdcDECModePie = 0;
cdcDECModePieAlt = false;
cdcDECModePieAlt = null;
}
abstract static private class StenoScanner {
@ -606,7 +606,16 @@ public class FourCornerZionStenoLexer {
lexer.handlerSalahSequence.strobeSalahSequence(cdcDECMode, args);
return true;
}
if (FCDotDEC2701DashPX0.ESC68_2PIE.equals(cdcDECMode)) {
if (FCDotDEC2701DashPX0.ESC68_2PIE9C.equals(cdcDECMode)) {
if (lexer.cdcDECModePieAlt == null) {
lexer.cdcDECModePieAlt = false;
}
return handlePIE(lexer);
}
if (FCDotDEC2701DashPX0.ESC68_2PIE9D.equals(cdcDECMode)) {
if (lexer.cdcDECModePieAlt == null) {
lexer.cdcDECModePieAlt = true;
}
return handlePIE(lexer);
}
if (FCDotDEC2701DashPX0.ESC68_CMD5401_2D.equals(cdcDECMode)) {
@ -718,21 +727,31 @@ public class FourCornerZionStenoLexer {
if (cdcPoint >= FCDotCDC1604DashP6.NY27_SQUARE_LEFT.ordinal() && cdcPoint <= FCDotCDC1604DashP6.NY01_AT.ordinal()) {
lexer.cdcDECModePie = FCDotCDC1604DashP6.NY01_AT.ordinal() - cdcPoint; // goto relative
return true; // swallow button
} else if (cdcPoint == FCDotCDC1604DashP6._PEPPER_DOWNUP_EXCLAMATION.ordinal()) {
if (lexer.cdcDECModePie < 26) {
lexer.cdcDECModePie++;
}
return true; // eat the up pepper
} else if (cdcPoint == FCDotCDC1604DashP6._PEPPER_DOWNUP_QUESTION.ordinal()) {
if (lexer.cdcDECModePie > 0) {
lexer.cdcDECModePie--;
}
return true; // eat the down pepper
} else if (cdcPoint == FCDotCDC1604DashP6._SALT_COMPARE_LEFT.ordinal()) {
lexer.cdcDECModePieAlt = false;
return true; // eat the left salt
} else if (cdcPoint == FCDotCDC1604DashP6._SALT_COMPARE_RIGHT.ordinal()) {
lexer.cdcDECModePieAlt = true;
return true; // eat the right salt
} else if (cdcPoint <= FCDotCDC1604DashP6._PEPPER_DOWNUP_QUESTION.ordinal()) {
} else if (cdcPoint == FCDotCDC1604DashP6._SALAH_EXCLAMATION.ordinal() || cdcPoint == FCDotCDC1604DashP6._RAKA_QUESTION.ordinal()) {
lexer.decModeReset();
return false; // print char
return true; // eat salah and end mode
}
int terminatorOffZero = lexer.cdcDECModePie;
int numberIdxOffZero = cdcPoint - FCDotCDC1604DashP6.NX01_A.ordinal();
if (numberIdxOffZero > terminatorOffZero) {
lexer.decModeReset();
return false;
return false; // print char (out of range)
}
int sliceBase = FourCornerDotCake.FC_PIE9C_01.ordinal();
if (lexer.cdcDECModePieAlt) {

View file

@ -54,7 +54,7 @@ public class FourCornerUnicodeDisplayTest {
cdc.add(FCDotCDC1604DashP6.NX03_C);
cdc.add(FCDotCDC1604DashP6.NX04_D);
cdc.add(FCDotCDC1604DashP6.NY16_DOT);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT); // select lower case
cdc.add(FCDotCDC1604DashP6.NX10_J);
cdc.add(FCDotCDC1604DashP6.NX11_K);
@ -65,17 +65,17 @@ public class FourCornerUnicodeDisplayTest {
cdc.add(FCDotCDC1604DashP6.NX15_O);
Assertions.assertEquals("ab BCD.jk𝐋𝐌O", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
Assertions.assertEquals("␇␇␘]A␇␇␘]B␘␆␆ABCD.␇␇␘]JK>LM␘␘␘O", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
Assertions.assertEquals("␇␇␇]A␇␇␇]B␘␆␆ABCD.␇␇␇]JK>LM␘␘␘O", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
}
@Test
public void testNumberTerminatorOutOfRange() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(FCDotCDC1604DashP6.NX24_X); // = X
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NY10_CARET);
cdc.add(FCDotCDC1604DashP6.NY06_PERCENT);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NY01_AT);
cdc.add(FCDotCDC1604DashP6.NX11_K); // = K
@ -85,9 +85,9 @@ public class FourCornerUnicodeDisplayTest {
@Test
public void testNumberPieOutOfRange() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NX02_B); // B
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE);
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NY10_CARET);
cdc.add(FCDotCDC1604DashP6.NX04_D); // 3
cdc.add(FCDotCDC1604DashP6.NX11_K); // K
@ -125,7 +125,48 @@ public class FourCornerUnicodeDisplayTest {
}
@Test
public void testItianalText() throws Exception {
public void testDec2PieText() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(FCDotDEC2701DashPX0.ESC68_2PIE9C);
cdc.add(FCDotCDC1604DashP6.NY24_ROUND_RIGHT);
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6.NY25_ROUND_LEFT);
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT);
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6.NY27_SQUARE_LEFT);
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6._SALT_COMPARE_RIGHT); // goto right FC.PIE9D-27
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6._PEPPER_DOWNUP_QUESTION); // goto up FC.PIE9D-26
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6._PEPPER_DOWNUP_QUESTION); // goto up FC.PIE9D-25
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6._PEPPER_DOWNUP_QUESTION); // goto up FC.PIE9D-24
cdc.add(FCDotCDC1604DashP6.NX08_H);
cdc.add(FCDotCDC1604DashP6.NX15_O);
cdc.add(FCDotCDC1604DashP6.NX09_I);
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION);
Assertions.assertEquals("θ̲ο̲ι̲θοιhoih̲o̲i̲𝘩𝘰𝘪𝐇𝐎𝐈ΘΟΙ𝚯𝚶𝚰", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
@Test
public void testDecIncText() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(FCDotDEC2701DashPX0.ESC68_INC0801_P8);
cdc.add(FCDotINC0801DashP8.INC_PIE9D_27);

View file

@ -68,7 +68,7 @@ public class FourCornerUnicodeImportTest {
Assertions.assertNotNull(cdc);
Assertions.assertFalse(cdc.isEmpty());
Assertions.assertEquals(8, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE, cdi.next());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE9C, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX06_F, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX15_O, cdi.next());
@ -87,21 +87,20 @@ public class FourCornerUnicodeImportTest {
Iterator<FourCornerX06BaklavaPointSequence> cdi = cdc.iterator();
Assertions.assertNotNull(cdc);
Assertions.assertFalse(cdc.isEmpty());
Assertions.assertEquals(11, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE, cdi.next());
Assertions.assertEquals(9, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE9C, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX06_F, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX15_O, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX15_O, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X3, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X3, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6._ESC6_X3, cdi.next());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC_STOP, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX02_B, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX01_A, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX18_R, cdi.next());
String out = FourCornerUnicodeDisplay.text().renderFromX06(cdc);
Assertions.assertEquals("fooBAR", out);
Assertions.assertEquals("␇␇␇]FOO␘␘␘BAR", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
}
@Test
@ -111,7 +110,7 @@ public class FourCornerUnicodeImportTest {
Assertions.assertNotNull(cdc);
Assertions.assertFalse(cdc.isEmpty());
Assertions.assertEquals(9, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE, cdi.next());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE9C, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NY26_SQUARE_RIGHT, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX06_F, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX15_O, cdi.next());
@ -174,7 +173,7 @@ public class FourCornerUnicodeImportTest {
Assertions.assertNotNull(cdc);
Assertions.assertFalse(cdc.isEmpty());
Assertions.assertEquals(10, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE, cdi.next());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE9C, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NY10_CARET, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX01_A, cdi.next()); // 0
Assertions.assertEquals(FCDotCDC1604DashP6.NX02_B, cdi.next()); // 1
@ -196,7 +195,7 @@ public class FourCornerUnicodeImportTest {
Assertions.assertNotNull(cdc);
Assertions.assertFalse(cdc.isEmpty());
Assertions.assertEquals(10, cdc.size());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE, cdi.next());
Assertions.assertEquals(FCDotDEC2701DashPX0.ESC68_2PIE9C, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NY10_CARET, cdi.next());
Assertions.assertEquals(FCDotCDC1604DashP6.NX01_A, cdi.next()); // 0
Assertions.assertEquals(FCDotCDC1604DashP6.NX02_B, cdi.next()); // 1

View file

@ -50,7 +50,7 @@ public class FCDotVT06Test {
cdc.addAll(FourCornerUnicodeMapper.DICTIONARY.toDecimalsX06(456));
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION);
Assertions.assertEquals("␘␘␇AG␇␇␘^BCD?␇␇␘^EFG!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
Assertions.assertEquals("␘␘␇AG␇␇␇^BCD?␇␇␇^EFG!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
// TODO: Fix lexer embedded escapes, and display external with single unicode escape sign
//Assertions.assertEquals("?AG?BCD?EFG!", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
@ -62,6 +62,6 @@ public class FCDotVT06Test {
cdc.addAll(FourCornerUnicodeMapper.DICTIONARY.toDecimalsX06(5));
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION);
Assertions.assertEquals("␘␘␇CA␇␇^F!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
Assertions.assertEquals("␘␘␇CA␇␇^F!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
}
}