songbook [from: Songs data for LaTeX songbooks http:///www.patacrep.com]
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.
 
 
 
 
 

119 lines
2.2 KiB

#!/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>';