From 75a4ea88693b5eedc2b7242dfcdf3469c3cf868b Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Fri, 1 Oct 2010 07:50:47 -0300 Subject: [PATCH] New script sanitize-schem to remove subsheets for which no file can be found. - schhist/sanitize-schem: remove inaccssible schematics sub-sheets - schhist/gitsch2ps (usage, "main"): -S runs sanitize-schem in addition to sanitize-profile - schhist/schhist2web (usage): -S now also sanitizes the top-level sheet --- schhist/gitsch2ps | 17 +++++++----- schhist/sanitize-schem | 61 ++++++++++++++++++++++++++++++++++++++++++ schhist/schhist2web | 2 +- 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100755 schhist/sanitize-schem diff --git a/schhist/gitsch2ps b/schhist/gitsch2ps index f3d05c6..5da6ac6 100755 --- a/schhist/gitsch2ps +++ b/schhist/gitsch2ps @@ -18,20 +18,25 @@ usage() usage: $0 [options] top-dir top-schem [commit] outdir -k keep the temporary directory and print its name - -S sanitize the KiCad profile + -S sanitize the KiCad profile and the top-level sheet EOF exit 1 } -sanitize=true +sanitize_profile=true +sanitize_schem=true keep=false while true; do case "$1" in -k) keep=true shift;; - -S) sanitize=`PATH="$PATH":\`dirname "$0"\` which sanitize-profile` - [ "$sanitize" = "${sanitize#/}" ] && sanitize=`pwd`/"$sanitize" + -S) sanitize_profile=`PATH="$PATH":\`dirname "$0"\` which sanitize-profile` + [ "$sanitize_profile" = "${sanitize_profile#/}" ] && + sanitize_profile=`pwd`/"$sanitize_profile" + sanitize_schem=`PATH="$PATH":\`dirname "$0"\` which sanitize-schem` + [ "$sanitize_schem" = "${sanitize_schem#/}" ] && + sanitize_schem=`pwd`/"$sanitize_schem" shift;; -*) usage;; @@ -74,8 +79,8 @@ fi ( cd "$sch" || exit rm -f *.ps - $sanitize "$tmp/${schem%.sch}.pro" || - exit + $sanitize_profile "$tmp/${schem%.sch}.pro" || exit + $sanitize_schem "$tmp/$schem" || exit eeschema --plot "$tmp/$schem" ) || exit diff --git a/schhist/sanitize-schem b/schhist/sanitize-schem new file mode 100755 index 0000000..7948d88 --- /dev/null +++ b/schhist/sanitize-schem @@ -0,0 +1,61 @@ +#!/usr/bin/perl +# +# sanitize-schem - Remove items from KiCad schematics that may cause an upset +# +# Written 2010 by Werner Almesberger +# Copyright 2010 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 [outfile]\n"; + exit(1); +} + + +($file, $out) = @ARGV; +&usage if $#ARGV > 1; + +($dir = $file) =~ s|.*/||; +$dir = "." if $dir eq ""; + +open(FILE, $file) || die "$file: $!"; +while () { + if (/^\$Sheet/) { + $s = $_; + $discard = 1; + next; + } + if (/^\$EndSheet/) { + push(@f, $s.$_) unless $discard; + undef $s; + next; + } + if (!defined $s) { + push(@f, $_); + next; + } + $s .= $_; + next unless /^F1 "([^"]*)"/; + if (-r "$1" || -r "$dir/$1") { + $discard = 0; + next; + } + print STDERR "removing $1\n"; +} +close FILE; + +if (!defined $out) { + rename($file, "$file.bak"); + $out= $file; +} + +open(FILE, ">$out") || die "$out: $!"; +print FILE join("", @f) || die "$out: $!"; +close FILE || die "$out: $!"; diff --git a/schhist/schhist2web b/schhist/schhist2web index 72bacd5..18aa576 100755 --- a/schhist/schhist2web +++ b/schhist/schhist2web @@ -118,7 +118,7 @@ usage: $0 [-c cache-dir] [-f] [-n] [-S] [top-dir] [top-schem] [out-dir] -c cache-dir cache directory (default: same as out-dir) -f identify sheets by their file name, not the sheet name -n don't use previous cache content (rebuild the cache) - -S sanitize KiCad profile + -S sanitize KiCad profile and top-level sheet EOF exit 1 }