📄 jelib.java
字号:
} else { duplicate++; diskNodeName = "\"" + convertQuotedString(n.name.toString()) + "\"" + duplicate; } int nodeId = n.nodeId; while (nodeId >= nodeNames.size()) nodeNames.add(null); nodeNames.set(nodeId, diskNodeName); printWriter.print("|" + diskNodeName + "|"); if (!n.name.isTempname()) printWriter.print(describeDescriptor(n.nameDescriptor)); printWriter.print("|" + TextUtils.formatDouble(n.anchor.getX(), 0)); printWriter.print("|" + TextUtils.formatDouble(n.anchor.getY(), 0)); if (!(np instanceof CellId)) { double lambdaWidth = n.size.getLambdaX(); double lambdaHeight = n.size.getLambdaY(); printWriter.print("|"); if (lambdaWidth != 0) printWriter.print(TextUtils.formatDouble(lambdaWidth, 0)); printWriter.print("|"); if (lambdaHeight != 0) printWriter.print(TextUtils.formatDouble(lambdaHeight, 0)); } printWriter.print('|'); if (n.orient.isXMirrored()) printWriter.print('X'); if (n.orient.isYMirrored()) printWriter.print('Y'); int angle = n.orient.getAngle() % 3600; if (angle == 900 || angle == -2700) printWriter.print("R"); else if (angle == 1800 || angle == -1800) printWriter.print("RR"); else if (angle == 2700 || angle == -900) printWriter.print("RRR"); else if (angle != 0) printWriter.print(angle); StringBuilder nodeBits = new StringBuilder(); if (n.is(ImmutableNodeInst.HARD_SELECT)) nodeBits.append("A"); if (n.is(ImmutableNodeInst.LOCKED)) nodeBits.append("L"); if (n.is(ImmutableNodeInst.VIS_INSIDE)) nodeBits.append("V"); int ts = n.techBits; if (ts != 0) nodeBits.append(ts); printWriter.print("|" + nodeBits.toString()); if (np instanceof CellId) { String tdString = describeDescriptor(n.protoDescriptor); printWriter.print("|" + tdString); } printlnVars(n); } // write the arcs in this cell for (ImmutableArcInst a: cellRevision.arcs) { ArcProtoId apId = a.protoId; if (cellRevision.d.techId == apId.techId) printWriter.print("A" + convertString(apId.name)); else printWriter.print("A" + convertString(apId.fullName)); printWriter.print("|" + convertString(a.name.toString()) + "|"); if (!a.name.isTempname()) printWriter.print(describeDescriptor(a.nameDescriptor)); long arcWidth = a.getGridExtendOverMin()*2; printWriter.print("|"); if (arcWidth != 0) printWriter.print(TextUtils.formatDouble(DBMath.gridToLambda(arcWidth), 0)); StringBuilder arcBits = new StringBuilder(); if (a.is(ImmutableArcInst.HARD_SELECT)) arcBits.append("A"); if (a.is(ImmutableArcInst.BODY_ARROWED)) arcBits.append("B"); if (!a.is(ImmutableArcInst.FIXED_ANGLE)) arcBits.append("F"); if (a.is(ImmutableArcInst.HEAD_NEGATED)) arcBits.append("G"); if (!a.is(ImmutableArcInst.HEAD_EXTENDED)) arcBits.append("I"); if (!a.is(ImmutableArcInst.TAIL_EXTENDED)) arcBits.append("J"); if (a.is(ImmutableArcInst.TAIL_NEGATED)) arcBits.append("N"); if (a.is(ImmutableArcInst.RIGID)) arcBits.append("R"); if (a.is(ImmutableArcInst.SLIDABLE)) arcBits.append("S"); if (a.is(ImmutableArcInst.HEAD_ARROWED)) arcBits.append("X"); if (a.is(ImmutableArcInst.TAIL_ARROWED)) arcBits.append("Y"); printWriter.print("|" + arcBits.toString() + a.getAngle()); printWriter.print("|" + nodeNames.get(a.headNodeId) + "|" + getPortName(a.headPortId)); printWriter.print("|" + TextUtils.formatDouble(a.headLocation.getX(), 0)); printWriter.print("|" + TextUtils.formatDouble(a.headLocation.getY(), 0)); printWriter.print("|" + nodeNames.get(a.tailNodeId) + "|" + getPortName(a.tailPortId)); printWriter.print("|" + TextUtils.formatDouble(a.tailLocation.getX(), 0)); printWriter.print("|" + TextUtils.formatDouble(a.tailLocation.getY(), 0)); printlnVars(a); } // write the exports in this cell for (ImmutableExport e: cellRevision.exports) { printWriter.print("E" + convertString(e.exportId.externalId)); if (!oldRevision) { printWriter.print("|"); if (!e.name.toString().equals(e.exportId.externalId)) printWriter.print(convertString(e.name.toString())); } printWriter.print("|" + describeDescriptor(e.nameDescriptor)); printWriter.print("|" + nodeNames.get(e.originalNodeId) + "|" + getPortName(e.originalPortId)); printWriter.print("|" + e.characteristic.getShortName()); if (e.alwaysDrawn) printWriter.print("/A"); if (e.bodyOnly) printWriter.print("/B"); printlnVars(e); } // write the end-of-cell marker printWriter.println("X"); } void writeExternalLibraryInfo(LibId thisLib, Set<LibId> usedLibs) { // write external library information boolean libraryHeaderPrinted = false; TreeMap<String,LibId> sortedLibraries = new TreeMap<String,LibId>(TextUtils.STRING_NUMBER_ORDER); for (LibId libId: usedLibs) sortedLibraries.put(libId.libName, libId); for (LibId libId: sortedLibraries.values()) { if (libId == thisLib) continue; if (!libraryHeaderPrinted) { printWriter.println(); printWriter.println("# External Libraries:"); libraryHeaderPrinted = true; } String libFile = libId.libName; printWriter.println(); printWriter.println("L" + convertString(libId.libName) + "|" + convertString(libFile)); } } /** * Helper method to convert a TextDescriptor to a string that describes it */ private String describeDescriptor(TextDescriptor td) { return describeDescriptor(null, td, false); } /** * Method to convert a variable to a string that describes its TextDescriptor * @param var the Variable being described (may be null). * @param td the TextDescriptor being described. * @param isParam true to output parameter bit * @return a String describing the variable/textdescriptor. * The string has these fields: * Asize; for absolute size * B if bold * Cindex; if color index * Dx for display position (2=bottom 8=top 4=left 6=right 7=upleft 9=upright 1=downleft 3=downright 5=centered 0=boxed) * FfontName; if a nonstandard font * Gsize; for relative (grid unit) size * H if inherit * I if italic * L if underline * N if name=value; * Ol for language (J=Java L=Lisp T=TCL) * P if parameter * R/RR/RRR if rotated (90, 180, 270) * T if interior * Ux for units (R=resistance C=capacitance I=inductance A=current V=voltage D=distance T=time) * Xoffset; for X offset * Yoffset; for Y offset */ public static String describeDescriptor(Variable var, TextDescriptor td, boolean isParam) { StringBuilder ret = new StringBuilder(); TextDescriptor.Display display = td.getDisplay(); if (var == null) display = TextDescriptor.Display.SHOWN; if (display != TextDescriptor.Display.NONE) { // write size TextDescriptor.Size size = td.getSize(); if (size.isAbsolute()) ret.append("A" + (int)size.getSize() + ";"); // write bold if (td.isBold()) ret.append("B"); // write color int color = td.getColorIndex(); if (color != 0) ret.append("C" + color + ";"); // displayable: write display position ret.append(display == TextDescriptor.Display.SHOWN ? "D" : "d"); TextDescriptor.Position pos = td.getPos(); if (pos == TextDescriptor.Position.UP) ret.append("8"); else if (pos == TextDescriptor.Position.DOWN) ret.append("2"); else if (pos == TextDescriptor.Position.LEFT) ret.append("4"); else if (pos == TextDescriptor.Position.RIGHT) ret.append("6"); else if (pos == TextDescriptor.Position.UPLEFT) ret.append("7"); else if (pos == TextDescriptor.Position.UPRIGHT) ret.append("9"); else if (pos == TextDescriptor.Position.DOWNLEFT) ret.append("1"); else if (pos == TextDescriptor.Position.DOWNRIGHT) ret.append("3"); else if (pos == TextDescriptor.Position.BOXED) ret.append("0"); else ret.append("5"); // write font int font = td.getFace(); if (font != 0) { TextDescriptor.ActiveFont af = TextDescriptor.ActiveFont.findActiveFont(font); ret.append("F" + convertString(af.toString()) + ";"); } if (!size.isAbsolute()) ret.append("G" + TextUtils.formatDouble(size.getSize()) + ";"); } // write inherit if (td.isInherit()) ret.append("H"); if (display != TextDescriptor.Display.NONE) { // write italic if (td.isItalic()) ret.append("I"); // write underline if (td.isUnderline()) ret.append("L"); // write display type TextDescriptor.DispPos dispPos = td.getDispPart(); if (dispPos == TextDescriptor.DispPos.NAMEVALUE) ret.append("N"); } // write language if (var != null) { switch (var.getCode()) { case JAVA: ret.append("OJ"); break; case SPICE: ret.append("OL"); break; case TCL: ret.append("OT"); break; case NONE: break; default: throw new AssertionError(); } } // write parameter if (isParam) ret.append("P"); if (display != TextDescriptor.Display.NONE) { // write rotation TextDescriptor.Rotation rot = td.getRotation(); if (rot == TextDescriptor.Rotation.ROT90) ret.append("R"); else if (rot == TextDescriptor.Rotation.ROT180) ret.append("RR"); else if (rot == TextDescriptor.Rotation.ROT270) ret.append("RRR"); } // write interior if (td.isInterior()) ret.append("T"); // write units TextDescriptor.Unit unit = td.getUnit(); if (unit == TextDescriptor.Unit.RESISTANCE) ret.append("UR"); else if (unit == TextDescriptor.Unit.CAPACITANCE) ret.append("UC"); else if (unit == TextDescriptor.Unit.INDUCTANCE) ret.append("UI"); else if (unit == TextDescriptor.Unit.CURRENT) ret.append("UA"); else if (unit == TextDescriptor.Unit.VOLTAGE) ret.append("UV"); else if (unit == TextDescriptor.Unit.DISTANCE) ret.append("UD"); else if (unit == TextDescriptor.Unit.TIME) ret.append("UT"); if (display != TextDescriptor.Display.NONE) { // write offset double offX = td.getXOff();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -