Skip to content

Commit a4fd06f

Browse files
committed
[FIX] Some characters not represented properly in table editor
ATTENTION: change increases minimum IDE version Targets #122
1 parent e084797 commit a4fd06f

File tree

8 files changed

+225
-135
lines changed

8 files changed

+225
-135
lines changed

.travis.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ jdk:
33
- openjdk8
44

55
env:
6-
- IDEA_VERSION=IC-2016.3.2 GRAMMAR_KIT_VERSION=1.4.3
7-
- IDEA_VERSION=IC-2017.3.2 GRAMMAR_KIT_VERSION=2017.1.2
8-
- IDEA_VERSION=IC-2018.3.2 GRAMMAR_KIT_VERSION=2017.1.6
6+
- IDEA_VERSION=IC-192.5728.98 GRAMMAR_KIT_VERSION=2017.1.6
97
- IDEA_VERSION=PC-LATEST-EAP-SNAPSHOT GRAMMAR_KIT_VERSION=2017.1.6
108

119
script: xvfb-run gradle check
@@ -16,9 +14,9 @@ after_success:
1614
jobs:
1715
include:
1816
- if: (branch = master AND type = push) OR (type = pull_request)
19-
env: IDEA_VERSION=IC-191.5701.16 GRAMMAR_KIT_VERSION=2017.1.6
17+
env: IDEA_VERSION=IC-192.5728.98 GRAMMAR_KIT_VERSION=2017.1.6
2018
script: xvfb-run gradle check verifyPlugin
2119
- stage: deploy
2220
if: branch IN (Testing, Staging, Stable) AND type = push
23-
env: IDEA_VERSION=IC-191.5701.16 GRAMMAR_KIT_VERSION=2017.1.6 JI_CHANNELS=$TRAVIS_BRANCH
21+
env: IDEA_VERSION=IC-192.5728.98 GRAMMAR_KIT_VERSION=2017.1.6 JI_CHANNELS=$TRAVIS_BRANCH
2422
script: xvfb-run gradle publishPlugin

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ idea {
7171
apply plugin: 'org.jetbrains.intellij'
7272
intellij {
7373
// IDE version - https://www.jetbrains.com/intellij-repository/releases
74-
version = System.getenv().getOrDefault('IDEA_VERSION', 'IC-191.5701.16')
74+
version = System.getenv().getOrDefault('IDEA_VERSION', 'IC-192.5728.98')
7575
pluginName = 'CSV Plugin'
7676
instrumentCode = true
7777
updateSinceUntilBuild = false

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvEditorSettingsExternalizable.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public static final class OptionSet {
5050
public boolean SHOW_TABLE_EDITOR_INFO_PANEL;
5151
public boolean QUOTING_ENFORCED;
5252
public boolean FILE_END_LINE_BREAK;
53+
public boolean ADVANCED_FONT_HANDLING;
5354

5455
public OptionSet() {
5556
EditorSettingsExternalizable editorSettingsExternalizable = EditorSettingsExternalizable.getInstance();
@@ -69,6 +70,7 @@ public OptionSet() {
6970
TABLE_COLUMN_HIGHTLIGHTING = true;
7071
ZERO_BASED_COLUMN_NUMBERING = false;
7172
FILE_END_LINE_BREAK = true;
73+
ADVANCED_FONT_HANDLING = true;
7274
}
7375
}
7476

@@ -221,4 +223,11 @@ public boolean isTableAutoColumnWidthOnOpen() {
221223
public void setTableAutoColumnWidthOnOpen(boolean tableAutoColumnWidthOnOpen) {
222224
getState().TABLE_AUTO_COLUMN_WIDTH_ON_OPEN = tableAutoColumnWidthOnOpen;
223225
}
226+
227+
public boolean isAdvancedFontHandling() {
228+
return getState().ADVANCED_FONT_HANDLING;
229+
}
230+
public void setAdvancedFontHandling(boolean advancedFontHandling) {
231+
getState().ADVANCED_FONT_HANDLING = advancedFontHandling;
232+
}
224233
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvEditorSettingsProvider.form

Lines changed: 170 additions & 107 deletions
Large diffs are not rendered by default.

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/CsvEditorSettingsProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class CsvEditorSettingsProvider implements SearchableConfigurable {
3535
private JFormattedTextField tfMaxColumnWidth;
3636
private JFormattedTextField tfDefaultColumnWidth;
3737
private JCheckBox cbAdjustColumnWidthOnOpen;
38+
private JCheckBox cbAdvancedFontHandling;
3839

3940
@NotNull
4041
@Override
@@ -82,7 +83,8 @@ public boolean isModified() {
8283
isModified(cbFileEndLineBreak, csvEditorSettingsExternalizable.isFileEndLineBreak()) ||
8384
!tfMaxColumnWidth.getValue().equals(csvEditorSettingsExternalizable.getTableAutoMaxColumnWidth()) ||
8485
!tfDefaultColumnWidth.getValue().equals(csvEditorSettingsExternalizable.getTableDefaultColumnWidth()) ||
85-
isModified(cbAdjustColumnWidthOnOpen, csvEditorSettingsExternalizable.isTableAutoColumnWidthOnOpen());
86+
isModified(cbAdjustColumnWidthOnOpen, csvEditorSettingsExternalizable.isTableAutoColumnWidthOnOpen()) ||
87+
isModified(cbAdvancedFontHandling, csvEditorSettingsExternalizable.isAdvancedFontHandling());
8688
}
8789

8890
@Override
@@ -104,6 +106,7 @@ public void reset() {
104106
tfMaxColumnWidth.setValue(csvEditorSettingsExternalizable.getTableAutoMaxColumnWidth());
105107
tfDefaultColumnWidth.setValue(csvEditorSettingsExternalizable.getTableDefaultColumnWidth());
106108
cbAdjustColumnWidthOnOpen.setSelected(csvEditorSettingsExternalizable.isTableAutoColumnWidthOnOpen());
109+
cbAdvancedFontHandling.setSelected(csvEditorSettingsExternalizable.isAdvancedFontHandling());
107110
}
108111

109112
@Override
@@ -125,6 +128,7 @@ public void apply() throws ConfigurationException {
125128
csvEditorSettingsExternalizable.setTableAutoMaxColumnWidth((int)tfMaxColumnWidth.getValue());
126129
csvEditorSettingsExternalizable.setTableDefaultColumnWidth((int)tfDefaultColumnWidth.getValue());
127130
csvEditorSettingsExternalizable.setTableAutoColumnWidthOnOpen(cbAdjustColumnWidthOnOpen.isSelected());
131+
csvEditorSettingsExternalizable.setAdvancedFontHandling(cbAdvancedFontHandling.isSelected());
128132
}
129133

130134
protected void createUIComponents() {

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditor.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.intellij.openapi.fileEditor.*;
1212
import com.intellij.openapi.project.Project;
1313
import com.intellij.openapi.util.Key;
14-
import com.intellij.openapi.util.SystemInfo;
1514
import com.intellij.openapi.util.UserDataHolder;
1615
import com.intellij.openapi.util.UserDataHolderBase;
1716
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
@@ -20,6 +19,7 @@
2019
import com.intellij.psi.PsiElement;
2120
import com.intellij.psi.PsiFile;
2221
import com.intellij.util.ArrayUtil;
22+
import com.intellij.util.ui.UIUtil;
2323
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfo;
2424
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap;
2525
import net.seesharpsoft.intellij.plugins.csv.CsvHelper;
@@ -31,8 +31,6 @@
3131
import org.jetbrains.annotations.Nullable;
3232

3333
import javax.swing.*;
34-
import javax.swing.plaf.FontUIResource;
35-
import javax.swing.text.StyleContext;
3634
import java.awt.*;
3735
import java.beans.PropertyChangeListener;
3836
import java.beans.PropertyChangeSupport;
@@ -323,15 +321,7 @@ public final int getRowCount() {
323321
}
324322

325323
public Font getFont() {
326-
// the one-liner to be used requires 172.2465.6 - compatibility
327-
// return UIUtil.getFontWithFallback(EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN));
328-
329-
Font font = EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN);
330-
String familyName = font.getFamily();
331-
int style = font.getStyle();
332-
int size = font.getSize();
333-
Font fontWithFallback = SystemInfo.isMac ? new Font(familyName, style, size) : (new StyleContext()).getFont(familyName, style, size);
334-
return fontWithFallback instanceof FontUIResource ? (FontUIResource)fontWithFallback : new FontUIResource(fontWithFallback);
324+
return UIUtil.getFontWithFallback(EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN));
335325
}
336326

337327
protected int getStringWidth(String text) {

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/MultiLineCellRenderer.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package net.seesharpsoft.intellij.plugins.csv.editor.table.swing;
22

3+
import com.intellij.openapi.editor.colors.EditorColorsManager;
4+
import com.intellij.openapi.editor.colors.EditorFontType;
5+
import com.intellij.openapi.editor.impl.FontFallbackIterator;
36
import com.intellij.openapi.editor.markup.TextAttributes;
47
import com.intellij.openapi.util.UserDataHolder;
8+
import com.intellij.util.ui.UIUtil;
59
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettingsExternalizable;
610
import net.seesharpsoft.intellij.plugins.csv.settings.CsvColorSettings;
711

@@ -102,6 +106,33 @@ public Object getCellEditorValue() {
102106
return this.getText();
103107
}
104108

109+
@Override
110+
public void setText(String text) {
111+
if (CsvEditorSettingsExternalizable.getInstance().isAdvancedFontHandling()) {
112+
setFont(determineFont(text));
113+
}
114+
super.setText(text);
115+
}
116+
117+
public Font determineFont(String text) {
118+
Font baseFont = UIUtil.getFontWithFallback(EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN));
119+
120+
FontFallbackIterator it = new FontFallbackIterator();
121+
it.setPreferredFont(baseFont.getFamily(), baseFont.getSize());
122+
it.setFontStyle(baseFont.getStyle());
123+
it.start(text, 0, text.length());
124+
125+
Font finalFont = baseFont;
126+
for(; !it.atEnd(); it.advance()) {
127+
Font font = it.getFont();
128+
if(!font.getFamily().equals(baseFont.getFamily())) {
129+
finalFont = font;
130+
break;
131+
}
132+
}
133+
return finalFont;
134+
}
135+
105136
@Override
106137
public boolean isCellEditable(EventObject anEvent) {
107138
return true;

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,16 @@ FIX: Index out of bound error on multi line clear cells #151
5252
</change-notes>
5353

5454
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
55-
<idea-version since-build="163.10154"/>
55+
<idea-version since-build="192.5728.98"/>
5656

5757
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
5858
on how to target different products -->
5959
<depends>com.intellij.modules.lang</depends>
6060

6161
<extensions defaultExtensionNs="com.intellij">
62-
<fileType name="FileType_CSV" implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvFileType" extensions="csv"/>
63-
<fileType name="FileType_TSV" implementationClass="net.seesharpsoft.intellij.plugins.tsv.TsvFileType" extensions="tsv;tab"/>
64-
<fileType name="FileType_PSV" implementationClass="net.seesharpsoft.intellij.plugins.psv.PsvFileType" extensions="psv"/>
65-
66-
<!-- backward compatibility -->
67-
<fileTypeFactory implementation="net.seesharpsoft.intellij.plugins.csv.CsvFileTypeFactory"/>
68-
<fileTypeFactory implementation="net.seesharpsoft.intellij.plugins.tsv.TsvFileTypeFactory"/>
69-
<fileTypeFactory implementation="net.seesharpsoft.intellij.plugins.psv.PsvFileTypeFactory"/>
62+
<fileType name="CSV" implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvFileType" extensions="csv"/>
63+
<fileType name="TSV" implementationClass="net.seesharpsoft.intellij.plugins.tsv.TsvFileType" extensions="tsv;tab"/>
64+
<fileType name="PSV" implementationClass="net.seesharpsoft.intellij.plugins.psv.PsvFileType" extensions="psv"/>
7065

7166
<lang.parserDefinition language="csv"
7267
implementationClass="net.seesharpsoft.intellij.plugins.csv.CsvParserDefinition"/>

0 commit comments

Comments
 (0)