Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / File / Type.pm
1 package File::Type;
2 use strict;
3 use warnings;
4
5 use IO::File;
6
7 our $VERSION = "0.22";
8
9 sub new {
10   my $class = shift;
11   my $self = {};
12   bless $self, $class;
13   return $self;
14 }
15
16 sub mime_type {
17   # magically route argument
18
19   my($self, $argument) = @_;
20
21   if (length $argument > 1024 || $argument =~ m/\n/) {
22     # assume it's data. Saves a stat call if the data's long
23     # also avoids stat warning if there's a newline
24     return $self->checktype_contents($argument);
25   }
26   
27   if (-e $argument) {
28     if (!-d $argument) {
29       return $self->checktype_filename($argument);
30     } else {
31       return undef; # directories don't have mime types
32     }
33   }  
34   # otherwise, fall back to checking the string as if it's data again
35   return $self->checktype_contents($argument);
36 }
37
38 sub checktype_filename {
39   # reads in 16k of selected file, or returns undef if can't open,
40   # then checks contents
41
42   my($self, $filename) = @_;
43   my $fh = IO::File->new($filename) || return undef;
44   my $data;
45   $fh->read($data, 16*1024);
46   $fh->close;
47   return $self->checktype_contents($data);
48 }
49
50 sub checktype_contents {
51   # checks file contents
52
53   my($self, $data) = @_;
54   my $substr;
55
56   # autogenerated code begins
57
58   if ($data =~ m[^TADS]) {
59     return q{application/x-tads-game};
60   }
61   if ($data =~ m[^Core\001]) {
62     return q{application/x-executable-file};
63   }
64   if ($data =~ m[^AMANDA\:\ TAPESTART\ DATE]) {
65     return q{application/x-amanda-header};
66   }
67   if (length $data > 0) {
68     $substr = substr($data, 0, 4);
69     if (pack('H*', '000003f3') eq $substr ) {
70       return q{application/x-executable-file};
71     }
72   }
73   if (length $data > 0) {
74     $substr = substr($data, 0, 4);
75     if (pack('H*', '000003e7') eq $substr ) {
76       return q{application/x-library-file};
77     }
78   }
79   if (length $data > 0) {
80     $substr = substr($data, 0, 4);
81     if (pack('H*', '000001b3') eq $substr ) {
82       return q{video/mpeg};
83     }
84   }
85   if (length $data > 0) {
86     $substr = substr($data, 0, 4);
87     if (pack('H*', '000001ba') eq $substr ) {
88       return q{video/mpeg};
89     }
90   }
91   if (length $data > 0) {
92     $substr = substr($data, 0, 2);
93     if (pack('H*', 'fff0') eq $substr ) {
94       return q{audio/mpeg};
95     }
96   }
97   if ($data =~ m[^MOVI]) {
98     return q{video/x-sgi-movie};
99   }
100   if (length $data > 4) {
101     $substr = substr($data, 4, 1024);
102     if (defined $substr && $substr =~ m[^moov]) {
103       return q{video/quicktime};
104     }
105   }
106   if (length $data > 4) {
107     $substr = substr($data, 4, 1024);
108     if (defined $substr && $substr =~ m[^mdat]) {
109       return q{video/quicktime};
110     }
111   }
112   if (length $data > 8) {
113     $substr = substr($data, 8, 1024);
114     if (defined $substr && $substr =~ m[^mp42]) {
115       return q{video/quicktime};
116     }
117   }
118   if (length $data > 12) {
119     $substr = substr($data, 12, 1024);
120     if (defined $substr && $substr =~ m[^mdat]) {
121       return q{video/quicktime};
122     }
123   }
124   if (length $data > 36) {
125     $substr = substr($data, 36, 1024);
126     if (defined $substr && $substr =~ m[^mdat]) {
127       return q{video/quicktime};
128     }
129   }
130   if (length $data > 0) {
131     $substr = substr($data, 0, 4);
132     if (pack('H*', '3026b275') eq $substr ) {
133       return q{video/x-ms-asf};
134     }
135   }
136   if ($data =~ m[^ASF\ ]) {
137     return q{audio/x-ms-asx};
138   }
139   if ($data =~ m[^\<ASX]) {
140     return q{audio/x-ms-asx};
141   }
142   if ($data =~ m[^\<asx]) {
143     return q{audio/x-ms-asx};
144   }
145   if ($data =~ m[^FiLeStArTfIlEsTaRt]) {
146     return q{text/x-apple-binscii};
147   }
148   if ($data =~ m[^\x0aGL]) {
149     return q{application/data};
150   }
151   if ($data =~ m[^\x76\xff]) {
152     return q{application/data};
153   }
154   if ($data =~ m[^NuFile]) {
155     return q{application/data};
156   }
157   if ($data =~ m[^N\xf5F\xe9l\xe5]) {
158     return q{application/data};
159   }
160   if (length $data > 0) {
161     $substr = substr($data, 0, 4);
162     if (pack('H*', '00051600') eq $substr ) {
163       return q{application/data};
164     }
165   }
166   if (length $data > 0) {
167     $substr = substr($data, 0, 4);
168     if (pack('H*', '00051607') eq $substr ) {
169       return q{application/data};
170     }
171   }
172   if (length $data > 257) {
173     $substr = substr($data, 257, 1024);
174     if (defined $substr && $substr =~ m[^ustar\0]) {
175       return q{application/x-tar};
176     }
177   }
178   if (length $data > 257) {
179     $substr = substr($data, 257, 1024);
180     if (defined $substr && $substr =~ m[^ustar\040\040\0]) {
181       return q{application/x-gtar};
182     }
183   }
184   if ($data =~ m[^070707]) {
185     return q{application/x-cpio};
186   }
187   if ($data =~ m[^070701]) {
188     return q{application/x-cpio};
189   }
190   if ($data =~ m[^070702]) {
191     return q{application/x-cpio};
192   }
193   if ($data =~ m[^\!\<arch\>\ndebian]) {
194     return q{application/x-dpkg};
195   }
196   if ($data =~ m[^\=\<ar\>]) {
197     return q{application/x-ar};
198   }
199   if ($data =~ m[^\!\<arch\>\n__________E]) {
200     return q{application/x-ar};
201   }
202   if ($data =~ m[^\-h\-]) {
203     return q{application/data};
204   }
205   if ($data =~ m[^\!\<arch\>]) {
206     return q{application/x-ar};
207   }
208   if ($data =~ m[^\<ar\>]) {
209     return q{application/x-ar};
210   }
211   if ($data =~ m[^\=\<ar\>]) {
212     return q{application/x-ar};
213   }
214   if (length $data > 0) {
215     $substr = substr($data, 0, 4);
216     if (pack('H*', '65ff0000') eq $substr ) {
217       return q{application/x-ar};
218     }
219   }
220   if (length $data > 0) {
221     $substr = substr($data, 0, 4);
222     if (pack('H*', '3c61723e') eq $substr ) {
223       return q{application/x-ar};
224     }
225   }
226   if ($data =~ m[^\032archive]) {
227     return q{application/data};
228   }
229   if ($data =~ m[^HPAK]) {
230     return q{application/data};
231   }
232   if ($data =~ m[^\351\,\001JAM\        ]) {
233     return q{application/data};
234   }
235   if (length $data > 2) {
236     $substr = substr($data, 2, 1024);
237     if (defined $substr && $substr =~ m[^\-lh0\-]) {
238       return q{application/x-lha};
239     }
240   }
241   if (length $data > 2) {
242     $substr = substr($data, 2, 1024);
243     if (defined $substr && $substr =~ m[^\-lh1\-]) {
244       return q{application/x-lha};
245     }
246   }
247   if (length $data > 2) {
248     $substr = substr($data, 2, 1024);
249     if (defined $substr && $substr =~ m[^\-lz4\-]) {
250       return q{application/x-lha};
251     }
252   }
253   if (length $data > 2) {
254     $substr = substr($data, 2, 1024);
255     if (defined $substr && $substr =~ m[^\-lz5\-]) {
256       return q{application/x-lha};
257     }
258   }
259   if (length $data > 2) {
260     $substr = substr($data, 2, 1024);
261     if (defined $substr && $substr =~ m[^\-lzs\-]) {
262       return q{application/x-lha};
263     }
264   }
265   if (length $data > 2) {
266     $substr = substr($data, 2, 1024);
267     if (defined $substr && $substr =~ m[^\-lh40\-]) {
268       return q{application/x-lha};
269     }
270   }
271   if (length $data > 2) {
272     $substr = substr($data, 2, 1024);
273     if (defined $substr && $substr =~ m[^\-lhd\-]) {
274       return q{application/x-lha};
275     }
276   }
277   if (length $data > 2) {
278     $substr = substr($data, 2, 1024);
279     if (defined $substr && $substr =~ m[^\-lh2\-]) {
280       return q{application/x-lha};
281     }
282   }
283   if (length $data > 2) {
284     $substr = substr($data, 2, 1024);
285     if (defined $substr && $substr =~ m[^\-lh3\-]) {
286       return q{application/x-lha};
287     }
288   }
289   if (length $data > 2) {
290     $substr = substr($data, 2, 1024);
291     if (defined $substr && $substr =~ m[^\-lh4\-]) {
292       return q{application/x-lha};
293     }
294   }
295   if (length $data > 2) {
296     $substr = substr($data, 2, 1024);
297     if (defined $substr && $substr =~ m[^\-lh5\-]) {
298       return q{application/x-lha};
299     }
300   }
301   if ($data =~ m[^Rar\!]) {
302     return q{application/x-rar};
303   }
304   if ($data =~ m[^SQSH]) {
305     return q{application/data};
306   }
307   if ($data =~ m[^UC2\x1a]) {
308     return q{application/data};
309   }
310   if ($data =~ m[^PK\003\004]) {
311     return q{application/zip};
312   }
313   if (length $data > 10) {
314     $substr = substr($data, 10, 1024);
315     if (defined $substr && $substr =~ m[^\#\ This\ is\ a\ shell\ archive]) {
316       return q{application/x-shar};
317     }
318   }
319   if ($data =~ m[^\*STA]) {
320     return q{application/data};
321   }
322   if ($data =~ m[^2278]) {
323     return q{application/data};
324   }
325   if ($data =~ m[^\000\004\036\212\200]) {
326     return q{application/core};
327   }
328   if ($data =~ m[^\.snd]) {
329     return q{audio/basic};
330   }
331   if ($data =~ m[^MThd]) {
332     return q{audio/midi};
333   }
334   if ($data =~ m[^CTMF]) {
335     return q{audio/x-cmf};
336   }
337   if ($data =~ m[^SBI]) {
338     return q{audio/x-sbi};
339   }
340   if ($data =~ m[^Creative\ Voice\ File]) {
341     return q{audio/x-voc};
342   }
343   if (length $data > 0) {
344     $substr = substr($data, 0, 4);
345     if (pack('H*', '4e54524b') eq $substr ) {
346       return q{audio/x-multitrack};
347     }
348   }
349   if (length $data > 8) {
350     $substr = substr($data, 8, 1024);
351     if (defined $substr && $substr =~ m[^AVI]) {
352       return q{video/x-msvideo};
353     }
354   }
355   if (length $data > 8) {
356     $substr = substr($data, 8, 1024);
357     if (defined $substr && $substr =~ m[^WAVE]) {
358       return q{audio/x-wav};
359     }
360   }
361   if ($data =~ m[^EMOD]) {
362     return q{audio/x-emod};
363   }
364   if (length $data > 0) {
365     $substr = substr($data, 0, 4);
366     if (pack('H*', '2e7261fd') eq $substr ) {
367       return q{audio/x-pn-realaudio};
368     }
369   }
370   if ($data =~ m[^MTM]) {
371     return q{audio/x-multitrack};
372   }
373   if ($data =~ m[^if]) {
374     return q{audio/x-669-mod};
375   }
376   if ($data =~ m[^FAR]) {
377     return q{audio/mod};
378   }
379   if ($data =~ m[^MAS_U]) {
380     return q{audio/x-multimate-mod};
381   }
382   if (length $data > 0x2c) {
383     $substr = substr($data, 0x2c, 1024);
384     if (defined $substr && $substr =~ m[^SCRM]) {
385       return q{audio/x-st3-mod};
386     }
387   }
388   if ($data =~ m[^GF1PATCH110\0ID\#000002\0]) {
389     return q{audio/x-gus-patch};
390   }
391   if ($data =~ m[^GF1PATCH100\0ID\#000002\0]) {
392     return q{audio/x-gus-patch};
393   }
394   if ($data =~ m[^JN]) {
395     return q{audio/x-669-mod};
396   }
397   if ($data =~ m[^UN05]) {
398     return q{audio/x-mikmod-uni};
399   }
400   if ($data =~ m[^Extended\ Module\:]) {
401     return q{audio/x-ft2-mod};
402   }
403   if (length $data > 21) {
404     $substr = substr($data, 21, 1024);
405     if (defined $substr && $substr =~ m[^\!SCREAM\!]) {
406       return q{audio/x-st2-mod};
407     }
408   }
409   if (length $data > 1080) {
410     $substr = substr($data, 1080, 1024);
411     if (defined $substr && $substr =~ m[^M\.K\.]) {
412       return q{audio/x-protracker-mod};
413     }
414   }
415   if (length $data > 1080) {
416     $substr = substr($data, 1080, 1024);
417     if (defined $substr && $substr =~ m[^M\!K\!]) {
418       return q{audio/x-protracker-mod};
419     }
420   }
421   if (length $data > 1080) {
422     $substr = substr($data, 1080, 1024);
423     if (defined $substr && $substr =~ m[^FLT4]) {
424       return q{audio/x-startracker-mod};
425     }
426   }
427   if (length $data > 1080) {
428     $substr = substr($data, 1080, 1024);
429     if (defined $substr && $substr =~ m[^4CHN]) {
430       return q{audio/x-fasttracker-mod};
431     }
432   }
433   if (length $data > 1080) {
434     $substr = substr($data, 1080, 1024);
435     if (defined $substr && $substr =~ m[^6CHN]) {
436       return q{audio/x-fasttracker-mod};
437     }
438   }
439   if (length $data > 1080) {
440     $substr = substr($data, 1080, 1024);
441     if (defined $substr && $substr =~ m[^8CHN]) {
442       return q{audio/x-fasttracker-mod};
443     }
444   }
445   if (length $data > 1080) {
446     $substr = substr($data, 1080, 1024);
447     if (defined $substr && $substr =~ m[^CD81]) {
448       return q{audio/x-oktalyzer-mod};
449     }
450   }
451   if (length $data > 1080) {
452     $substr = substr($data, 1080, 1024);
453     if (defined $substr && $substr =~ m[^OKTA]) {
454       return q{audio/x-oktalyzer-mod};
455     }
456   }
457   if (length $data > 1080) {
458     $substr = substr($data, 1080, 1024);
459     if (defined $substr && $substr =~ m[^16CN]) {
460       return q{audio/x-taketracker-mod};
461     }
462   }
463   if (length $data > 1080) {
464     $substr = substr($data, 1080, 1024);
465     if (defined $substr && $substr =~ m[^32CN]) {
466       return q{audio/x-taketracker-mod};
467     }
468   }
469   if ($data =~ m[^TOC]) {
470     return q{audio/x-toc};
471   }
472   if (length $data > 0) {
473     $substr = substr($data, 0, 2);
474     if (pack('H*', 'fffa') eq $substr ) {
475       return q{audio/mp3};
476     }
477   }
478   if ($data =~ m[^ID3]) {
479     return q{audio/mp3};
480   }
481   if ($data =~ m[^\/\/]) {
482     return q{text/cpp};
483   }
484   if ($data =~ m[^\\1cw\ ]) {
485     return q{application/data};
486   }
487   if ($data =~ m[^\\1cw]) {
488     return q{application/data};
489   }
490   if (length $data > 0) {
491     $substr = substr($data, 0, 4);
492     if (pack('H*', '85011400') eq $substr ) {
493       return q{application/data};
494     }
495   }
496   if (length $data > 0) {
497     $substr = substr($data, 0, 4);
498     if (pack('H*', '8501cb00') eq $substr ) {
499       return q{application/data};
500     }
501   }
502   if (length $data > 4) {
503     $substr = substr($data, 4, 1024);
504     if (defined $substr && $substr =~ m[^pipe]) {
505       return q{application/data};
506     }
507   }
508   if (length $data > 4) {
509     $substr = substr($data, 4, 1024);
510     if (defined $substr && $substr =~ m[^prof]) {
511       return q{application/data};
512     }
513   }
514   if ($data =~ m[^\:\ shell]) {
515     return q{application/data};
516   }
517   if ($data =~ m[^\#\!\/bin\/sh]) {
518     return q{application/x-sh};
519   }
520   if ($data =~ m[^\#\!\ \/bin\/sh]) {
521     return q{application/x-sh};
522   }
523   if ($data =~ m[^\#\!\ \/bin\/sh]) {
524     return q{application/x-sh};
525   }
526   if ($data =~ m[^\#\!\/bin\/csh]) {
527     return q{application/x-csh};
528   }
529   if ($data =~ m[^\#\!\ \/bin\/csh]) {
530     return q{application/x-csh};
531   }
532   if ($data =~ m[^\#\!\ \/bin\/csh]) {
533     return q{application/x-csh};
534   }
535   if ($data =~ m[^\#\!\/bin\/ksh]) {
536     return q{application/x-ksh};
537   }
538   if ($data =~ m[^\#\!\ \/bin\/ksh]) {
539     return q{application/x-ksh};
540   }
541   if ($data =~ m[^\#\!\ \/bin\/ksh]) {
542     return q{application/x-ksh};
543   }
544   if ($data =~ m[^\#\!\/bin\/tcsh]) {
545     return q{application/x-csh};
546   }
547   if ($data =~ m[^\#\!\ \/bin\/tcsh]) {
548     return q{application/x-csh};
549   }
550   if ($data =~ m[^\#\!\ \/bin\/tcsh]) {
551     return q{application/x-csh};
552   }
553   if ($data =~ m[^\#\!\/usr\/local\/tcsh]) {
554     return q{application/x-csh};
555   }
556   if ($data =~ m[^\#\!\ \/usr\/local\/tcsh]) {
557     return q{application/x-csh};
558   }
559   if ($data =~ m[^\#\!\/usr\/local\/bin\/tcsh]) {
560     return q{application/x-csh};
561   }
562   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/tcsh]) {
563     return q{application/x-csh};
564   }
565   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/tcsh]) {
566     return q{application/x-csh};
567   }
568   if ($data =~ m[^\#\!\/usr\/local\/bin\/zsh]) {
569     return q{application/x-zsh};
570   }
571   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/zsh]) {
572     return q{application/x-zsh};
573   }
574   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/zsh]) {
575     return q{application/x-zsh};
576   }
577   if ($data =~ m[^\#\!\/usr\/local\/bin\/ash]) {
578     return q{application/x-sh};
579   }
580   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/ash]) {
581     return q{application/x-zsh};
582   }
583   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/ash]) {
584     return q{application/x-zsh};
585   }
586   if ($data =~ m[^\#\!\/usr\/local\/bin\/ae]) {
587     return q{text/script};
588   }
589   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/ae]) {
590     return q{text/script};
591   }
592   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/ae]) {
593     return q{text/script};
594   }
595   if ($data =~ m[^\#\!\/bin\/nawk]) {
596     return q{application/x-awk};
597   }
598   if ($data =~ m[^\#\!\ \/bin\/nawk]) {
599     return q{application/x-awk};
600   }
601   if ($data =~ m[^\#\!\ \/bin\/nawk]) {
602     return q{application/x-awk};
603   }
604   if ($data =~ m[^\#\!\/usr\/bin\/nawk]) {
605     return q{application/x-awk};
606   }
607   if ($data =~ m[^\#\!\ \/usr\/bin\/nawk]) {
608     return q{application/x-awk};
609   }
610   if ($data =~ m[^\#\!\ \/usr\/bin\/nawk]) {
611     return q{application/x-awk};
612   }
613   if ($data =~ m[^\#\!\/usr\/local\/bin\/nawk]) {
614     return q{application/x-awk};
615   }
616   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/nawk]) {
617     return q{application/x-awk};
618   }
619   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/nawk]) {
620     return q{application/x-awk};
621   }
622   if ($data =~ m[^\#\!\/bin\/gawk]) {
623     return q{application/x-awk};
624   }
625   if ($data =~ m[^\#\!\ \/bin\/gawk]) {
626     return q{application/x-awk};
627   }
628   if ($data =~ m[^\#\!\ \/bin\/gawk]) {
629     return q{application/x-awk};
630   }
631   if ($data =~ m[^\#\!\/usr\/bin\/gawk]) {
632     return q{application/x-awk};
633   }
634   if ($data =~ m[^\#\!\ \/usr\/bin\/gawk]) {
635     return q{application/x-awk};
636   }
637   if ($data =~ m[^\#\!\ \/usr\/bin\/gawk]) {
638     return q{application/x-awk};
639   }
640   if ($data =~ m[^\#\!\/usr\/local\/bin\/gawk]) {
641     return q{application/x-awk};
642   }
643   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/gawk]) {
644     return q{application/x-awk};
645   }
646   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/gawk]) {
647     return q{application/x-awk};
648   }
649   if ($data =~ m[^\#\!\/bin\/awk]) {
650     return q{application/x-awk};
651   }
652   if ($data =~ m[^\#\!\ \/bin\/awk]) {
653     return q{application/x-awk};
654   }
655   if ($data =~ m[^\#\!\ \/bin\/awk]) {
656     return q{application/x-awk};
657   }
658   if ($data =~ m[^\#\!\/usr\/bin\/awk]) {
659     return q{application/x-awk};
660   }
661   if ($data =~ m[^\#\!\ \/usr\/bin\/awk]) {
662     return q{application/x-awk};
663   }
664   if ($data =~ m[^\#\!\ \/usr\/bin\/awk]) {
665     return q{application/x-awk};
666   }
667   if ($data =~ m[^BEGIN]) {
668     return q{application/x-awk};
669   }
670   if ($data =~ m[^\#\!\/bin\/perl]) {
671     return q{application/x-perl};
672   }
673   if ($data =~ m[^\#\!\ \/bin\/perl]) {
674     return q{application/x-perl};
675   }
676   if ($data =~ m[^\#\!\ \/bin\/perl]) {
677     return q{application/x-perl};
678   }
679   if ($data =~ m[^eval\ \"exec\ \/bin\/perl]) {
680     return q{application/x-perl};
681   }
682   if ($data =~ m[^\#\!\/usr\/bin\/perl]) {
683     return q{application/x-perl};
684   }
685   if ($data =~ m[^\#\!\ \/usr\/bin\/perl]) {
686     return q{application/x-perl};
687   }
688   if ($data =~ m[^\#\!\ \/usr\/bin\/perl]) {
689     return q{application/x-perl};
690   }
691   if ($data =~ m[^eval\ \"exec\ \/usr\/bin\/perl]) {
692     return q{application/x-perl};
693   }
694   if ($data =~ m[^\#\!\/usr\/local\/bin\/perl]) {
695     return q{application/x-perl};
696   }
697   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/perl]) {
698     return q{application/x-perl};
699   }
700   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/perl]) {
701     return q{application/x-perl};
702   }
703   if ($data =~ m[^eval\ \"exec\ \/usr\/local\/bin\/perl]) {
704     return q{application/x-perl};
705   }
706   if ($data =~ m[^\#\!\/bin\/rc]) {
707     return q{text/script};
708   }
709   if ($data =~ m[^\#\!\ \/bin\/rc]) {
710     return q{text/script};
711   }
712   if ($data =~ m[^\#\!\ \/bin\/rc]) {
713     return q{text/script};
714   }
715   if ($data =~ m[^\#\!\/bin\/bash]) {
716     return q{application/x-sh};
717   }
718   if ($data =~ m[^\#\!\ \/bin\/bash]) {
719     return q{application/x-sh};
720   }
721   if ($data =~ m[^\#\!\ \/bin\/bash]) {
722     return q{application/x-sh};
723   }
724   if ($data =~ m[^\#\!\/usr\/local\/bin\/bash]) {
725     return q{application/x-sh};
726   }
727   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/bash]) {
728     return q{application/x-sh};
729   }
730   if ($data =~ m[^\#\!\ \/usr\/local\/bin\/bash]) {
731     return q{application/x-sh};
732   }
733   if ($data =~ m[^\#\!\ \/]) {
734     return q{text/script};
735   }
736   if ($data =~ m[^\#\!\ \/]) {
737     return q{text/script};
738   }
739   if ($data =~ m[^\#\!\/]) {
740     return q{text/script};
741   }
742   if ($data =~ m[^\#\!\ ]) {
743     return q{text/script};
744   }
745   if ($data =~ m[^\037\235]) {
746     return q{application/compress};
747   }
748   if ($data =~ m[^\037\213]) {
749     return q{application/x-gzip};
750   }
751   if ($data =~ m[^\037\036]) {
752     return q{application/data};
753   }
754   if ($data =~ m[^\377\037]) {
755     return q{application/data};
756   }
757   if ($data =~ m[^BZh]) {
758     return q{application/x-bzip2};
759   }
760   if ($data =~ m[^\037\237]) {
761     return q{application/data};
762   }
763   if ($data =~ m[^\037\236]) {
764     return q{application/data};
765   }
766   if ($data =~ m[^\037\240]) {
767     return q{application/data};
768   }
769   if ($data =~ m[^BZ]) {
770     return q{application/x-bzip};
771   }
772   if ($data =~ m[^\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a]) {
773     return q{application/data};
774   }
775   if (length $data > 0) {
776     $substr = substr($data, 0, 4);
777     if (pack('H*', '011257') eq $substr ) {
778       return q{application/core};
779     }
780   }
781   if (length $data > 0) {
782     $substr = substr($data, 0, 4);
783     if (pack('H*', '13579ace') eq $substr ) {
784       return q{application/x-gdbm};
785     }
786   }
787   if ($data =~ m[^GDBM]) {
788     return q{application/x-gdbm};
789   }
790   if (length $data > 0) {
791     $substr = substr($data, 0, 4);
792     if (pack('H*', '061561') eq $substr ) {
793       return q{application/x-db};
794     }
795   }
796   if (length $data > 0) {
797     $substr = substr($data, 0, 4);
798     if (pack('H*', '053162') eq $substr ) {
799       return q{application/x-db};
800     }
801   }
802   if ($data =~ m[^\=\<list\>\n\<protocol\ bbn\-m]) {
803     return q{application/data};
804   }
805   if ($data =~ m[^diff\ ]) {
806     return q{text/x-patch};
807   }
808   if ($data =~ m[^\*\*\*\ ]) {
809     return q{text/x-patch};
810   }
811   if ($data =~ m[^Only\ in\ ]) {
812     return q{text/x-patch};
813   }
814   if ($data =~ m[^Common\ subdirectories\:\ ]) {
815     return q{text/x-patch};
816   }
817   if ($data =~ m[^\!\<arch\>\n________64E]) {
818     return q{application/data};
819   }
820   if ($data =~ m[^\377\377\177]) {
821     return q{application/data};
822   }
823   if ($data =~ m[^\377\377\174]) {
824     return q{application/data};
825   }
826   if ($data =~ m[^\377\377\176]) {
827     return q{application/data};
828   }
829   if ($data =~ m[^\033c\033]) {
830     return q{application/data};
831   }
832   if ($data =~ m[^\!\<PDF\>\!\n]) {
833     return q{application/x-prof};
834   }
835   if ($data =~ m[^\177ELF]) {
836     return q{application/x-executable-file};
837   }
838   if ($data =~ m[^\366\366\366\366]) {
839     return q{application/x-pc-floppy};
840   }
841   if (length $data > 0774) {
842     $substr = substr($data, 0774, 2);
843     if (pack('H*', 'dabe') eq $substr ) {
844       return q{application/data};
845     }
846   }
847   if ($data =~ m[^\-rom1fs\-\0]) {
848     return q{application/x-filesystem};
849   }
850   if (length $data > 0x18b) {
851     $substr = substr($data, 0x18b, 1024);
852     if (defined $substr && $substr =~ m[^OS\/2]) {
853       return q{application/x-bootable};
854     }
855   }
856   if ($data =~ m[^FONT]) {
857     return q{font/x-vfont};
858   }
859   if ($data =~ m[^\%\!PS\-AdobeFont\-1\.0]) {
860     return q{font/type1};
861   }
862   if (length $data > 6) {
863     $substr = substr($data, 6, 1024);
864     if (defined $substr && $substr =~ m[^\%\!PS\-AdobeFont\-1\.0]) {
865       return q{font/type1};
866     }
867   }
868   if ($data =~ m[^STARTFONT\040]) {
869     return q{font/x-bdf};
870   }
871   if ($data =~ m[^\001fcp]) {
872     return q{font/x-pcf};
873   }
874   if ($data =~ m[^D1\.0\015]) {
875     return q{font/x-speedo};
876   }
877   if ($data =~ m[^flf]) {
878     return q{font/x-figlet};
879   }
880   if ($data =~ m[^flc]) {
881     return q{application/x-font};
882   }
883   if (length $data > 0) {
884     $substr = substr($data, 0, 4);
885     if (pack('H*', '14025919') eq $substr ) {
886       return q{font/x-libgrx};
887     }
888   }
889   if (length $data > 0) {
890     $substr = substr($data, 0, 4);
891     if (pack('H*', 'ff464f4e') eq $substr ) {
892       return q{font/x-dos};
893     }
894   }
895   if (length $data > 7) {
896     $substr = substr($data, 7, 4);
897     if (pack('H*', '00454741') eq $substr ) {
898       return q{font/x-dos};
899     }
900   }
901   if (length $data > 7) {
902     $substr = substr($data, 7, 4);
903     if (pack('H*', '00564944') eq $substr ) {
904       return q{font/x-dos};
905     }
906   }
907   if (length $data > 4098) {
908     $substr = substr($data, 4098, 1024);
909     if (defined $substr && $substr =~ m[^DOSFONT]) {
910       return q{font/x-dos};
911     }
912   }
913   if ($data =~ m[^\<MakerFile]) {
914     return q{application/x-framemaker};
915   }
916   if ($data =~ m[^\<MIFFile]) {
917     return q{application/x-framemaker};
918   }
919   if ($data =~ m[^\<MakerDictionary]) {
920     return q{application/x-framemaker};
921   }
922   if ($data =~ m[^\<MakerScreenFont]) {
923     return q{font/x-framemaker};
924   }
925   if ($data =~ m[^\<MML]) {
926     return q{application/x-framemaker};
927   }
928   if ($data =~ m[^\<BookFile]) {
929     return q{application/x-framemaker};
930   }
931   if ($data =~ m[^\<Maker]) {
932     return q{application/x-framemaker};
933   }
934   if (length $data > 7) {
935     $substr = substr($data, 7, 1024);
936     if (defined $substr && $substr =~ m[^\357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0]) {
937       return q{application/core};
938     }
939   }
940   if ($data =~ m[^GIMP\ Gradient]) {
941     return q{application/x-gimp-gradient};
942   }
943   if ($data =~ m[^gimp\ xcf]) {
944     return q{application/x-gimp-image};
945   }
946   if (length $data > 20) {
947     $substr = substr($data, 20, 1024);
948     if (defined $substr && $substr =~ m[^GPAT]) {
949       return q{application/x-gimp-pattern};
950     }
951   }
952   if (length $data > 20) {
953     $substr = substr($data, 20, 1024);
954     if (defined $substr && $substr =~ m[^GIMP]) {
955       return q{application/x-gimp-brush};
956     }
957   }
958   if ($data =~ m[^\336\224\225]) {
959     return q{application/x-locale};
960   }
961   if ($data =~ m[^\2254\22\336]) {
962     return q{application/x-locale};
963   }
964   if ($data =~ m[^\000\001\000\000\000]) {
965     return q{font/ttf};
966   }
967   if (length $data > 0) {
968     $substr = substr($data, 0, 4);
969     if (pack('H*', '02100106') eq $substr ) {
970       return q{application/x-object-file};
971     }
972   }
973   if (length $data > 0) {
974     $substr = substr($data, 0, 4);
975     if (pack('H*', '02100107') eq $substr ) {
976       return q{application/x-executable-file};
977     }
978   }
979   if (length $data > 0) {
980     $substr = substr($data, 0, 4);
981     if (pack('H*', '02100108') eq $substr ) {
982       return q{application/x-executable-file};
983     }
984   }
985   if (length $data > 0) {
986     $substr = substr($data, 0, 4);
987     if (pack('H*', '0210010b') eq $substr ) {
988       return q{application/x-executable-file};
989     }
990   }
991   if (length $data > 0) {
992     $substr = substr($data, 0, 4);
993     if (pack('H*', '0210010e') eq $substr ) {
994       return q{application/x-library-file};
995     }
996   }
997   if (length $data > 0) {
998     $substr = substr($data, 0, 4);
999     if (pack('H*', '0210010d') eq $substr ) {
1000       return q{application/x-library-file};
1001     }
1002   }
1003   if (length $data > 0) {
1004     $substr = substr($data, 0, 4);
1005     if (pack('H*', '02140106') eq $substr ) {
1006       return q{application/x-object-file};
1007     }
1008   }
1009   if (length $data > 0) {
1010     $substr = substr($data, 0, 4);
1011     if (pack('H*', '02140107') eq $substr ) {
1012       return q{application/x-executable-file};
1013     }
1014   }
1015   if (length $data > 0) {
1016     $substr = substr($data, 0, 4);
1017     if (pack('H*', '02140108') eq $substr ) {
1018       return q{application/x-executable-file};
1019     }
1020   }
1021   if (length $data > 0) {
1022     $substr = substr($data, 0, 4);
1023     if (pack('H*', '0214010b') eq $substr ) {
1024       return q{application/x-executable-file};
1025     }
1026   }
1027   if (length $data > 0) {
1028     $substr = substr($data, 0, 4);
1029     if (pack('H*', '0214010e') eq $substr ) {
1030       return q{application/x-library-file};
1031     }
1032   }
1033   if (length $data > 0) {
1034     $substr = substr($data, 0, 4);
1035     if (pack('H*', '0214010d') eq $substr ) {
1036       return q{application/x-object-file};
1037     }
1038   }
1039   if (length $data > 0) {
1040     $substr = substr($data, 0, 4);
1041     if (pack('H*', '020b0106') eq $substr ) {
1042       return q{application/x-object-file};
1043     }
1044   }
1045   if (length $data > 0) {
1046     $substr = substr($data, 0, 4);
1047     if (pack('H*', '020b0107') eq $substr ) {
1048       return q{application/x-executable-file};
1049     }
1050   }
1051   if (length $data > 0) {
1052     $substr = substr($data, 0, 4);
1053     if (pack('H*', '020b0108') eq $substr ) {
1054       return q{application/x-executable-file};
1055     }
1056   }
1057   if (length $data > 0) {
1058     $substr = substr($data, 0, 4);
1059     if (pack('H*', '020b010b') eq $substr ) {
1060       return q{application/x-executable-file};
1061     }
1062   }
1063   if (length $data > 0) {
1064     $substr = substr($data, 0, 4);
1065     if (pack('H*', '020b010e') eq $substr ) {
1066       return q{application/x-library-file};
1067     }
1068   }
1069   if (length $data > 0) {
1070     $substr = substr($data, 0, 4);
1071     if (pack('H*', '020b010d') eq $substr ) {
1072       return q{application/x-library-file};
1073     }
1074   }
1075   if (length $data > 0) {
1076     $substr = substr($data, 0, 4);
1077     if (pack('H*', '213c6172') eq $substr ) {
1078       return q{application/x-ar};
1079     }
1080   }
1081   if (length $data > 0) {
1082     $substr = substr($data, 0, 4);
1083     if (pack('H*', '020c0108') eq $substr ) {
1084       return q{application/x-executable-file};
1085     }
1086   }
1087   if (length $data > 0) {
1088     $substr = substr($data, 0, 4);
1089     if (pack('H*', '020c0107') eq $substr ) {
1090       return q{application/x-executable-file};
1091     }
1092   }
1093   if (length $data > 0) {
1094     $substr = substr($data, 0, 4);
1095     if (pack('H*', '020c010b') eq $substr ) {
1096       return q{application/x-executable-file};
1097     }
1098   }
1099   if (length $data > 0) {
1100     $substr = substr($data, 0, 4);
1101     if (pack('H*', '020c0106') eq $substr ) {
1102       return q{application/x-executable-file};
1103     }
1104   }
1105   if (length $data > 0) {
1106     $substr = substr($data, 0, 4);
1107     if (pack('H*', '020a0108') eq $substr ) {
1108       return q{application/x-executable-file};
1109     }
1110   }
1111   if (length $data > 0) {
1112     $substr = substr($data, 0, 4);
1113     if (pack('H*', '020a0107') eq $substr ) {
1114       return q{application/x-executable-file};
1115     }
1116   }
1117   if (length $data > 0) {
1118     $substr = substr($data, 0, 4);
1119     if (pack('H*', '020c010e') eq $substr ) {
1120       return q{application/x-library-file};
1121     }
1122   }
1123   if (length $data > 0) {
1124     $substr = substr($data, 0, 4);
1125     if (pack('H*', '020c010d') eq $substr ) {
1126       return q{application/x-library-file};
1127     }
1128   }
1129   if ($data =~ m[^Bitmapfile]) {
1130     return q{image/unknown};
1131   }
1132   if ($data =~ m[^IMGfile]) {
1133     return q{CIS        image/unknown};
1134   }
1135   if ($data =~ m[^msgcat01]) {
1136     return q{application/x-locale};
1137   }
1138   if ($data =~ m[^HPHP48\-]) {
1139     return q{application/unknown};
1140   }
1141   if ($data =~ m[^\%\%HP\:]) {
1142     return q{text/x-unknown};
1143   }
1144   if (length $data > 0) {
1145     $substr = substr($data, 0, 2);
1146     if (pack('H*', '01df') eq $substr ) {
1147       return q{application/executable};
1148     }
1149   }
1150   if (length $data > 0) {
1151     $substr = substr($data, 0, 2);
1152     if (pack('H*', '0104') eq $substr ) {
1153       return q{application/x-shared-library};
1154     }
1155   }
1156   if (length $data > 0) {
1157     $substr = substr($data, 0, 2);
1158     if (pack('H*', '0105') eq $substr ) {
1159       return q{application/data};
1160     }
1161   }
1162   if (length $data > 0) {
1163     $substr = substr($data, 0, 2);
1164     if (pack('H*', 'fe04') eq $substr ) {
1165       return q{application/data};
1166     }
1167   }
1168   if ($data =~ m[^0xabcdef]) {
1169     return q{application/data};
1170   }
1171   if (length $data > 0) {
1172     $substr = substr($data, 0, 4);
1173     if (pack('H*', '000001f9') eq $substr ) {
1174       return q{application/data};
1175     }
1176   }
1177   if ($data =~ m[^\<aiaff\>]) {
1178     return q{application/x-archive};
1179   }
1180   if ($data =~ m[^FORM]) {
1181     return q{application/data};
1182   }
1183   if ($data =~ m[^P1]) {
1184     return q{image/x-portable-bitmap};
1185   }
1186   if ($data =~ m[^P2]) {
1187     return q{image/x-portable-graymap};
1188   }
1189   if ($data =~ m[^P3]) {
1190     return q{image/x-portable-pixmap};
1191   }
1192   if ($data =~ m[^P4]) {
1193     return q{image/x-portable-bitmap};
1194   }
1195   if ($data =~ m[^P5]) {
1196     return q{image/x-portable-graymap};
1197   }
1198   if ($data =~ m[^P6]) {
1199     return q{image/x-portable-pixmap};
1200   }
1201   if ($data =~ m[^IIN1]) {
1202     return q{image/tiff};
1203   }
1204   if ($data =~ m[^MM\x00\x2a]) {
1205     return q{image/tiff};
1206   }
1207   if ($data =~ m[^II\x2a\x00]) {
1208     return q{image/tiff};
1209   }
1210   if ($data =~ m[^\x89PNG]) {
1211     return q{image/x-png};
1212   }
1213   if (length $data > 1) {
1214     $substr = substr($data, 1, 1024);
1215     if (defined $substr && $substr =~ m[^PNG]) {
1216       return q{image/x-png};
1217     }
1218   }
1219   if ($data =~ m[^GIF8]) {
1220     return q{image/gif};
1221   }
1222   if ($data =~ m[^\361\0\100\273]) {
1223     return q{image/x-cmu-raster};
1224   }
1225   if (length $data > 0) {
1226     $substr = substr($data, 0, 2);
1227     if (pack('H*', 'ffd8') eq $substr ) {
1228       return q{image/jpeg};
1229     }
1230   }
1231   if ($data =~ m[^hsi1]) {
1232     return q{image/x-jpeg-proprietary};
1233   }
1234   if ($data =~ m[^BM]) {
1235     return q{image/x-bmp};
1236   }
1237   if ($data =~ m[^IC]) {
1238     return q{image/x-ico};
1239   }
1240   if (length $data > 0) {
1241     $substr = substr($data, 0, 4);
1242     if (pack('H*', '59a66a95') eq $substr ) {
1243       return q{x/x-image-sun-raster};
1244     }
1245   }
1246   if (length $data > 2048) {
1247     $substr = substr($data, 2048, 1024);
1248     if (defined $substr && $substr =~ m[^PCD_IPI]) {
1249       return q{x/x-photo-cd-pack-file};
1250     }
1251   }
1252   if ($data =~ m[^PCD_OPA]) {
1253     return q{x/x-photo-cd-overfiew-file};
1254   }
1255   if ($data =~ m[^\007\001\000]) {
1256     return q{Linux/i386 object file};
1257   }
1258   if (length $data > 4086) {
1259     $substr = substr($data, 4086, 1024);
1260     if (defined $substr && $substr =~ m[^SWAP\-SPACE]) {
1261       return q{Linux/i386 swap file};
1262     }
1263   }
1264   if ($data =~ m[^\;\;]) {
1265     return q{Lisp/Scheme program text};
1266   }
1267   if ($data =~ m[^FFIL]) {
1268     return q{font/ttf};
1269   }
1270   if (length $data > 65) {
1271     $substr = substr($data, 65, 1024);
1272     if (defined $substr && $substr =~ m[^FFIL]) {
1273       return q{font/ttf};
1274     }
1275   }
1276   if ($data =~ m[^LWFN]) {
1277     return q{font/type1};
1278   }
1279   if (length $data > 65) {
1280     $substr = substr($data, 65, 1024);
1281     if (defined $substr && $substr =~ m[^LWFN]) {
1282       return q{font/type1};
1283     }
1284   }
1285   if ($data =~ m[^Return\-Path\:]) {
1286     return q{message/rfc822};
1287   }
1288   if ($data =~ m[^Path\:]) {
1289     return q{message/news};
1290   }
1291   if ($data =~ m[^Xref\:]) {
1292     return q{message/news};
1293   }
1294   if ($data =~ m[^From\:]) {
1295     return q{message/rfc822};
1296   }
1297   if ($data =~ m[^Article]) {
1298     return q{message/news};
1299   }
1300   if ($data =~ m[^BABYL]) {
1301     return q{message/x-gnu-rmail};
1302   }
1303   if ($data =~ m[^Received\:]) {
1304     return q{message/rfc822};
1305   }
1306   if ($data =~ m[^MZ]) {
1307     return q{application/x-ms-dos-executable};
1308   }
1309   if (length $data > 2080) {
1310     $substr = substr($data, 2080, 1024);
1311     if (defined $substr && $substr =~ m[^Microsoft\ Word\ 6\.0\ Document]) {
1312       return q{text/vnd.ms-word};
1313     }
1314   }
1315   if (length $data > 2080) {
1316     $substr = substr($data, 2080, 1024);
1317     if (defined $substr && $substr =~ m[^Documento\ Microsoft\ Word\ 6]) {
1318       return q{text/vnd.ms-word};
1319     }
1320   }
1321   if (length $data > 2112) {
1322     $substr = substr($data, 2112, 1024);
1323     if (defined $substr && $substr =~ m[^MSWordDoc]) {
1324       return q{text/vnd.ms-word};
1325     }
1326   }
1327   if (length $data > 0) {
1328     $substr = substr($data, 0, 4);
1329     if (pack('H*', '31be0000') eq $substr ) {
1330       return q{text/vnd.ms-word};
1331     }
1332   }
1333   if ($data =~ m[^PO\^Q\`]) {
1334     return q{text/vnd.ms-word};
1335   }
1336   if (length $data > 2080) {
1337     $substr = substr($data, 2080, 1024);
1338     if (defined $substr && $substr =~ m[^Microsoft\ Excel\ 5\.0\ Worksheet]) {
1339       return q{application/vnd.ms-excel};
1340     }
1341   }
1342   if (length $data > 2114) {
1343     $substr = substr($data, 2114, 1024);
1344     if (defined $substr && $substr =~ m[^Biff5]) {
1345       return q{application/vnd.ms-excel};
1346     }
1347   }
1348   if ($data =~ m[^\x31\xbe\x00\x00]) {
1349     return q{application/msword};
1350   }
1351   if ($data =~ m[^PO\^Q\`]) {
1352     return q{application/msword};
1353   }
1354   if (length $data > 1) {
1355     $substr = substr($data, 1, 1024);
1356     if (defined $substr && $substr =~ m[^WPC]) {
1357       return q{text/vnd.wordperfect};
1358     }
1359   }
1360   if ($data =~ m[^StartFontMetrics]) {
1361     return q{font/x-sunos-news};
1362   }
1363   if ($data =~ m[^StartFont]) {
1364     return q{font/x-sunos-news};
1365   }
1366   if (length $data > 0) {
1367     $substr = substr($data, 0, 4);
1368     if (pack('H*', '137A2944') eq $substr ) {
1369       return q{font/x-sunos-news};
1370     }
1371   }
1372   if (length $data > 0) {
1373     $substr = substr($data, 0, 4);
1374     if (pack('H*', '137A2947') eq $substr ) {
1375       return q{font/x-sunos-news};
1376     }
1377   }
1378   if (length $data > 0) {
1379     $substr = substr($data, 0, 4);
1380     if (pack('H*', '137A2950') eq $substr ) {
1381       return q{font/x-sunos-news};
1382     }
1383   }
1384   if (length $data > 0) {
1385     $substr = substr($data, 0, 4);
1386     if (pack('H*', '137A2951') eq $substr ) {
1387       return q{font/x-sunos-news};
1388     }
1389   }
1390   if (length $data > 8) {
1391     $substr = substr($data, 8, 4);
1392     if (pack('H*', '137A2B45') eq $substr ) {
1393       return q{font/x-sunos-news};
1394     }
1395   }
1396   if (length $data > 8) {
1397     $substr = substr($data, 8, 4);
1398     if (pack('H*', '137A2B48') eq $substr ) {
1399       return q{font/x-sunos-news};
1400     }
1401   }
1402   if (length $data > 0) {
1403     $substr = substr($data, 0, 2);
1404     if (pack('H*', '87CD') eq $substr ) {
1405       return q{OS9/6809 module:};
1406     }
1407   }
1408   if (length $data > 0) {
1409     $substr = substr($data, 0, 2);
1410     if (pack('H*', '4AFC') eq $substr ) {
1411       return q{OS9/68K module:};
1412     }
1413   }
1414   if ($data =~ m[^\%PDF\-]) {
1415     return q{application/pdf};
1416   }
1417   if ($data =~ m[^\%\!]) {
1418     return q{application/postscript};
1419   }
1420   if ($data =~ m[^\004\%\!]) {
1421     return q{application/postscript};
1422   }
1423   if ($data =~ m[^\033E\033]) {
1424     return q{image/x-pcl-hp};
1425   }
1426   if ($data =~ m[^\<\!DOCTYPE\ HTML]) {
1427     return q{text/html};
1428   }
1429   if ($data =~ m[^\<\!doctype\ html]) {
1430     return q{text/html};
1431   }
1432   if ($data =~ m[^\<HEAD]) {
1433     return q{text/html};
1434   }
1435   if ($data =~ m[^\<head]) {
1436     return q{text/html};
1437   }
1438   if ($data =~ m[^\<TITLE]) {
1439     return q{text/html};
1440   }
1441   if ($data =~ m[^\<title]) {
1442     return q{text/html};
1443   }
1444   if ($data =~ m[^\<html]) {
1445     return q{text/html};
1446   }
1447   if ($data =~ m[^\<HTML]) {
1448     return q{text/html};
1449   }
1450   if ($data =~ m[^\<\!SQ\ A\/E\>]) {
1451     return q{A/E SGML Document binary};
1452   }
1453   if ($data =~ m[^\<\!SQ\ STS\>]) {
1454     return q{A/E SGML binary styles file};
1455   }
1456   if ($data =~ m[^\367\203]) {
1457     return q{font/x-tex};
1458   }
1459   if ($data =~ m[^\367\131]) {
1460     return q{font/x-tex};
1461   }
1462   if ($data =~ m[^\367\312]) {
1463     return q{font/x-tex};
1464   }
1465   if (length $data > 2) {
1466     $substr = substr($data, 2, 1024);
1467     if (defined $substr && $substr =~ m[^\000\021]) {
1468       return q{font/x-tex-tfm};
1469     }
1470   }
1471   if (length $data > 2) {
1472     $substr = substr($data, 2, 1024);
1473     if (defined $substr && $substr =~ m[^\000\022]) {
1474       return q{font/x-tex-tfm};
1475     }
1476   }
1477   if (length $data > 1) {
1478     $substr = substr($data, 1, 1024);
1479     if (defined $substr && $substr =~ m[^WPC]) {
1480       return q{(Corel/WP)};
1481     }
1482   }
1483   if ($data =~ m[^BLENDER]) {
1484     return q{application/x-blender};
1485   }
1486
1487   # autogerated code ends
1488
1489   # fallback case
1490   {
1491     return 'application/octet-stream';
1492   }
1493 }
1494
1495 1;
1496
1497 __END__
1498
1499 =head1 NAME
1500
1501 File::Type - determine file type using magic
1502
1503 =head1 SYNOPSIS
1504
1505     my $ft = File::Type->new();
1506     
1507     # read in data from file to $data, then
1508     my $type_from_data = $ft->checktype_contents($data);
1509     
1510     # alternatively, check file from disk
1511     my $type_from_file = $ft->checktype_filename($file);
1512
1513     # convenient method for checking either a file or data
1514     my $type_1 = $ft->mime_type($file);
1515     my $type_2 = $ft->mime_type($data);
1516
1517 =head1 DESCRIPTION
1518
1519 File::Type uses magic numbers (typically at the start of a file) to 
1520 determine the MIME type of that file.
1521
1522 File::Type can use either a filename, or file contents, to determine the
1523 type of a file.
1524
1525 =head1 METHODS
1526
1527 =head2 new
1528
1529 Returns a new File::Type object.
1530
1531 =head2 mime_type($argument)
1532
1533 Takes either data or a filename, determines what it is, and passes the
1534 argument through to the relevant method below. If the argument is a 
1535 directory, returns undef.
1536
1537 =head2 checktype_filename($filename)
1538
1539 Opens $filename (if possible; if not, returns undef) and returns the MIME 
1540 type of the file.
1541
1542 =head2 checktype_contents($data)
1543
1544 Matches $data against the magic database criteria and returns the MIME
1545 type of the file.
1546
1547 =head1 TODO
1548
1549 =over 4
1550
1551 * Add additional magic match criteria
1552
1553 =back
1554
1555 =head1 BUGS
1556
1557 None known.
1558
1559 =head2 NOTES
1560
1561 Some magic definitions in the mime-magic file used in the creation of this 
1562 module vary from those in other apps (eg image/x-png not image/png).
1563
1564 =head1 SEE ALSO
1565
1566 L<File::MMagic> and L<File::MimeInfo> perform the same job, but have a number
1567 of problems that led to the creation of this module.
1568
1569 L<File::MMagic> inlines a copy of the magic database, and uses a DATA
1570 filehandle, which causes problems when running under mod_perl.
1571
1572 L<File::MimeInfo> uses an external magic file, and relies on file extensions
1573 rather than magic to determine the mime type.
1574
1575 As a result, File::Type uses a seperate module and script to create the
1576 code at the core of this module, which means that there is no need to
1577 include a magic database at all, and that it is safe to run under mod_perl.
1578
1579 L<File::Type::Builder>, which generates the code at the heart of this module.
1580
1581 =head1 ACKNOWLEDGMENTS
1582
1583 File::Type is built from a mime-magic file from cleancode.org. The original
1584 can be found at L<http://cleancode.org/cgi-bin/viewcvs.cgi/email/mime-magic.mime?rev=1.1.1.1>.
1585
1586 =head1 AUTHOR
1587
1588 Paul Mison <pmison@fotango.com>
1589
1590 =head1 COPYRIGHT 
1591
1592 Copyright 2003-2004 Fotango Ltd.
1593
1594 =head1 LICENSE
1595
1596 Licensed under the same terms as Perl itself. 
1597
1598 =cut