Skip to content

Commit 6929aeb

Browse files
authored
Merge pull request #229 from SeeSharpSoft/master
Re-release 2.12.0
2 parents 49c543b + 14533e4 commit 6929aeb

File tree

6 files changed

+96
-22
lines changed

6 files changed

+96
-22
lines changed

CHANGELOG

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
2.12.0
2-
Jun 13, 2020
2+
Jun 14, 2020
33

4+
NEW: flexible settings format for value separator & escape character
45
FIX: no accessors for class CsvValueSeparator #221
56
FIX: Default Value Separator get frequently reset to comma, changes only applied after restart #222
67

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvEscapeCharacter.java

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,71 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3-
import java.util.regex.Pattern;
3+
import com.intellij.util.xmlb.Converter;
44

5-
public enum CsvEscapeCharacter {
6-
QUOTE("\"", "Double Quote (\")", "\""),
7-
BACKSLASH("\\", "Backslash (\\)", "\\\\");
5+
import java.util.Objects;
6+
import java.util.regex.Pattern;
87

8+
public class CsvEscapeCharacter {
99
private final String myCharacter;
1010
private final String myDisplay;
1111
private final Pattern myPattern;
1212
private final String myRegexPattern;
13+
private final String myName;
14+
15+
private static final String CUSTOM_NAME = "CUSTOM";
16+
private static final String CUSTOM_DISPLAY = "Custom";
17+
18+
public static CsvEscapeCharacter QUOTE = new CsvEscapeCharacter("\"", "Double Quote (\")", "\"", "QUOTE");
19+
public static CsvEscapeCharacter BACKSLASH = new CsvEscapeCharacter("\\", "Backslash (\\)", "\\\\", "BACKSLASH");
20+
21+
public static CsvEscapeCharacter[] values() {
22+
return new CsvEscapeCharacter[]{QUOTE, BACKSLASH};
23+
}
24+
25+
public static CsvEscapeCharacter getDefaultEscapeCharacter(String character) {
26+
if (character != null) {
27+
switch (character) {
28+
case "QUOTE":
29+
case "\"":
30+
return QUOTE;
31+
case "BACKSLASH":
32+
case "\\":
33+
return BACKSLASH;
34+
default:
35+
break;
36+
}
37+
}
38+
return null;
39+
}
40+
41+
public static CsvEscapeCharacter create(String character) {
42+
if (character == null) {
43+
return null;
44+
}
45+
CsvEscapeCharacter defaultEscapeCharacter = getDefaultEscapeCharacter(character);
46+
return defaultEscapeCharacter == null ? new CsvEscapeCharacter(character) : defaultEscapeCharacter;
47+
}
48+
49+
public static class CsvEscapeCharacterConverter extends Converter<CsvEscapeCharacter> {
50+
public CsvEscapeCharacter fromString(String value) {
51+
return CsvEscapeCharacter.create(value);
52+
}
53+
54+
public String toString(CsvEscapeCharacter value) {
55+
return value.getCharacter();
56+
}
57+
}
1358

14-
CsvEscapeCharacter(String character, String display, String regexPattern) {
59+
public CsvEscapeCharacter(String myCharacter) {
60+
this(myCharacter, CUSTOM_DISPLAY + " (" + myCharacter + ")", Pattern.quote(myCharacter), CUSTOM_NAME);
61+
}
62+
63+
private CsvEscapeCharacter(String character, String display, String regexPattern, String name) {
1564
myCharacter = character;
1665
myDisplay = display;
1766
myRegexPattern = regexPattern;
1867
myPattern = Pattern.compile(Pattern.quote(myCharacter + "\""));
68+
myName = name;
1969
}
2070

2171
public String getCharacter() {
@@ -33,4 +83,31 @@ public String getRegexPattern() {
3383
public boolean isEscapedQuote(String text) {
3484
return myPattern.matcher(text).matches();
3585
}
86+
87+
public String getName() {
88+
return myName;
89+
}
90+
91+
public boolean isCustom() {
92+
return CUSTOM_NAME.equals(getName());
93+
}
94+
95+
@Override
96+
public int hashCode() {
97+
return Objects.hash(getCharacter(), isCustom());
98+
}
99+
100+
@Override
101+
public boolean equals(Object obj) {
102+
if (obj == null || !(obj instanceof CsvEscapeCharacter)) {
103+
return false;
104+
}
105+
CsvEscapeCharacter otherObj = (CsvEscapeCharacter)obj;
106+
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
107+
}
108+
109+
@Override
110+
public String toString() {
111+
return getDisplay();
112+
}
36113
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvValueSeparator.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class CsvValueSeparator {
2020
public static final CsvValueSeparator TAB = new CsvValueSeparator("\t", "Tab (↹)", "TAB");
2121
public static final CsvValueSeparator COLON = new CsvValueSeparator(":", "Colon (:)", "COLON");
2222

23-
public static CsvValueSeparator getDefaultValueSeparator(String name) {
24-
if (name != null) {
25-
switch (name) {
23+
public static CsvValueSeparator getDefaultValueSeparator(String character) {
24+
if (character != null) {
25+
switch (character) {
2626
case "COMMA":
2727
case ",":
2828
return COMMA;
@@ -45,19 +45,12 @@ public static CsvValueSeparator getDefaultValueSeparator(String name) {
4545
return null;
4646
}
4747

48-
public static CsvValueSeparator create(String name, String character) {
49-
CsvValueSeparator defaultValueSeparator = getDefaultValueSeparator(name);
50-
if (defaultValueSeparator != null) {
51-
return defaultValueSeparator;
52-
}
53-
return create(character);
54-
}
55-
5648
public static CsvValueSeparator create(String character) {
5749
if (character == null) {
5850
return null;
5951
}
60-
return new CsvValueSeparator(character);
52+
CsvValueSeparator defaultValueSeparator = getDefaultValueSeparator(character);
53+
return defaultValueSeparator == null ? new CsvValueSeparator(character) : defaultValueSeparator;
6154
}
6255

6356
public static CsvValueSeparator[] values() {
@@ -66,12 +59,11 @@ public static CsvValueSeparator[] values() {
6659

6760
public static class CsvValueSeparatorConverter extends Converter<CsvValueSeparator> {
6861
public CsvValueSeparator fromString(String value) {
69-
int index = value.indexOf("@");
70-
return index == -1 ? CsvValueSeparator.create(value, value) : CsvValueSeparator.create(value.substring(0, index), value.substring(index + 1));
62+
return CsvValueSeparator.create(value);
7163
}
7264

7365
public String toString(CsvValueSeparator value) {
74-
return value.getName() + "@" + value.getCharacter();
66+
return value.getCharacter();
7567
}
7668
}
7769

src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class CsvFileAttributes implements PersistentStateComponent<CsvFileAttrib
3131
static class Attribute {
3232
@OptionTag(converter = CsvValueSeparator.CsvValueSeparatorConverter.class)
3333
public CsvValueSeparator separator;
34+
@OptionTag(converter = CsvEscapeCharacter.CsvEscapeCharacterConverter.class)
3435
public CsvEscapeCharacter escapeCharacter;
3536
}
3637

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public static final class OptionSet {
5858
public boolean SHOW_TABLE_EDITOR_INFO_PANEL = true;
5959
public boolean QUOTING_ENFORCED = false;
6060
public boolean FILE_END_LINE_BREAK = true;
61+
@OptionTag(converter = CsvEscapeCharacter.CsvEscapeCharacterConverter.class)
6162
public CsvEscapeCharacter DEFAULT_ESCAPE_CHARACTER = ESCAPE_CHARACTER_DEFAULT;
6263
@OptionTag(converter = CsvValueSeparator.CsvValueSeparatorConverter.class)
6364
public CsvValueSeparator DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT;
@@ -246,7 +247,8 @@ public void setDefaultEscapeCharacter(CsvEscapeCharacter defaultEscapeCharacter)
246247
}
247248

248249
public CsvEscapeCharacter getDefaultEscapeCharacter() {
249-
return getState().DEFAULT_ESCAPE_CHARACTER;
250+
CsvEscapeCharacter csvValueSeparator = getState().DEFAULT_ESCAPE_CHARACTER;
251+
return csvValueSeparator == null ? ESCAPE_CHARACTER_DEFAULT : getState().DEFAULT_ESCAPE_CHARACTER;
250252
}
251253

252254
public void setDefaultValueSeparator(CsvValueSeparator defaultValueSeparator) {

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
<change-notes><![CDATA[
5050
<pre style="font-family: sans-serif">
51+
NEW: flexible settings format for value separator & escape character
5152
FIX: no accessors for class CsvValueSeparator #221
5253
FIX: Default Value Separator get frequently reset to comma, changes only applied after restart #222
5354
</pre>

0 commit comments

Comments
 (0)