A simple filetype recognizer.
Copyright © 2006 by murphy (Kornelius Kalnbach)
| License | LGPL / ask the author |
| Version | 0.1 (2005-09-01) |
# determine the type of the given lang = FileType[ARGV.first] # return :plaintext if the file type is unknown lang = FileType.fetch ARGV.first, :plaintext # try the shebang line, too lang = FileType.fetch ARGV.first, :plaintext, true
Try to determine the file type of the file.
filename is a relative or absolute path to a file.
The file itself is only accessed when read_shebang is set to true. That means you can get filetypes from files that don’t exist.
# File lib/coderay/helpers/file_type.rb, line 35
35: def [] filename, read_shebang = false
36: name = File.basename filename
37: ext = File.extname(name).sub(/^\./, '') # from last dot, delete the leading dot
38: ext2 = filename.to_s[/\.(.*)/, 1] # from first dot
39:
40: type =
41: TypeFromExt[ext] ||
42: TypeFromExt[ext.downcase] ||
43: (TypeFromExt[ext2] if ext2) ||
44: (TypeFromExt[ext2.downcase] if ext2) ||
45: TypeFromName[name] ||
46: TypeFromName[name.downcase]
47: type ||= shebang(filename) if read_shebang
48:
49: type
50: end
This works like Hash#fetch.
If the filetype cannot be found, the default value is returned.
# File lib/coderay/helpers/file_type.rb, line 70
70: def fetch filename, default = nil, read_shebang = false
71: if default and block_given?
72: warn 'block supersedes default value argument'
73: end
74:
75: unless type = self[filename, read_shebang]
76: return yield if block_given?
77: return default if default
78: raise UnknownFileType, 'Could not determine type of %p.' % filename
79: end
80: type
81: end
# File lib/coderay/helpers/file_type.rb, line 52
52: def shebang filename
53: begin
54: File.open filename, 'r' do |f|
55: if first_line = f.gets
56: if type = first_line[TypeFromShebang]
57: type.to_sym
58: end
59: end
60: end
61: rescue IOError
62: nil
63: end
64: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.