Lines 22-27
use Modern::Perl;
Link Here
|
22 |
use XML::Simple; |
22 |
use XML::Simple; |
23 |
use Pod::Usage; |
23 |
use Pod::Usage; |
24 |
use Getopt::Long; |
24 |
use Getopt::Long; |
|
|
25 |
use Carp; |
25 |
|
26 |
|
26 |
use open ':std', ':encoding(UTF-8)'; |
27 |
use open ':std', ':encoding(UTF-8)'; |
27 |
|
28 |
|
Lines 37-62
my $outfile;
Link Here
|
37 |
my $tempfile = '/tmp/languages.xml'; |
38 |
my $tempfile = '/tmp/languages.xml'; |
38 |
|
39 |
|
39 |
GetOptions( |
40 |
GetOptions( |
40 |
'o|output:s' => \$outfile, |
41 |
'o|output:s' => \$outfile, |
41 |
'url:s' => \$sourceurl, |
42 |
'url:s' => \$sourceurl, |
42 |
'help|h' => \$help, |
43 |
'help|h' => \$help, |
43 |
); |
44 |
); |
44 |
|
45 |
|
45 |
usage() if $help; |
46 |
usage() if $help; |
46 |
|
47 |
|
47 |
# output log or STDOUT |
48 |
system(qq{/usr/bin/wget $sourceurl -O $tempfile }) == 0 |
48 |
if (defined $outfile) { |
49 |
or croak "Can't wget $sourceurl ($?)"; |
49 |
open (OUT, ">$outfile") || die ("Cannot open output file"); |
|
|
50 |
} else { |
51 |
open(OUT, ">&STDOUT") || die ("Couldn't duplicate STDOUT: $!"); |
52 |
} |
53 |
|
54 |
system( qq{/usr/bin/wget $sourceurl -O $tempfile } ) == 0 or die "Can't wget $sourceurl ($?)"; |
55 |
|
50 |
|
56 |
my $ref = XMLin($tempfile); |
51 |
my $ref = XMLin($tempfile); |
57 |
my $languages = $ref->{'languages'}->{'language'}; |
52 |
my $languages = $ref->{'languages'}->{'language'}; |
58 |
|
53 |
|
59 |
print OUT <<HEADER; |
54 |
# output log or STDOUT |
|
|
55 |
my $out_handle; |
56 |
if ( defined $outfile ) { |
57 |
open( $out_handle, '>', $outfile ) || croak("Cannot open output file"); |
58 |
} |
59 |
else { |
60 |
open( $out_handle, ">&STDOUT" ) || croak("Couldn't duplicate STDOUT: $!"); |
61 |
} |
62 |
generate_header($out_handle); |
63 |
generate_body($out_handle, $languages); |
64 |
generate_footer($out_handle); |
65 |
close $out_handle; |
66 |
|
67 |
sub generate_body { |
68 |
my ( $file_handle, $language_list ) = @_; |
69 |
|
70 |
foreach my $l ( @{$language_list} ) { |
71 |
my $code = $l->{'code'}; |
72 |
my $name = ( |
73 |
ref( $l->{'name'} ) eq 'HASH' |
74 |
? $l->{'name'}{'content'} |
75 |
: $l->{'name'} |
76 |
); |
77 |
next if ( ref($code) eq 'HASH' && $code->{'status'} eq 'obsolete' ); |
78 |
print {$file_handle} " <xsl:when test=\"\$code='$code'\">"; |
79 |
print {$file_handle} "<xsl:text>$name</xsl:text>"; |
80 |
print {$file_handle} "</xsl:when>"; |
81 |
print {$file_handle} "\n"; |
82 |
} |
83 |
return; |
84 |
} |
85 |
|
86 |
sub generate_header { |
87 |
my ($file_handle) = @_; |
88 |
print {$file_handle} <<"HEADER"; |
60 |
<?xml version="1.0" encoding="UTF-8"?> |
89 |
<?xml version="1.0" encoding="UTF-8"?> |
61 |
<!DOCTYPE stylesheet [<!ENTITY nbsp " " >]> |
90 |
<!DOCTYPE stylesheet [<!ENTITY nbsp " " >]> |
62 |
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
91 |
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
Lines 65-82
print OUT <<HEADER;
Link Here
|
65 |
<xsl:param name="code"/> |
94 |
<xsl:param name="code"/> |
66 |
<xsl:choose> |
95 |
<xsl:choose> |
67 |
HEADER |
96 |
HEADER |
68 |
|
97 |
return; |
69 |
foreach my $l (@{$languages}) { |
|
|
70 |
my $code = $l->{'code'}; |
71 |
my $name = (ref($l->{'name'}) eq 'HASH' ? $l->{'name'}{'content'} : $l->{'name'}); |
72 |
next if (ref($code) eq 'HASH' && $code->{'status'} eq 'obsolete'); |
73 |
print OUT " <xsl:when test=\"\$code='".$code."'\">"; |
74 |
print OUT "<xsl:text>$name</xsl:text>"; |
75 |
print OUT "</xsl:when>"; |
76 |
print OUT "\n"; |
77 |
} |
98 |
} |
78 |
|
99 |
|
79 |
print OUT <<FOOTER; |
100 |
sub generate_footer { |
|
|
101 |
my ($file_handle) = @_; |
102 |
print {$file_handle} <<"FOOTER"; |
80 |
<xsl:otherwise> |
103 |
<xsl:otherwise> |
81 |
<xsl:text>Unknown language code</xsl:text> |
104 |
<xsl:text>Unknown language code</xsl:text> |
82 |
</xsl:otherwise> |
105 |
</xsl:otherwise> |
Lines 84-89
print OUT <<FOOTER;
Link Here
|
84 |
</xsl:template> |
107 |
</xsl:template> |
85 |
</xsl:stylesheet> |
108 |
</xsl:stylesheet> |
86 |
FOOTER |
109 |
FOOTER |
|
|
110 |
return; |
111 |
} |
87 |
|
112 |
|
88 |
=head1 NAME |
113 |
=head1 NAME |
89 |
|
114 |
|
90 |
- |
|
|