Skip to content

Commit 0c27400

Browse files
committed
[FEATURE] value separator setting moved from code style to general
1 parent 2987e88 commit 0c27400

27 files changed

+201
-176
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.seesharpsoft.intellij.plugins.csv;
2+
3+
import java.util.regex.Pattern;
4+
5+
public enum CsvEscapeCharacter {
6+
QUOTE("\"", "Double Quote (\")"),
7+
BACKSLASH("\\", "Backslash (\\)");
8+
9+
private final String myCharacter;
10+
private final String myDisplay;
11+
private final Pattern myPattern;
12+
13+
CsvEscapeCharacter(String character, String display) {
14+
myCharacter = character;
15+
myDisplay = display;
16+
myPattern = Pattern.compile(Pattern.quote(myCharacter + "\""));
17+
}
18+
19+
public String getCharacter() {
20+
return myCharacter;
21+
}
22+
23+
public String getDisplay() {
24+
return myDisplay;
25+
}
26+
27+
public boolean isEscapedQuote(String text) {
28+
return myPattern.matcher(text).matches();
29+
}
30+
}

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.intellij.psi.util.PsiTreeUtil;
1919
import net.seesharpsoft.intellij.lang.FileParserDefinition;
2020
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
21-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
2221
import net.seesharpsoft.intellij.plugins.csv.psi.CsvField;
2322
import net.seesharpsoft.intellij.plugins.csv.psi.CsvFile;
2423
import net.seesharpsoft.intellij.plugins.csv.psi.CsvRecord;
@@ -152,24 +151,24 @@ public static int getFieldEndOffset(PsiElement field) {
152151
return separator == null ? field.getContainingFile().getTextLength() : separator.getTextOffset();
153152
}
154153

