OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library mime.mime_type; | 5 library mime.mime_type; |
6 | 6 |
7 import 'default_extension_map.dart'; | 7 import 'default_extension_map.dart'; |
8 import 'magic_number.dart'; | 8 import 'magic_number.dart'; |
9 | 9 |
10 final MimeTypeResolver _globalResolver = new MimeTypeResolver(); | 10 final MimeTypeResolver _globalResolver = new MimeTypeResolver(); |
(...skipping 23 matching lines...) Expand all Loading... |
34 */ | 34 */ |
35 class MimeTypeResolver { | 35 class MimeTypeResolver { |
36 final Map<String, String> _extensionMap = {}; | 36 final Map<String, String> _extensionMap = {}; |
37 final List<MagicNumber> _magicNumbers = []; | 37 final List<MagicNumber> _magicNumbers = []; |
38 final bool _useDefault; | 38 final bool _useDefault; |
39 int _magicNumbersMaxLength; | 39 int _magicNumbersMaxLength; |
40 | 40 |
41 /** | 41 /** |
42 * Create a new empty [MimeTypeResolver]. | 42 * Create a new empty [MimeTypeResolver]. |
43 */ | 43 */ |
44 MimeTypeResolver.empty() : _useDefault = false, _magicNumbersMaxLength = 0; | 44 MimeTypeResolver.empty() |
| 45 : _useDefault = false, |
| 46 _magicNumbersMaxLength = 0; |
45 | 47 |
46 /** | 48 /** |
47 * Create a new [MimeTypeResolver] containing the default scope. | 49 * Create a new [MimeTypeResolver] containing the default scope. |
48 */ | 50 */ |
49 MimeTypeResolver() : | 51 MimeTypeResolver() |
50 _useDefault = true, | 52 : _useDefault = true, |
51 _magicNumbersMaxLength = DEFAULT_MAGIC_NUMBERS_MAX_LENGTH; | 53 _magicNumbersMaxLength = DEFAULT_MAGIC_NUMBERS_MAX_LENGTH; |
52 | 54 |
53 /** | 55 /** |
54 * Get the maximum number of bytes required to match all magic numbers, when | 56 * Get the maximum number of bytes required to match all magic numbers, when |
55 * performing [lookup] with headerBytes present. | 57 * performing [lookup] with headerBytes present. |
56 */ | 58 */ |
57 int get magicNumbersMaxLength => _magicNumbersMaxLength; | 59 int get magicNumbersMaxLength => _magicNumbersMaxLength; |
58 | 60 |
59 /** | 61 /** |
60 * Extract the extension from [path] and use that for MIME-type lookup. | 62 * Extract the extension from [path] and use that for MIME-type lookup. |
61 * | 63 * |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 void addMagicNumber(List<int> bytes, String mimeType, {List<int> mask}) { | 106 void addMagicNumber(List<int> bytes, String mimeType, {List<int> mask}) { |
105 if (mask != null && bytes.length != mask.length) { | 107 if (mask != null && bytes.length != mask.length) { |
106 throw new ArgumentError('Bytes and mask are of different lengths'); | 108 throw new ArgumentError('Bytes and mask are of different lengths'); |
107 } | 109 } |
108 if (bytes.length > _magicNumbersMaxLength) { | 110 if (bytes.length > _magicNumbersMaxLength) { |
109 _magicNumbersMaxLength = bytes.length; | 111 _magicNumbersMaxLength = bytes.length; |
110 } | 112 } |
111 _magicNumbers.add(new MagicNumber(mimeType, bytes, mask: mask)); | 113 _magicNumbers.add(new MagicNumber(mimeType, bytes, mask: mask)); |
112 } | 114 } |
113 | 115 |
114 static String _matchMagic(List<int> headerBytes, | 116 static String _matchMagic( |
115 List<MagicNumber> magicNumbers) { | 117 List<int> headerBytes, List<MagicNumber> magicNumbers) { |
116 for (var mn in magicNumbers) { | 118 for (var mn in magicNumbers) { |
117 if (mn.matches(headerBytes)) return mn.mimeType; | 119 if (mn.matches(headerBytes)) return mn.mimeType; |
118 } | 120 } |
119 return null; | 121 return null; |
120 } | 122 } |
121 | 123 |
122 static String _ext(String path) { | 124 static String _ext(String path) { |
123 int index = path.lastIndexOf('.'); | 125 int index = path.lastIndexOf('.'); |
124 if (index < 0 || index + 1 >= path.length) return path; | 126 if (index < 0 || index + 1 >= path.length) return path; |
125 return path.substring(index + 1).toLowerCase(); | 127 return path.substring(index + 1).toLowerCase(); |
126 } | 128 } |
127 } | 129 } |
128 | |
OLD | NEW |