mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-26 06:54:03 +02:00
b2/extract-symbols: extract cref-symbol map from KiCad schematics
This commit is contained in:
parent
c582c47960
commit
7717e7fc3c
82
b2/extract-symbols
Executable file
82
b2/extract-symbols
Executable file
@ -0,0 +1,82 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# extract-symbols - Extract symbol names from KiCad schematics
|
||||
#
|
||||
# Written 2012 by Werner Almesberger
|
||||
# Copyright 2012 Werner Almesberger
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
|
||||
|
||||
sub usage
|
||||
{
|
||||
print STDERR "usage: $0 file.sch\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
&usage if $#ARGV != 0;
|
||||
|
||||
push @f, $ARGV[0];
|
||||
($dir = $ARGV[0]) =~ s|/[^/]*$||;
|
||||
$dir = "." if $dir eq "";
|
||||
|
||||
while (@f) {
|
||||
$file = pop @f;
|
||||
$sheet = 0;
|
||||
$comp = 0;
|
||||
open(FILE, $file) || die "$file: $!";
|
||||
while (<FILE>) {
|
||||
if (/^\$Sheet/) {
|
||||
$sheet = 1;
|
||||
next;
|
||||
}
|
||||
if (/^\$EndSheet/) {
|
||||
$sheet = 0;
|
||||
next;
|
||||
}
|
||||
if (/^\$Comp/) {
|
||||
$comp = 1;
|
||||
undef $cref;
|
||||
next;
|
||||
}
|
||||
if (/^\$EndComp/) {
|
||||
$comp = 0;
|
||||
next;
|
||||
}
|
||||
if (/^F1 "([^"]*)"/ && $sheet) {
|
||||
if (-r "$1") {
|
||||
push @f, $1;
|
||||
} elsif (-r "$dir/$1") {
|
||||
push @f, "$dir/$1";
|
||||
} else {
|
||||
die "don't know where to find $1";
|
||||
}
|
||||
next;
|
||||
}
|
||||
if (/^L\s+(\S+)\s+([^# \t\n]\S*)\s*$/ && $comp) {
|
||||
die if defined $cref;
|
||||
$cref = $2;
|
||||
$sym = $1;
|
||||
next;
|
||||
}
|
||||
if (/^U\s+1\s+/ && $comp) {
|
||||
next unless defined $cref;
|
||||
die "duplicate component reference \"$cref\" ($sym)" if
|
||||
defined $sym{$cref};
|
||||
$sym{$cref} = $sym;
|
||||
undef $cref;
|
||||
next;
|
||||
}
|
||||
}
|
||||
close FILE;
|
||||
}
|
||||
|
||||
for (sort keys %sym) {
|
||||
print "$_ $sym{$_}\n" || die "print: $!";
|
||||
}
|
||||
close STDOUT || die "close: $!";
|
Loading…
Reference in New Issue
Block a user