/[suikacvs]/markup/html/html5/spec-ja/make.pl
Suika

Diff of /markup/html/html5/spec-ja/make.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by wakaba, Fri Jul 11 11:08:59 2008 UTC revision 1.12 by wakaba, Tue Jul 29 15:12:02 2008 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl  #!/usr/bin/perl
2  use strict;  use strict;
3    
4    BEGIN { require 'common.pl' }
5    
6  my $source_file_name = shift;  my $source_file_name = shift;
 my $data_dir_name = q[data/];  
 my $data_suffix = q[.dat];  
7  my $result_file_name = shift;  my $result_file_name = shift;
8    my $status_file_name = shift;
 sub normalize ($) {  
   my $s = shift;  
   $s =~ s/\s+/ /g;  
   $s =~ s/^ //;  
   $s =~ s/ $//g;  
   return $s;  
 } # normalize  
   
 sub create_pattern1 ($) {  
   my $s = quotemeta shift;  
   $s =~ s/\\\*/(.+)/g;  
   return $s;  
 } # create_pattern1  
   
 sub replace_pattern2 ($@) {  
   my $s = shift;  
   my @arg = @_;  
   $s =~ s/\$(\d+)/$arg[$1 - 1]/g;  
   return $s;  
 } # replace_pattern2  
9    
10  my %data;  my %data;
11  my %pattern;  my %pattern;
12  {  for_each_data_file (sub ($) {
13    opendir my $data_dir, $data_dir_name or die "$0: $data_dir_name: $!";    my $data_file_name = shift;
14    local $/ = undef;    warn "$data_file_name...\n";
15    for (readdir $data_dir) {    load_data_file ($data_file_name, \%data, \%pattern);
16      next if /^\./; # hidden files  });
     my $data_file_name = qq[$data_dir_name$_];  
     next unless $data_file_name =~ /\Q$data_suffix\E$/;  
     warn "$data_file_name...\n";  
     open my $data_file, '<:utf8', $data_file_name  
         or die "$0: $data_file_name: $!";  
     my $data = <$data_file>;  
     $data =~ s/\x0D?\x0A/\n/g;  
     for (split /\n\n+(?=#)/, $data) {  
       my ($en, $ja) = split /\n#ja\n/, $_;  
       if ($en =~ s/^#en\n//) {  
         $data{normalize ($en)} = $ja;  
       } elsif ($en =~ s/^#pattern\n//) {  
         $pattern{create_pattern1 (normalize ($en))} = $ja;  
       }  
     }  
   }  
 }  
17  my @pattern = sort {length $b <=> length $a} keys %pattern;  my @pattern = sort {length $b <=> length $a} keys %pattern;
18    
19  my $source_text;  my $source_text;
# Line 62  my $source_text; Line 25  my $source_text;
25    $source_text = <$source_file>;    $source_text = <$source_file>;
26  }  }
27    
28    my $status = {};
29    
30  warn "Generating...\n";  warn "Generating...\n";
31  $source_text =~ s{(<(?>p(?>re)?|li|d[td]|t[dh]|h[1-6])(?>\s[^>]*)?>)((?>(?!</?(?>p(?>re)?|li|d(?>[tdl]|iv)|t[dh]|h[1-6]|ul|ol)(?>\s[^>]*)?>).)+)}  $source_text =~ s{(<(?>p(?>re)?|li|d[td]|t[dh]|h[1-6])(?>\s[^>]*)?>)((?>(?!</?(?>p(?>re)?|li|d(?>[tdl]|iv)|t(?>[dr]|h(?>ead)?|able|body|foot)|h[1-6r]|ul|ol)(?>\s[^>]*)?>).)+)}
32  {  {
33    my ($tag, $text) = ($1, $2);    my ($tag, $text) = ($1, $2);
34    my $n_text = normalize ($text);    my $n_text = normalize ($text);
35    my $ja_text = $data{$n_text};    
36    if (defined $ja_text) {    if (length $n_text) {
37      $tag . q[<span class=ja-translation lang=ja>] . $ja_text . q[</span>];      my $ja_text = $data{$n_text};
38    } else {      
39      my $v = $tag . $text;      $status->{all}++;
40      for my $pattern (@pattern) {      
41        if ($n_text =~ /^$pattern$/) {      if (defined $ja_text) {
42          $v = $tag . q[<span class=ja-translation lang=ja>] .        $status->{ja}++;
43              replace_pattern2 ($pattern{$pattern}, $1, $2, $3, $4, $5) .        $tag . q[<span class=ja-translation lang=ja>] . $ja_text . q[</span>];
44              q[</span>];      } else {
45          last;        my $v = $tag . $text;
46          for my $pattern (@pattern) {
47            if ($n_text =~ /^$pattern$/) {
48              $status->{ja}++;
49              $v = $tag . q[<span class=ja-translation lang=ja>] .
50                  replace_pattern2 ($pattern{$pattern}, $1, $2, $3, $4, $5) .
51                  q[</span>];
52              last;
53            }
54        }        }
55          $v;
56      }      }
57      $v;    } else {
58        $1 . $2;
59    }    }
60  }ges;  }ges;
61  $source_text =~ s{(<(?>link|img|script)\s[^>]+>)}{  $source_text =~ s{(<(?>link|img|script)\s[^>]+>)}{
# Line 105  $source_text =~ s{\[\[([A-Z ]+):([^]]+)\ Line 80  $source_text =~ s{\[\[([A-Z ]+):([^]]+)\
80        or die "$0: $result_file_name: $!";        or die "$0: $result_file_name: $!";
81    print $result_file $source_text;    print $result_file $source_text;
82  }  }
83    
84    {
85      my $time = time;
86      open my $status_file, '>>', $status_file_name
87          or die "$0: $status_file_name: $!";
88      print $status_file "$time\t$status->{ja}\t$status->{all}\n";
89    }

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.12

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24