-sub read_tags {
- my $fn = shift;
- open(my $fh, '<', $fn) || die("open($fn): $!");
- my %album;
- my @tracks;
- my $tracknum = 0;
- while (<$fh>) {
- chomp;
- s/^([^=[\]]+)(\[(\d+)])?=// || die("no field name in $_");
- my $name = $1;
- # TODO validate $name
- # TODO album tags should be illegal after track tags
- if (defined($3)) {
- if ($3 == $tracknum + 2) {
- $tracknum++;
- } elsif ($3 != $tracknum + 1) {
- $tracknum++; # increment from 0 to 1 for error message
- die("illegal track number jump from $tracknum to $3")
- }
- push(@{$tracks[$tracknum]->{$name}}, $_);
- } else {
- push(@{$album{$name}}, $_);
- }
- }
-
- \%album, \@tracks
-}
-
-sub quote {
- my $s = shift;
- $s =~ s/'/'\\''/g;
- "'$s'"
-}