From 458b8538309a9e6757263aa49ae711d4017d7d50 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 3 Jan 2021 09:19:58 +0100 Subject: [PATCH] netlist parse improvements --- .../src/org/diylc/core/measures/Voltage.java | 2 +- .../diylc/netlist/AbstractNetlistParser.java | 39 ++++++++----- .../org/diylc/netlist/TangoNetlistParser.java | 54 +++++++++++++++--- diylc/diylc-swing/build.xml | 2 +- diylc/diylc-swing/library/main.jar | Bin 755141 -> 755721 bytes .../src/org/diylc/swing/ActionFactory.java | 7 ++- 6 files changed, 79 insertions(+), 25 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/core/measures/Voltage.java b/diylc/diylc-core/src/org/diylc/core/measures/Voltage.java index 7ffd8aed..5794c96c 100644 --- a/diylc/diylc-core/src/org/diylc/core/measures/Voltage.java +++ b/diylc/diylc-core/src/org/diylc/core/measures/Voltage.java @@ -40,7 +40,7 @@ public class Voltage extends AbstractMeasure { return new Voltage(value, unit); } - public static Voltage parseCapacitance(String value) { + public static Voltage parseVoltage(String value) { value = value.replace("*", ""); for (VoltageUnit unit : VoltageUnit.values()) { if (value.toLowerCase().endsWith(unit.toString().toLowerCase())) { diff --git a/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java b/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java index 9b0875fd..7bc5d0ef 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java +++ b/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java @@ -42,9 +42,10 @@ public abstract class AbstractNetlistParser implements INetlistParser { private static Size X_OFFSET = new Size(1.5d, SizeUnit.in); private static Size Y_OFFSET = new Size(0.3d, SizeUnit.in); - private static int ROW_COUNT = 15; + private static int ROW_COUNT = 12; - public List parseFile(String fileName, List outputWarnings) throws NetlistParseException { + public List parseFile(String fileName, List outputWarnings) + throws NetlistParseException { String content; try { content = new String(Files.readAllBytes(Paths.get(fileName))); @@ -55,7 +56,8 @@ public abstract class AbstractNetlistParser implements INetlistParser { return parse(content, outputWarnings); } - public List parse(String content, List outputWarnings) throws NetlistParseException { + public List parse(String content, List outputWarnings) + throws NetlistParseException { List result = new ArrayList(); Pattern pattern = Pattern.compile(getItemRegex(), Pattern.MULTILINE | Pattern.DOTALL); @@ -75,9 +77,15 @@ public abstract class AbstractNetlistParser implements INetlistParser { } Map valueMap = new HashMap(); - List> typeCandidates = getComponentTypeCandidates(type, valueMap); - if (typeCandidates == null) { - outputWarnings.add("Type mappings not found for " + type + "."); + List> typeCandidates; + try { + typeCandidates = getComponentTypeCandidates(type, valueMap); + if (typeCandidates == null) { + outputWarnings.add("Type mappings not found for " + type + "."); + continue; + } + } catch (Exception e) { + outputWarnings.add("Error parsing type mappings for " + type + "."); continue; } @@ -94,16 +102,17 @@ public abstract class AbstractNetlistParser implements INetlistParser { result.add(new ParsedNetlistEntry(typeCandidates, type, valueMap)); } - + Collections.sort(result, new Comparator() { @Override public int compare(ParsedNetlistEntry o1, ParsedNetlistEntry o2) { int comp = o1.getRawType().compareToIgnoreCase(o2.getRawType()); if (comp == 0 && o1.getValues().containsKey("Name") && o2.getValues().containsKey("Name")) - comp = o1.getValues().get("Name").toString().compareToIgnoreCase(o2.getValues().get("Name").toString()); + comp = o1.getValues().get("Name").toString() + .compareToIgnoreCase(o2.getValues().get("Name").toString()); return comp; - } + } }); return result; @@ -113,6 +122,7 @@ public abstract class AbstractNetlistParser implements INetlistParser { List outputWarnings) { double dx = 0; double dy = 0; + int rowIdx = 0; List> result = new ArrayList>(); for (int i = 0; i < components.size(); i++) { ParsedNetlistComponent parsedComponent = components.get(i); @@ -133,18 +143,21 @@ public abstract class AbstractNetlistParser implements INetlistParser { Point2D controlPoint = new Point2D.Double(p.getX() + dx, p.getY() + dy); component.setControlPoint(controlPoint, j); } - - if (i > 0 && i % ROW_COUNT == 0) { + + if (rowIdx + 1 == ROW_COUNT) { dx += X_OFFSET.convertToPixels(); dy = 0; + rowIdx = 0; } else { dy += Y_OFFSET.convertToPixels(); + rowIdx++; } - + Method[] methods = clazz.getMethods(); for (Map.Entry value : parsedComponent.getValues().entrySet()) { try { - Optional first = Arrays.stream(methods).filter(x -> x.getName().equals("set" + value.getKey())).findFirst(); + Optional first = Arrays.stream(methods) + .filter(x -> x.getName().equals("set" + value.getKey())).findFirst(); if (first.isPresent()) { Method setter = first.get(); setter.invoke(component, value.getValue()); diff --git a/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java b/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java index ed274b0e..103abd48 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java +++ b/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import org.apache.log4j.Logger; import org.diylc.components.passive.AxialElectrolyticCapacitor; import org.diylc.components.passive.AxialFilmCapacitor; import org.diylc.components.passive.CapacitorSymbol; @@ -14,20 +15,28 @@ import org.diylc.components.passive.RadialElectrolytic; import org.diylc.components.passive.RadialFilmCapacitor; import org.diylc.components.passive.Resistor; import org.diylc.components.passive.ResistorSymbol; +import org.diylc.components.semiconductors.BJTSymbol; import org.diylc.components.semiconductors.DIL_IC; import org.diylc.components.semiconductors.DiodeGlass; import org.diylc.components.semiconductors.DiodePlastic; import org.diylc.components.semiconductors.DiodeSymbol; +import org.diylc.components.semiconductors.JFETSymbol; import org.diylc.components.semiconductors.LED; import org.diylc.components.semiconductors.LEDSymbol; +import org.diylc.components.semiconductors.MOSFETSymbol; import org.diylc.components.semiconductors.PhotoDiodeSymbol; import org.diylc.components.semiconductors.SchottkyDiodeSymbol; +import org.diylc.components.semiconductors.TransistorTO220; +import org.diylc.components.semiconductors.TransistorTO92; import org.diylc.components.semiconductors.ZenerDiodeSymbol; import org.diylc.core.measures.Capacitance; import org.diylc.core.measures.Resistance; +import org.diylc.core.measures.Voltage; public class TangoNetlistParser extends AbstractNetlistParser { + private static final Logger LOG = Logger.getLogger(TangoNetlistParser.class); + @Override public String getName() { return "Tango"; @@ -65,23 +74,36 @@ public class TangoNetlistParser extends AbstractNetlistParser { } if (type.toUpperCase().startsWith("CAP_ELECTRO")) { - additionalOutputs.put("Polarized", true); + boolean polarized = true; + if (type.toUpperCase().endsWith("_NP")) { + polarized = false; + type = type.substring(0, type.length() - 3); + } + if (type.length() > "CAP_ELECTRO".length()) { + String voltage = type.substring("CAP_ELECTRO".length() + 1) + "V"; + try { + additionalOutputs.put("VoltageNew", Voltage.parseVoltage(voltage)); + } catch (Exception e) { + LOG.error("Error while parsing voltage " + voltage); + } + } + additionalOutputs.put("Polarized", polarized); types.add(AxialElectrolyticCapacitor.class); types.add(RadialElectrolytic.class); types.add(MultiSectionCapacitor.class); types.add(CapacitorSymbol.class); } - + if (type.toUpperCase().startsWith("DIP")) { try { - int pinCount = Integer.parseInt(type.substring(3)); + int pinCount = Integer.parseInt(type.substring(3)); additionalOutputs.put("PinCount", DIL_IC.PinCount.valueOf("_" + pinCount)); - } catch (Exception e) { + } catch (Exception e) { } - - types.add(DIL_IC.class); + + types.add(DIL_IC.class); } - + if (type.equalsIgnoreCase("DIODE")) { types.add(DiodeGlass.class); types.add(DiodePlastic.class); @@ -90,12 +112,26 @@ public class TangoNetlistParser extends AbstractNetlistParser { types.add(DiodeSymbol.class); types.add(ZenerDiodeSymbol.class); } - + if (type.equalsIgnoreCase("LED")) { types.add(LED.class); types.add(LEDSymbol.class); } - + + if (type.equalsIgnoreCase("TO92")) { + types.add(TransistorTO92.class); + types.add(BJTSymbol.class); + types.add(MOSFETSymbol.class); + types.add(JFETSymbol.class); + } + + if (type.equalsIgnoreCase("TO220")) { + types.add(TransistorTO220.class); + types.add(BJTSymbol.class); + types.add(MOSFETSymbol.class); + types.add(JFETSymbol.class); + } + return types; } diff --git a/diylc/diylc-swing/build.xml b/diylc/diylc-swing/build.xml index e25c5499..5fbe27e3 100644 --- a/diylc/diylc-swing/build.xml +++ b/diylc/diylc-swing/build.xml @@ -10,7 +10,7 @@ - + diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 25252d94d9aed00f0f140fb018e3e00f429c373c..feeae81fec9e27912d0bd7b5d3a134600cbb0d25 100644 GIT binary patch delta 9342 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 delta 8715 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 diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index b51ee85e..82f5c362 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -524,7 +524,8 @@ public class ActionFactory { @Override public String getDescription() { - return LangUtil.translate("Netlist files"); + List ext = extensions.stream().map(ex -> "*." + ex).collect(Collectors.toList()); + return LangUtil.translate("Netlist files") + " (" + String.join(",", ext) + ")"; } }; } @@ -546,6 +547,8 @@ public class ActionFactory { LOG.debug("Importing netlist from " + file.getAbsolutePath()); List outputWarnings = new ArrayList(); List entries = parser.parseFile(file.getAbsolutePath(), outputWarnings); + if (!outputWarnings.isEmpty()) + LOG.warn("Parsing produced warnings:\n" + String.join("\n", outputWarnings)); return entries; } @@ -560,6 +563,8 @@ public class ActionFactory { List parsedComponents = entries.stream().map(entry -> new ParsedNetlistComponent(results.get(entry.getRawType()), entry.getValues())).collect(Collectors.toList()); List> components = parser.generateComponents(parsedComponents, outputWarnings); + if (!outputWarnings.isEmpty()) + LOG.warn("Component creation produced warnings:\n" + String.join("\n", outputWarnings)); plugInPort.pasteComponents(components, false, false); } } catch (Exception e) {