1
package ACheck::FileType;
7
use File::Spec::Functions qw(rel2abs splitpath splitdir);
10
use vars qw(@ISA @EXPORT);
17
my %FILE_TYPES = ( # filetypes
18
'\.wml(\.\w+)?$' => "wml",
19
'\.po(\.\w+)?$' => "po",
20
'\.te?xt(\.\w+)?$' => "text"
30
# array reference of file lines
34
my $filename = shift || "-"; # filename
35
my $lines = shift; # array of lines
38
debug 2, "filename: ".($filename || "STDIN")."\n";
41
my $file = ""; # file name
42
my $dir = ""; # directory
43
my @dirs = (""); # path
45
unless ($filename eq "-") {
46
$filename = rel2abs($filename) unless $filename eq "-";
47
(undef, $dir, $file) = splitpath($filename);
48
@dirs = splitdir($dir);
54
if ($dirs[-1] eq "debian" &&
55
$file eq "control" ) {
56
$type = "debian-control";
60
debug 3, "filetype: $type\n";
66
# file extension tests
68
foreach (keys %FILE_TYPES) {
69
next unless $file =~ /$_/;
70
$type = $FILE_TYPES{$_};
75
debug 3, "filetype: $type\n";
83
if ($$lines[0] =~ /^--- \w+/ && # unified diff tests
84
$$lines[1] =~ /^\+\+\+ \w+/ &&
85
$$lines[2] =~ /^@@ / ) {
86
$type = "udiff-wml" if $$lines[0] =~ /^\-\-\- \w+\.wml\b/;
87
$type = "udiff-wml" if $$lines[1] =~ /^\+\+\+ \w+\.wml\b/;
89
} elsif ($$lines[0] =~ /^#use wml\b/) {
91
} else { # otherwise try to guess from file lines
93
for ($i = 0; $i < @{ $lines }; $i++) {
94
last unless $$lines[$i] =~ /^#/;
96
if ($i == @{ $lines }) {
97
} elsif ($$lines[$i ] =~ /^msgid ""$/ &&
98
$$lines[$i+1] =~ /^msgstr "/ ) {
100
} elsif ($$lines[$i ] =~ /^Description: /) {
105
$type ||= "text"; # default to text
107
debug 3, "filetype: $type\n";