kicad-sch-api 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kicad-sch-api might be problematic. Click here for more details.
- {kicad_sch_api-0.3.0/kicad_sch_api.egg-info → kicad_sch_api-0.3.1}/PKG-INFO +1 -1
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/__init__.py +2 -2
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/formatter.py +1 -1
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/parser.py +111 -7
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1/kicad_sch_api.egg-info}/PKG-INFO +1 -1
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/pyproject.toml +1 -1
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/dead-code-analysis.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/publish-pypi.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/review-implementation.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/run-tests.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/update-and-commit.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/dev/update-memory-bank.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/.claude/commands/test/run-reference-tests.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/CHANGELOG.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/LICENSE +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/MANIFEST.in +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/README.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/advanced_usage.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/basic_usage.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/mcp_basic_example.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/mcp_integration.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/pin_to_pin_wiring_demo.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/simple_circuit_with_pin_wiring.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/examples/simple_two_resistor_routing.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/cli.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/__init__.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/component_bounds.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/components.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/config.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/geometry.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/ic_manager.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/junctions.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/manhattan_routing.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/pin_utils.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/schematic.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/simple_manhattan.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/types.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/wire_routing.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/core/wires.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/discovery/__init__.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/discovery/search_index.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/library/__init__.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/library/cache.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/py.typed +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/utils/__init__.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api/utils/validation.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api.egg-info/SOURCES.txt +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api.egg-info/dependency_links.txt +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api.egg-info/entry_points.txt +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api.egg-info/requires.txt +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/kicad_sch_api.egg-info/top_level.txt +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/setup.cfg +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/README.md +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/blank_schematic/blank_schematic.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/blank_schematic/blank_schematic.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/multi_unit_7400/multi_unit_7400.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/multi_unit_7400/multi_unit_7400.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/power_symbols/power_symbols.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/power_symbols/power_symbols.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/resistor_divider/resistor_divider.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/resistor_divider/resistor_divider.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/sch_title/sch_title.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/sch_title/sch_title.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_extended_component/single_extended_component.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_extended_component/single_extended_component.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_hierarchical_sheet/single_hierarchical_sheet.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_hierarchical_sheet/single_hierarchical_sheet.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_hierarchical_sheet/subcircuit1.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_label/single_label.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_label/single_label.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_label_hierarchical/single_label_hierarchical.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_label_hierarchical/single_label_hierarchical.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_resistor/single_resistor.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_resistor/single_resistor.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_text/single_text.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_text/single_text.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_text_box/single_text_box.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_text_box/single_text_box.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_wire/single_wire.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/single_wire/single_wire.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/two_resistors/two_resistors.kicad_pro +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/two_resistors/two_resistors.kicad_sch +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_bounding_box_rectangles.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_component_removal.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_element_removal.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_grid_snapping.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_manhattan_routing.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_parse_reference_rectangles.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_pin_positioning.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_pin_to_pin_wiring.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_rectangle.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_rectangle_roundtrip.py +0 -0
- {kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/test_removal_against_references.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kicad-sch-api
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Professional KiCAD schematic manipulation library with exact format preservation
|
|
5
5
|
Author-email: Circuit-Synth <shane@circuit-synth.com>
|
|
6
6
|
Maintainer-email: Circuit-Synth <shane@circuit-synth.com>
|
|
@@ -42,7 +42,7 @@ Advanced Usage:
|
|
|
42
42
|
print(f"Found {len(issues)} validation issues")
|
|
43
43
|
"""
|
|
44
44
|
|
|
45
|
-
__version__ = "0.3.
|
|
45
|
+
__version__ = "0.3.1"
|
|
46
46
|
__author__ = "Circuit-Synth"
|
|
47
47
|
__email__ = "info@circuit-synth.com"
|
|
48
48
|
|
|
@@ -55,7 +55,7 @@ from .library.cache import SymbolLibraryCache, get_symbol_cache
|
|
|
55
55
|
from .utils.validation import ValidationError, ValidationIssue
|
|
56
56
|
|
|
57
57
|
# Version info
|
|
58
|
-
VERSION_INFO = (0, 3,
|
|
58
|
+
VERSION_INFO = (0, 3, 1)
|
|
59
59
|
|
|
60
60
|
# Public API
|
|
61
61
|
__all__ = [
|
|
@@ -55,7 +55,7 @@ class ExactFormatter:
|
|
|
55
55
|
self.rules["generator"] = FormatRule(inline=True, quote_indices={1})
|
|
56
56
|
self.rules["generator_version"] = FormatRule(inline=True, quote_indices={1})
|
|
57
57
|
self.rules["uuid"] = FormatRule(inline=True, quote_indices={1})
|
|
58
|
-
self.rules["paper"] = FormatRule(inline=True) #
|
|
58
|
+
self.rules["paper"] = FormatRule(inline=True, quote_indices={1}) # Paper size should be quoted per KiCad format
|
|
59
59
|
|
|
60
60
|
# Title block
|
|
61
61
|
self.rules["title_block"] = FormatRule(inline=False)
|
|
@@ -420,19 +420,123 @@ class SExpressionParser:
|
|
|
420
420
|
|
|
421
421
|
def _parse_wire(self, item: List[Any]) -> Optional[Dict[str, Any]]:
|
|
422
422
|
"""Parse a wire definition."""
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
423
|
+
wire_data = {
|
|
424
|
+
"points": [],
|
|
425
|
+
"stroke_width": 0.0,
|
|
426
|
+
"stroke_type": "default",
|
|
427
|
+
"uuid": None,
|
|
428
|
+
"wire_type": "wire" # Default to wire (vs bus)
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
for elem in item[1:]:
|
|
432
|
+
if not isinstance(elem, list):
|
|
433
|
+
continue
|
|
434
|
+
|
|
435
|
+
elem_type = str(elem[0]) if isinstance(elem[0], sexpdata.Symbol) else None
|
|
436
|
+
|
|
437
|
+
if elem_type == "pts":
|
|
438
|
+
# Parse points: (pts (xy x1 y1) (xy x2 y2) ...)
|
|
439
|
+
for pt in elem[1:]:
|
|
440
|
+
if isinstance(pt, list) and len(pt) >= 3:
|
|
441
|
+
if str(pt[0]) == "xy":
|
|
442
|
+
x, y = float(pt[1]), float(pt[2])
|
|
443
|
+
wire_data["points"].append({"x": x, "y": y})
|
|
444
|
+
|
|
445
|
+
elif elem_type == "stroke":
|
|
446
|
+
# Parse stroke: (stroke (width 0) (type default))
|
|
447
|
+
for stroke_elem in elem[1:]:
|
|
448
|
+
if isinstance(stroke_elem, list) and len(stroke_elem) >= 2:
|
|
449
|
+
stroke_type = str(stroke_elem[0])
|
|
450
|
+
if stroke_type == "width":
|
|
451
|
+
wire_data["stroke_width"] = float(stroke_elem[1])
|
|
452
|
+
elif stroke_type == "type":
|
|
453
|
+
wire_data["stroke_type"] = str(stroke_elem[1])
|
|
454
|
+
|
|
455
|
+
elif elem_type == "uuid":
|
|
456
|
+
wire_data["uuid"] = str(elem[1]) if len(elem) > 1 else None
|
|
457
|
+
|
|
458
|
+
# Only return wire if it has at least 2 points
|
|
459
|
+
if len(wire_data["points"]) >= 2:
|
|
460
|
+
return wire_data
|
|
461
|
+
else:
|
|
462
|
+
logger.warning(f"Wire has insufficient points: {len(wire_data['points'])}")
|
|
463
|
+
return None
|
|
426
464
|
|
|
427
465
|
def _parse_junction(self, item: List[Any]) -> Optional[Dict[str, Any]]:
|
|
428
466
|
"""Parse a junction definition."""
|
|
429
|
-
|
|
430
|
-
|
|
467
|
+
junction_data = {
|
|
468
|
+
"position": {"x": 0, "y": 0},
|
|
469
|
+
"diameter": 0,
|
|
470
|
+
"color": (0, 0, 0, 0),
|
|
471
|
+
"uuid": None
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
for elem in item[1:]:
|
|
475
|
+
if not isinstance(elem, list):
|
|
476
|
+
continue
|
|
477
|
+
|
|
478
|
+
elem_type = str(elem[0]) if isinstance(elem[0], sexpdata.Symbol) else None
|
|
479
|
+
|
|
480
|
+
if elem_type == "at":
|
|
481
|
+
# Parse position: (at x y)
|
|
482
|
+
if len(elem) >= 3:
|
|
483
|
+
junction_data["position"] = {"x": float(elem[1]), "y": float(elem[2])}
|
|
484
|
+
|
|
485
|
+
elif elem_type == "diameter":
|
|
486
|
+
# Parse diameter: (diameter value)
|
|
487
|
+
if len(elem) >= 2:
|
|
488
|
+
junction_data["diameter"] = float(elem[1])
|
|
489
|
+
|
|
490
|
+
elif elem_type == "color":
|
|
491
|
+
# Parse color: (color r g b a)
|
|
492
|
+
if len(elem) >= 5:
|
|
493
|
+
junction_data["color"] = (int(elem[1]), int(elem[2]), int(elem[3]), int(elem[4]))
|
|
494
|
+
|
|
495
|
+
elif elem_type == "uuid":
|
|
496
|
+
junction_data["uuid"] = str(elem[1]) if len(elem) > 1 else None
|
|
497
|
+
|
|
498
|
+
return junction_data
|
|
431
499
|
|
|
432
500
|
def _parse_label(self, item: List[Any]) -> Optional[Dict[str, Any]]:
|
|
433
501
|
"""Parse a label definition."""
|
|
434
|
-
#
|
|
435
|
-
|
|
502
|
+
# Label format: (label "text" (at x y rotation) (effects ...) (uuid ...))
|
|
503
|
+
if len(item) < 2:
|
|
504
|
+
return None
|
|
505
|
+
|
|
506
|
+
label_data = {
|
|
507
|
+
"text": str(item[1]), # Label text is second element
|
|
508
|
+
"position": {"x": 0, "y": 0},
|
|
509
|
+
"rotation": 0,
|
|
510
|
+
"size": 1.27,
|
|
511
|
+
"uuid": None
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
for elem in item[2:]: # Skip label keyword and text
|
|
515
|
+
if not isinstance(elem, list):
|
|
516
|
+
continue
|
|
517
|
+
|
|
518
|
+
elem_type = str(elem[0]) if isinstance(elem[0], sexpdata.Symbol) else None
|
|
519
|
+
|
|
520
|
+
if elem_type == "at":
|
|
521
|
+
# Parse position: (at x y rotation)
|
|
522
|
+
if len(elem) >= 3:
|
|
523
|
+
label_data["position"] = {"x": float(elem[1]), "y": float(elem[2])}
|
|
524
|
+
if len(elem) >= 4:
|
|
525
|
+
label_data["rotation"] = float(elem[3])
|
|
526
|
+
|
|
527
|
+
elif elem_type == "effects":
|
|
528
|
+
# Parse effects for font size: (effects (font (size x y)) ...)
|
|
529
|
+
for effect_elem in elem[1:]:
|
|
530
|
+
if isinstance(effect_elem, list) and str(effect_elem[0]) == "font":
|
|
531
|
+
for font_elem in effect_elem[1:]:
|
|
532
|
+
if isinstance(font_elem, list) and str(font_elem[0]) == "size":
|
|
533
|
+
if len(font_elem) >= 2:
|
|
534
|
+
label_data["size"] = float(font_elem[1])
|
|
535
|
+
|
|
536
|
+
elif elem_type == "uuid":
|
|
537
|
+
label_data["uuid"] = str(elem[1]) if len(elem) > 1 else None
|
|
538
|
+
|
|
539
|
+
return label_data
|
|
436
540
|
|
|
437
541
|
def _parse_rectangle(self, item: List[Any]) -> Optional[Dict[str, Any]]:
|
|
438
542
|
"""Parse a rectangle graphical element."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kicad-sch-api
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Professional KiCAD schematic manipulation library with exact format preservation
|
|
5
5
|
Author-email: Circuit-Synth <shane@circuit-synth.com>
|
|
6
6
|
Maintainer-email: Circuit-Synth <shane@circuit-synth.com>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kicad_sch_api-0.3.0 → kicad_sch_api-0.3.1}/tests/reference_tests/reference_kicad_projects/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|