diff --git a/src/main/java/com/andrey4623/rainbowcsv/RainbowHighlightVisitor.java b/src/main/java/com/andrey4623/rainbowcsv/RainbowHighlightVisitor.java index 42d1859..37a1feb 100644 --- a/src/main/java/com/andrey4623/rainbowcsv/RainbowHighlightVisitor.java +++ b/src/main/java/com/andrey4623/rainbowcsv/RainbowHighlightVisitor.java @@ -11,7 +11,6 @@ import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.List; public class RainbowHighlightVisitor implements HighlightVisitor { @@ -80,10 +79,13 @@ public boolean analyze( @NotNull Runnable action ) { this.holder = holder; - - columnTextAttributes = Arrays.stream(RainbowCsvHelper.TEXT_ATTRIBUTES_KEYS) - .map(t -> this.holder.getColorsScheme().getAttributes(t)) - .toArray(TextAttributes[]::new); + + columnTextAttributes = new TextAttributes[CsvSettings.getInstance().getTextAttributesSize()]; + for (int i = 0; i < CsvSettings.getInstance().getTextAttributesSize(); i++) + { + columnTextAttributes[i] = this.holder.getColorsScheme().getAttributes(RainbowCsvHelper.TEXT_ATTRIBUTES_KEYS[i]); + } + commentLineTextAttributes = this.holder.getColorsScheme().getAttributes( RainbowCsvHelper.COMMENT_LINE_TEXT_ATTRIBUTES_KEYS ); diff --git a/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettings.java b/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettings.java index 20781f4..c9489c4 100644 --- a/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettings.java +++ b/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettings.java @@ -93,4 +93,10 @@ public void setCommentPrefix(String commentPrefix) { public String getCommentPrefix() { return getState().commentPrefix; } + + public void setTextAttributesSize(Integer textAttributesSize) { + getState().textAttributesSize = textAttributesSize; + } + public Integer getTextAttributesSize() { return getState().textAttributesSize; } + } diff --git a/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettingsData.java b/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettingsData.java index 6963d80..2a6f52d 100644 --- a/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettingsData.java +++ b/src/main/java/com/andrey4623/rainbowcsv/settings/CsvSettingsData.java @@ -19,7 +19,9 @@ public class CsvSettingsData { public boolean highlightComments = false; public String commentPrefix = ""; - + + public Integer textAttributesSize = 10; + public CsvSettingsData() { } } diff --git a/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.form b/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.form index 12feb9c..b41062b 100644 --- a/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.form +++ b/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.form @@ -1,6 +1,6 @@
- + @@ -63,11 +63,6 @@ - - - - - @@ -154,6 +149,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.java b/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.java index f501ddf..a47c270 100644 --- a/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.java +++ b/src/main/java/com/andrey4623/rainbowcsv/settings/Settings.java @@ -14,6 +14,8 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.util.FileContentUtil; + +import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -35,7 +37,9 @@ public class Settings implements EditorOptionsProvider { private JComboBox escapeCharacterComboBox; private JTextField commentPrefixTextField; private JCheckBox highlightCommentsCheckBox; - + + private JTextField textAttributesSize; + @Override public @NotNull String getId() { return "RainbowCSV.Settings"; @@ -54,22 +58,36 @@ public class Settings implements EditorOptionsProvider { @Override public boolean isModified() { CsvSettings settings = CsvSettings.getInstance(); - + return this.rainbowCSVEnabledCheckBox.isSelected() != settings.isEnabled() - || !settings.getDelimiter().equals(this.delimiterComboBox.getSelectedItem()) - || !settings.getEscapeCharacter().equals(this.escapeCharacterComboBox.getSelectedItem()) + || !settings.getDelimiter().equals( this.delimiterComboBox.getSelectedItem() ) + || !settings.getEscapeCharacter().equals( this.escapeCharacterComboBox.getSelectedItem() ) || settings.isHighlightComments() != this.highlightCommentsCheckBox.isSelected() - || !settings.getCommentPrefix().equals(this.commentPrefixTextField.getText()); + || !settings.getCommentPrefix().equals( this.commentPrefixTextField.getText() ) + || !settings.getTextAttributesSize().toString().equals( textAttributesSize.getText() ); } @Override public void apply() throws ConfigurationException { + + boolean digits = NumberUtils.isDigits( textAttributesSize.getText() ); + if ( !digits ) + { + throw new ConfigurationException( "Number of colours must be an integer" ); + } + int size = Integer.parseInt( textAttributesSize.getText() ); + if ( size > 10 || size < 0 ) + { + throw new ConfigurationException( "Number of colors must be between 0 and 10" ); + } + CsvSettings settings = CsvSettings.getInstance(); settings.setEnabled(rainbowCSVEnabledCheckBox.isSelected()); settings.setDelimiter((Delimiter) delimiterComboBox.getSelectedItem()); settings.setEscapeCharacter((EscapeCharacter) escapeCharacterComboBox.getSelectedItem()); settings.setHighlightComments(highlightCommentsCheckBox.isSelected()); settings.setCommentPrefix(commentPrefixTextField.getText()); + settings.setTextAttributesSize( size ); reparseFiles(); } @@ -107,6 +125,7 @@ public void reset() { escapeCharacterComboBox.setSelectedItem(settings.getEscapeCharacter()); highlightCommentsCheckBox.setSelected(settings.isHighlightComments()); commentPrefixTextField.setText(settings.getCommentPrefix()); + textAttributesSize.setText( settings.getTextAttributesSize().toString() ); } protected void createUIComponents() { diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 180d23b..97946d9 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.andrey4623.rainbowcsv Rainbow CSV - 2.0.2 + 2.1.0 Andrey Kolchanov 2.1.0: Supports limited number of colours to use instead of the default 10

2.0.2: 2022.1 Intellij support.

2.0.1: Small improvements.

2.0: Supports custom column colors and a custom comment line prefix.