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.
120 lines
2.2 KiB
120 lines
2.2 KiB
13 years ago
|
#!/usr/bin/perl -w
|
||
|
#
|
||
|
# Generate html index for the Crep's chorbook.
|
||
|
#
|
||
|
# Usage: make-html [options] source
|
||
|
# source should be an .sg or .sbd file
|
||
|
#
|
||
|
|
||
|
use warnings;
|
||
|
use strict;
|
||
|
use utf8;
|
||
|
|
||
|
sub uppercase($)
|
||
|
{
|
||
|
my $letter = shift;
|
||
|
$letter =~ tr/a-zàéèëê/A-ZAEEEE/;
|
||
|
return $letter;
|
||
|
}
|
||
|
|
||
|
# Create the latex-proof function
|
||
|
sub latex2utf8($)
|
||
|
{
|
||
|
my $result = shift;
|
||
|
|
||
|
$result =~ s/\\'e/é/g;
|
||
|
$result =~ s/\\¨e/ë/g;
|
||
|
$result =~ s/\\`e/è/g;
|
||
|
$result =~ s/\\\^e/ê/g;
|
||
|
$result =~ s/\\\^o/ô/g;
|
||
|
$result =~ s/\\\^a/â/g;
|
||
|
$result =~ s/\\\^i/î/g;
|
||
|
$result =~ s/\\`a/à/g;
|
||
|
$result =~ s/\\`u/ù/g;
|
||
|
$result =~ s/\\&/&/g;
|
||
|
$result =~ s/\\oe\s*{}/oe/g;
|
||
|
|
||
|
return ($result);
|
||
|
}
|
||
|
#'
|
||
|
|
||
|
sub usage ()
|
||
|
{
|
||
|
die "usage: make-html [options] source", "\n";
|
||
|
}
|
||
|
|
||
|
sub defaultoptions()
|
||
|
{
|
||
|
return (
|
||
|
titleprefix => "",
|
||
|
);
|
||
|
}
|
||
|
|
||
|
my %options;
|
||
|
sub getoptions ()
|
||
|
{
|
||
|
%options = defaultoptions();
|
||
|
eval q{use Getopt::Long};
|
||
|
Getopt::Long::Configure('pass_through');
|
||
|
GetOptions(
|
||
|
# "verbose|v!" => \$options{verbose},
|
||
|
"titleprefix|p=s" => \$options{titleprefix},
|
||
|
) || usage();
|
||
|
}
|
||
|
|
||
|
getoptions();
|
||
|
|
||
|
my $prefix = '(('.$options{titleprefix}.')[\s\'])';
|
||
|
|
||
|
# Filter function
|
||
|
sub process_titleprefix($)
|
||
|
{
|
||
|
my $string = shift;
|
||
|
if( $string =~ /^$prefix\W*(\w)/ )
|
||
|
{
|
||
|
my $letter = uppercase $3;
|
||
|
$string =~ s/^$prefix\W*\w(.*)/$letter$3, $1/;
|
||
|
}
|
||
|
return $string;
|
||
|
}
|
||
|
|
||
|
# Process command line
|
||
|
usage() unless @ARGV;
|
||
|
my $file = shift;
|
||
|
|
||
|
# Open file and store date before closing the file
|
||
|
open( FILE, $file ) or die("unable to open $file");
|
||
|
|
||
|
# Process data
|
||
|
my %table;
|
||
|
my $author;
|
||
|
my $title;
|
||
|
|
||
|
while( <FILE> )
|
||
|
{
|
||
|
if( $_ =~ /\\beginsong{(.*)}\[.*by=(.*),.*\]/ )
|
||
|
{
|
||
|
$author = latex2utf8 $2;
|
||
|
$title = latex2utf8 $1;
|
||
|
$title = process_titleprefix $title unless $options{titleprefix} eq "";
|
||
|
# Create empty data index if needed
|
||
|
$table{$author} = [] unless exists $table{$author};
|
||
|
push @{$table{$author}}, $title;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
close( FILE );
|
||
|
|
||
|
# Format output
|
||
|
print '<ul>';
|
||
|
foreach my $author ( sort keys %table )
|
||
|
{
|
||
|
print '<li><strong>', $author, '</strong><ul>';
|
||
|
foreach my $title ( sort @{$table{$author}} )
|
||
|
{
|
||
|
print '<li>',$title,'</li>'
|
||
|
}
|
||
|
print '</ul></li>';
|
||
|
}
|
||
|
print '</ul>';
|