From 1f0fee99f0b4dad7de9ebc42521a8548adf7e4a6 Mon Sep 17 00:00:00 2001 Message-Id: <1f0fee99f0b4dad7de9ebc42521a8548adf7e4a6.1714074603.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 9 Jan 2012 03:19:55 +0000 Subject: [PATCH] --process-fonttree Organization: Straylight/Edgeware From: Ian Jackson --- update-xfonts-traditional | 72 ++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/update-xfonts-traditional b/update-xfonts-traditional index 9d05e3a..4b71d14 100755 --- a/update-xfonts-traditional +++ b/update-xfonts-traditional @@ -6,11 +6,12 @@ use Getopt::Long; use File::Glob qw(:glob); use Data::Dumper; use IO::Pipe; +use File::Find; our $prefix="/usr/local"; our $package='xfonts-traditional'; our $sharedir="$prefix/share/$package"; -our @fontparentdirs=qw(/usr/share/fonts/X11 /usr/local/share/fonts/X11); +our @fonttrees=qw(/usr/share/fonts/X11 /usr/local/share/fonts/X11); our $donefile="$package.done"; our $logfile="$package.log"; our $fontprefix="trad--"; @@ -117,20 +118,6 @@ sub processbdf ($$$$) { return $modified; } -our (@options)=( - 'R|rules-include=s@' => \@rulespath, - 'share-dir=s' => \$sharedir, - 'verbose|v+' => \$verbose, - ); - -sub define_mode ($$) { - my ($optname,$f) = @_; - push @options, $optname, sub { - die "only one mode may be specified\n" if defined $mode; - $mode=$f; - }; -} - sub loadfoundries () { foreach my $path (@rulespath) { my $p = "$path/foundries"; @@ -238,8 +225,8 @@ sub processfontdir ($) { my %outfiles; # bitmask: 1 /*exists*/ | 2 /*wanted*/ my $changed; my $updated=0; + my $reported=0; - print $reportfh "processing $fontdir...\n" or die $!; flush $reportfh or die $!; while (my $dent = scalar readdir FD) { if ($dent =~ m/^\Q$fontprefix\E.*\.new$/) { @@ -247,6 +234,8 @@ sub processfontdir ($) { next; } next unless $dent =~ m/^[^.\/].*\.pcf\.gz$/; + print $reportfh "processing $fontdir...\n" or die $! + unless $reported++; if ($dent =~ m/^\Q$fontprefix/) { $outfiles{$dent} |= 1; next; @@ -303,8 +292,22 @@ sub processfontdir ($) { rename "$fontdir/$donefile.new","$fontdir/$donefile" or die "$fontdir $!"; } - printf " processed %s: %d pcfs, %d affected, %d updated.\n", - $fontdir, (scalar keys %$newdone), $affected, $updated; + if ($reported || %$newdone || $affected || $updated) { + printf " processed %s: %d pcfs, %d affected, %d updated.\n", + $fontdir, (scalar keys %$newdone), $affected, $updated; + } +} + +sub processfonttree ($) { + my ($tree) = @_; + find({ follow => 1, + dangling_symlinks => 0, + no_chdir => 1, + wanted => sub { + return unless -d _; + processfontdir($File::Find::name); + }}, + $tree); } our $stdin = new IO::File '<&STDIN' or die $!; @@ -312,6 +315,20 @@ our $stdout = new IO::File '>&STDOUT' or die $!; our $stderr = new IO::File '>&STDERR' or die $!; $reportfh = $stdout; +our (@options)=( + 'R|rules-include=s@' => \@rulespath, + 'share-dir=s' => \$sharedir, + 'verbose|v+' => \$verbose, + ); + +sub define_mode ($$) { + my ($optname,$f) = @_; + push @options, $optname, sub { + die "only one mode may be specified\n" if defined $mode; + $mode=$f; + }; +} + define_mode('bdf-filter', sub { die "no arguments allowed with --bdf-filter\n" if @ARGV; $reportfh = $stderr; @@ -333,7 +350,7 @@ define_mode('process-pcf', sub { } }); -define_mode('process-fontdir', sub { +define_mode('process-fontdirs', sub { die "need font dir(s)\n" unless @ARGV; loadfoundries(); foreach my $d (@ARGV) { @@ -341,6 +358,14 @@ define_mode('process-fontdir', sub { } }); +define_mode('process-fonttrees', sub { + die "need font tree(s)\n" unless @ARGV; + loadfoundries(); + foreach my $d (@ARGV) { + processfonttree($d); + } +}); + Getopt::Long::Configure(qw(bundling)); GetOptions(@options) or exit 127; @@ -349,12 +374,3 @@ push @rulespath, "$sharedir/rules"; die "need a mode\n" unless $mode; $mode->(); - -# 70 zcat /usr/share/fonts/X11/misc/6x13.pcf.gz |pcf2bdf >in.bdf -# 71 ./utility out.bdf -# 83 bdftopcf out.bdf >out.pcf -# 84 gzip out.pcf -# 85 cp out.pcf.gz /usr/share/fonts/X11/misc/ -# really mkfontdir /usr/share/fonts/X11/misc/ -# xset fp rehash -# xfontsel -- [mdw]