Skip to content

Commit f93097d

Browse files
Merge pull request #237 from Sparksoniq/Escaping
Escaping
2 parents df38e01 + 641827d commit f93097d

File tree

7 files changed

+145
-11
lines changed

7 files changed

+145
-11
lines changed

Diff for: LICENSE-Apache-Commons-Text.txt

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
2+
Apache License
3+
Version 2.0, January 2004
4+
http://www.apache.org/licenses/
5+
6+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7+
8+
1. Definitions.
9+
10+
"License" shall mean the terms and conditions for use, reproduction,
11+
and distribution as defined by Sections 1 through 9 of this document.
12+
13+
"Licensor" shall mean the copyright owner or entity authorized by
14+
the copyright owner that is granting the License.
15+
16+
"Legal Entity" shall mean the union of the acting entity and all
17+
other entities that control, are controlled by, or are under common
18+
control with that entity. For the purposes of this definition,
19+
"control" means (i) the power, direct or indirect, to cause the
20+
direction or management of such entity, whether by contract or
21+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
22+
outstanding shares, or (iii) beneficial ownership of such entity.
23+
24+
"You" (or "Your") shall mean an individual or Legal Entity
25+
exercising permissions granted by this License.
26+
27+
"Source" form shall mean the preferred form for making modifications,
28+
including but not limited to software source code, documentation
29+
source, and configuration files.
30+
31+
"Object" form shall mean any form resulting from mechanical
32+
transformation or translation of a Source form, including but
33+
not limited to compiled object code, generated documentation,
34+
and conversions to other media types.
35+
36+
"Work" shall mean the work of authorship, whether in Source or
37+
Object form, made available under the License, as indicated by a
38+
copyright notice that is included in or attached to the work
39+
(an example is provided in the Appendix below).
40+
41+
"Derivative Works" shall mean any work, whether in Source or Object
42+
form, that is based on (or derived from) the Work and for which the
43+
editorial revisions, annotations, elaborations, or other modifications
44+
represent, as a whole, an original work of authorship. For the purposes
45+
of this License, Derivative Works shall not include works that remain
46+
separable from, or merely link (or bind by name) to the interfaces of,
47+
the Work and Derivative Works thereof.
48+
49+
"Contribution" shall mean any work of authorship, including
50+
the original version of the Work and any modifications or additions
51+
to that Work or Derivative Works thereof, that is intentionally
52+
submitted to Licensor for inclusion in the Work by the copyright owner
53+
or by an individual or Legal Entity authorized to submit on behalf of
54+
the copyright owner. For the purposes of this definition, "submitted"
55+
means any form of electronic, verbal, or written communication sent
56+
to the Licensor or its representatives, including but not limited to
57+
communication on electronic mailing lists, source code control systems,
58+
and issue tracking systems that are managed by, or on behalf of, the
59+
Licensor for the purpose of discussing and improving the Work, but
60+
excluding communication that is conspicuously marked or otherwise
61+
designated in writing by the copyright owner as "Not a Contribution."
62+
63+
"Contributor" shall mean Licensor and any individual or Legal Entity
64+
on behalf of whom a Contribution has been received by Licensor and
65+
subsequently incorporated within the Work.
66+
67+
2. Grant of Copyright License. Subject to the terms and conditions of
68+
this License, each Contributor hereby grants to You a perpetual,
69+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70+
copyright license to reproduce, prepare Derivative Works of,
71+
publicly display, publicly perform, sublicense, and distribute the
72+
Work and such Derivative Works in Source or Object form.
73+
74+
3. Grant of Patent License. Subject to the terms and conditions of
75+
this License, each Contributor hereby grants to You a perpetual,
76+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77+
(except as stated in this section) patent license to make, have made,
78+
use, offer to sell, sell, import, and otherwise transfer the Work,
79+
where such license applies only to those patent claims licensable
80+
by such Contributor that are necessarily infringed by their
81+
Contribution(s) alone or by combination of their Contribution(s)
82+
with the Work to which such Contribution(s) was submitted. If You
83+
institute patent litigation against any entity (including a
84+
cross-claim or counterclaim in a lawsuit) alleging that the Work
85+
or a Contribution incorporated within the Work constitutes direct
86+
or contributory patent infringement, then any patent licenses
87+
granted to You under this License for that Work shall terminate
88+
as of the date such litigation is filed.
89+
90+
4. Redistribution. You may reproduce and distribute copies of the
91+
Work or Derivative Works thereof in any medium, with or without
92+
modifications, and To apply the Apache License to your work, attach the following
93+
boilerplate notice, with the fields enclosed by brackets "[]"
94+
replaced with your own identifying information. (Don't include
95+
the brackets!) The text should be enclosed in the appropriate
96+
comment syntax for the file format. We also recommend that a
97+
file or class name and description of purpose be included on the
98+
same "printed page" as the copyright notice for easier
99+
identification within third-party archives.
100+
101+
Copyright [yyyy] [name of copyright owner]
102+
103+
Licensed under the Apache License, Version 2.0 (the "License");
104+
you may not use this file except in compliance with the License.
105+
You may obtain a copy of the License at
106+
107+
http://www.apache.org/licenses/LICENSE-2.0
108+
109+
Unless required by applicable law or agreed to in writing, software
110+
distributed under the License is distributed on an "AS IS" BASIS,
111+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
112+
See the License for the specific language governing permissions and
113+
limitations under the License.

