122 lines
5.0 KiB
Java
122 lines
5.0 KiB
Java
package com.rusefi.netlist;
|
|
|
|
import java.io.*;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* 12/8/13
|
|
* (c) Andrey Belomutskiy
|
|
*/
|
|
public class NetListMerge {
|
|
private static final Pattern GET_HEADER = Pattern.compile("(.*)\\(components(.*)\\s*$", Pattern.DOTALL);
|
|
|
|
private static final Pattern GET_COMPONENTS = Pattern.compile("(.*)\\)\\s*\\(libparts(.*)\\)\\)\\s*$", Pattern.DOTALL);
|
|
|
|
private static final Pattern GET_LIBRARTS = Pattern.compile("(.*)\\)\\s*\\(libraries(.*)", Pattern.DOTALL);
|
|
private static final Pattern GET_LIBRARIES = Pattern.compile("(.*)\\)\\s*\\(nets(.*)", Pattern.DOTALL);
|
|
|
|
|
|
private NetListMerge() {
|
|
}
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
if (args.length < 2) {
|
|
System.out.println("This tool takes 'components' sections of multiple KiCad .net files and merges them into one");
|
|
System.out.println("usage:");
|
|
System.out.println("NetListMerge DEST_FILE SOURCE_1 SOURCE_2 [SOURCE_x]*");
|
|
return;
|
|
}
|
|
|
|
String destinationFile = args[0];
|
|
NetContent destination = parse(NetListMergeUtil.readFile(destinationFile));
|
|
|
|
StringBuilder components = new StringBuilder();
|
|
StringBuilder libparts = new StringBuilder();
|
|
StringBuilder libraries = new StringBuilder();
|
|
StringBuilder nets = new StringBuilder();
|
|
for (int i = 1; i < args.length; i++) {
|
|
String sourceFile = args[i];
|
|
NetContent source = parse(NetListMergeUtil.readFile(sourceFile));
|
|
components.append(source.components);
|
|
libparts.append(source.libparts);
|
|
libraries.append(source.libraries);
|
|
nets.append(source.nets);
|
|
}
|
|
|
|
System.out.println("Total " + components.length() + " bytes of components");
|
|
System.out.println("Total " + libparts.length() + " bytes of libparts");
|
|
System.out.println("Total " + libraries.length() + " bytes of libraries");
|
|
System.out.println("Total " + nets.length() + " bytes of nets");
|
|
|
|
StringBuilder result = new StringBuilder(destination.header);
|
|
result.append(" (components").append(components).append(")\r\n");
|
|
result.append(" (libparts").append(libparts).append(")\n");
|
|
result.append(" (libraries").append(libraries).append(")\n");
|
|
result.append(" (nets").append(nets).append(")");
|
|
result.append(")");
|
|
NetListMergeUtil.validateSection(result.toString());
|
|
NetListMergeUtil.writeResult(result.toString(), "out.txt");
|
|
}
|
|
|
|
private static class NetContent {
|
|
private final String header;
|
|
private final String components;
|
|
private final String libparts;
|
|
private final String nets;
|
|
private final String libraries;
|
|
|
|
private NetContent(String header, String components, String libparts, String libraries, String nets) {
|
|
this.header = header;
|
|
this.components = components;
|
|
this.libparts = libparts;
|
|
this.nets = nets;
|
|
this.libraries = libraries;
|
|
System.out.println("Got " + components.length() + " bytes of components");
|
|
System.out.println("Got " + libparts.length() + " bytes of libparts");
|
|
System.out.println("Got " + libraries.length() + " bytes of libraries");
|
|
System.out.println("Got " + nets.length() + " bytes of nets");
|
|
}
|
|
}
|
|
|
|
private static NetContent parse(String content) {
|
|
Matcher headerMatcher = GET_HEADER.matcher(content);
|
|
headerMatcher.find();
|
|
if (!headerMatcher.matches())
|
|
throw new IllegalStateException("Does not match expected patten for header");
|
|
|
|
String header = headerMatcher.group(1);
|
|
String nonHeader = headerMatcher.group(2);
|
|
|
|
Matcher componentsMatcher = GET_COMPONENTS.matcher(nonHeader);
|
|
if (!componentsMatcher.matches())
|
|
throw new IllegalStateException("Does not match expected patten for components");
|
|
|
|
String components = componentsMatcher.group(1);
|
|
String nonComponents = componentsMatcher.group(2);
|
|
NetListMergeUtil.validateSection(components);
|
|
|
|
Matcher libpartsMatcher = GET_LIBRARTS.matcher(nonComponents);
|
|
if (!libpartsMatcher.matches())
|
|
throw new IllegalStateException("Does not match expected patten for libparts");
|
|
|
|
String libparts = libpartsMatcher.group(1);
|
|
String nonlibparts = libpartsMatcher.group(2);
|
|
NetListMergeUtil.validateSection(libparts);
|
|
|
|
Matcher librariesMatcher = GET_LIBRARIES.matcher(nonlibparts);
|
|
if (!librariesMatcher.matches())
|
|
throw new IllegalStateException("Does not match expected patten for nets");
|
|
|
|
String libraries = librariesMatcher.group(1);
|
|
String nets = librariesMatcher.group(2);
|
|
NetListMergeUtil.validateSection(libraries);
|
|
NetListMergeUtil.validateSection(nets);
|
|
|
|
// System.out.println("components: " + components);
|
|
|
|
return new NetContent(header, components, libparts, libraries, nets);
|
|
}
|
|
|
|
}
|