This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit d565afc484e6ff47dd2b1447ec2e34be02a6a84b
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue Mar 17 17:08:14 2026 +0000

    Fix: TurtleJCC: Handle text direction
---
 .../atlas/json/io/parserjavacc/JSONPrinter.java    | 109 +++++++++------------
 .../lang/turtlejcc/LangTurtleJCCParserBase.java    |  22 +++--
 .../apache/jena/arq/junit/riot/RiotSyntaxTest.java |   2 +-
 .../org/apache/jena/riot/Scripts_AltTurtle.java    |  12 +--
 4 files changed, 65 insertions(+), 80 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parserjavacc/JSONPrinter.java
 
b/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parserjavacc/JSONPrinter.java
index 2f4a670e27..79d2fbe450 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parserjavacc/JSONPrinter.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parserjavacc/JSONPrinter.java
@@ -21,113 +21,96 @@
 
 package org.apache.jena.atlas.json.io.parserjavacc;
 
-import org.apache.jena.atlas.io.IndentedWriter ;
-import org.apache.jena.atlas.json.io.JSONHandler ;
+import org.apache.jena.atlas.io.IndentedWriter;
+import org.apache.jena.atlas.json.io.JSONHandler;
 
 /** Parser debugging */
-public class JSONPrinter implements JSONHandler
-{
+public class JSONPrinter implements JSONHandler {
+
+    IndentedWriter out;
 
-    IndentedWriter out ;  
-    
     @Override
-    public void startParse(long currLine, long currCol)
-    {
-        out = new IndentedWriter(System.out, true) ; 
-        //out.setPadString("> ") ;
+    public void startParse(long currLine, long currCol) {
+        out = new IndentedWriter(System.out);
+        out.setLineNumbers(true);
+        // out.setPadString("> ");
     }
 
     @Override
-    public void finishParse(long currLine, long currCol)
-    {
-        out.flush() ;
+    public void finishParse(long currLine, long currCol) {
+        out.flush();
     }
 
     @Override
-    public void startObject(long currLine, long currCol)
-    { 
-        out.println(">>Object") ;
-        out.incIndent() ;
+    public void startObject(long currLine, long currCol) {
+        out.println(">>Object");
+        out.incIndent();
     }
 
     @Override
-    public void finishObject(long currLine, long currCol)
-    {
-        out.decIndent() ;
-        out.println("<<Object") ;
-    
+    public void finishObject(long currLine, long currCol) {
+        out.decIndent();
+        out.println("<<Object");
+
     }
-    
+
     @Override
-    public void startPair(long currLine, long currCol)
-    { 
-        out.println(">Pair") ;
-        out.incIndent() ;
+    public void startPair(long currLine, long currCol) {
+        out.println(">Pair");
+        out.incIndent();
     }
 
     @Override
-    public void keyPair(long currLine, long currCol)
-    {}
+    public void keyPair(long currLine, long currCol) {}
 
     @Override
-    public void finishPair(long currLine, long currCol)
-    { 
-        out.decIndent() ;
-        out.println("<Pair") ;
+    public void finishPair(long currLine, long currCol) {
+        out.decIndent();
+        out.println("<Pair");
     }
-    
+
     @Override
-    public void startArray(long currLine, long currCol)
-    {
-        out.println(">>Array") ;
-        out.incIndent() ;
+    public void startArray(long currLine, long currCol) {
+        out.println(">>Array");
+        out.incIndent();
     }
 
     @Override
-    public void element(long currLine, long currCol)
-    {}
+    public void element(long currLine, long currCol) {}
 
     @Override
-    public void finishArray(long currLine, long currCol)
-    {
-        out.decIndent() ;
-        out.println("<<Array") ;
+    public void finishArray(long currLine, long currCol) {
+        out.decIndent();
+        out.println("<<Array");
     }
 
     @Override
-    public void valueBoolean(boolean b, long currLine, long currCol)
-    {
-        out.println("Boolean: "+b) ;
+    public void valueBoolean(boolean b, long currLine, long currCol) {
+        out.println("Boolean: " + b);
     }
 
     @Override
-    public void valueDecimal(String image, long currLine, long currCol)
-    {
-        out.println("Decimal: "+image) ;
+    public void valueDecimal(String image, long currLine, long currCol) {
+        out.println("Decimal: " + image);
     }
 
     @Override
-    public void valueDouble(String image, long currLine, long currCol)
-    {
-        out.println("Double: "+image) ;
+    public void valueDouble(String image, long currLine, long currCol) {
+        out.println("Double: " + image);
     }
 
     @Override
-    public void valueInteger(String image, long currLine, long currCol)
-    {
-        out.println("Integer: "+image) ;
+    public void valueInteger(String image, long currLine, long currCol) {
+        out.println("Integer: " + image);
     }
 
     @Override
-    public void valueNull(long currLine, long currCol)
-    {
-        out.println("Null") ;
+    public void valueNull(long currLine, long currCol) {
+        out.println("Null");
     }
 
     @Override
-    public void valueString(String image, long currLine, long currCol)
-    {
-        out.println("String: "+image) ;
+    public void valueString(String image, long currLine, long currCol) {
+        out.println("String: " + image);
     }
-
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/LangTurtleJCCParserBase.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/LangTurtleJCCParserBase.java
index 3c5f7a3864..04ad3a12f8 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/LangTurtleJCCParserBase.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/LangTurtleJCCParserBase.java
@@ -158,16 +158,24 @@ public class LangTurtleJCCParserBase {
     }
 
     protected Node createLiteral(String lexicalForm, String langTag, String 
datatypeURI, int line, int column) {
-        Node n = null ;
+        checkRDFString(lexicalForm, line, column);
         // Can't have type and lang tag in parsing.
+        // langTag include text direction, if any.
         if ( datatypeURI != null ) {
             RDFDatatype dType = 
TypeMapper.getInstance().getSafeTypeByName(datatypeURI) ;
-            n = profile.createTypedLiteral(lexicalForm, dType, line, column) ;
-        } else if ( langTag != null && !langTag.isEmpty() )
-            n = profile.createLangLiteral(lexicalForm, langTag, line, column) ;
-        else
-            n = profile.createStringLiteral(lexicalForm, line, column) ;
-        return n ;
+            return profile.createTypedLiteral(lexicalForm, dType, line, 
column) ;
+        }
+        if ( langTag != null && !langTag.isEmpty() ) {
+            // Extract text direction.
+            int idx = langTag.indexOf("--");
+            if ( idx >= 0 ) {
+                String textDir = langTag.substring(idx+2);
+                String langTagNoDir = langTag.substring(0, idx);
+                return profile.createLangDirLiteral(lexicalForm, langTagNoDir, 
textDir, line, column);
+            }
+            return profile.createLangLiteral(lexicalForm, langTag, line, 
column) ;
+        }
+        return profile.createStringLiteral(lexicalForm, line, column) ;
     }
 
     protected Node createTripleTerm(Node s, Node p, Node o, int line, int 
column) {
diff --git 
a/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java 
b/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
index 8e6713f53d..c18d949d37 100644
--- a/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
+++ b/jena-arq/src/test/java/org/apache/jena/arq/junit/riot/RiotSyntaxTest.java
@@ -119,6 +119,6 @@ public class RiotSyntaxTest extends AbstractManifestTest {
     }
 
     private void outputFailure(String reason, String fn, Throwable th) {
-        fail("Parsing succeeded in a bad syntax test");
+        fail("Parsing succeeded in a bad syntax test: "+fn);
     }
 }
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java 
b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
index 6bd47c5d19..f7f7839086 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/Scripts_AltTurtle.java
@@ -23,7 +23,6 @@ package org.apache.jena.riot;
 
 import java.util.stream.Stream;
 
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.DynamicNode;
 import org.junit.jupiter.api.TestFactory;
@@ -31,7 +30,6 @@ import org.junit.jupiter.api.TestFactory;
 import org.apache.jena.arq.TestConsts;
 import org.apache.jena.arq.junit.Scripts;
 import org.apache.jena.riot.lang.turtlejcc.TurtleJCC;
-import org.apache.jena.sys.JenaSystem;
 
 /** Execute turtle test with alt parser. */
 public class Scripts_AltTurtle {
@@ -39,12 +37,8 @@ public class Scripts_AltTurtle {
     @TestFactory
     @DisplayName("Scripts AltTurtle rdf-tests")
     public Stream<DynamicNode> testFactory() {
-        return 
Scripts.manifestTestFactoryRIOT(TestConsts.RDF12_TESTS_DIR+"rdf-turtle/manifest.ttl");
-    }
-
-    // If run on its own.
-    @BeforeAll public static void beforeAll() {
-        JenaSystem.init();
-        TurtleJCC.register();
+        return Scripts.withAltParserFactory(Lang.TURTLE,
+                                            TurtleJCC.factory,
+                                            
TestConsts.RDF12_TESTS_DIR+"rdf-turtle/manifest.ttl");
     }
 }

Reply via email to