Diff for: LICENSE.txt

+10-4
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,31 @@ licenses.
2222

2323

2424
========================================================================
25-
For ANTLR v4
25+
For ANTLR 4.7
2626
========================================================================
2727

2828
See license/LICENSE-ANTLR.txt
2929

3030
========================================================================
31-
For JLine 3.0.2
31+
For JLine 3.11.0
3232
========================================================================
3333

3434
See license/LICENSE-JLine.txt
3535

3636
========================================================================
37-
For org.json
37+
For org.json 20160810
3838
========================================================================
3939

4040
See license/LICENSE-org.json.txt
4141

4242
========================================================================
43-
For Spark 1.6.2
43+
For Spark 2.2.1
4444
========================================================================
4545

4646
See license/LICENSE-Spark.txt
47+
48+
========================================================================
49+
For Apache Commons Text 1.6
50+
========================================================================
51+
52+
See license/LICENSE-Apache-Commons-Text.txt

Diff for: pom.xml

+6-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
<dependency>
8383
<groupId>org.jline</groupId>
8484
<artifactId>jline</artifactId>
85-
<version>3.2.0</version>
85+
<version>3.11.0</version>
8686
</dependency>
8787
<dependency>
8888
<groupId>com.esotericsoftware</groupId>
@@ -95,6 +95,11 @@
9595
<version>4.12</version>
9696
<scope>test</scope>
9797
</dependency>
98+
<dependency>
99+
<groupId>org.apache.commons</groupId>
100+
<artifactId>commons-text</artifactId>
101+
<version>1.6</version>
102+
</dependency>
98103
</dependencies>
99104

100105

Diff for: src/main/java/sparksoniq/io/shell/JiqsJLineShell.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.jline.reader.LineReaderBuilder;
2626
import org.jline.reader.UserInterruptException;
2727
import org.jline.reader.impl.DefaultHighlighter;
28+
import org.jline.reader.impl.DefaultParser;
2829
import org.jline.terminal.Terminal;
2930
import org.jline.terminal.TerminalBuilder;
3031
import sparksoniq.JsoniqQueryExecutor;
@@ -110,8 +111,10 @@ private void initialize() throws IOException {
110111
Terminal terminal = TerminalBuilder.builder()
111112
.system(true)
112113
.build();
114+
DefaultParser parser = new DefaultParser();
115+
parser.setEscapeChars(null);
113116
lineReader = LineReaderBuilder.builder()
114-
117+
.parser(parser)
115118
.terminal(terminal)
116119
// .completer(new MyCompleter())
117120
.highlighter(new DefaultHighlighter())

Diff for: src/main/java/sparksoniq/jsoniq/item/ArrayItem.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import sparksoniq.semantics.types.ItemTypes;
2727

2828
import javax.naming.OperationNotSupportedException;
29+
30+
import org.apache.commons.lang3.StringEscapeUtils;
31+
2932
import java.util.ArrayList;
3033
import java.util.Collection;
3134
import java.util.List;
@@ -92,7 +95,7 @@ public String serialize() {
9295
boolean isStringValue = item instanceof StringItem;
9396
if(isStringValue) {
9497
sb.append("\"");
95-
sb.append(item.serialize().replace("\"", "\\\"").replace("\n", "\\n"));
98+
sb.append(StringEscapeUtils.escapeJson(item.serialize()));
9699
sb.append("\"");
97100
} else {
98101
sb.append(item.serialize());

Diff for: src/main/java/sparksoniq/jsoniq/item/ObjectItem.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
import sparksoniq.semantics.types.ItemTypes;
2929

3030
import javax.naming.OperationNotSupportedException;
31+
32+
import org.apache.commons.lang3.StringEscapeUtils;
33+
3134
import java.util.*;
3235

3336
public class ObjectItem extends JsonItem{
@@ -147,12 +150,11 @@ public String serialize() {
147150
String key = _keys.get(i);
148151
Item value = _values.get(i);
149152
boolean isStringValue = value instanceof StringItem;
150-
151-
sb.append("\"" + key.replace("\"", "\\\"").replace("\n", "\\n") + "\"" + " : ");
153+
sb.append("\"" + StringEscapeUtils.escapeJson(key) + "\"" + " : ");
152154
if(isStringValue)
153155
{
154156
sb.append("\"");
155-
sb.append(value.serialize().replace("\"", "\\\"").replace("\n", "\\n"));
157+
sb.append(StringEscapeUtils.escapeJson(value.serialize()));
156158
sb.append("\"");
157159
} else {
158160
sb.append(value.serialize());

Diff for: src/main/java/sparksoniq/jsoniq/runtime/iterator/primary/StringRuntimeIterator.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
*/
2020
package sparksoniq.jsoniq.runtime.iterator.primary;
2121

22+
import org.apache.commons.lang3.StringEscapeUtils;
23+
2224
import sparksoniq.exceptions.IteratorFlowException;
2325
import sparksoniq.jsoniq.item.StringItem;
2426
import sparksoniq.jsoniq.runtime.iterator.RuntimeIterator;
@@ -39,7 +41,7 @@ public StringItem next() {
3941
public StringRuntimeIterator(String value, IteratorMetadata iteratorMetadata) {
4042
super(null, iteratorMetadata);
4143
this._item = value;
42-
44+
_item = StringEscapeUtils.unescapeJson(_item);
4345
}
4446

4547
private String _item;

0 commit comments

Comments
 (0)