FC18: Changed recipe output to be integer only

This commit is contained in:
Willem Cazander 2025-08-22 16:45:38 +02:00
parent a122f4e181
commit 6c0ee56272
3 changed files with 38 additions and 25 deletions

View file

@ -404,26 +404,23 @@ final public class FourCornerRecipe {
return out;
}
// todo: remove X06 output here ??
static public List<FourCornerX06BaklavaPointSequence> toDecimalsX06(int value) {
return toDecimalsX00(new ArrayList<>(), value);
static public List<Integer> toDecimalsX06(int value) {
return toDecimalsX00(new ArrayList<>(), value, true);
}
static public List<FourCornerX18CakePointSequence> toDecimalsX18(int value) {
return toDecimalsX00(new ArrayList<>(), value);
static public List<Integer> toDecimalsX18(int value) {
return toDecimalsX00(new ArrayList<>(), value, false);
}
static public void toDecimalsX06(List<FourCornerX06BaklavaPointSequence> out, int value) {
toDecimalsX00(out, value);
static public void toDecimalsX06(List<Integer> out, int value) {
toDecimalsX00(out, value, true);
}
static public void toDecimalsX18(List<FourCornerX06BaklavaPointSequence> out, int value) {
toDecimalsX00(out, value);
static public void toDecimalsX18(List<Integer> out, int value) {
toDecimalsX00(out, value, false);
}
@SuppressWarnings("unchecked")
static private <T extends FourCornerX00PetitVide> List<T> toDecimalsX00(List<T> out, int value) {
static private List<Integer> toDecimalsX00(List<Integer> out, int value, boolean isSixBit) {
String valueStr = Integer.toString(value);
PrimitiveIterator.OfInt i = valueStr.codePoints().iterator();
boolean first = true;
@ -431,12 +428,23 @@ final public class FourCornerRecipe {
int chr = i.nextInt();
int num = chr - '0';
if (first) {
first = false; // Add escaping only once
out.add((T) FCDotPIE9CDash10.valueOf(num));
first = false; // Add escaping only once for six bit mode
if (isSixBit) {
out.addAll(FCDotPIE9CDash10.valueOf(num).baklavaPointSequence());
} else {
out.add(FCDotPIE9CDash10.valueOf(num).cakePointDotIndex());
}
} else {
out.add((T) FCDotCDC1604DashP6.valueOf(FCDotCDC1604DashP6.NX01_A.ordinal() + num));
if (isSixBit) {
out.add(FCDotCDC1604DashP6.NX01_A.ordinal() + num);
} else {
out.add(FCDotPIE9CDash10.valueOf(num).cakePointDotIndex());
}
}
}
if (isSixBit) {
out.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION.cakePointDotIndex()); // fixme improve: see FourCornerDotCollePie9.baklavaPointsPIE9C
}
return out;
}
}

View file

@ -89,30 +89,36 @@ public class FourCornerUnicodeDisplay {
return buf.toString();
}
@Deprecated
public String renderFromX06(List<FourCornerX06BaklavaPointSequence> chars) {
return buildString(v -> renderFromX06(chars, v));
}
@Deprecated
public void renderFromX06(List<FourCornerX06BaklavaPointSequence> chars, StringBuilder buf) {
List<Integer> charPoints = new ArrayList<>(chars.size());
chars.forEach(v -> charPoints.addAll(v.baklavaPointSequence()));
renderFromInt18(charPoints, buf);
}
@Deprecated
public String renderFromX08(List<FourCornerX08MuffinPointSequence> chars) {
return buildString(v -> renderFromX08(chars, v));
}
@Deprecated
public void renderFromX08(List<FourCornerX08MuffinPointSequence> chars, StringBuilder buf) {
List<Integer> charPoints = new ArrayList<>(chars.size());
chars.forEach(v -> charPoints.addAll(v.muffinPointSequence()));
renderFromInt18(charPoints, buf);
}
@Deprecated
public String renderFromX18(List<FourCornerX18CakePointSequence> chars) {
return buildString(v -> renderFromX18(chars, v));
}
@Deprecated
public void renderFromX18(List<FourCornerX18CakePointSequence> chars, StringBuilder buf) {
List<Integer> charPoints = new ArrayList<>(chars.size());
chars.forEach(v -> charPoints.addAll(v.cakePointSequence()));

View file

@ -29,7 +29,6 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.x4o.fc18.FourCornerUnicodeDisplay;
import org.x4o.fc18.FourCornerRecipe;
import org.x4o.fc18.cake2.FourCornerX06BaklavaPointSequence;
import org.x4o.fc18.cake2.zero33.vt06.VTDash06DotZeroACursor;
import org.x4o.fc18.cake2.zero33.vt06.VTDash06DotZeroCClear;
@ -43,25 +42,25 @@ public class FCDotVT06Test {
@Test
public void testCusorGoto() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(VTDash06DotZeroACursor.VT_CURSOR_GOTO);
List<Integer> cdc = new ArrayList<>();
cdc.addAll(VTDash06DotZeroACursor.VT_CURSOR_GOTO.baklavaPointSequence());
cdc.addAll(FourCornerRecipe.toDecimalsX06(123)); // TODO: fix these are the wrong, we need to use the txt grams version
cdc.add(FCDotCDC1604DashP6._RAKA_QUESTION);
cdc.add(FCDotCDC1604DashP6._RAKA_QUESTION.baklavaPointDotIndex());
cdc.addAll(FourCornerRecipe.toDecimalsX06(456));
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION);
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION.baklavaPointDotIndex());
Assertions.assertEquals("␘␘␇AG␇␇␇^BCD?␇␇␇^EFG!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
Assertions.assertEquals("␘␘␇AG␇␇␇^BCD?␇␇␇^EFG!", FourCornerUnicodeDisplay.raw().renderFromInt18(cdc));
// TODO: Fix lexer embedded escapes, and display external with single unicode escape sign
//Assertions.assertEquals("?AG?BCD?EFG!", FourCornerUnicodeDisplay.text().renderFromX06(cdc));
}
@Test
public void testClearTop5Lines() throws Exception {
List<FourCornerX06BaklavaPointSequence> cdc = new ArrayList<>();
cdc.add(VTDash06DotZeroCClear.VT_CLEAR_TOP);
List<Integer> cdc = new ArrayList<>();
cdc.addAll(VTDash06DotZeroCClear.VT_CLEAR_TOP.baklavaPointSequence());
cdc.addAll(FourCornerRecipe.toDecimalsX06(5));
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION);
cdc.add(FCDotCDC1604DashP6._SALAH_EXCLAMATION.baklavaPointDotIndex());
Assertions.assertEquals("␘␘␇CA␇␇␇^F!", FourCornerUnicodeDisplay.raw().renderFromX06(cdc));
Assertions.assertEquals("␘␘␇CA␇␇␇^F!", FourCornerUnicodeDisplay.raw().renderFromInt18(cdc));
}
}