* new -name option
[chalow-eserte.git] / add-extent.pl
blob506857164c752821eca49f95a7ba097bff09bfcc
1 #!/usr/bin/env perl
2 # $Id: add-extent.pl,v 1.3 2003/08/25 11:50:33 yto Exp $
3 # HTML ¤Î img ¥¿¥°¤Ë width ¤È height ¤ò­¤¹
5 use strict;
6 use File::Copy;
8 # identify ¼«Æ°ÀßÄê
9 my $IDENTIFY = `which identify`;
10 die "NO identify!" unless ($IDENTIFY =~ /identify$/);
11 chomp $IDENTIFY;
13 if (@ARGV == 0) {
14 print << "USAGE";
15 usage: prog <file> [file]...
16 USAGE
18 } else {
20 for my $fname (@ARGV) {
22 # HTML ¥Õ¥¡¥¤¥ë¤ò°ìµ¤¤ËÆɤ߹þ¤à
23 open(IN, $fname) or die;
24 my $all = join('', <IN>);
25 close(IN);
27 # cache ¥Õ¥¡¥¤¥ë
28 my $cfn = $fname;
29 $cfn =~ s!/[^/]*$!!; # ¥Ñ¥¹
30 $cfn .= "/cache_extent-info";
31 my %file_info;
32 my $file_info_update_flag = 0;
33 if (open(F, $cfn)) {
34 while(<F>) {
35 next if (/^\#/ or /^\s*$/);
36 my @c = split(/\s/);
37 if (@c == 3) {
38 $file_info{$c[0]} = [@c[1..2]];
41 close(F);
44 # img ¥¿¥°¤ÎÉôʬ¤ò¼è¤ê¤À¤¹¡£
45 my @con = split(/(<img.+?>)/ims, $all);
47 next if (scalar(@con) == 1); # img ¥¿¥°¤¬Ìµ¤¤¥Õ¥¡¥¤¥ë¤Ï²¿¤â¤·¤Ê¤¤
49 my $num = 0;
50 for (my $i = 0; $i < @con; $i++) {
52 if ($con[$i] =~ /^(<img.+?>)/ims) {
53 my $in = $1;
55 # width ¤È height ¤ÎξÊý¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï²¿¤â¤·¤Ê¤¤
56 next if ($in =~ /\W((width|height)\W.+?\W){2}/i); # ad hoc
58 # width or height ¤ò¾Ã¤¹
59 $con[$i] =~ s/\s+(width|height)=[^\s]+//gims;
61 # ²èÁü¥Õ¥¡¥¤¥ë̾¤ò¼è¤ê½Ð¤¹
62 die unless ($in =~ /\ssrc="?(\S+?)"?[\s>]/i);
63 my $imgfn = $1;
65 # identify ¤Ç width ¤È height ¤ò¼èÆÀ
66 next unless (-e $imgfn);
67 my ($w, $h);
68 if (defined $file_info{$imgfn}) {
69 ($w, $h) = @{$file_info{$imgfn}};
70 } else {
71 ($w, $h) = (`$IDENTIFY $imgfn` =~ /(\d+)x(\d+)/);
72 $file_info{$imgfn} = [$w, $h];
73 $file_info_update_flag = 1;
74 # print join("----", @{$file_info{$imgfn}}),"\n";
76 die if $?;
78 # img ¥¿¥°Æâ¤Ë width ¤È height ¤òÄɲÃ
79 $con[$i] =~ s|>$| width="$w" height="$h">|ims;
80 $num++;
83 # cache ¥Õ¥¡¥¤¥ë¤Î½ñ¤­¹þ¤ß
84 if ($file_info_update_flag and open(F, "> $cfn")) {
85 foreach my $f (sort keys %file_info) {
86 print F "$f @{$file_info{$f}}\n";
88 close(F);
92 next if ($num == 0); # Êѹ¹²Õ½ê¤Ê¤·
94 # Êѹ¹²Õ½ê¤¬¤¢¤Ã¤¿¤é¡¢¸µ¤Î¥Õ¥¡¥¤¥ë¤òÂàÈò¤·¤Æ¤«¤é¡¢¾å½ñ¤­¤¹¤ë
95 copy($fname, "$fname.bak") or die;
96 open(OUT, "> $fname") or die;
97 print OUT join("", @con);
98 close(OUT);