#!/usr/bin/perl -w # Newer ImageMagick's don't like some of the # broken icons OO.o contains. $lc_good = 'res/lc00000.bmp'; $sc_good = 'res/sc00000.bmp'; # beautiful hard-coding action. @scale_dirs = ( 'res', 'sc/res/imglst/apptbx', 'sc/res/imglst/navipi', 'sd/res/imagelst', 'sd/res/imagelst/korean', 'sw/win/imglst', 'sw/win/imglst/korean', 'sch/res', 'offmgr/res', 'res/enus', 'dbaccess/res', 'sc/res', 'sd/res', 'sw/win/res', 'starmath/res', 'res/arab', 'res/catalan', 'res/chinsim', 'res/chintrad', 'res/czech', 'res/dtch', 'res/fren', 'res/hung', 'res/ital', 'res/japn', 'res/korean', 'res/pol', 'res/poln', 'res/port', 'res/portbr', 'res/russ', 'res/slovak', 'res/slovenian', 'res/span', 'res/turk' ); %scale_exceptions = ( 'sw/win/imglst' => '[sn][cr][0-9]*\.bmp', 'sc/res/imglst/navipi' => 'na0.*\.bmp', 'res' => '[si][cm][0-9]*\.bmp' ); sub usage { printf "Usage: scale-icons [--quiet] [--backupdir=\n"; } if (@ARGV < 1) { usage (); exit (1); } $OOO_PATH = shift (@ARGV); if ($OOO_PATH =~ m/--.*/) { usage (); exit (1); } $lc_good = "$OOO_PATH/$lc_good"; $sc_good = "$OOO_PATH/$sc_good"; $quiet = 0; $remove = 0; $backupdir = ""; foreach $a (@ARGV) { if ($a eq '--quiet') { $quiet = 1; } elsif ($a eq '--remove') { $remove = 1; } elsif ($a =~ m/--backupdir=(.*)/) { $backupdir = $1; } } sub handle_scaled { my $relinstdir = shift; my $small_regex = shift; my $large_regex = shift; my ($dirhandle, $file); my $instdir = "$OOO_PATH/$relinstdir"; my $STAMPNAME = "$instdir/ooo-convert-stamp"; if (! -d $instdir) { print "skipping $instdir\n"; next; } if ($remove) { -f $STAMPNAME || return; } else { -f $STAMPNAME && return; } print "Scaling: '$instdir'\n"; opendir ($dirhandle, $instdir) || die "can't opendir $instdir: $!"; while ($file = readdir ($dirhandle)) { if ($file =~ m/^$small_regex$|^$large_regex$/) { my $src = "$instdir/$file"; my $dest = "$src.cnvt"; if ($remove) { $quiet || print "Remove '$src'\n"; unlink ($src); next; } $quiet || print "Convert '$src'\n"; -f $src || die "Internal error"; if ($src =~ /$small_regex/) { if (system ("convert -mattecolor '#c0c0c0' -frame 2x2 -crop 16x16+2+2 $src $dest") != 0) { print "*** Warning: convert failed; trying copy\n"; system ("cp -f $sc_good $dest"); } } elsif ($src =~ /$large_regex/) { if (system ("convert -mattecolor '#c0c0c0' -frame 2x2 -crop 24x24+3+2 $src $dest") != 0) { print "*** Warning: convert failed; trying copy\n"; system ("cp -f $lc_good $dest"); } } if (-f $dest) { print $backupdir ? "$backupdir/$relinstdir/$file" : "$src.orig", "\n"; rename ($src, $backupdir ? "$backupdir/$relinstdir/$file" : "$src.orig"); rename ($dest, $src); } } } closedir ($dirhandle); if ($remove) { unlink ("$STAMPNAME"); } else { my $stamphandle; open ($stamphandle, ">$STAMPNAME") || die "Error stamping $STAMPNAME $!"; print $stamphandle "Stamp\n"; close ($stamphandle); } } for $a (@scale_dirs) { my $small_regex; if (defined ($scale_exceptions{$a})) { $small_regex = $scale_exceptions{$a}; print "Exception on '$a' => '$small_regex'\n"; } else { $small_regex = 'sc[0-9]*\.bmp'; } if ($backupdir) { if (system ("mkdir -p $backupdir/$a\n") != 0) { print "*** Warning: could not create $backupdir/$a\n" ; $backupdir = ""; } } handle_scaled ("$a", $small_regex, 'lc[0-9]*\.bmp'); } print "Binning dupped icons\n"; -f "$OOO_PATH/extras/source/symbols/makefile.mk" || die "No dupped icon directory"; if ($backupdir) { system ("mkdir -p $backupdir/extras/source/symbols"); system ("cp -a $OOO_PATH/extras/source/symbols/*.bmp $backupdir/extras/source/symbols"); } system ("rm -f $OOO_PATH/extras/source/symbols/*.bmp"); print "Completed cleanly.\n"; exit (0);