View | Details | Raw Unified | Return to bug 20364
Collapse All | Expand All

(-)a/misc/maintenance/generate_MARC21Languages.pl (-24 / +48 lines)
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 "&#160;" >]>
90
<!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
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
- 

Return to bug 20364