diff --git a/src/kiutils/board.py b/src/kiutils/board.py index 95f0959..e785a73 100644 --- a/src/kiutils/board.py +++ b/src/kiutils/board.py @@ -116,33 +116,33 @@ def from_sexpr(cls, exp: list) -> Board: object = cls() for item in exp: if item[0] == 'version': object.version = item[1] - if item[0] == 'generator': object.generator = item[1] - if item[0] == 'general': object.general = GeneralSettings().from_sexpr(item) - if item[0] == 'paper': object.paper = PageSettings().from_sexpr(item) - if item[0] == 'title_block': object.titleBlock = TitleBlock().from_sexpr(item) - if item[0] == 'layers': + elif item[0] == 'generator': object.generator = item[1] + elif item[0] == 'general': object.general = GeneralSettings().from_sexpr(item) + elif item[0] == 'paper': object.paper = PageSettings().from_sexpr(item) + elif item[0] == 'title_block': object.titleBlock = TitleBlock().from_sexpr(item) + elif item[0] == 'layers': for layer in item[1:]: object.layers.append(LayerToken().from_sexpr(layer)) - if item[0] == 'setup': object.setup = SetupData().from_sexpr(item) - if item[0] == 'property': object.properties.update({item[1]: item[2]}) - if item[0] == 'net': object.nets.append(Net().from_sexpr(item)) - if item[0] == 'footprint': object.footprints.append(Footprint().from_sexpr(item)) - if item[0] == 'gr_text': object.graphicItems.append(GrText().from_sexpr(item)) - if item[0] == 'gr_text_box': object.graphicItems.append(GrTextBox().from_sexpr(item)) - if item[0] == 'gr_line': object.graphicItems.append(GrLine().from_sexpr(item)) - if item[0] == 'gr_rect': object.graphicItems.append(GrRect().from_sexpr(item)) - if item[0] == 'gr_circle': object.graphicItems.append(GrCircle().from_sexpr(item)) - if item[0] == 'gr_arc': object.graphicItems.append(GrArc().from_sexpr(item)) - if item[0] == 'gr_poly': object.graphicItems.append(GrPoly().from_sexpr(item)) - if item[0] == 'gr_curve': object.graphicItems.append(GrCurve().from_sexpr(item)) - if item[0] == 'image': object.graphicItems.append(Image().from_sexpr(item)) - if item[0] == 'dimension': object.dimensions.append(Dimension().from_sexpr(item)) - if item[0] == 'target': object.targets.append(Target().from_sexpr(item)) - if item[0] == 'segment': object.traceItems.append(Segment().from_sexpr(item)) - if item[0] == 'arc': object.traceItems.append(Arc().from_sexpr(item)) - if item[0] == 'via': object.traceItems.append(Via().from_sexpr(item)) - if item[0] == 'zone': object.zones.append(Zone().from_sexpr(item)) - if item[0] == 'group': object.groups.append(Group().from_sexpr(item)) + elif item[0] == 'setup': object.setup = SetupData().from_sexpr(item) + elif item[0] == 'property': object.properties.update({item[1]: item[2]}) + elif item[0] == 'net': object.nets.append(Net().from_sexpr(item)) + elif item[0] == 'footprint': object.footprints.append(Footprint().from_sexpr(item)) + elif item[0] == 'gr_text': object.graphicItems.append(GrText().from_sexpr(item)) + elif item[0] == 'gr_text_box': object.graphicItems.append(GrTextBox().from_sexpr(item)) + elif item[0] == 'gr_line': object.graphicItems.append(GrLine().from_sexpr(item)) + elif item[0] == 'gr_rect': object.graphicItems.append(GrRect().from_sexpr(item)) + elif item[0] == 'gr_circle': object.graphicItems.append(GrCircle().from_sexpr(item)) + elif item[0] == 'gr_arc': object.graphicItems.append(GrArc().from_sexpr(item)) + elif item[0] == 'gr_poly': object.graphicItems.append(GrPoly().from_sexpr(item)) + elif item[0] == 'gr_curve': object.graphicItems.append(GrCurve().from_sexpr(item)) + elif item[0] == 'image': object.graphicItems.append(Image().from_sexpr(item)) + elif item[0] == 'dimension': object.dimensions.append(Dimension().from_sexpr(item)) + elif item[0] == 'target': object.targets.append(Target().from_sexpr(item)) + elif item[0] == 'segment': object.traceItems.append(Segment().from_sexpr(item)) + elif item[0] == 'arc': object.traceItems.append(Arc().from_sexpr(item)) + elif item[0] == 'via': object.traceItems.append(Via().from_sexpr(item)) + elif item[0] == 'zone': object.zones.append(Zone().from_sexpr(item)) + elif item[0] == 'group': object.groups.append(Group().from_sexpr(item)) return object diff --git a/src/kiutils/dru.py b/src/kiutils/dru.py index a1b5a4a..32dbc77 100644 --- a/src/kiutils/dru.py +++ b/src/kiutils/dru.py @@ -93,9 +93,9 @@ def from_sexpr(cls, exp: list) -> Constraint: for item in exp[2:]: if type(item) != type([]): object.elements.append(item) - if item[0] == 'min': object.min = item[1] - if item[0] == 'opt': object.opt = item[1] - if item[0] == 'max': object.max = item[1] + elif item[0] == 'min': object.min = item[1] + elif item[0] == 'opt': object.opt = item[1] + elif item[0] == 'max': object.max = item[1] return object def to_sexpr(self, indent=2, newline=True): @@ -167,9 +167,9 @@ def from_sexpr(cls, exp: list) -> Rule: object.name = exp[1] for item in exp[2:]: if item[0] == 'constraint': object.constraints.append(Constraint().from_sexpr(item)) - if item[0] == 'condition': object.condition = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'severity': object.severity = item[1] + elif item[0] == 'condition': object.condition = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'severity': object.severity = item[1] return object def to_sexpr(self, indent: int = 0): @@ -234,7 +234,7 @@ def from_sexpr(cls, exp: list) -> DesignRules: object = cls() for item in exp: if item[0] == 'version': object.version = item[1] - if item[0] == 'rule': object.rules.append(Rule().from_sexpr(item)) + elif item[0] == 'rule': object.rules.append(Rule().from_sexpr(item)) return object @classmethod diff --git a/src/kiutils/footprint.py b/src/kiutils/footprint.py index 5d32bb6..8b1b5d5 100644 --- a/src/kiutils/footprint.py +++ b/src/kiutils/footprint.py @@ -89,9 +89,9 @@ def from_sexpr(cls, exp: list) -> Attributes: for item in exp: if item == 'board_only': object.boardOnly = True - if item == 'exclude_from_pos_files': object.excludeFromPosFiles = True - if item == 'exclude_from_bom': object.excludeFromBom = True - if item == 'allow_missing_courtyard': object.allowMissingCourtyard = True + elif item == 'exclude_from_pos_files': object.excludeFromPosFiles = True + elif item == 'exclude_from_bom': object.excludeFromBom = True + elif item == 'allow_missing_courtyard': object.allowMissingCourtyard = True return object def to_sexpr(self, indent=0, newline=False) -> str: @@ -271,7 +271,7 @@ def from_sexpr(cls, exp: list) -> DrillDefinition: # The ``offset`` token may not be given for item in exp: if type(item) != type([]): continue - if item[0] == 'offset': object.offset = Position().from_sexpr(item) + elif item[0] == 'offset': object.offset = Position().from_sexpr(item) return object def to_sexpr(self, indent: int = 0, newline: bool = False) -> str: @@ -332,7 +332,7 @@ def from_sexpr(cls, exp: list) -> PadOptions: object = cls() for item in exp: if item[0] == 'clearance': object.clearance = item[1] - if item[0] == 'anchor': object.anchor = item[1] + elif item[0] == 'anchor': object.anchor = item[1] return object def to_sexpr(self, indent: int = 0, newline: bool = False) -> str: @@ -505,47 +505,46 @@ def from_sexpr(cls, exp: list) -> Pad: for item in exp[3:]: if type(item) != type([]): if item == 'locked': object.locked = True - - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'size': object.size = Position().from_sexpr(item) - if item[0] == 'drill': object.drill = DrillDefinition().from_sexpr(item) - if item[0] == 'layers': + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'size': object.size = Position().from_sexpr(item) + elif item[0] == 'drill': object.drill = DrillDefinition().from_sexpr(item) + elif item[0] == 'layers': for layer in item[1:]: object.layers.append(layer) - if item[0] == 'property': object.property = item[1] - if item[0] == 'remove_unused_layers': object.removeUnusedLayers = True - if item[0] == 'keep_end_layers': object.keepEndLayers = True - if item[0] == 'roundrect_rratio': object.roundrectRatio = item[1] - if item[0] == 'chamfer_ratio': object.chamferRatio = item[1] - if item[0] == 'chamfer': + elif item[0] == 'property': object.property = item[1] + elif item[0] == 'remove_unused_layers': object.removeUnusedLayers = True + elif item[0] == 'keep_end_layers': object.keepEndLayers = True + elif item[0] == 'roundrect_rratio': object.roundrectRatio = item[1] + elif item[0] == 'chamfer_ratio': object.chamferRatio = item[1] + elif item[0] == 'chamfer': for chamfer in item[1:]: object.chamfer.append(chamfer) - if item[0] == 'net': object.net = Net().from_sexpr(item) - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'pinfunction': object.pinFunction = item[1] - if item[0] == 'pintype': object.pinType = item[1] - if item[0] == 'die_length': object.dieLength = item[1] - if item[0] == 'solder_mask_margin': object.solderMaskMargin = item[1] - if item[0] == 'solder_paste_margin': object.solderPasteMargin = item[1] - if item[0] == 'solder_paste_margin_ratio': object.solderPasteMarginRatio = item[1] - if item[0] == 'clearance': object.clearance = item[1] - if item[0] == 'zone_connect': object.zoneConnect = item[1] - if item[0] == 'thermal_width': object.thermalWidth = item[1] - if item[0] == 'thermal_gap': object.thermalGap = item[1] - if item[0] == 'options': object.customPadOptions = PadOptions().from_sexpr(item) - if item[0] == 'primitives': + elif item[0] == 'net': object.net = Net().from_sexpr(item) + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'pinfunction': object.pinFunction = item[1] + elif item[0] == 'pintype': object.pinType = item[1] + elif item[0] == 'die_length': object.dieLength = item[1] + elif item[0] == 'solder_mask_margin': object.solderMaskMargin = item[1] + elif item[0] == 'solder_paste_margin': object.solderPasteMargin = item[1] + elif item[0] == 'solder_paste_margin_ratio': object.solderPasteMarginRatio = item[1] + elif item[0] == 'clearance': object.clearance = item[1] + elif item[0] == 'zone_connect': object.zoneConnect = item[1] + elif item[0] == 'thermal_width': object.thermalWidth = item[1] + elif item[0] == 'thermal_gap': object.thermalGap = item[1] + elif item[0] == 'options': object.customPadOptions = PadOptions().from_sexpr(item) + elif item[0] == 'primitives': for primitive in item[1:]: if primitive[0] == 'gr_text': object.customPadPrimitives.append(GrText().from_sexpr(primitive)) - if primitive[0] == 'gr_text_box': object.customPadPrimitives.append(GrTextBox().from_sexpr(primitive)) - if primitive[0] == 'gr_line': object.customPadPrimitives.append(GrLine().from_sexpr(primitive)) - if primitive[0] == 'gr_rect': object.customPadPrimitives.append(GrRect().from_sexpr(primitive)) - if primitive[0] == 'gr_circle': object.customPadPrimitives.append(GrCircle().from_sexpr(primitive)) - if primitive[0] == 'gr_arc': object.customPadPrimitives.append(GrArc().from_sexpr(primitive)) - if primitive[0] == 'gr_poly': object.customPadPrimitives.append(GrPoly().from_sexpr(primitive)) - if primitive[0] == 'gr_curve': object.customPadPrimitives.append(GrCurve().from_sexpr(primitive)) + elif primitive[0] == 'gr_text_box': object.customPadPrimitives.append(GrTextBox().from_sexpr(primitive)) + elif primitive[0] == 'gr_line': object.customPadPrimitives.append(GrLine().from_sexpr(primitive)) + elif primitive[0] == 'gr_rect': object.customPadPrimitives.append(GrRect().from_sexpr(primitive)) + elif primitive[0] == 'gr_circle': object.customPadPrimitives.append(GrCircle().from_sexpr(primitive)) + elif primitive[0] == 'gr_arc': object.customPadPrimitives.append(GrArc().from_sexpr(primitive)) + elif primitive[0] == 'gr_poly': object.customPadPrimitives.append(GrPoly().from_sexpr(primitive)) + elif primitive[0] == 'gr_curve': object.customPadPrimitives.append(GrCurve().from_sexpr(primitive)) # XXX: Are dimentions even implemented here? - if primitive[0] == 'dimension': raise NotImplementedError("Dimensions are not yet handled! Please report this bug along with the file being parsed.") + elif primitive[0] == 'dimension': raise NotImplementedError("Dimensions are not yet handled! Please report this bug along with the file being parsed.") return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -717,6 +716,9 @@ def libId(self, symbol_id: str): generator: Optional[str] = None """The ``generator`` token attribute defines the program used to write the file""" + generator_version: Optional[str] = None + """The ``generator_version`` token attribute defines the kicad version used to write the file""" + locked: bool = False """The optional ``locked`` token defines a flag to indicate the footprint cannot be edited""" @@ -862,49 +864,48 @@ def from_sexpr(cls, exp: list) -> Footprint: for item in exp[2:]: if not isinstance(item, list): if item == 'locked': object.locked = True - if item == 'placed': object.placed = True - continue - - if item[0] == 'version': object.version = item[1] - if item[0] == 'generator': object.generator = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tedit': object.tedit = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'descr': object.description = item[1] - if item[0] == 'tags': object.tags = item[1] - if item[0] == 'path': object.path = item[1] - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'autoplace_cost90': object.autoplaceCost90 = item[1] - if item[0] == 'autoplace_cost180': object.autoplaceCost180 = item[1] - if item[0] == 'solder_mask_margin': object.solderMaskMargin = item[1] - if item[0] == 'solder_paste_margin': object.solderPasteMargin = item[1] - if item[0] == 'solder_paste_ratio': object.solderPasteRatio = item[1] - if item[0] == 'clearance': object.clearance = item[1] - if item[0] == 'zone_connect': object.zoneConnect = item[1] - if item[0] == 'thermal_width': object.thermalWidth = item[1] - if item[0] == 'thermal_gap': object.thermalGap = item[1] - if item[0] == 'attr': object.attributes = Attributes.from_sexpr(item) - if item[0] == 'model': object.models.append(Model.from_sexpr(item)) - if item[0] == 'fp_text': object.graphicItems.append(FpText.from_sexpr(item)) - if item[0] == 'fp_text_box': object.graphicItems.append(FpTextBox.from_sexpr(item)) - if item[0] == 'fp_line': object.graphicItems.append(FpLine.from_sexpr(item)) - if item[0] == 'fp_rect': object.graphicItems.append(FpRect.from_sexpr(item)) - if item[0] == 'fp_circle': object.graphicItems.append(FpCircle.from_sexpr(item)) - if item[0] == 'fp_arc': object.graphicItems.append(FpArc.from_sexpr(item)) - if item[0] == 'fp_poly': object.graphicItems.append(FpPoly.from_sexpr(item)) - if item[0] == 'fp_curve': object.graphicItems.append(FpCurve.from_sexpr(item)) - if item[0] == 'image':object.graphicItems.append(Image.from_sexpr(item)) - if item[0] == 'pad': object.pads.append(Pad.from_sexpr(item)) - if item[0] == 'zone': object.zones.append(Zone.from_sexpr(item)) - if item[0] == 'property': object.properties.update({ item[1]: item[2] }) - if item[0] == 'group': object.groups.append(Group.from_sexpr(item)) - if item[0] == 'private_layers': + elif item == 'placed': object.placed = True + elif item[0] == 'version': object.version = item[1] + elif item[0] == 'generator': object.generator = item[1] + elif item[0] == 'generator_version': object.generator_version = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tedit': object.tedit = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'descr': object.description = item[1] + elif item[0] == 'tags': object.tags = item[1] + elif item[0] == 'path': object.path = item[1] + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'autoplace_cost90': object.autoplaceCost90 = item[1] + elif item[0] == 'autoplace_cost180': object.autoplaceCost180 = item[1] + elif item[0] == 'solder_mask_margin': object.solderMaskMargin = item[1] + elif item[0] == 'solder_paste_margin': object.solderPasteMargin = item[1] + elif item[0] == 'solder_paste_ratio': object.solderPasteRatio = item[1] + elif item[0] == 'clearance': object.clearance = item[1] + elif item[0] == 'zone_connect': object.zoneConnect = item[1] + elif item[0] == 'thermal_width': object.thermalWidth = item[1] + elif item[0] == 'thermal_gap': object.thermalGap = item[1] + elif item[0] == 'attr': object.attributes = Attributes.from_sexpr(item) + elif item[0] == 'model': object.models.append(Model.from_sexpr(item)) + elif item[0] == 'fp_text': object.graphicItems.append(FpText.from_sexpr(item)) + elif item[0] == 'fp_text_box': object.graphicItems.append(FpTextBox.from_sexpr(item)) + elif item[0] == 'fp_line': object.graphicItems.append(FpLine.from_sexpr(item)) + elif item[0] == 'fp_rect': object.graphicItems.append(FpRect.from_sexpr(item)) + elif item[0] == 'fp_circle': object.graphicItems.append(FpCircle.from_sexpr(item)) + elif item[0] == 'fp_arc': object.graphicItems.append(FpArc.from_sexpr(item)) + elif item[0] == 'fp_poly': object.graphicItems.append(FpPoly.from_sexpr(item)) + elif item[0] == 'fp_curve': object.graphicItems.append(FpCurve.from_sexpr(item)) + elif item[0] == 'image':object.graphicItems.append(Image.from_sexpr(item)) + elif item[0] == 'pad': object.pads.append(Pad.from_sexpr(item)) + elif item[0] == 'zone': object.zones.append(Zone.from_sexpr(item)) + elif item[0] == 'property': object.properties.update({ item[1]: item[2] }) + elif item[0] == 'group': object.groups.append(Group.from_sexpr(item)) + elif item[0] == 'private_layers': for layer in item[1:]: object.privateLayers.append(layer) - if item[0] == 'net_tie_pad_groups': + elif item[0] == 'net_tie_pad_groups': for layer in item[1:]: object.netTiePadGroups.append(layer) - if item[0] == 'dimension': + elif item[0] == 'dimension': raise NotImplementedError("Dimensions are not yet handled! Please report this bug along with the file being parsed.") return object @@ -1024,9 +1025,10 @@ def to_sexpr(self, indent=0, newline=True, layerInFirstLine=False) -> str: placed = ' placed' if self.placed else '' version = f' (version {self.version})' if self.version is not None else '' generator = f' (generator {self.generator})' if self.generator is not None else '' + generator_version = f' (generator_version {self.generator_version})' if self.generator_version is not None else '' tstamp = f' (tstamp {self.tstamp})' if self.tstamp is not None else '' - expression = f'{indents}(footprint "{dequote(self.libId)}"{locked}{placed}{version}{generator}' + expression = f'{indents}(footprint "{dequote(self.libId)}"{locked}{placed}{version}{generator}{generator_version}' if layerInFirstLine: expression += f' (layer "{dequote(self.layer)}")\n' else: diff --git a/src/kiutils/items/brditems.py b/src/kiutils/items/brditems.py index f4c1a80..0465d0b 100644 --- a/src/kiutils/items/brditems.py +++ b/src/kiutils/items/brditems.py @@ -270,18 +270,18 @@ def from_sexpr(cls, exp: list) -> StackupLayer: # Parse the tokens of StackupSubLayer for the current sublayer if parsingSublayer: if item[0] == 'thickness': tempSublayer.thickness = item[1] - if item[0] == 'material': tempSublayer.material = item[1] - if item[0] == 'epsilon_r': tempSublayer.epsilonR = item[1] - if item[0] == 'loss_tangent': tempSublayer.lossTangent = item[1] + elif item[0] == 'material': tempSublayer.material = item[1] + elif item[0] == 'epsilon_r': tempSublayer.epsilonR = item[1] + elif item[0] == 'loss_tangent': tempSublayer.lossTangent = item[1] continue # Parse the normal tokens of StackupLayer token if item[0] == 'type': object.type = item[1] - if item[0] == 'thickness': object.thickness = item[1] - if item[0] == 'material': object.material = item[1] - if item[0] == 'epsilon_r': object.epsilonR = item[1] - if item[0] == 'loss_tangent': object.lossTangent = item[1] - if item[0] == 'color': object.color = item[1] + elif item[0] == 'thickness': object.thickness = item[1] + elif item[0] == 'material': object.material = item[1] + elif item[0] == 'epsilon_r': object.epsilonR = item[1] + elif item[0] == 'loss_tangent': object.lossTangent = item[1] + elif item[0] == 'color': object.color = item[1] # Add the last parsed sublayer to the list, if any if parsingSublayer: @@ -370,11 +370,11 @@ def from_sexpr(cls, exp: list) -> Stackup: object = cls() for item in exp: if item[0] == 'layer': object.layers.append(StackupLayer().from_sexpr(item)) - if item[0] == 'copper_finish': object.copperFinish = item[1] - if item[0] == 'dielectric_constraints': object.dielectricContraints = item[1] - if item[0] == 'edge_connector': object.edgeConnector = item[1] - if item[0] == 'castellated_pads': object.castellatedPads = True - if item[0] == 'edge_plating': object.edgePlating = True + elif item[0] == 'copper_finish': object.copperFinish = item[1] + elif item[0] == 'dielectric_constraints': object.dielectricContraints = item[1] + elif item[0] == 'edge_connector': object.edgeConnector = item[1] + elif item[0] == 'castellated_pads': object.castellatedPads = True + elif item[0] == 'edge_plating': object.edgePlating = True return object def to_sexpr(self, indent=4, newline=True) -> str: @@ -562,39 +562,39 @@ def from_sexpr(cls, exp: list) -> PlotSettings: object = cls() for item in exp: if item[0] == 'layerselection': object.layerSelection = item[1] - if item[0] == 'plot_on_all_layers_selection': object.plotOnAllLayersSelection = item[1] - if item[0] == 'disableapertmacros': object.disableApertMacros = True if item[1] == 'true' else False - if item[0] == 'usegerberextensions' : object.useGerberExtensions = True if item[1] == 'true' else False - if item[0] == 'usegerberattributes' : object.useGerberAttributes = True if item[1] == 'true' else False - if item[0] == 'usegerberadvancedattributes' : object.useGerberAdvancedAttributes = True if item[1] == 'true' else False - if item[0] == 'creategerberjobfile' : object.createGerberJobFile = True if item[1] == 'true' else False - if item[0] == 'dashed_line_dash_ratio': object.dashedLineDashRatio = item[1] - if item[0] == 'dashed_line_gap_ratio': object.dashedLineGapRatio = item[1] - if item[0] == 'svguseinch' : object.svgUseInch = True if item[1] == 'true' else False - if item[0] == 'svgprecision' : object.svgPrecision = item[1] - if item[0] == 'excludeedgelayer' : object.excludeEdgeLayer = True if item[1] == 'true' else False - if item[0] == 'plotframeref' : object.plotFameRef = True if item[1] == 'true' else False - if item[0] == 'viasonmask' : object.viasOnMask = True if item[1] == 'true' else False - if item[0] == 'mode' : object.mode = item[1] - if item[0] == 'useauxorigin' : object.useAuxOrigin = True if item[1] == 'true' else False - if item[0] == 'hpglpennumber' : object.hpglPenNumber = item[1] - if item[0] == 'hpglpenspeed' : object.hpglPenSpeed = item[1] - if item[0] == 'hpglpendiameter' : object.hpglPenDiameter = item[1] - if item[0] == 'dxfpolygonmode' : object.dxfPolygonMode = True if item[1] == 'true' else False - if item[0] == 'dxfimperialunits' : object.dxfImperialUnits = True if item[1] == 'true' else False - if item[0] == 'dxfusepcbnewfont' : object.dxfUsePcbnewFont = True if item[1] == 'true' else False - if item[0] == 'psnegative' : object.psNegative = True if item[1] == 'true' else False - if item[0] == 'psa4output' : object.psA4Output = True if item[1] == 'true' else False - if item[0] == 'plotreference' : object.plotReference = True if item[1] == 'true' else False - if item[0] == 'plotvalue' : object.plotValue = True if item[1] == 'true' else False - if item[0] == 'plotinvisibletext' : object.plotInvisibleText = True if item[1] == 'true' else False - if item[0] == 'sketchpadsonfab' : object.sketchPadsOnFab = True if item[1] == 'true' else False - if item[0] == 'subtractmaskfromsilk' : object.subtractMaskFromSilk = True if item[1] == 'true' else False - if item[0] == 'outputformat' : object.outputFormat = item[1] - if item[0] == 'mirror' : object.mirror = True if item[1] == 'true' else False - if item[0] == 'drillshape' : object.drillShape = item[1] - if item[0] == 'scaleselection' : object.scaleSelection = item[1] - if item[0] == 'outputdirectory' : object.outputDirectory = item[1] + elif item[0] == 'plot_on_all_layers_selection': object.plotOnAllLayersSelection = item[1] + elif item[0] == 'disableapertmacros': object.disableApertMacros = True if item[1] == 'true' else False + elif item[0] == 'usegerberextensions' : object.useGerberExtensions = True if item[1] == 'true' else False + elif item[0] == 'usegerberattributes' : object.useGerberAttributes = True if item[1] == 'true' else False + elif item[0] == 'usegerberadvancedattributes' : object.useGerberAdvancedAttributes = True if item[1] == 'true' else False + elif item[0] == 'creategerberjobfile' : object.createGerberJobFile = True if item[1] == 'true' else False + elif item[0] == 'dashed_line_dash_ratio': object.dashedLineDashRatio = item[1] + elif item[0] == 'dashed_line_gap_ratio': object.dashedLineGapRatio = item[1] + elif item[0] == 'svguseinch' : object.svgUseInch = True if item[1] == 'true' else False + elif item[0] == 'svgprecision' : object.svgPrecision = item[1] + elif item[0] == 'excludeedgelayer' : object.excludeEdgeLayer = True if item[1] == 'true' else False + elif item[0] == 'plotframeref' : object.plotFameRef = True if item[1] == 'true' else False + elif item[0] == 'viasonmask' : object.viasOnMask = True if item[1] == 'true' else False + elif item[0] == 'mode' : object.mode = item[1] + elif item[0] == 'useauxorigin' : object.useAuxOrigin = True if item[1] == 'true' else False + elif item[0] == 'hpglpennumber' : object.hpglPenNumber = item[1] + elif item[0] == 'hpglpenspeed' : object.hpglPenSpeed = item[1] + elif item[0] == 'hpglpendiameter' : object.hpglPenDiameter = item[1] + elif item[0] == 'dxfpolygonmode' : object.dxfPolygonMode = True if item[1] == 'true' else False + elif item[0] == 'dxfimperialunits' : object.dxfImperialUnits = True if item[1] == 'true' else False + elif item[0] == 'dxfusepcbnewfont' : object.dxfUsePcbnewFont = True if item[1] == 'true' else False + elif item[0] == 'psnegative' : object.psNegative = True if item[1] == 'true' else False + elif item[0] == 'psa4output' : object.psA4Output = True if item[1] == 'true' else False + elif item[0] == 'plotreference' : object.plotReference = True if item[1] == 'true' else False + elif item[0] == 'plotvalue' : object.plotValue = True if item[1] == 'true' else False + elif item[0] == 'plotinvisibletext' : object.plotInvisibleText = True if item[1] == 'true' else False + elif item[0] == 'sketchpadsonfab' : object.sketchPadsOnFab = True if item[1] == 'true' else False + elif item[0] == 'subtractmaskfromsilk' : object.subtractMaskFromSilk = True if item[1] == 'true' else False + elif item[0] == 'outputformat' : object.outputFormat = item[1] + elif item[0] == 'mirror' : object.mirror = True if item[1] == 'true' else False + elif item[0] == 'drillshape' : object.drillShape = item[1] + elif item[0] == 'scaleselection' : object.scaleSelection = item[1] + elif item[0] == 'outputdirectory' : object.outputDirectory = item[1] return object def to_sexpr(self, indent=4, newline=True) -> str: @@ -717,14 +717,14 @@ def from_sexpr(cls, exp: list) -> SetupData: object = cls() for item in exp: if item[0] == 'stackup': object.stackup = Stackup().from_sexpr(item) - if item[0] == 'pcbplotparams': object.plotSettings = PlotSettings().from_sexpr(item) - if item[0] == 'pad_to_mask_clearance': object.packToMaskClearance = item[1] - if item[0] == 'solder_mask_min_width': object.solderMaskMinWidth = item[1] - if item[0] == 'pad_to_paste_clearance': object.padToPasteClearance = item[1] - if item[0] == 'pad_to_paste_clearance_ratio': object.padToPasteClearanceRatio = item[1] - if item[0] == 'aux_axis_origin': object.auxAxisOrigin = Position().from_sexpr(item) - if item[0] == 'grid_origin': object.gridOrigin = Position().from_sexpr(item) - if item[0] == 'pcbplotparams': object.plotSettings = PlotSettings().from_sexpr(item) + elif item[0] == 'pcbplotparams': object.plotSettings = PlotSettings().from_sexpr(item) + elif item[0] == 'pad_to_mask_clearance': object.packToMaskClearance = item[1] + elif item[0] == 'solder_mask_min_width': object.solderMaskMinWidth = item[1] + elif item[0] == 'pad_to_paste_clearance': object.padToPasteClearance = item[1] + elif item[0] == 'pad_to_paste_clearance_ratio': object.padToPasteClearanceRatio = item[1] + elif item[0] == 'aux_axis_origin': object.auxAxisOrigin = Position().from_sexpr(item) + elif item[0] == 'grid_origin': object.gridOrigin = Position().from_sexpr(item) + elif item[0] == 'pcbplotparams': object.plotSettings = PlotSettings().from_sexpr(item) return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -807,13 +807,12 @@ def from_sexpr(cls, exp: list) -> Segment: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'start': object.start = Position().from_sexpr(item) - if item[0] == 'end': object.end = Position().from_sexpr(item) - if item[0] == 'width': object.width = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'net': object.net = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'start': object.start = Position().from_sexpr(item) + elif item[0] == 'end': object.end = Position().from_sexpr(item) + elif item[0] == 'width': object.width = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'net': object.net = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -900,19 +899,18 @@ def from_sexpr(cls, exp: list) -> Via: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - if item == 'micro' or item == 'blind': object.type = item - continue - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'size': object.size = item[1] - if item[0] == 'drill': object.drill = item[1] - if item[0] == 'layers': + elif item == 'micro' or item == 'blind': object.type = item + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'size': object.size = item[1] + elif item[0] == 'drill': object.drill = item[1] + elif item[0] == 'layers': for layer in item[1:]: object.layers.append(layer) - if item[0] == 'remove_unused_layers': object.removeUnusedLayers = True - if item[0] == 'keep_end_layers': object.keepEndLayers = True - if item[0] == 'free': object.free = True - if item[0] == 'net': object.net = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'remove_unused_layers': object.removeUnusedLayers = True + elif item[0] == 'keep_end_layers': object.keepEndLayers = True + elif item[0] == 'free': object.free = True + elif item[0] == 'net': object.net = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -999,8 +997,7 @@ def from_sexpr(cls, exp: list) -> Arc: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'start': object.start = Position().from_sexpr(item) + elif item[0] == 'start': object.start = Position().from_sexpr(item) elif item[0] == 'mid': object.mid = Position().from_sexpr(item) elif item[0] == 'end': object.end = Position().from_sexpr(item) elif item[0] == 'width': object.width = item[1] @@ -1082,10 +1079,10 @@ def from_sexpr(cls, exp: list) -> Target: object.type = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'size': object.size = item[1] - if item[0] == 'width': object.width = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'size': object.size = item[1] + elif item[0] == 'width': object.width = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: diff --git a/src/kiutils/items/common.py b/src/kiutils/items/common.py index 707328e..9caebbc 100644 --- a/src/kiutils/items/common.py +++ b/src/kiutils/items/common.py @@ -246,9 +246,9 @@ def from_sexpr(cls, exp: list) -> Stroke: for item in exp: if type(item) != type([]): continue - if item[0] == 'width': object.width = item[1] - if item[0] == 'type': object.type = item[1] - if item[0] == 'color': object.color = ColorRGBA.from_sexpr(item) + elif item[0] == 'width': object.width = item[1] + elif item[0] == 'type': object.type = item[1] + elif item[0] == 'color': object.color = ColorRGBA.from_sexpr(item) return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -328,15 +328,14 @@ def from_sexpr(cls, exp: list) -> Font: for item in exp: if type(item) != type([]): if item == 'bold': object.bold = True - if item == 'italic': object.italic = True - continue - if item[0] == 'face': object.face = item[1] - if item[0] == 'size': + elif item == 'italic': object.italic = True + elif item[0] == 'face': object.face = item[1] + elif item[0] == 'size': object.height = item[1] object.width = item[2] - if item[0] == 'thickness': object.thickness = item[1] - if item[0] == 'line_spacing': object.lineSpacing = item[1] - if item[0] == 'color': object.color = ColorRGBA.from_sexpr(item) + elif item[0] == 'thickness': object.thickness = item[1] + elif item[0] == 'line_spacing': object.lineSpacing = item[1] + elif item[0] == 'color': object.color = ColorRGBA.from_sexpr(item) return object def to_sexpr(self, indent=0, newline=False) -> str: @@ -404,8 +403,8 @@ def from_sexpr(cls, exp: list) -> Justify: for item in exp: # 'center' is the standard on vertical but not on horizontal in work sheets if item == 'left' or item == 'right' or item == 'center': object.horizontally = item - if item == 'top' or item == 'bottom': object.vertically = item - if item == 'mirror': object.mirror = True + elif item == 'top' or item == 'bottom': object.vertically = item + elif item == 'mirror': object.mirror = True return object def to_sexpr(self, indent=0, newline=False) -> str: @@ -481,10 +480,9 @@ def from_sexpr(cls, exp: list) -> Effects: for item in exp: if type(item) != type([]): if item == 'hide': object.hide = True - else: continue - if item[0] == 'font': object.font = Font().from_sexpr(item) - if item[0] == 'justify': object.justify = Justify().from_sexpr(item) - if item[0] == 'href': object.href = item[1] + elif item[0] == 'font': object.font = Font().from_sexpr(item) + elif item[0] == 'justify': object.justify = Justify().from_sexpr(item) + elif item[0] == 'href': object.href = item[1] return object def to_sexpr(self, indent=0, newline=True) -> str: @@ -603,9 +601,8 @@ def from_sexpr(cls, exp: list) -> Group: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'id': object.id = item[1] - if item[0] == 'members': + elif item[0] == 'id': object.id = item[1] + elif item[0] == 'members': for member in item[1:]: object.members.append(member) return object @@ -686,7 +683,6 @@ def from_sexpr(cls, exp: list) -> PageSettings: for item in exp: if type(item) != type([]): if item == 'portrait': object.portrait = True - continue return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -761,10 +757,10 @@ def from_sexpr(cls, exp: list) -> TitleBlock: object = cls() for item in exp: if item[0] == 'title': object.title = item[1] - if item[0] == 'date': object.date = item[1] - if item[0] == 'rev': object.revision = item[1] - if item[0] == 'company': object.company = item[1] - if item[0] == 'comment': object.comments.update({item[1]: item[2]}) + elif item[0] == 'date': object.date = item[1] + elif item[0] == 'rev': object.revision = item[1] + elif item[0] == 'company': object.company = item[1] + elif item[0] == 'comment': object.comments.update({item[1]: item[2]}) return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -855,9 +851,9 @@ def from_sexpr(cls, exp: list) -> Property: object.value = exp[2] for item in exp[3:]: if item[0] == 'id': object.id = item[1] - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'show_name': object.showName = True + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'show_name': object.showName = True return object def to_sexpr(self, indent: int = 4, newline: bool = True) -> str: @@ -1058,7 +1054,7 @@ def from_sexpr(cls, exp: list) -> Fill: object = cls() for item in exp: if item[0] == 'type': object.type = item[1] - if item[0] == 'color': object.color = ColorRGBA().from_sexpr(item) + elif item[0] == 'color': object.color = ColorRGBA().from_sexpr(item) return object def to_sexpr(self, indent: int = 4, newline: bool = True) -> str: @@ -1126,10 +1122,10 @@ def from_sexpr(cls, exp: list) -> Image: object = cls() for item in exp: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'scale': object.scale = item[1] - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'data': + elif item[0] == 'scale': object.scale = item[1] + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'data': for b64part in item[1:]: object.data.append(b64part) return object diff --git a/src/kiutils/items/dimensions.py b/src/kiutils/items/dimensions.py index 47b38e9..1e33421 100644 --- a/src/kiutils/items/dimensions.py +++ b/src/kiutils/items/dimensions.py @@ -86,13 +86,12 @@ def from_sexpr(cls, exp: list) -> DimensionFormat: for item in exp[1:]: if type(item) != type([]): if item == 'suppress_zeroes': object.suppressZeroes = True - continue - if item[0] == 'prefix': object.prefix = item[1] - if item[0] == 'suffix': object.suffix = item[1] - if item[0] == 'units': object.units = item[1] - if item[0] == 'units_format': object.unitsFormat = item[1] - if item[0] == 'precision': object.precision = item[1] - if item[0] == 'override_value': object.overrideValue = item[1] + elif item[0] == 'prefix': object.prefix = item[1] + elif item[0] == 'suffix': object.suffix = item[1] + elif item[0] == 'units': object.units = item[1] + elif item[0] == 'units_format': object.unitsFormat = item[1] + elif item[0] == 'precision': object.precision = item[1] + elif item[0] == 'override_value': object.overrideValue = item[1] pass return object @@ -183,13 +182,12 @@ def from_sexpr(cls, exp: list) -> DimensionStyle: for item in exp[1:]: if type(item) != type([]): if item == 'keep_text_aligned': object.keepTextAligned = True - continue - if item[0] == 'thickness': object.thickness = item[1] - if item[0] == 'arrow_length': object.arrowLength = item[1] - if item[0] == 'text_position_mode': object.textPositionMode = item[1] - if item[0] == 'extension_height': object.extensionHeight = item[1] - if item[0] == 'text_frame': object.textFrame = item[1] - if item[0] == 'extension_offset': object.extensionOffset = item[1] + elif item[0] == 'thickness': object.thickness = item[1] + elif item[0] == 'arrow_length': object.arrowLength = item[1] + elif item[0] == 'text_position_mode': object.textPositionMode = item[1] + elif item[0] == 'extension_height': object.extensionHeight = item[1] + elif item[0] == 'text_frame': object.textFrame = item[1] + elif item[0] == 'extension_offset': object.extensionOffset = item[1] return object def to_sexpr(self, indent: int = 4, newline: bool = True) -> str: @@ -283,17 +281,16 @@ def from_sexpr(cls, exp: list) -> Dimension: for item in exp[1:]: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'type': object.type = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'height': object.height = item[1] - if item[0] == 'orientation': object.orientation = item[1] - if item[0] == 'leader_length': object.leaderLength = item[1] - if item[0] == 'gr_text': object.grText = GrText().from_sexpr(item) - if item[0] == 'format': object.format = DimensionFormat().from_sexpr(item) - if item[0] == 'style': object.style = DimensionStyle().from_sexpr(item) - if item[0] == 'pts': + elif item[0] == 'type': object.type = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'height': object.height = item[1] + elif item[0] == 'orientation': object.orientation = item[1] + elif item[0] == 'leader_length': object.leaderLength = item[1] + elif item[0] == 'gr_text': object.grText = GrText().from_sexpr(item) + elif item[0] == 'format': object.format = DimensionFormat().from_sexpr(item) + elif item[0] == 'style': object.style = DimensionStyle().from_sexpr(item) + elif item[0] == 'pts': for point in item[1:]: object.pts.append(Position().from_sexpr(point)) diff --git a/src/kiutils/items/fpitems.py b/src/kiutils/items/fpitems.py index 7ef2b66..00a1e45 100644 --- a/src/kiutils/items/fpitems.py +++ b/src/kiutils/items/fpitems.py @@ -93,16 +93,15 @@ def from_sexpr(cls, exp: list) -> FpText: for item in exp[3:]: if type(item) != type([]): if item == 'hide': object.hide = True - continue - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'layer': + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] if(len(item) > 2): if(item[2] == "knockout"): object.knockout = True - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -187,16 +186,14 @@ def from_sexpr(cls, exp: list) -> FpLine: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None @@ -281,17 +278,15 @@ def from_sexpr(cls, exp: list) -> FpRect: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None @@ -410,16 +405,16 @@ def from_sexpr(cls, exp: list) -> FpTextBox: for item in exp[start_at:]: if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'pts': + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'pts': for point in item[1:]: object.pts.append(Position().from_sexpr(point)) - if item[0] == 'angle': object.angle = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'effects': object.effects = Effects.from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) - if item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) + elif item[0] == 'angle': object.angle = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'effects': object.effects = Effects.from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) + elif item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) return object @@ -527,17 +522,15 @@ def from_sexpr(cls, exp: list) -> FpCircle: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'center': object.center = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': + elif item[0] == 'center': object.center = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None @@ -625,17 +618,15 @@ def from_sexpr(cls, exp: list) -> FpArc: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'mid': object.mid = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'mid': object.mid = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None @@ -721,18 +712,16 @@ def from_sexpr(cls, exp: list) -> FpPoly: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'pts': + elif item[0] == 'pts': for point in item[1:]: object.coordinates.append(Position().from_sexpr(point)) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None @@ -821,17 +810,15 @@ def from_sexpr(cls, exp: list) -> FpCurve: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'pts': + elif item[0] == 'pts': for point in item[1:]: object.coordinates.append(Position().from_sexpr(point)) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] object.stroke = None - if item[0] == 'stroke': + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) object.width = None diff --git a/src/kiutils/items/gritems.py b/src/kiutils/items/gritems.py index 075a926..afcb715 100644 --- a/src/kiutils/items/gritems.py +++ b/src/kiutils/items/gritems.py @@ -85,16 +85,15 @@ def from_sexpr(cls, exp: list) -> GrText: for item in exp[2:]: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'layer': + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] if(len(item) > 2): if(item[2] == "knockout"): object.knockout = True - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -212,16 +211,16 @@ def from_sexpr(cls, exp: list) -> GrTextBox: for item in exp[start_at:]: if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'pts': + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'pts': for point in item[1:]: object.pts.append(Position().from_sexpr(point)) - if item[0] == 'angle': object.angle = item[1] - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'effects': object.effects = Effects.from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) - if item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) + elif item[0] == 'angle': object.angle = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'effects': object.effects = Effects.from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke.from_sexpr(item) + elif item[0] == 'render_cache': object.renderCache = RenderCache.from_sexpr(item) return object @@ -325,12 +324,11 @@ def from_sexpr(cls, exp: list) -> GrLine: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -406,13 +404,12 @@ def from_sexpr(cls, exp: list) -> GrRect: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -488,13 +485,12 @@ def from_sexpr(cls, exp: list) -> GrCircle: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'center': object.center = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'center': object.center = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] return object @@ -571,13 +567,12 @@ def from_sexpr(cls, exp: list) -> GrArc: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'start': object.start = Position.from_sexpr(item) - if item[0] == 'mid': object.mid = Position.from_sexpr(item) - if item[0] == 'end': object.end = Position.from_sexpr(item) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'start': object.start = Position.from_sexpr(item) + elif item[0] == 'mid': object.mid = Position.from_sexpr(item) + elif item[0] == 'end': object.end = Position.from_sexpr(item) + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] return object @@ -651,14 +646,13 @@ def from_sexpr(cls, exp: list) -> GrPoly: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'pts': + elif item[0] == 'pts': for point in item[1:]: object.coordinates.append(Position().from_sexpr(point)) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'fill': object.fill = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'fill': object.fill = item[1] + elif item[0] == 'width': object.width = item[1] return object @@ -743,13 +737,12 @@ def from_sexpr(cls, exp: list) -> GrCurve: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - continue - if item[0] == 'pts': + elif item[0] == 'pts': for point in item[1:]: object.coordinates.append(Position().from_sexpr(point)) - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'width': object.width = item[1] + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'width': object.width = item[1] return object diff --git a/src/kiutils/items/schitems.py b/src/kiutils/items/schitems.py index 1c31cd5..614277e 100644 --- a/src/kiutils/items/schitems.py +++ b/src/kiutils/items/schitems.py @@ -67,9 +67,9 @@ def from_sexpr(cls, exp: list) -> Junction: object = cls() for item in exp: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'color': object.color = ColorRGBA().from_sexpr(item) - if item[0] == 'diameter': object.color = item[1] - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'color': object.color = ColorRGBA().from_sexpr(item) + elif item[0] == 'diameter': object.color = item[1] + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -125,7 +125,7 @@ def from_sexpr(cls, exp: list) -> NoConnect: object = cls() for item in exp: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -188,9 +188,9 @@ def from_sexpr(cls, exp: list) -> BusEntry: object = cls() for item in exp: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'size': object.size = Position().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'size': object.size = Position().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -325,8 +325,8 @@ def from_sexpr(cls, exp: list) -> Connection: if item[0] == 'pts': for point in item[1:]: object.points.append(Position().from_sexpr(point)) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -396,8 +396,8 @@ def from_sexpr(cls, exp: list) -> PolyLine: if item[0] == 'pts': for point in item[1:]: object.points.append(Position().from_sexpr(point)) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -468,8 +468,8 @@ def from_sexpr(cls, exp: list) -> Text: object.text = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -555,11 +555,11 @@ def from_sexpr(cls, exp: list) -> TextBox: object.text = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'size': object.size = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'size': object.size = Position().from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -635,9 +635,9 @@ def from_sexpr(cls, exp: list) -> LocalLabel: object.text = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -719,11 +719,11 @@ def from_sexpr(cls, exp: list) -> GlobalLabel: object.text = exp[1] for item in exp[2:]: if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'property': object.properties.append(Property().from_sexpr(item)) - if item[0] == 'shape': object.shape = item[1] - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'property': object.properties.append(Property().from_sexpr(item)) + elif item[0] == 'shape': object.shape = item[1] + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -804,10 +804,10 @@ def from_sexpr(cls, exp: list) -> HierarchicalLabel: object.text = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'shape': object.shape = item[1] - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'shape': object.shape = item[1] + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True return object def to_sexpr(self, indent=2, newline=True) -> str: @@ -879,7 +879,7 @@ def from_sexpr(cls, exp: list) -> SymbolProjectPath: object.sheetInstancePath = exp[1] for item in exp[2:]: if item[0] == 'reference': object.reference = item[1] - if item[0] == 'unit': object.unit = item[1] + elif item[0] == 'unit': object.unit = item[1] return object def to_sexpr(self, indent=4, newline=True) -> str: @@ -1082,18 +1082,18 @@ def from_sexpr(cls, exp: list) -> SchematicSymbol: object = cls() for item in exp[1:]: if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True - if item[0] == 'lib_id': object.libId = item[1] - if item[0] == 'lib_name': object.libName = item[1] - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'unit': object.unit = item[1] - if item[0] == 'in_bom': object.inBom = True if item[1] == 'yes' else False - if item[0] == 'on_board': object.onBoard = True if item[1] == 'yes' else False - if item[0] == 'dnp': object.dnp = True if item[1] == 'yes' else False - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'property': object.properties.append(Property().from_sexpr(item)) - if item[0] == 'pin': object.pins.update({item[1]: item[2][1]}) - if item[0] == 'mirror': object.mirror = item[1] - if item[0] == 'instances': + elif item[0] == 'lib_id': object.libId = item[1] + elif item[0] == 'lib_name': object.libName = item[1] + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'unit': object.unit = item[1] + elif item[0] == 'in_bom': object.inBom = True if item[1] == 'yes' else False + elif item[0] == 'on_board': object.onBoard = True if item[1] == 'yes' else False + elif item[0] == 'dnp': object.dnp = True if item[1] == 'yes' else False + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'property': object.properties.append(Property().from_sexpr(item)) + elif item[0] == 'pin': object.pins.update({item[1]: item[2][1]}) + elif item[0] == 'mirror': object.mirror = item[1] + elif item[0] == 'instances': for instance in item[1:]: object.instances.append(SymbolProjectInstance.from_sexpr(instance)) @@ -1191,8 +1191,8 @@ def from_sexpr(cls, exp: list) -> HierarchicalPin: object.connectionType = exp[2] for item in exp[3:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=4, newline=True) -> str: @@ -1410,22 +1410,22 @@ def from_sexpr(cls, exp: list) -> HierarchicalSheet: object = cls() for item in exp[1:]: if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'size': + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'size': object.width = item[1] object.height = item[2] - if item[0] == 'fill': + elif item[0] == 'fill': object.fill = ColorRGBA().from_sexpr(item[1]) object.fill.precision = 4 - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'property': + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'property': p = Property().from_sexpr(item) if item[1] == 'Sheet name' or item[1] == 'Sheetname': object.sheetName = p elif item[1] == 'Sheet file' or item[1] == 'Sheetfile': object.fileName = p else: object.properties.append(p) - if item[0] == 'pin': object.pins.append(HierarchicalPin().from_sexpr(item)) - if item[0] == 'instances': + elif item[0] == 'pin': object.pins.append(HierarchicalPin().from_sexpr(item)) + elif item[0] == 'instances': for instance in item[1:]: object.instances.append(HierarchicalSheetProjectInstance.from_sexpr(instance)) return object @@ -1570,9 +1570,9 @@ def from_sexpr(cls, exp: list) -> SymbolInstance: object.path = exp[1] for item in exp[2:]: if item[0] == 'reference': object.reference = item[1] - if item[0] == 'unit': object.unit = item[1] - if item[0] == 'value': object.value = item[1] - if item[0] == 'footprint': object.footprint = item[1] + elif item[0] == 'unit': object.unit = item[1] + elif item[0] == 'value': object.value = item[1] + elif item[0] == 'footprint': object.footprint = item[1] return object def to_sexpr(self, indent=4, newline=True) -> str: @@ -1642,10 +1642,10 @@ def from_sexpr(cls, exp: list) -> Rectangle: for item in exp: if item[0] == 'start': object.start = Position().from_sexpr(item) - if item[0] == 'end': object.end = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'end': object.end = Position().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -1721,11 +1721,11 @@ def from_sexpr(cls, exp: list) -> Arc: for item in exp: if item[0] == 'start': object.start = Position().from_sexpr(item) - if item[0] == 'mid': object.mid = Position().from_sexpr(item) - if item[0] == 'end': object.end = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'mid': object.mid = Position().from_sexpr(item) + elif item[0] == 'end': object.end = Position().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -1798,10 +1798,10 @@ def from_sexpr(cls, exp: list) -> Circle: for item in exp: if item[0] == 'center': object.center = Position().from_sexpr(item) - if item[0] == 'radius': object.radius = item[1] - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'radius': object.radius = item[1] + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: @@ -1885,12 +1885,12 @@ def from_sexpr(cls, exp: list) -> NetclassFlag: object.text = exp[1] for item in exp[2:]: if item[0] == 'length': object.length = item[1] - if item[0] == 'shape': object.shape = item[1] - if item[0] == 'at': object.position = Position.from_sexpr(item) - if item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True - if item[0] == 'effects': object.effects = Effects.from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'property': object.properties.append(Property.from_sexpr(item)) + elif item[0] == 'shape': object.shape = item[1] + elif item[0] == 'at': object.position = Position.from_sexpr(item) + elif item[0] == 'fields_autoplaced': object.fieldsAutoplaced = True + elif item[0] == 'effects': object.effects = Effects.from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'property': object.properties.append(Property.from_sexpr(item)) return object def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: diff --git a/src/kiutils/items/syitems.py b/src/kiutils/items/syitems.py index a78cb22..a94d876 100644 --- a/src/kiutils/items/syitems.py +++ b/src/kiutils/items/syitems.py @@ -77,12 +77,11 @@ def from_sexpr(cls, exp: list) -> SyArc: for item in exp: if isinstance(item, str): if item == 'private': object.private = True - continue - if item[0] == 'start': object.start = Position().from_sexpr(item) - if item[0] == 'mid': object.mid = Position().from_sexpr(item) - if item[0] == 'end': object.end = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'start': object.start = Position().from_sexpr(item) + elif item[0] == 'mid': object.mid = Position().from_sexpr(item) + elif item[0] == 'end': object.end = Position().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) return object def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: @@ -160,11 +159,10 @@ def from_sexpr(cls, exp: list) -> SyCircle: for item in exp: if isinstance(item, str): if item == 'private': object.private = True - continue - if item[0] == 'center': object.center = Position().from_sexpr(item) - if item[0] == 'radius': object.radius = item[1] - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'center': object.center = Position().from_sexpr(item) + elif item[0] == 'radius': object.radius = item[1] + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) return object def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: @@ -227,8 +225,8 @@ def from_sexpr(cls, exp: list) -> SyCurve: object = cls() for item in exp: if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'pts': + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'pts': for point in item[1:]: object.points.append(Position().from_sexpr(point)) return object @@ -296,8 +294,8 @@ def from_sexpr(cls, exp: list) -> SyPolyLine: object = cls() for item in exp: if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'pts': + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'pts': for point in item[1:]: object.points.append(Position().from_sexpr(point)) return object @@ -376,11 +374,10 @@ def from_sexpr(cls, exp: list) -> SyRect: for item in exp: if isinstance(item, str): if item == 'private': object.private = True - continue - if item[0] == 'start': object.start = Position().from_sexpr(item) - if item[0] == 'end': object.end = Position().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'start': object.start = Position().from_sexpr(item) + elif item[0] == 'end': object.end = Position().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) return object def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: @@ -444,7 +441,7 @@ def from_sexpr(cls, exp: list) -> SyText: object.text = exp[1] for item in exp[2:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) return object def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: @@ -538,11 +535,11 @@ def from_sexpr(cls, exp: list) -> SyTextBox: for item in exp[start_at:]: if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'size': object.size = Position().from_sexpr(item) - if item[0] == 'effects': object.effects = Effects().from_sexpr(item) - if item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) - if item[0] == 'fill': object.fill = Fill().from_sexpr(item) - if item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'size': object.size = Position().from_sexpr(item) + elif item[0] == 'effects': object.effects = Effects().from_sexpr(item) + elif item[0] == 'stroke': object.stroke = Stroke().from_sexpr(item) + elif item[0] == 'fill': object.fill = Fill().from_sexpr(item) + elif item[0] == 'uuid': object.uuid = item[1] return object def to_sexpr(self, indent=2, newline=True) -> str: diff --git a/src/kiutils/items/zones.py b/src/kiutils/items/zones.py index 714a035..55c3750 100644 --- a/src/kiutils/items/zones.py +++ b/src/kiutils/items/zones.py @@ -75,12 +75,11 @@ def from_sexpr(cls, exp: list) -> KeepoutSettings: for item in exp: if type(item) != type([]): continue - - if item[0] == 'tracks': object.tracks = item[1] - if item[0] == 'vias': object.vias = item[1] - if item[0] == 'pads': object.pads = item[1] - if item[0] == 'copperpour': object.copperpour = item[1] - if item[0] == 'footprints': object.footprints = item[1] + elif item[0] == 'tracks': object.tracks = item[1] + elif item[0] == 'vias': object.vias = item[1] + elif item[0] == 'pads': object.pads = item[1] + elif item[0] == 'copperpour': object.copperpour = item[1] + elif item[0] == 'footprints': object.footprints = item[1] return object @@ -202,22 +201,20 @@ def from_sexpr(cls, exp: list) -> FillSettings: for item in exp: if type(item) != type([]): if item == 'yes': object.yes = True - else: continue - - if item[0] == 'mode': object.mode = item[1] - if item[0] == 'thermal_gap': object.thermalGap = item[1] - if item[0] == 'thermal_bridge_width': object.thermalBridgeWidth = item[1] - if item[0] == 'smoothing': object.smoothingStyle = item[1] - if item[0] == 'radius': object.smoothingRadius = item[1] - if item[0] == 'island_removal_mode': object.islandRemovalMode = item[1] - if item[0] == 'island_area_min': object.islandAreaMin = item[1] - if item[0] == 'hatch_thickness': object.hatchThickness = item[1] - if item[0] == 'hatch_gap': object.hatchGap = item[1] - if item[0] == 'hatch_orientation': object.hatchOrientation = item[1] - if item[0] == 'hatch_smoothing_level': object.hatchSmoothingLevel = item[1] - if item[0] == 'hatch_smoothing_value': object.hatchSmoothingValue = item[1] - if item[0] == 'hatch_border_algorithm': object.hatchBorderAlgorithm = item[1] - if item[0] == 'hatch_min_hole_area': object.hatchMinHoleArea = item[1] + elif item[0] == 'mode': object.mode = item[1] + elif item[0] == 'thermal_gap': object.thermalGap = item[1] + elif item[0] == 'thermal_bridge_width': object.thermalBridgeWidth = item[1] + elif item[0] == 'smoothing': object.smoothingStyle = item[1] + elif item[0] == 'radius': object.smoothingRadius = item[1] + elif item[0] == 'island_removal_mode': object.islandRemovalMode = item[1] + elif item[0] == 'island_area_min': object.islandAreaMin = item[1] + elif item[0] == 'hatch_thickness': object.hatchThickness = item[1] + elif item[0] == 'hatch_gap': object.hatchGap = item[1] + elif item[0] == 'hatch_orientation': object.hatchOrientation = item[1] + elif item[0] == 'hatch_smoothing_level': object.hatchSmoothingLevel = item[1] + elif item[0] == 'hatch_smoothing_value': object.hatchSmoothingValue = item[1] + elif item[0] == 'hatch_border_algorithm': object.hatchBorderAlgorithm = item[1] + elif item[0] == 'hatch_min_hole_area': object.hatchMinHoleArea = item[1] return object @@ -282,7 +279,7 @@ def from_sexpr(cls, exp: list) -> ZonePolygon: for item in exp: if type(item) != type([]): continue - if item[0] == 'pts': + elif item[0] == 'pts': for position in item[1:]: object.coordinates.append(Position().from_sexpr(position)) @@ -355,10 +352,9 @@ def from_sexpr(cls, exp: list) -> FilledPolygon: for item in exp: if type(item) != type([]): continue - - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'island': object.island = True - if item[0] == 'pts': + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'island': object.island = True + elif item[0] == 'pts': for position in item[1:]: object.coordinates.append(Position().from_sexpr(position)) @@ -432,9 +428,8 @@ def from_sexpr(cls, exp: list) -> FillSegments: for item in exp: if type(item) != type([]): continue - - if item[0] == 'layer': object.layer = item[1] - if item[0] == 'pts': + elif item[0] == 'layer': object.layer = item[1] + elif item[0] == 'pts': for position in item[1:]: object.coordinates.append(Position().from_sexpr(position)) @@ -574,31 +569,29 @@ def from_sexpr(cls, exp: list) -> Zone: for item in exp: if type(item) != type([]): if item == 'locked': object.locked = True - else: continue - - if item[0] == 'net': object.net = item[1] - if item[0] == 'net_name': object.netName = item[1] - if item[0] == 'layers' or item[0] == 'layer': + elif item[0] == 'net': object.net = item[1] + elif item[0] == 'net_name': object.netName = item[1] + elif item[0] == 'layers' or item[0] == 'layer': for layer in item[1:]: object.layers.append(layer) - if item[0] == 'tstamp': object.tstamp = item[1] - if item[0] == 'name': object.name = item[1] - if item[0] == 'hatch': + elif item[0] == 'tstamp': object.tstamp = item[1] + elif item[0] == 'name': object.name = item[1] + elif item[0] == 'hatch': object.hatch = Hatch(style=item[1], pitch=item[2]) - if item[0] == 'priority': object.priority = item[1] - if item[0] == 'connect_pads': + elif item[0] == 'priority': object.priority = item[1] + elif item[0] == 'connect_pads': if len(item) == 2: object.clearance = item[1][1] else: object.connectPads = item[1] object.clearance = item[2][1] - if item[0] == 'min_thickness': object.minThickness = item[1] - if item[0] == 'filled_areas_thickness': object.filledAreasThickness = item[1] - if item[0] == 'keepout': object.keepoutSettings = KeepoutSettings().from_sexpr(item) - if item[0] == 'fill': object.fillSettings = FillSettings().from_sexpr(item) - if item[0] == 'polygon': object.polygons.append(ZonePolygon().from_sexpr(item)) - if item[0] == 'filled_polygon': object.filledPolygons.append(FilledPolygon().from_sexpr(item)) - if item[0] == 'fill_segments': object.fillSegments = FillSegments().from_sexpr(item) + elif item[0] == 'min_thickness': object.minThickness = item[1] + elif item[0] == 'filled_areas_thickness': object.filledAreasThickness = item[1] + elif item[0] == 'keepout': object.keepoutSettings = KeepoutSettings().from_sexpr(item) + elif item[0] == 'fill': object.fillSettings = FillSettings().from_sexpr(item) + elif item[0] == 'polygon': object.polygons.append(ZonePolygon().from_sexpr(item)) + elif item[0] == 'filled_polygon': object.filledPolygons.append(FilledPolygon().from_sexpr(item)) + elif item[0] == 'fill_segments': object.fillSegments = FillSegments().from_sexpr(item) return object diff --git a/src/kiutils/libraries.py b/src/kiutils/libraries.py index 9098613..4a18279 100644 --- a/src/kiutils/libraries.py +++ b/src/kiutils/libraries.py @@ -65,11 +65,11 @@ def from_sexpr(cls, exp: list) -> Library: object = cls() for item in exp: if item[0] == 'name': object.name = item[1] - if item[0] == 'type': object.type = item[1] - if item[0] == 'uri': object.uri = item[1] - if item[0] == 'options': object.options = item[1] - if item[0] == 'descr': object.description = item[1] - if item[0] == 'disabled': object.active = False + elif item[0] == 'type': object.type = item[1] + elif item[0] == 'uri': object.uri = item[1] + elif item[0] == 'options': object.options = item[1] + elif item[0] == 'descr': object.description = item[1] + elif item[0] == 'disabled': object.active = False return object def to_sexpr(self, indent=2, newline=True) -> str: diff --git a/src/kiutils/schematic.py b/src/kiutils/schematic.py index a3396ff..2b649e3 100644 --- a/src/kiutils/schematic.py +++ b/src/kiutils/schematic.py @@ -137,36 +137,36 @@ def from_sexpr(cls, exp: list) -> Schematic: object = cls() for item in exp: if item[0] == 'version': object.version = item[1] - if item[0] == 'generator': object.generator = item[1] - if item[0] == 'uuid': object.uuid = item[1] - if item[0] == 'paper': object.paper = PageSettings().from_sexpr(item) - if item[0] == 'title_block': object.titleBlock = TitleBlock().from_sexpr(item) - if item[0] == 'lib_symbols': + elif item[0] == 'generator': object.generator = item[1] + elif item[0] == 'uuid': object.uuid = item[1] + elif item[0] == 'paper': object.paper = PageSettings().from_sexpr(item) + elif item[0] == 'title_block': object.titleBlock = TitleBlock().from_sexpr(item) + elif item[0] == 'lib_symbols': for symbol in item[1:]: object.libSymbols.append(Symbol().from_sexpr(symbol)) - if item[0] == 'junction': object.junctions.append(Junction().from_sexpr(item)) - if item[0] == 'no_connect': object.noConnects.append(NoConnect().from_sexpr(item)) - if item[0] == 'bus_entry': object.busEntries.append(BusEntry().from_sexpr(item)) - if item[0] == 'bus_alias': object.busAliases.append(BusAlias().from_sexpr(item)) - if item[0] == 'wire': object.graphicalItems.append(Connection().from_sexpr(item)) - if item[0] == 'bus': object.graphicalItems.append(Connection().from_sexpr(item)) - if item[0] == 'polyline': object.graphicalItems.append(PolyLine().from_sexpr(item)) - if item[0] == 'arc': object.shapes.append(Arc.from_sexpr(item)) - if item[0] == 'circle': object.shapes.append(Circle.from_sexpr(item)) - if item[0] == 'rectangle': object.shapes.append(Rectangle.from_sexpr(item)) - if item[0] == 'image': object.images.append(Image().from_sexpr(item)) - if item[0] == 'text': object.texts.append(Text().from_sexpr(item)) - if item[0] == 'text_box': object.textBoxes.append(TextBox().from_sexpr(item)) - if item[0] == 'label': object.labels.append(LocalLabel().from_sexpr(item)) - if item[0] == 'global_label': object.globalLabels.append(GlobalLabel().from_sexpr(item)) - if item[0] == 'hierarchical_label': object.hierarchicalLabels.append(HierarchicalLabel().from_sexpr(item)) - if item[0] == 'netclass_flag': object.netclassFlags.append(NetclassFlag.from_sexpr(item)) - if item[0] == 'symbol': object.schematicSymbols.append(SchematicSymbol().from_sexpr(item)) - if item[0] == 'sheet': object.sheets.append(HierarchicalSheet().from_sexpr(item)) - if item[0] == 'sheet_instances': + elif item[0] == 'junction': object.junctions.append(Junction().from_sexpr(item)) + elif item[0] == 'no_connect': object.noConnects.append(NoConnect().from_sexpr(item)) + elif item[0] == 'bus_entry': object.busEntries.append(BusEntry().from_sexpr(item)) + elif item[0] == 'bus_alias': object.busAliases.append(BusAlias().from_sexpr(item)) + elif item[0] == 'wire': object.graphicalItems.append(Connection().from_sexpr(item)) + elif item[0] == 'bus': object.graphicalItems.append(Connection().from_sexpr(item)) + elif item[0] == 'polyline': object.graphicalItems.append(PolyLine().from_sexpr(item)) + elif item[0] == 'arc': object.shapes.append(Arc.from_sexpr(item)) + elif item[0] == 'circle': object.shapes.append(Circle.from_sexpr(item)) + elif item[0] == 'rectangle': object.shapes.append(Rectangle.from_sexpr(item)) + elif item[0] == 'image': object.images.append(Image().from_sexpr(item)) + elif item[0] == 'text': object.texts.append(Text().from_sexpr(item)) + elif item[0] == 'text_box': object.textBoxes.append(TextBox().from_sexpr(item)) + elif item[0] == 'label': object.labels.append(LocalLabel().from_sexpr(item)) + elif item[0] == 'global_label': object.globalLabels.append(GlobalLabel().from_sexpr(item)) + elif item[0] == 'hierarchical_label': object.hierarchicalLabels.append(HierarchicalLabel().from_sexpr(item)) + elif item[0] == 'netclass_flag': object.netclassFlags.append(NetclassFlag.from_sexpr(item)) + elif item[0] == 'symbol': object.schematicSymbols.append(SchematicSymbol().from_sexpr(item)) + elif item[0] == 'sheet': object.sheets.append(HierarchicalSheet().from_sexpr(item)) + elif item[0] == 'sheet_instances': for instance in item[1:]: object.sheetInstances.append(HierarchicalSheetInstance().from_sexpr(instance)) - if item[0] == 'symbol_instances': + elif item[0] == 'symbol_instances': for instance in item[1:]: object.symbolInstances.append(SymbolInstance().from_sexpr(instance)) return object diff --git a/src/kiutils/symbol.py b/src/kiutils/symbol.py index 022a229..4a5611c 100644 --- a/src/kiutils/symbol.py +++ b/src/kiutils/symbol.py @@ -148,18 +148,17 @@ def from_sexpr(cls, exp: list) -> SymbolPin: for item in exp[3:]: if type(item) != type([]): if item == 'hide': object.hide = True - else: continue - if item[0] == 'at': object.position = Position().from_sexpr(item) - if item[0] == 'length': object.length = item[1] - if item[0] == 'name': + elif item[0] == 'at': object.position = Position().from_sexpr(item) + elif item[0] == 'length': object.length = item[1] + elif item[0] == 'name': object.name = item[1] if len(item) > 2: object.nameEffects = Effects().from_sexpr(item[2]) - if item[0] == 'number': + elif item[0] == 'number': object.number = item[1] if len(item) > 2: object.numberEffects = Effects().from_sexpr(item[2]) - if item[0] == 'alternate': object.alternatePins.append(SymbolAlternativePin().from_sexpr(item)) + elif item[0] == 'alternate': object.alternatePins.append(SymbolAlternativePin().from_sexpr(item)) return object def to_sexpr(self, indent: int = 4, newline: bool = True) -> str: @@ -379,31 +378,31 @@ def from_sexpr(cls, exp: list) -> Symbol: object.libId = exp[1] for item in exp[2:]: if item[0] == 'extends': object.extends = item[1] - if item[0] == 'pin_numbers': + elif item[0] == 'pin_numbers': if item[1] == 'hide': object.hidePinNumbers = True - if item[0] == 'pin_names': + elif item[0] == 'pin_names': object.pinNames = True for property in item[1:]: if type(property) == type([]): if property[0] == 'offset': object.pinNamesOffset = property[1] else: if property == 'hide': object.pinNamesHide = True - if item[0] == 'in_bom': object.inBom = True if item[1] == 'yes' else False - if item[0] == 'on_board': object.onBoard = True if item[1] == 'yes' else False - if item[0] == 'power': object.isPower = True - - if item[0] == 'symbol': object.units.append(Symbol().from_sexpr(item)) - if item[0] == 'property': object.properties.append(Property().from_sexpr(item)) - - if item[0] == 'pin': object.pins.append(SymbolPin().from_sexpr(item)) - if item[0] == 'arc': object.graphicItems.append(SyArc().from_sexpr(item)) - if item[0] == 'circle': object.graphicItems.append(SyCircle().from_sexpr(item)) - if item[0] == 'curve': object.graphicItems.append(SyCurve().from_sexpr(item)) - if item[0] == 'polyline': object.graphicItems.append(SyPolyLine().from_sexpr(item)) - if item[0] == 'rectangle': object.graphicItems.append(SyRect().from_sexpr(item)) - if item[0] == 'text': object.graphicItems.append(SyText().from_sexpr(item)) - if item[0] == 'text_box': object.graphicItems.append(SyTextBox().from_sexpr(item)) + elif item[0] == 'in_bom': object.inBom = True if item[1] == 'yes' else False + elif item[0] == 'on_board': object.onBoard = True if item[1] == 'yes' else False + elif item[0] == 'power': object.isPower = True + + elif item[0] == 'symbol': object.units.append(Symbol().from_sexpr(item)) + elif item[0] == 'property': object.properties.append(Property().from_sexpr(item)) + + elif item[0] == 'pin': object.pins.append(SymbolPin().from_sexpr(item)) + elif item[0] == 'arc': object.graphicItems.append(SyArc().from_sexpr(item)) + elif item[0] == 'circle': object.graphicItems.append(SyCircle().from_sexpr(item)) + elif item[0] == 'curve': object.graphicItems.append(SyCurve().from_sexpr(item)) + elif item[0] == 'polyline': object.graphicItems.append(SyPolyLine().from_sexpr(item)) + elif item[0] == 'rectangle': object.graphicItems.append(SyRect().from_sexpr(item)) + elif item[0] == 'text': object.graphicItems.append(SyText().from_sexpr(item)) + elif item[0] == 'text_box': object.graphicItems.append(SyTextBox().from_sexpr(item)) return object @@ -493,6 +492,9 @@ class SymbolLib(): generator: Optional[str] = None """The ``generator`` token attribute defines the program used to write the file""" + generator_version: Optional[str] = None + """The ``generator_version`` token attribute defines the kicad version used to write the file""" + symbols: List[Symbol] = field(default_factory=list) """The ``symbols`` token defines a list of zero or more symbols that are part of the symbol library""" @@ -548,8 +550,9 @@ def from_sexpr(cls, exp: list) -> SymbolLib: for item in exp[1:]: if item[0] == 'version': object.version = item[1] - if item[0] == 'generator': object.generator = item[1] - if item[0] == 'symbol': object.symbols.append(Symbol().from_sexpr(item)) + elif item[0] == 'generator': object.generator = item[1] + elif item[0] == 'generator_version': object.generator_version = item[1] + elif item[0] == 'symbol': object.symbols.append(Symbol().from_sexpr(item)) return object def to_file(self, filepath = None, encoding: Optional[str] = None): @@ -584,8 +587,10 @@ def to_sexpr(self, indent: int = 0, newline: bool = True) -> str: """ indents = ' '*indent endline = '\n' if newline else '' + generator = f' (generator {self.generator})' if self.generator is not None else '' + generator_version = f' (generator_version "{self.generator_version}")' if self.generator_version is not None else '' - expression = f'{indents}(kicad_symbol_lib (version {self.version}) (generator {self.generator})\n' + expression = f'{indents}(kicad_symbol_lib (version {self.version}){generator}{generator_version}\n' for item in self.symbols: expression += f'{indents}{item.to_sexpr(indent+2)}' expression += f'{indents}){endline}' diff --git a/src/kiutils/wks.py b/src/kiutils/wks.py index d19ea61..2ab356b 100644 --- a/src/kiutils/wks.py +++ b/src/kiutils/wks.py @@ -113,10 +113,9 @@ def from_sexpr(cls, exp: list) -> WksFont: for item in exp: if type(item) != type([]): if item == 'bold': object.bold = True - if item == 'italic': object.italic = True - continue - if item[0] == 'linewidth': object.linewidth = item[1] - if item[0] == 'size': object.size = WksFontSize().from_sexpr(item) + elif item == 'italic': object.italic = True + elif item[0] == 'linewidth': object.linewidth = item[1] + elif item[0] == 'size': object.size = WksFontSize().from_sexpr(item) return object def to_sexpr(self, indent=0, newline=False): @@ -250,14 +249,14 @@ def from_sexpr(cls, exp: list) -> Line: object = cls() for item in exp[1:]: if item[0] == 'name': object.name = item[1] - if item[0] == 'start': object.start = WksPosition().from_sexpr(item) - if item[0] == 'end': object.end = WksPosition().from_sexpr(item) - if item[0] == 'option': object.option = item[1] - if item[0] == 'linewidth': object.lineWidth = item[1] - if item[0] == 'repeat': object.repeat = item[1] - if item[0] == 'incrx': object.incrx = item[1] - if item[0] == 'incry': object.incry = item[1] - if item[0] == 'comment': object.comment = item[1] + elif item[0] == 'start': object.start = WksPosition().from_sexpr(item) + elif item[0] == 'end': object.end = WksPosition().from_sexpr(item) + elif item[0] == 'option': object.option = item[1] + elif item[0] == 'linewidth': object.lineWidth = item[1] + elif item[0] == 'repeat': object.repeat = item[1] + elif item[0] == 'incrx': object.incrx = item[1] + elif item[0] == 'incry': object.incry = item[1] + elif item[0] == 'comment': object.comment = item[1] return object def to_sexpr(self, indent=2, newline=True): @@ -349,14 +348,14 @@ def from_sexpr(cls, exp: list) -> Rect: object = cls() for item in exp[1:]: if item[0] == 'name': object.name = item[1] - if item[0] == 'start': object.start = WksPosition().from_sexpr(item) - if item[0] == 'end': object.end = WksPosition().from_sexpr(item) - if item[0] == 'option': object.option = item[1] - if item[0] == 'linewidth': object.lineWidth = item[1] - if item[0] == 'repeat': object.repeat = item[1] - if item[0] == 'incrx': object.incrx = item[1] - if item[0] == 'incry': object.incry = item[1] - if item[0] == 'comment': object.comment = item[1] + elif item[0] == 'start': object.start = WksPosition().from_sexpr(item) + elif item[0] == 'end': object.end = WksPosition().from_sexpr(item) + elif item[0] == 'option': object.option = item[1] + elif item[0] == 'linewidth': object.lineWidth = item[1] + elif item[0] == 'repeat': object.repeat = item[1] + elif item[0] == 'incrx': object.incrx = item[1] + elif item[0] == 'incry': object.incry = item[1] + elif item[0] == 'comment': object.comment = item[1] return object def to_sexpr(self, indent=2, newline=True): @@ -527,14 +526,14 @@ def from_sexpr(cls, exp: list) -> Bitmap: object = cls() for item in exp[1:]: if item[0] == 'name': object.name = item[1] - if item[0] == 'pos': object.position = WksPosition().from_sexpr(item) - if item[0] == 'option': object.option = item[1] - if item[0] == 'scale': object.scale = item[1] - if item[0] == 'repeat': object.repeat = item[1] - if item[0] == 'incrx': object.incrx = item[1] - if item[0] == 'incry': object.incry = item[1] - if item[0] == 'comment': object.comment = item[1] - if item[0] == 'pngdata': + elif item[0] == 'pos': object.position = WksPosition().from_sexpr(item) + elif item[0] == 'option': object.option = item[1] + elif item[0] == 'scale': object.scale = item[1] + elif item[0] == 'repeat': object.repeat = item[1] + elif item[0] == 'incrx': object.incrx = item[1] + elif item[0] == 'incry': object.incry = item[1] + elif item[0] == 'comment': object.comment = item[1] + elif item[0] == 'pngdata': if len(item) < 2: continue for data in item[1:]: if data[0] != 'data': continue @@ -652,18 +651,18 @@ def from_sexpr(cls, exp: list) -> TbText: object.text = exp[1] for item in exp[2:]: if item[0] == 'name': object.name = item[1] - if item[0] == 'pos': object.position = WksPosition().from_sexpr(item) - if item[0] == 'option': object.option = item[1] - if item[0] == 'rotate': object.rotate = item[1] - if item[0] == 'font': object.font = WksFont().from_sexpr(item) - if item[0] == 'justify': object.justify = Justify().from_sexpr(item) - if item[0] == 'maxlen': object.maxlen = item[1] - if item[0] == 'maxheight': object.maxheight = item[1] - if item[0] == 'repeat': object.repeat = item[1] - if item[0] == 'incrx': object.incrx = item[1] - if item[0] == 'incry': object.incry = item[1] - if item[0] == 'incrlabel': object.incrlabel = item[1] - if item[0] == 'comment': object.comment = item[1] + elif item[0] == 'pos': object.position = WksPosition().from_sexpr(item) + elif item[0] == 'option': object.option = item[1] + elif item[0] == 'rotate': object.rotate = item[1] + elif item[0] == 'font': object.font = WksFont().from_sexpr(item) + elif item[0] == 'justify': object.justify = Justify().from_sexpr(item) + elif item[0] == 'maxlen': object.maxlen = item[1] + elif item[0] == 'maxheight': object.maxheight = item[1] + elif item[0] == 'repeat': object.repeat = item[1] + elif item[0] == 'incrx': object.incrx = item[1] + elif item[0] == 'incry': object.incry = item[1] + elif item[0] == 'incrlabel': object.incrlabel = item[1] + elif item[0] == 'comment': object.comment = item[1] return object def to_sexpr(self, indent=2, newline=True): @@ -801,12 +800,12 @@ def from_sexpr(cls, exp: list) -> Setup: object = cls() for item in exp[1:]: if item[0] == 'textsize': object.textSize = TextSize().from_sexpr(item) - if item[0] == 'linewidth': object.lineWidth = item[1] - if item[0] == 'textlinewidth': object.textLineWidth = item[1] - if item[0] == 'left_margin': object.leftMargin = item[1] - if item[0] == 'right_margin': object.rightMargin = item[1] - if item[0] == 'top_margin': object.topMargin = item[1] - if item[0] == 'bottom_margin': object.bottomMargin = item[1] + elif item[0] == 'linewidth': object.lineWidth = item[1] + elif item[0] == 'textlinewidth': object.textLineWidth = item[1] + elif item[0] == 'left_margin': object.leftMargin = item[1] + elif item[0] == 'right_margin': object.rightMargin = item[1] + elif item[0] == 'top_margin': object.topMargin = item[1] + elif item[0] == 'bottom_margin': object.bottomMargin = item[1] return object def to_sexpr(self, indent=2, newline=True): @@ -877,13 +876,13 @@ def from_sexpr(cls, exp: list) -> WorkSheet: object = cls() for item in exp[1:]: if item[0] == 'version': object.version = item[1] - if item[0] == 'generator': object.generator = item[1] - if item[0] == 'setup': object.setup = Setup().from_sexpr(item) - if item[0] == 'rect': object.drawingObjects.append(Rect().from_sexpr(item)) - if item[0] == 'line': object.drawingObjects.append(Line().from_sexpr(item)) - if item[0] == 'polygon': object.drawingObjects.append(Polygon().from_sexpr(item)) - if item[0] == 'tbtext': object.drawingObjects.append(TbText().from_sexpr(item)) - if item[0] == 'bitmap': object.drawingObjects.append(Bitmap().from_sexpr(item)) + elif item[0] == 'generator': object.generator = item[1] + elif item[0] == 'setup': object.setup = Setup().from_sexpr(item) + elif item[0] == 'rect': object.drawingObjects.append(Rect().from_sexpr(item)) + elif item[0] == 'line': object.drawingObjects.append(Line().from_sexpr(item)) + elif item[0] == 'polygon': object.drawingObjects.append(Polygon().from_sexpr(item)) + elif item[0] == 'tbtext': object.drawingObjects.append(TbText().from_sexpr(item)) + elif item[0] == 'bitmap': object.drawingObjects.append(Bitmap().from_sexpr(item)) return object @classmethod