You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/12/22 18:34:50 UTC
[4/4] jena git commit: Move CharSpace to jena-base. Clean up string
escape processing.
Move CharSpace to jena-base. Clean up string escape processing.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/af171371
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/af171371
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/af171371
Branch: refs/heads/master
Commit: af171371bc723f830060345dd9a4758b4ebf8d6f
Parents: 8e615f1
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Dec 20 17:31:55 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Dec 22 17:32:00 2015 +0000
----------------------------------------------------------------------
.../org/apache/jena/riot/RDFWriterRegistry.java | 2 +-
.../org/apache/jena/riot/lang/RiotParsers.java | 7 +-
.../org/apache/jena/riot/out/CharSpace.java | 22 ---
.../org/apache/jena/riot/out/EscapeProc.java | 49 ------
.../apache/jena/riot/system/StreamRDFLib.java | 2 +-
.../jena/riot/system/StreamRDFWriter.java | 2 +-
.../apache/jena/riot/writer/NQuadsWriter.java | 2 +-
.../apache/jena/riot/writer/NTriplesWriter.java | 6 +-
.../jena/riot/writer/WriterStreamRDFPlain.java | 2 +-
.../apache/jena/riot/lang/TestLangNTriples.java | 7 +-
.../apache/jena/riot/lang/TestLangNTuples.java | 18 +--
.../org/apache/jena/riot/out/TestNodeFmt.java | 13 ++
.../org/apache/jena/atlas/lib/CharSpace.java | 28 ++++
.../org/apache/jena/atlas/lib/EscapeStr.java | 149 +++++++++++--------
.../java/org/apache/jena/atlas/lib/TS_Lib.java | 2 +-
.../apache/jena/atlas/lib/TestEscapeStr.java | 40 +++++
16 files changed, 195 insertions(+), 156 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
index 101b459..918d03f 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterRegistry.java
@@ -20,8 +20,8 @@ package org.apache.jena.riot;
import java.util.* ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.n3.N3JenaWriter ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.out.JsonLDWriter ;
import org.apache.jena.riot.system.RiotLib ;
import org.apache.jena.riot.thrift.WriterDatasetThrift ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
index 6953df9..8f5ccda 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/RiotParsers.java
@@ -32,9 +32,12 @@ import java.io.Reader ;
import org.apache.jena.atlas.io.PeekReader ;
import org.apache.jena.atlas.json.io.parser.TokenizerJSON ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.riot.* ;
-import org.apache.jena.riot.out.CharSpace ;
-import org.apache.jena.riot.system.* ;
+import org.apache.jena.riot.system.ErrorHandlerFactory ;
+import org.apache.jena.riot.system.ParserProfile ;
+import org.apache.jena.riot.system.RiotLib ;
+import org.apache.jena.riot.system.StreamRDF ;
import org.apache.jena.riot.tokens.Tokenizer ;
import org.apache.jena.riot.tokens.TokenizerFactory ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/out/CharSpace.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/CharSpace.java b/jena-arq/src/main/java/org/apache/jena/riot/out/CharSpace.java
deleted file mode 100644
index bff34be..0000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/CharSpace.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.riot.out;
-
-/** rather write 'true' or 'false', use this enum */
-public enum CharSpace{ ASCII, UTF8 }
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java b/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
deleted file mode 100644
index ae6386a..0000000
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/EscapeProc.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.riot.out;
-
-import org.apache.jena.atlas.io.AWriter ;
-import org.apache.jena.atlas.lib.EscapeStr ;
-
-public class EscapeProc {
- private final boolean ascii ;
-
- public EscapeProc(CharSpace charSpace) {
- this.ascii = ( charSpace == CharSpace.ASCII ) ;
- }
-
- public void writeURI(AWriter w, String s) {
- if ( ascii )
- EscapeStr.stringEsc(w, s, true, ascii) ;
- else
- // It's a URI - assume legal.
- w.print(s) ;
- }
-
- public void writeStr(AWriter w, String s) {
- EscapeStr.stringEsc(w, s, true, ascii) ;
- }
-
- public void writeStrMultiLine(AWriter w, String s) {
- // N-Triples does not have """
- EscapeStr.stringEsc(w, s, false, ascii) ;
- }
-
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
index 92aa8a8..9f6ecb1 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFLib.java
@@ -23,12 +23,12 @@ import java.io.Writer ;
import org.apache.jena.atlas.io.AWriter ;
import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.atlas.lib.Sink ;
import org.apache.jena.graph.Graph ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.riot.lang.StreamRDFCounting ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.writer.WriterStreamRDFPlain ;
import org.apache.jena.shared.JenaException ;
import org.apache.jena.shared.PrefixMapping ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
index 6448e42..b70dbf8 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamRDFWriter.java
@@ -26,10 +26,10 @@ import java.util.Map ;
import org.apache.jena.atlas.io.AWriter ;
import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.graph.Graph ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.riot.* ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.thrift.BinRDF ;
import org.apache.jena.riot.writer.StreamWriterTriX ;
import org.apache.jena.riot.writer.WriterStreamRDFBlocks ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java
index 3a74bcf..56e30a0 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/NQuadsWriter.java
@@ -22,8 +22,8 @@ import java.io.OutputStream ;
import java.io.Writer ;
import java.util.Iterator ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.system.PrefixMap ;
import org.apache.jena.riot.system.StreamOps ;
import org.apache.jena.riot.system.StreamRDF ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java
index f6d3047..491611a 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/NTriplesWriter.java
@@ -18,18 +18,16 @@
package org.apache.jena.riot.writer;
-import static org.apache.jena.riot.out.CharSpace.ASCII ;
-import static org.apache.jena.riot.out.CharSpace.UTF8 ;
-
import java.io.OutputStream ;
import java.io.Writer ;
import java.util.Iterator ;
import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.CharSpace ;
+import static org.apache.jena.atlas.lib.CharSpace.* ;
import org.apache.jena.graph.Graph ;
import org.apache.jena.graph.Triple ;
import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.system.PrefixMap ;
import org.apache.jena.riot.system.StreamOps ;
import org.apache.jena.riot.system.StreamRDF ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFPlain.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFPlain.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFPlain.java
index 13401f0..7147789 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFPlain.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFPlain.java
@@ -20,9 +20,9 @@ package org.apache.jena.riot.writer ;
import org.apache.jena.atlas.io.AWriter ;
import org.apache.jena.atlas.io.IO ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.out.CharSpace ;
import org.apache.jena.riot.out.NodeFormatter ;
import org.apache.jena.riot.out.NodeFormatterNT ;
import org.apache.jena.riot.system.StreamRDF ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
index 8306786..18112fb 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTriples.java
@@ -20,14 +20,17 @@ package org.apache.jena.riot.lang;
import java.io.StringReader ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.graph.Graph ;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.rdf.model.ModelFactory ;
-import org.apache.jena.riot.* ;
import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx ;
import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal ;
-import org.apache.jena.riot.out.CharSpace;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.RDFLanguages ;
+import org.apache.jena.riot.RiotException ;
import org.apache.jena.riot.system.StreamRDFLib ;
import org.apache.jena.riot.tokens.Tokenizer ;
import org.apache.jena.sparql.sse.SSE ;
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
index ced99bd..d06047f 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/lang/TestLangNTuples.java
@@ -18,16 +18,20 @@
package org.apache.jena.riot.lang;
+import static org.apache.jena.riot.system.ErrorHandlerFactory.errorHandlerNoLogging ;
+import static org.apache.jena.riot.system.ErrorHandlerFactory.getDefaultErrorHandler ;
+import static org.apache.jena.riot.system.ErrorHandlerFactory.setDefaultErrorHandler ;
+
import java.io.ByteArrayInputStream ;
import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.riot.ErrorHandlerTestLib.ErrorHandlerEx;
import org.apache.jena.riot.ErrorHandlerTestLib.ExError;
import org.apache.jena.riot.ErrorHandlerTestLib.ExFatal;
import org.apache.jena.riot.ErrorHandlerTestLib.ExWarning;
import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.out.CharSpace;
import org.apache.jena.riot.system.ErrorHandler ;
import org.apache.jena.riot.system.RiotLib ;
import org.apache.jena.riot.system.StreamRDFLib ;
@@ -36,9 +40,6 @@ import org.apache.jena.riot.tokens.TokenizerFactory ;
import org.junit.AfterClass ;
import org.junit.BeforeClass ;
import org.junit.Test ;
-import static org.apache.jena.riot.system.ErrorHandlerFactory.errorHandlerNoLogging ;
-import static org.apache.jena.riot.system.ErrorHandlerFactory.getDefaultErrorHandler ;
-import static org.apache.jena.riot.system.ErrorHandlerFactory.setDefaultErrorHandler ;
/** Test of syntax by a tuples parser (does not include node validitiy checking) */
abstract public class TestLangNTuples extends BaseTest
@@ -178,7 +179,7 @@ abstract public class TestLangNTuples extends BaseTest
Tokenizer tokenizer = charSpace == CharSpace.ASCII ? TokenizerFactory.makeTokenizerASCII(in) : TokenizerFactory.makeTokenizerUTF8(in) ;
return tokenizer ;
}
-//
+
static protected Tokenizer tokenizer(String string)
{
// UTF-8
@@ -198,15 +199,10 @@ abstract public class TestLangNTuples extends BaseTest
x.setProfile(RiotLib.profile(null, false, true, new ErrorHandlerEx())) ;
x.parse() ;
}
-//
+
protected abstract Lang getLang() ;
protected long parseCount(String... strings) {
return ParserTestBaseLib.parseCount(getLang(), strings) ;
}
-
-// protected void parseCheck(String... strings) {
-// ParserTestBaseLib.parseCount(getLang(), strings) ;
-// }
-
}
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java b/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java
index 97db092..8f917ee 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmt.java
@@ -21,6 +21,7 @@ package org.apache.jena.riot.out;
import org.apache.jena.JenaRuntime ;
import org.apache.jena.atlas.io.StringWriterI ;
import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.CharSpace ;
import org.apache.jena.graph.Node ;
import org.apache.jena.riot.system.PrefixMap ;
import org.apache.jena.riot.system.PrefixMapFactory ;
@@ -184,4 +185,16 @@ public class TestNodeFmt extends BaseTest
@Test public void nodefmt_ttl_74() { test(nodeFormatterTTL, "'False'^^<http://www.w3.org/2001/XMLSchema#boolean>", "\"False\"^^<http://www.w3.org/2001/XMLSchema#boolean>") ; }
@Test public void nodefmt_ttl_75() { test(nodeFormatterTTL, "'True'^^<http://www.w3.org/2001/XMLSchema#boolean>", "\"True\"^^<http://www.w3.org/2001/XMLSchema#boolean>") ; }
+ private static String QuoteDouble3 = "\"\"\"" ;
+ private static String QuoteSingle3 = "'''" ;
+
+ // Multiline
+
+ private static NodeFormatter nodeFormatterTTL_ML = new NodeFormatterTTL_MultiLine(base, prefixMap) ;
+
+ @Test public void nodefmt_ttl_ML_01() { test(nodeFormatterTTL_ML, "'A\\nB'", QuoteDouble3+"A\nB"+QuoteDouble3) ; }
+ @Test public void nodefmt_ttl_ML_02() { test(nodeFormatterTTL_ML, "'A\\nB'@en", QuoteDouble3+"A\nB"+QuoteDouble3+"@en") ; }
+ @Test public void nodefmt_ttl_ML_03() { test(nodeFormatterTTL_ML, "'A\\nB'^^:ex\\/datatype", QuoteDouble3+"A\nB"+QuoteDouble3+"^^ex:datatype") ; }
+
+
}
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-base/src/main/java/org/apache/jena/atlas/lib/CharSpace.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/CharSpace.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/CharSpace.java
new file mode 100644
index 0000000..8268aa3
--- /dev/null
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/CharSpace.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.atlas.lib;
+
+/** rather write 'true' or 'false', use this enum */
+public enum CharSpace {
+ ASCII, UTF8;
+
+ public static boolean isAscii(CharSpace charSpace) {
+ return charSpace == ASCII;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-base/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
index fb5edf9..593c019 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/EscapeStr.java
@@ -20,86 +20,115 @@ package org.apache.jena.atlas.lib;
import org.apache.jena.atlas.AtlasException ;
import org.apache.jena.atlas.io.AWriter ;
-import org.apache.jena.atlas.io.IndentedLineBuffer ;
import org.apache.jena.atlas.io.OutputUtils ;
+import org.apache.jena.atlas.io.StringWriterI ;
+/** String escape utilities */
public class EscapeStr
{
- // Tests: TestOutput
- // See also OutputLangUtils.outputEsc.
-// private final boolean ascii ;
-//
-// public EscapeStr(CharSpace charSpace) { this.ascii = ( charSpace == CharSpace.ASCII ) ; }
-//
-// public void writeURI(AWriter w, String s)
-// {
-// if ( ascii )
-// stringEsc(w, s, true, ascii) ;
-// else
-// // It's a URI - assume legal.
-// w.print(s) ;
-// }
-//
-// public void writeStr(AWriter w, String s)
-// {
-// stringEsc(w, s, true, ascii) ;
-// }
-//
-// public void writeStrMultiLine(AWriter w, String s)
-// {
-// // N-Triples does not have """
-// stringEsc(w, s, false, ascii) ;
-// }
-//
- // Utility
/*
* Escape characters in a string according to Turtle rules.
*/
- public static String stringEsc(String s)
- { return stringEsc(s, true, false) ; }
-
- private static String stringEsc(String s, boolean singleLineString, boolean asciiOnly)
- {
- IndentedLineBuffer sb = new IndentedLineBuffer() ;
- stringEsc(sb, s, singleLineString, asciiOnly) ;
- return sb.toString() ;
+ public static String stringEsc(String s) {
+ AWriter w = new StringWriterI() ;
+ stringEsc(w, s, Chars.CH_QUOTE2, true, CharSpace.UTF8) ;
+ return w.toString() ;
}
- public static void stringEsc(AWriter out, String s, boolean singleLineString, boolean asciiOnly)
- {
+ /** Write a string - basic escaping, no quote escaping. */
+ public static void stringEsc(AWriter out, String s, boolean asciiOnly) {
int len = s.length() ;
for (int i = 0; i < len; i++) {
char c = s.charAt(i);
-
// \\ Escape always possible.
- if (c == '\\')
- {
+ if (c == '\\') {
out.print('\\') ;
out.print(c) ;
continue ;
}
- if ( singleLineString )
- {
- if ( c == '"' ) { out.print("\\\""); continue ; }
- else if (c == '\n') { out.print("\\n"); continue ; }
- else if (c == '\t') { out.print("\\t"); continue ; }
- else if (c == '\r') { out.print("\\r"); continue ; }
- else if (c == '\f') { out.print("\\f"); continue ; }
+ switch(c) {
+ case '\n': out.print("\\n"); continue;
+ case '\t': out.print("\\t"); continue;
+ case '\r': out.print("\\r"); continue;
+ case '\f': out.print("\\f"); continue;
+ default: // Drop through
}
- // Not \-style esacpe.
- if ( c >= 32 && c < 127 )
- out.print(c);
- else if ( !asciiOnly )
+ if ( !asciiOnly )
out.print(c);
- else
- {
- // Outside the charset range.
- // Does not cover beyond 16 bits codepoints directly
- // (i.e. \U escapes) but Java keeps these as surrogate
- // pairs and will print as characters
- out.print( "\\u") ;
- OutputUtils.printHex(out, c, 4) ;
+ else
+ writeCharAsASCII(out, c) ;
+ }
+ }
+
+ public static void stringEsc(AWriter out, String s, char quoteChar, boolean singleLineString) {
+ stringEsc(out, s, quoteChar, singleLineString, CharSpace.UTF8);
+ }
+
+ public static void stringEsc(AWriter out, String s, char quoteChar, boolean singleLineString, CharSpace charSpace) {
+ boolean ascii = ( CharSpace.ASCII == charSpace ) ;
+ int len = s.length() ;
+ int quotesInARow = 0 ;
+ for (int i = 0; i < len; i++) {
+ char c = s.charAt(i);
+ // \\ Escape always possible.
+ if (c == '\\') {
+ out.print('\\') ;
+ out.print(c) ;
+ continue ;
+ }
+ if ( ! singleLineString ) {
+ // Multiline string.
+ if ( c == quoteChar ) {
+ quotesInARow++ ;
+ if ( quotesInARow == 3 ) {
+ out.print("\\");
+ out.print(quoteChar);
+ quotesInARow = 0;
+ continue;
+ }
+ } else {
+ quotesInARow = 0 ;
+ }
+ } else {
+ if ( c == quoteChar ) {
+ out.print("\\"); out.print(c) ; continue ;
+ }
+ switch(c) {
+ case '\n': out.print("\\n"); continue;
+ case '\t': out.print("\\t"); continue;
+ case '\r': out.print("\\r"); continue;
+ case '\f': out.print("\\f"); continue;
+ default: // Drop through
+ }
}
+
+ if ( !ascii )
+ out.print(c);
+ else
+ writeCharAsASCII(out, c) ;
+ }
+ }
+
+ /** Write a string with Unicode to ASCII conversion using \-u escapes */
+ public static void writeASCII(AWriter out, String s) {
+ int len = s.length() ;
+ for (int i = 0; i < len; i++) {
+ char c = s.charAt(i);
+ writeCharAsASCII(out, c);
+ }
+ }
+
+ /** Write a character with Unicode to ASCII conversion using \-u escapes */
+ public static void writeCharAsASCII(AWriter out, char c) {
+ if ( c >= 32 && c < 127 )
+ out.print(c);
+ else {
+ // Outside the charset range.
+ // Does not cover beyond 16 bits codepoints directly
+ // (i.e. \U escapes) but Java keeps these as surrogate
+ // pairs and will print as characters
+ out.print("\\u") ;
+ OutputUtils.printHex(out, c, 4) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
index a67532b..bd3d027 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
@@ -25,7 +25,6 @@ import org.junit.runners.Suite ;
/**
* Tests for the Atlas lib package
- *
*/
@RunWith(Suite.class)
@Suite.SuiteClasses( {
@@ -33,6 +32,7 @@ import org.junit.runners.Suite ;
, TestBitsLong.class
, TestBitsInt.class
, TestBytes.class
+ , TestEscapeStr.class
, TestHex.class
, TestListUtils.class
, TestSetUtils.class
http://git-wip-us.apache.org/repos/asf/jena/blob/af171371/jena-base/src/test/java/org/apache/jena/atlas/lib/TestEscapeStr.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestEscapeStr.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestEscapeStr.java
new file mode 100644
index 0000000..7f4ab95
--- /dev/null
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestEscapeStr.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.atlas.lib;
+
+import org.junit.Assert ;
+import org.junit.Test ;
+
+// Testing is a bit light here but the RDF term output and
+// the language level output covers the ground as well.
+// See TestQuotedString in ARQ.
+
+public class TestEscapeStr {
+
+ @Test public void escape_str_01() { test("", "") ; }
+ @Test public void escape_str_02() { test("A", "A") ; }
+ @Test public void escape_str_03() { test("\n", "\\n") ; }
+ @Test public void escape_str_04() { test("A\tB", "A\\tB") ; }
+ @Test public void escape_str_05() { test("\"", "\\\"") ; }
+
+ private void test(String input, String expected) {
+ String output = EscapeStr.stringEsc(input) ;
+ Assert.assertEquals(expected, output);
+ }
+}