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