diff --git a/src/main/java/de/neemann/digital/gui/SaveAsHelper.java b/src/main/java/de/neemann/digital/gui/SaveAsHelper.java
index d64f4bc7b..a7191fc93 100644
--- a/src/main/java/de/neemann/digital/gui/SaveAsHelper.java
+++ b/src/main/java/de/neemann/digital/gui/SaveAsHelper.java
@@ -5,6 +5,7 @@
*/
package de.neemann.digital.gui;
+import de.neemann.digital.analyse.quinemc.TableRows;
import de.neemann.digital.lang.Lang;
import de.neemann.gui.ErrorMessage;
@@ -12,12 +13,27 @@ import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
+import java.util.HashSet;
/**
* Helper to handle the overwrite conformation
*
*/
public final class SaveAsHelper {
+ private static final HashSet KNOWN = new HashSet<>();
+
+ static {
+ KNOWN.add("dig");
+ KNOWN.add("svg");
+ KNOWN.add("vhdl");
+ KNOWN.add("v");
+ KNOWN.add("hex");
+ KNOWN.add("tru");
+ KNOWN.add("csv");
+ KNOWN.add("gif");
+ KNOWN.add("png");
+ }
+
private final Component parent;
private final JFileChooser fc;
private final String suffix;
@@ -102,8 +118,13 @@ public final class SaveAsHelper {
String name = filename.getName();
int p = name.lastIndexOf('.');
- if (p >= 0 && p == name.length() - 4)
- name = name.substring(0, p);
+ if (p >= 0) {
+ String suf = name.substring(p + 1).toLowerCase();
+ if (KNOWN.contains(suf))
+ name = name.substring(0, p);
+ while (name.length() > 0 && name.charAt(name.length() - 1) == '.')
+ name = name.substring(0, name.length() - 1);
+ }
return new File(filename.getParentFile(), name + "." + suffix);
}
diff --git a/src/test/java/de/neemann/digital/gui/SaveAsHelperTest.java b/src/test/java/de/neemann/digital/gui/SaveAsHelperTest.java
index 1345b2c8b..697a19404 100644
--- a/src/test/java/de/neemann/digital/gui/SaveAsHelperTest.java
+++ b/src/test/java/de/neemann/digital/gui/SaveAsHelperTest.java
@@ -12,10 +12,17 @@ import java.io.File;
public class SaveAsHelperTest extends TestCase {
public void testCheckSuffix() {
+ assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test."), "dig").getName());
+ assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test"), "dig").getName());
+
assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test.dig"), "dig").getName());
assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test.svg"), "dig").getName());
assertEquals("test.main.dig", SaveAsHelper.checkSuffix(new File("test.main"), "dig").getName());
assertEquals("test.main.dig", SaveAsHelper.checkSuffix(new File("test.main.dig"), "dig").getName());
- assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test.mai"), "dig").getName());
+ assertEquals("test.mai.dig", SaveAsHelper.checkSuffix(new File("test.mai"), "dig").getName());
+
+ assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test.v"), "dig").getName());
+ assertEquals("test.dig", SaveAsHelper.checkSuffix(new File("test.vhdl"), "dig").getName());
+
}
}
\ No newline at end of file