#!/usr/bin/wml <: sub getMetadata($) { my ($file) = @_; die ("File $file is not a regular file") unless (-f $file); open(F, "$file") or die ("Cannot open $file: $!\n"); my $found_metadata = 0; while () { chomp; if ($_ eq '## translation metadata') { $found_metadata = 1; last; }; }; die ("Did not find translation metadata in $file") unless $found_metadata; my %data; while () { chomp; if (/^#\s*(\S*):\s*(.*?)\s*$/) { $data{$1} = $2; } else { last; }; }; return \%data; }; sub translation_get_masterrevision_file($) { my ($page) = @_; my $master = getMetadata("en/$page"); die ("Cannot find 'Revision' header in master's translation metadata of en/$page") unless exists $master->{'Revision'}; my ($rev) = $master->{'Revision'} =~ m/([0-9.]+)/; if ($rev eq '') { $rev = '(Revision not a valid number)'; }; return $rev; }; sub translation_get_masterrevision() { translation_get_masterrevision_file($WML_SRC_FILENAME); }; sub translation_get_basedonrevision_langfile($$) { my ($lang, $page) = @_; my $translation = getMetadata("$lang/$page"); die ("Cannot find 'Based-On-Revision' header in translations's translation metadata of $lang/$page") unless exists $translation->{'Based-On-Revision'}; my ($rev) = $translation->{'Based-On-Revision'}; if ($rev eq '') { $rev = '(unknown)'; }; return $rev }; sub translation_get_basedonrevision() { translation_get_basedonrevision_langfile("$(LANG)", $WML_SRC_FILENAME); }; sub translation_current() { return (translation_get_masterrevision() eq translation_get_basedonrevision()); }; sub file_is_obsolete($$) { my ($lang, $page) = @_; my $translation = getMetadata("$lang/$page"); return (exists $translation->{'Status'} && ($translation->{'Status'} eq 'obsolete')) }; :>