Main Koha release repository https://koha-community.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

143 lines
3.6 KiB

#!/usr/bin/perl
#
# Copyright (C) 2018 Koha-Suomi Oy
#
# This file is part of Koha
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
#
use Modern::Perl;
use XML::Simple qw( XMLin );
use Pod::Usage qw( pod2usage );
use Getopt::Long qw( GetOptions );
use Carp qw( croak );
use open ':std', ':encoding(UTF-8)';
sub usage {
pod2usage( -verbose => 2 );
exit;
}
# Options
my $sourceurl = 'http://www.loc.gov/standards/codelists/languages.xml';
my $help;
my $outfile;
my $tempfile = '/tmp/languages.xml';
GetOptions(
'o|output:s' => \$outfile,
'url:s' => \$sourceurl,
'help|h' => \$help,
);
usage() if $help;
system( qq{/usr/bin/wget $sourceurl -O $tempfile } ) == 0
or croak "Can't wget $sourceurl ($?)";
my $ref = XMLin($tempfile);
my $languages = $ref->{'languages'}->{'language'};
# output log or STDOUT
my $out_handle;
if (defined $outfile) {
open( $out_handle, ">", $outfile ) || croak("Cannot open output file");
} else {
open( $out_handle, ">&STDOUT" ) || croak("Couldn't duplicate STDOUT: $!");
}
generate_header($out_handle);
generate_body($out_handle, $languages);
generate_footer($out_handle);
close $out_handle;
sub generate_body {
my ( $file_handle, $language_list ) = @_;
foreach my $l ( @{$language_list} ) {
my $code = $l->{'code'};
my $name = (
ref( $l->{'name'} ) eq 'HASH'
? $l->{'name'}{'content'}
: $l->{'name'}
);
next if ( ref($code) eq 'HASH' && $code->{'status'} eq 'obsolete' );
print {$file_handle} " <xsl:when test=\"\$code='$code'\">";
print {$file_handle} "<xsl:text>$name</xsl:text>";
print {$file_handle} "</xsl:when>";
print {$file_handle} "\n";
}
return;
}
sub generate_header {
my ($file_handle) = @_;
print {$file_handle} <<"HEADER";
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- This file generated by generate_MARC21Languages.pl -->
<xsl:template name="languageCodeText">
<xsl:param name="code"/>
<xsl:choose>
HEADER
return;
}
sub generate_footer {
my ($file_handle) = @_;
print {$file_handle} <<"FOOTER";
<xsl:otherwise>
<!-- when 041\$a is mapped to an authorised value list, this will show the description -->
<xsl:value-of select="\$code" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
FOOTER
return;
}
=head1 NAME
generate_MARC21Languages.pl
=head1 SYNOPSIS
generate_MARC21Languages.pl
generate_MARC21Languages.pl --url='http://www.loc.gov/standards/codelists/languages.xml'
=head1 DESCRIPTION
Create MARC21Languages.xsl from the loc.gov MARC21 Code List for Languages
=over 8
=item B<--help>
Prints this help
=item B<--url>
Fetch the languages XML from this url. Defaults to http://www.loc.gov/standards/codelists/languages.xml
=item B<--output>
Writes the output XML into this file. Defaults to STDOUT.
=back
=cut