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