]>
diplodocus.org Git - flac-archive/blob - tags.pl
5969ae04ca768775cae496de5aeac00b700c1213
1 package epg
::flac
::archive
::tags
;
22 s/^([^=[\]]+)(\[(\d+)])?=// || die("no field name in $_");
25 # TODO album tags should be illegal after track tags
27 if ($3 == $tracknum + 2) {
29 } elsif ($3 != $tracknum + 1) {
30 $tracknum++; # increment from 0 to 1 for error message
31 die("illegal track number jump from $tracknum to $3")
33 push(@{$tracks[$tracknum]->{$name}}, $_);
35 push(@{$album{$name}}, $_);
45 my $tag = $tags->{$name};
46 if (defined($tag) && @$tag > 0) {
53 my $tag = one_or_undef
(@_);
56 die("exactly one $name tag required")
64 if (!defined($album->{ALBUM
}) || @{$album->{ALBUM
}} != 1) {
65 die('exactly one ALBUM tag required')
67 my $album_tag = $album->{ALBUM
}->[0];
70 if (!defined($album->{ARTIST
}) || @{$album->{ARTIST
}} != 1) {
71 die('exactly one ARTIST tag required')
73 my $artist = $album->{ARTIST
}->[0];
76 if (defined($album->{DATE
})) {
77 if (@{$album->{DATE
}} != 1) {
78 die('one or zero DATE tags required')
80 $date = $album->{DATE
}->[0];
84 if (defined($album->{DISCNUMBER
})) {
85 if (@{$album->{DISCNUMBER
}} != 1) {
86 die('one or zero DISCNUMBER tags required')
88 @discnumber = ($album->{DISCNUMBER
}->[0]);
91 $album_tag, $artist, $date, \
@discnumber
94 sub mangle_for_file_name
{
96 $fn =~ s/[!,.?]//g; # discard these punctuation marks
97 $fn =~ s/\s+/_/g; # replace all whitespace with _
98 $fn =~ s/[^A-Za-z0-9_]/-/g; # everything else with -
99 $fn =~ s/_[_-]/_/g; # collapse repeated _ or - to _
100 $fn =~ s/-[_-]/_/g; # more
101 $fn =~ s/^[_-]+//; # discard any _ or - at beginning
102 $fn =~ s/[_-]+$//; # at end too