diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexer.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexer.java index 7d39594..c6af599 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexer.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexer.java @@ -336,16 +336,22 @@ public class FourCornerZionStenoLexer { } private void handlePoints(List slicedPoints) { + boolean errorUnusedBigIndian = false; // are optional List result = new ArrayList<>(); int codePoint22 = 0; for (Integer cakePoint : slicedPoints) { if (cakePoint >= FourCornerDotCake.FC_UNI2K_22.getStart() && cakePoint <= FourCornerDotCake.FC_UNI2K_22.getStop()) { codePoint22 = cakePoint - FourCornerDotCake.FC_UNI2K_22.getStart(); + errorUnusedBigIndian = true; continue; } int codePointL = cakePoint - FourCornerDotCake.FC_UNI2K_11.getStart(); int codePoint = (codePoint22 << 11) + codePointL; result.add(codePoint); + errorUnusedBigIndian = false; + } + if (smokeSignals != null && errorUnusedBigIndian) { + smokeSignals.burnUNI21UnusedBigIndian(currLine, currCol); } handler.strobeUnicode(result); } diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexerSmoke.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexerSmoke.java index 4f2af08..0b7fc11 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexerSmoke.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/fc18/zion7/FourCornerZionStenoLexerSmoke.java @@ -36,6 +36,8 @@ public interface FourCornerZionStenoLexerSmoke { void burnInvalidEscape(int line, int col, int cakePoint); + void burnUNI21UnusedBigIndian(int line, int col); + void burnNCR1632ZeroSparks(int line, int col); void burnNCR1632UnusedSparks(int line, int col); @@ -58,6 +60,10 @@ public interface FourCornerZionStenoLexerSmoke { default void burnInvalidEscape(int line, int col, int cakePoint) { } + @Override + default void burnUNI21UnusedBigIndian(int line, int col) { + } + @Override default void burnNCR1632ZeroSparks(int line, int col) { } diff --git a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerNCRTest.java b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerNCRTest.java index c268999..0206af5 100644 --- a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerNCRTest.java +++ b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerNCRTest.java @@ -41,28 +41,7 @@ import org.x4o.o2o.fc18.zero33.FCDotDEC0127DashPX0; */ public class LexerNCRTest { - SmokeReader SMOKE_READER = new SmokeReader(); - - class SmokeReader implements FourCornerZionStenoLexerSmoke.Adapter { - - int errorNCRZeroSparks = -1; - int errorNCRUnusedSparks = -1; - - public void reset() { - errorNCRZeroSparks = -1; - errorNCRUnusedSparks = -1; - } - - @Override - public void burnNCR1632ZeroSparks(int line, int col) { - errorNCRZeroSparks = line; - } - - @Override - public void burnNCR1632UnusedSparks(int line, int col) { - errorNCRUnusedSparks = line; - } - }; + final TestSmokeReader SMOKE_READER = new TestSmokeReader(); @Test public void testNCRInvalid() throws Exception { diff --git a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerUNI21Test.java b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerUNI21Test.java new file mode 100644 index 0000000..1b93ff7 --- /dev/null +++ b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/LexerUNI21Test.java @@ -0,0 +1,58 @@ +/* + * 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.o2o.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.o2o.fc18.FourCornerDotCake; +import org.x4o.o2o.fc18.FourCornerUnicodeDisplay; +import org.x4o.o2o.fc18.FourCornerX06BaklavaPoints; +import org.x4o.o2o.fc18.zero33.FCDotCDC1604DashP6; +import org.x4o.o2o.fc18.zero33.FCDotDEC0127DashPX0; + +/** + * Tests four corner lexer parts. + * + * @author Willem Cazander + * @version 1.0 Jan 14, 2025 + */ +public class LexerUNI21Test { + + final TestSmokeReader SMOKE_READER = new TestSmokeReader(); + + @Test + public void testUNI21Invalid() throws Exception { + FourCornerZionStenoLexer lexer = new FourCornerZionStenoLexer(new FourCornerZion7Candlelier.Adapter() {}, true); + lexer.withSmokeSignals(SMOKE_READER); + List cdc = new ArrayList<>(); + cdc.add(FourCornerDotCake.FC_UNI2K_22.getStart() + 123); + + SMOKE_READER.reset(); + Assertions.assertEquals(-1, SMOKE_READER.errorUNI21UnusedBigIndian); + lexer.read(cdc); + Assertions.assertEquals(0, SMOKE_READER.errorUNI21UnusedBigIndian); + } +} diff --git a/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/TestSmokeReader.java b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/TestSmokeReader.java new file mode 100644 index 0000000..897ca93 --- /dev/null +++ b/nx01-x4o-o2o/src/test/java/org/x4o/o2o/fc18/zion7/TestSmokeReader.java @@ -0,0 +1,87 @@ +/* + * 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.o2o.fc18.zion7; + +/** + * Tests four corner lexer parts. + * + * @author Willem Cazander + * @version 1.0 Jan 14, 2025 + */ +public class TestSmokeReader implements FourCornerZionStenoLexerSmoke { + + int errorNCRZeroSparks; + int errorNCRUnusedSparks; + int errorUNI21UnusedBigIndian; + int errorUnsupport; + int errorRecursive; + + public TestSmokeReader() { + reset(); + } + + public void reset() { + errorNCRZeroSparks = -1; + errorNCRUnusedSparks = -1; + errorUNI21UnusedBigIndian = -1; + errorUnsupport = -1; + errorRecursive = -1; + } + + @Override + public void burnNCR1632ZeroSparks(int line, int col) { + errorNCRZeroSparks = line; + } + + @Override + public void burnNCR1632UnusedSparks(int line, int col) { + errorNCRUnusedSparks = line; + } + + @Override + public void burnUNI21UnusedBigIndian(int line, int col) { + errorUNI21UnusedBigIndian = line; + } + + @Override + public void burnUnsupported(int line, int col, int cakePoint) { + errorUnsupport = line; + } + + @Override + public void burnRecursive(int line, int col) { + errorRecursive = line; + } + + @Override + public void burnInvalidSalah(int line, int col) { + // TODO Auto-generated method stub + + } + + @Override + public void burnInvalidEscape(int line, int col, int cakePoint) { + // TODO Auto-generated method stub + + } +}