155-
public static CsvEditorSettings.ValueSeparator getCurrentValueSeparator(CsvFile csvFile) {
154+
public static CsvValueSeparator getCurrentValueSeparator(CsvFile csvFile) {
156155
return getCurrentValueSeparator(csvFile.getContainingFile());
157156
}
158157

159-
public static CsvEditorSettings.ValueSeparator getCurrentValueSeparator(PsiFile psiFile) {
158+
public static CsvValueSeparator getCurrentValueSeparator(PsiFile psiFile) {
160159
return CsvFileAttributes.getInstance(psiFile.getProject()).getFileSeparator(psiFile);
161160
}
162161

163-
public static CsvEditorSettings.EscapeCharacter getCurrentEscapeCharacter(CsvFile csvFile) {
162+
public static CsvEscapeCharacter getCurrentEscapeCharacter(CsvFile csvFile) {
164163
return getCurrentEscapeCharacter(csvFile.getContainingFile());
165164
}
166165

167-
public static CsvEditorSettings.EscapeCharacter getCurrentEscapeCharacter(PsiFile psiFile) {
166+
public static CsvEscapeCharacter getCurrentEscapeCharacter(PsiFile psiFile) {
168167
return CsvFileAttributes.getInstance(psiFile.getProject()).getEscapeCharacter(psiFile);
169168
}
170169

171170
public static CsvColumnInfoMap<PsiElement> createColumnInfoMap(CsvFile csvFile) {
172-
CsvEditorSettings.EscapeCharacter escapeCharacter = getCurrentEscapeCharacter(csvFile);
171+
CsvEscapeCharacter escapeCharacter = getCurrentEscapeCharacter(csvFile);
173172
Map<Integer, CsvColumnInfo<PsiElement>> columnInfoMap = new HashMap<>();
174173
CsvRecord[] records = PsiTreeUtil.getChildrenOfType(csvFile, CsvRecord.class);
175174
int row = 0;
@@ -190,7 +189,7 @@ public static CsvColumnInfoMap<PsiElement> createColumnInfoMap(CsvFile csvFile)
190189
return new CsvColumnInfoMap(columnInfoMap, PsiTreeUtil.hasErrorElements(csvFile));
191190
}
192191

193-
public static String unquoteCsvValue(String content, CsvEditorSettings.EscapeCharacter escapeCharacter) {
192+
public static String unquoteCsvValue(String content, CsvEscapeCharacter escapeCharacter) {
194193
if (content == null) {
195194
return "";
196195
}
@@ -202,14 +201,14 @@ public static String unquoteCsvValue(String content, CsvEditorSettings.EscapeCha
202201
return result;
203202
}
204203

205-
private static boolean isQuotingRequired(String content, CsvEditorSettings.ValueSeparator valueSeparator) {
204+
private static boolean isQuotingRequired(String content, CsvValueSeparator valueSeparator) {
206205
return content != null &&
207206
(content.contains(valueSeparator.getCharacter()) || content.contains("\"") || content.contains("\n") || content.startsWith(" ") || content.endsWith(" "));
208207
}
209208

210209
public static String quoteCsvField(String content,
211-
CsvEditorSettings.EscapeCharacter escapeCharacter,
212-
CsvEditorSettings.ValueSeparator valueSeparator,
210+
CsvEscapeCharacter escapeCharacter,
211+
CsvValueSeparator valueSeparator,
213212
boolean quotingEnforced) {
214213
if (content == null) {
215214
return "";

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvLexer.flex

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

33
import com.intellij.psi.tree.IElementType;
4-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
54
import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes;
6-
import com.intellij.lexer.FlexLexer;
75
import com.intellij.psi.TokenType;
6+
import com.intellij.lexer.FlexLexer;
87

98
import java.util.regex.Pattern;
109

@@ -16,15 +15,15 @@ import java.util.regex.Pattern;
1615
%function advance
1716
%type IElementType
1817
%{
19-
private CsvEditorSettings.ValueSeparator myValueSeparator;
20-
private CsvEditorSettings.EscapeCharacter myEscapeCharacter;
18+
private CsvValueSeparator myValueSeparator;
19+
private CsvEscapeCharacter myEscapeCharacter;
2120

2221
private static final Pattern ESCAPE_TEXT_PATTERN = Pattern.compile("[,;|\\t\\r\\n]");
2322

2423
/**
2524
* Provide constructor that supports a Project as parameter.
2625
*/
27-
CsvLexer(java.io.Reader in, CsvEditorSettings.ValueSeparator valueSeparator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
26+
CsvLexer(java.io.Reader in, CsvValueSeparator valueSeparator, CsvEscapeCharacter escapeCharacter) {
2827
this(in);
2928
myValueSeparator = valueSeparator;
3029
myEscapeCharacter = escapeCharacter;
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

33
import com.intellij.lexer.FlexAdapter;
4-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
54

65
public class CsvLexerAdapter extends FlexAdapter {
7-
public CsvLexerAdapter(CsvEditorSettings.ValueSeparator separator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
6+
public CsvLexerAdapter(CsvValueSeparator separator, CsvEscapeCharacter escapeCharacter) {
87
super(new CsvLexer(null, separator, escapeCharacter));
98
}
109
}
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
4-
53
public interface CsvSeparatorHolder {
6-
CsvEditorSettings.ValueSeparator getSeparator();
4+
CsvValueSeparator getSeparator();
75
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.seesharpsoft.intellij.plugins.csv;
2+
3+
import java.util.regex.Pattern;
4+
5+
public enum CsvValueSeparator {
6+
COMMA(",", "Comma (,)"),
7+
SEMICOLON(";", "Semicolon (;)"),
8+
PIPE("|", "Pipe (|)"),
9+
TAB("\t", "Tab (↹)");
10+
11+
private final String myCharacter;
12+
private final String myDisplay;
13+
private final Pattern myPattern;
14+
15+
CsvValueSeparator(String character, String display) {
16+
myCharacter = character;
17+
myDisplay = display;
18+
myPattern = Pattern.compile(Pattern.quote(myCharacter));
19+
}
20+
21+
public String getCharacter() {
22+
return myCharacter;
23+
}
24+
25+
public String getDisplay() {
26+
return myDisplay;
27+
}
28+
29+
public boolean isValueSeparator(String text) {
30+
return myPattern.matcher(text).matches();
31+
}
32+
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterAction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
import com.intellij.openapi.fileEditor.FileEditor;
88
import com.intellij.psi.PsiFile;
99
import com.intellij.util.FileContentUtilCore;
10+
import net.seesharpsoft.intellij.plugins.csv.CsvEscapeCharacter;
1011
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
11-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1212
import org.jetbrains.annotations.NotNull;
1313

1414
public class CsvChangeEscapeCharacterAction extends ToggleAction {
15-
private CsvEditorSettings.EscapeCharacter myEscapeCharacter;
15+
private CsvEscapeCharacter myEscapeCharacter;
1616

17-
CsvChangeEscapeCharacterAction(CsvEditorSettings.EscapeCharacter escapeCharacter) {
17+
CsvChangeEscapeCharacterAction(CsvEscapeCharacter escapeCharacter) {
1818
super(escapeCharacter.getDisplay());
1919
myEscapeCharacter = escapeCharacter;
2020
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionGroup.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.intellij.openapi.actionSystem.AnActionEvent;
77
import com.intellij.openapi.actionSystem.CommonDataKeys;
88
import com.intellij.psi.PsiFile;
9+
import net.seesharpsoft.intellij.plugins.csv.CsvEscapeCharacter;
910
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
1011
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
11-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1212
import org.jetbrains.annotations.NotNull;
1313
import org.jetbrains.annotations.Nullable;
1414

@@ -17,9 +17,9 @@ public class CsvChangeEscapeCharacterActionGroup extends ActionGroup {
1717
private static final AnAction[] CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS;
1818

1919
static {
20-
CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS = new AnAction[CsvEditorSettings.EscapeCharacter.values().length + 1];
20+
CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS = new AnAction[CsvEscapeCharacter.values().length + 1];
2121
for (int i = 0; i < CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS.length - 1; ++i) {
22-
CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS[i] = new CsvChangeEscapeCharacterAction(CsvEditorSettings.EscapeCharacter.values()[i]);
22+
CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS[i] = new CsvChangeEscapeCharacterAction(CsvEscapeCharacter.values()[i]);
2323
}
2424
CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS[CSV_ESCAPE_CHARACTER_CHANGE_ACTIONS.length - 1] = new CsvDefaultEscapeCharacterAction();
2525
}
@@ -31,7 +31,7 @@ public void update(AnActionEvent anActionEvent) {
3131
anActionEvent.getPresentation().setEnabledAndVisible(psiFile != null && language != null && language.isKindOf(CsvLanguage.INSTANCE));
3232

3333
if (psiFile != null) {
34-
CsvEditorSettings.EscapeCharacter escapeCharacter = CsvFileAttributes.getInstance(psiFile.getProject()).getEscapeCharacter(psiFile);
34+
CsvEscapeCharacter escapeCharacter = CsvFileAttributes.getInstance(psiFile.getProject()).getEscapeCharacter(psiFile);
3535
anActionEvent.getPresentation().setText(String.format("CSV Escape Character: %s", escapeCharacter.getDisplay()));
3636
}
3737
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorAction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
import com.intellij.util.FileContentUtilCore;
1212
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
1313
import net.seesharpsoft.intellij.plugins.csv.CsvSeparatorHolder;
14+
import net.seesharpsoft.intellij.plugins.csv.CsvValueSeparator;
1415
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
15-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1616
import org.jetbrains.annotations.NotNull;
1717

1818
public class CsvChangeSeparatorAction extends ToggleAction {
19-
private CsvEditorSettings.ValueSeparator mySeparator;
19+
private CsvValueSeparator mySeparator;
2020

21-
CsvChangeSeparatorAction(CsvEditorSettings.ValueSeparator separator) {
21+
CsvChangeSeparatorAction(CsvValueSeparator separator) {
2222
super(separator.getDisplay());
2323
mySeparator = separator;
2424
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorActionGroup.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import net.seesharpsoft.intellij.plugins.csv.CsvHelper;
1010
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
1111
import net.seesharpsoft.intellij.plugins.csv.CsvSeparatorHolder;
12-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
12+
import net.seesharpsoft.intellij.plugins.csv.CsvValueSeparator;
1313
import org.jetbrains.annotations.NotNull;
1414
import org.jetbrains.annotations.Nullable;
1515

@@ -18,9 +18,9 @@ public class CsvChangeSeparatorActionGroup extends ActionGroup {
1818
private static final AnAction[] CSV_SEPARATOR_CHANGE_ACTIONS;
1919

2020
static {
21-
CSV_SEPARATOR_CHANGE_ACTIONS = new AnAction[CsvEditorSettings.ValueSeparator.values().length + 1];
21+
CSV_SEPARATOR_CHANGE_ACTIONS = new AnAction[CsvValueSeparator.values().length + 1];
2222
for (int i = 0; i < CSV_SEPARATOR_CHANGE_ACTIONS.length - 1; ++i) {
23-
CSV_SEPARATOR_CHANGE_ACTIONS[i] = new CsvChangeSeparatorAction(CsvEditorSettings.ValueSeparator.values()[i]);
23+
CSV_SEPARATOR_CHANGE_ACTIONS[i] = new CsvChangeSeparatorAction(CsvValueSeparator.values()[i]);
2424
}
2525
CSV_SEPARATOR_CHANGE_ACTIONS[CSV_SEPARATOR_CHANGE_ACTIONS.length - 1] = new CsvDefaultSeparatorAction();
2626
}

0 commit comments

Comments
 (0)