[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: PCB italics and reverse italics text script



On Wed, 02 Mar 2011, phil wrote:

>
> Maciej Pijanka just helped me come up with the attached script for  
> converting the text SymbolLines to italicized.
>
> This script uses 1:4 as the slanting factor which your welcome to  
> change, as well as the sign of it for forward slanting.

i updated this script a bit, it understands arguments
-s (--slant) with integer as argument parameter defining divisor for ratio
(default is 4)
-r (--reverse) to get reverse slant, default is forward,
-i (--in_file) <filename> to define input file
-o (--out_file) <filename> to define out file, but default is in_file value, without
suffix then -new.pcb appended.

best regards
Maciej

>
> It's pretty simple but might be useful as a starting point for others  
> wishing to modify the PCB default fonts.
>
> Good luck, Phil Taylor
>
> ----------------------------------------------------------------------
>
> #!/usr/bin/perl
> # I am grateful to Maciej Pijanka for helping me write this script.
> use strict;
>
>
> my $state = 0;
>
> while (not eof STDIN) {
> 	my $line = <STDIN>;
> 	my $printed = 0;
>
> 	chomp $line;
>
> 	if ($line =~ /^Symbol/) {
> 		$state = 1;
> 	}
>
> 	if ($state == 1 && $line =~ /^\($/) {
> 		$state ++;
> 	}
>
> 	if ($state == 2) {
> 		if ($line =~ /(^[ 	]*SymbolLine)\((\d+) (\d+) (\d+) (\d+) (\d+)\)(.*)$/) {
> 			my ($prefix, $x1, $y1, $x2, $y2, $thickness, $suffix) = ($1, $2, $3,  
> $4, $5, $6, $7);
> 			$x1 += $y1/4;
> 			$x2 += $y2/4;
> 			printf "%s[%d %d %d %d %d]%s\n", $prefix, $x1 * 100, $y1 * 100, $x2 *  
> 100, $y2 * 100, $thickness * 100, $suffix;
> 			$printed = 1;
> 		} elsif ($line =~ /(^[ 	]*SymbolLine)\[(\d+) (\d+) (\d+) (\d+)  
> (\d+)\](.*)$/) {
> 			my ($prefix, $x1, $y1, $x2, $y2, $thickness, $suffix) = ($1, $2, $3,  
> $4, $5, $6, $7);
> 			$x1 += $y1/4;
> 			$x2 += $y2/4;
> 			printf "%s[%d %d %d %d %d]%s\n", $prefix, $x1, $y1, $x2, $y2,  
> $thickness, $suffix;
> 			$printed = 1;
> 		}
> 	}
>
> 	if ($printed == 0) {
> 		printf "%s\n", $line;
> 	}
> }
>
>
>
> _______________________________________________
> geda-user mailing list
> geda-user@xxxxxxxxxxxxxx
> http://www.seul.org/cgi-bin/mailman/listinfo/geda-user

-- 
Maciej Pijanka
I don't fear computers, I fear lack of them -- Isaac Asimov
#!/usr/bin/perl
use strict;
use Getopt::Long;

Getopt::Long::Configure(qw/bundling/);


my ($in_file, $out_file);
my ($slant, $dir) = (4,0);

my $result = GetOptions (
	"slant|s=i"	=> \$slant,
        "infile|i=s"	=> \$in_file,
	"outfile|o=s"	=> \$out_file,
	"reversed|r!"	=> \$dir,
);

if (!$result or !defined $in_file) {
	printf "Usage: %s [-s <slant>] -i <infile> [-o <outfile>] [-r]\n", $0;
	exit;
}

if (!defined $out_file) {
	my $p = $in_file;
	$p =~ s/\.pcb//i;
	$out_file = $p . '-new.pcb';
} elsif ($out_file eq $in_file) {
	printf "Sorry, %s can't work using same file as both input and output one\n", $0;
	exit;
}

printf STDERR "%s\n", $dir;

$slant *= -1 if ($dir == 1);

if ($slant == 0) {
	printf "Sorry, slant is used as divisor, it can't be zero..";
	exit;
}

open (IN, '<', $in_file) or die "Can't open input file (".$in_file."): $!";
open (OUT, '>', $out_file) or die "Can't open output file (".$out_file."): $!";

my $state = 0;

while (not eof IN) {
	my $line = <IN>;
	my $printed = 0;

	chomp $line;

	if ($line =~ /^Symbol/) {
		$state = 1;
	} 

	if ($state == 1 && $line =~ /^\($/) {
		$state ++;
	}

	if ($state == 2) {
		if ($line =~ /(^[ 	]*SymbolLine)\((\d+) (\d+) (\d+) (\d+) (\d+)\)(.*)$/) {
			my ($prefix, $x1, $y1, $x2, $y2, $thickness, $suffix) = ($1, $2, $3, $4, $5, $6, $7);
			$x1 += $y1/$slant;
			$x2 += $y2/$slant;
			printf OUT "%s[%d %d %d %d %d]%s\n", $prefix, $x1 * 100, $y1 * 100, $x2 * 100, $y2 * 100, $thickness * 100, $suffix;
			$printed = 1;
		} elsif ($line =~ /(^[ 	]*SymbolLine)\[(\d+) (\d+) (\d+) (\d+) (\d+)\](.*)$/) {
			my ($prefix, $x1, $y1, $x2, $y2, $thickness, $suffix) = ($1, $2, $3, $4, $5, $6, $7);
			$x1 += $y1/$slant;
			$x2 += $y2/$slant;
			printf OUT "%s[%d %d %d %d %d]%s\n", $prefix, $x1, $y1, $x2, $y2, $thickness, $suffix;
			$printed = 1;
		}
	}

	if ($printed == 0) {
		printf OUT "%s\n", $line;
	}
}

close OUT;
close IN;


_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user