MIMETypes.st
changeset 3870 360424eab025
parent 3862 a5c6ef8ecf6a
child 3871 51014a1e5d17
--- a/MIMETypes.st	Thu Feb 09 18:21:44 2017 +0100
+++ b/MIMETypes.st	Thu Feb 09 18:24:14 2017 +0100
@@ -315,13 +315,13 @@
     |types|
 
     FileSuffixToTypeMapping isNil ifTrue:[
-        FileSuffixToTypeMapping := Dictionary new
+        FileSuffixToTypeMapping := Dictionary new:270.
     ].
     TypeToFileSuffixMapping isNil ifTrue:[
-        TypeToFileSuffixMapping := Dictionary new
+        TypeToFileSuffixMapping := Dictionary new:105.
     ].
     FilenameToTypeMapping isNil ifTrue:[
-        FilenameToTypeMapping := Dictionary new.
+        FilenameToTypeMapping := Dictionary new:16.
     ].
 
     types := OrderedCollection new.
@@ -333,32 +333,34 @@
     types addAll:self osSpecificTypeList.
 
     types pairWiseDo:[:suff :typeString|
-        |type|
+        |mimeType|
 
-        type := MIMEType fromString:typeString.
+        mimeType := MIMEType fromString:typeString.
         suff isArray ifTrue:[
-            suff do:[:s | FileSuffixToTypeMapping at:s put:type].
-            TypeToFileSuffixMapping at:type put:suff first.
+            suff do:[:s |FileSuffixToTypeMapping at:s put:mimeType].
+            TypeToFileSuffixMapping at:mimeType put:suff first.
         ] ifFalse:[
-            FileSuffixToTypeMapping at:suff put:type.
-            TypeToFileSuffixMapping at:type put:suff.
+            FileSuffixToTypeMapping at:suff put:mimeType.
+            TypeToFileSuffixMapping at:mimeType put:suff.
         ].
     ].
 
-    self miscFilenameList pairWiseDo:[:nm :typeString|
-        |type|
+    self miscFilenameList pairWiseDo:[:suffixes :typeString|
+        |mimeType|
 
-        type := MIMEType fromString:typeString.
-        nm isArray ifTrue:[
-            nm do:[:s | FilenameToTypeMapping at:s put:type]
+        mimeType := MIMEType fromString:typeString.
+        suffixes isArray ifTrue:[
+            suffixes do:[:eachSuffix | FilenameToTypeMapping at:eachSuffix put:mimeType]
         ] ifFalse:[
-            FilenameToTypeMapping at:nm put:type
+            FilenameToTypeMapping at:suffixes put:mimeType
         ]
     ].
 
     "
      self initializeFileNameToMimeTypeMapping
     "
+
+    "Modified (format): / 09-02-2017 / 14:59:33 / stefan"
 !
 
 initializeImageReaderMappings
@@ -374,131 +376,133 @@
     ].
 
     "/ setup mimeType to image reader class mapping ...
-    TypeToImageReaderClassMapping at:'image/jpeg' put:JPEGReader.
-    TypeToImageReaderClassMapping at:'image/gif'  put:GIFReader.
-    TypeToImageReaderClassMapping at:'image/tiff' put:TIFFReader.
-    TypeToImageReaderClassMapping at:'image/png'  put:PNGReader.
-    TypeToImageReaderClassMapping at:'image/icns' put:MacOSXIconReader.
+    self imageReaderForType:'image/jpeg' put:JPEGReader.
+    self imageReaderForType:'image/gif'  put:GIFReader.
+    self imageReaderForType:'image/tiff' put:TIFFReader.
+    self imageReaderForType:'image/png'  put:PNGReader.
+    self imageReaderForType:'image/icns' put:MacOSXIconReader.
 
     "/ setup suffix to image reader class mapping ...
-    FileSuffixToImageReaderClassMapping at:'jpg'  put:JPEGReader.
-    FileSuffixToImageReaderClassMapping at:'jpeg' put:JPEGReader.
-    FileSuffixToImageReaderClassMapping at:'gif'  put:GIFReader.
-    FileSuffixToImageReaderClassMapping at:'tif'  put:TIFFReader.
-    FileSuffixToImageReaderClassMapping at:'tiff' put:TIFFReader.
-    FileSuffixToImageReaderClassMapping at:'png'  put:PNGReader.
-    FileSuffixToImageReaderClassMapping at:'icns'  put:MacOSXIconReader.
+    self imageReaderForSuffix:'jpg'  put:JPEGReader.
+    self imageReaderForSuffix:'jpeg' put:JPEGReader.
+    self imageReaderForSuffix:'gif'  put:GIFReader.
+    self imageReaderForSuffix:'tif'  put:TIFFReader.
+    self imageReaderForSuffix:'tiff' put:TIFFReader.
+    self imageReaderForSuffix:'png'  put:PNGReader.
+    self imageReaderForSuffix:'icns' put:MacOSXIconReader.
 
     "/ some 'used-to-be-optional' readers
     (rdr := Smalltalk at:#WindowsIconReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/bmp'      put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-MS-bmp' put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-ms-bmp' put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-MS-ico' put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-ms-ico' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'bmp'            put:rdr.
-        FileSuffixToImageReaderClassMapping at:'ico'            put:rdr.
+        self imageReaderForType:'image/bmp'      put:rdr.
+        self imageReaderForType:'image/x-MS-bmp' put:rdr.
+        self imageReaderForType:'image/x-ms-bmp' put:rdr.
+        self imageReaderForType:'image/x-MS-ico' put:rdr.
+        self imageReaderForType:'image/x-ms-ico' put:rdr.
+        self imageReaderForSuffix:'bmp'            put:rdr.
+        self imageReaderForSuffix:'ico'            put:rdr.
     ].
     (rdr := Smalltalk at:#XBMReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-xbitmap' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'xbm'             put:rdr.
+        self imageReaderForType:'image/x-xbitmap' put:rdr.
+        self imageReaderForSuffix:'xbm'             put:rdr.
     ].
     (rdr := Smalltalk at:#XPMReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-xpixmap' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pm'              put:rdr.
+        self imageReaderForType:'image/x-xpixmap' put:rdr.
+        self imageReaderForSuffix:'pm'              put:rdr.
     ].
     (rdr := Smalltalk at:#PBMReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-portable-pixmap'  put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-portable-bitmap'  put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-portable-graymap' put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-portable-anymap'  put:rdr.
-        FileSuffixToImageReaderClassMapping at:'ppm'                      put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pbm'                      put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pgm'                      put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pnm'                      put:rdr.
+        self imageReaderForType:'image/x-portable-pixmap'  put:rdr.
+        self imageReaderForType:'image/x-portable-bitmap'  put:rdr.
+        self imageReaderForType:'image/x-portable-graymap' put:rdr.
+        self imageReaderForType:'image/x-portable-anymap'  put:rdr.
+        self imageReaderForSuffix:'ppm'                      put:rdr.
+        self imageReaderForSuffix:'pbm'                      put:rdr.
+        self imageReaderForSuffix:'pgm'                      put:rdr.
+        self imageReaderForSuffix:'pnm'                      put:rdr.
     ].
     (rdr := Smalltalk at:#PCXReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-pcx' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pcx'         put:rdr.
+        self imageReaderForType:'image/x-pcx' put:rdr.
+        self imageReaderForSuffix:'pcx'         put:rdr.
     ].
     (rdr := Smalltalk at:#TargaReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-targa' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'tga'           put:rdr.
+        self imageReaderForType:'image/x-targa' put:rdr.
+        self imageReaderForSuffix:'tga'           put:rdr.
     ].
     (rdr := Smalltalk at:#XWDReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-xwindowdump' put:rdr.
-        TypeToImageReaderClassMapping       at:'image/x-windowdump'  put:rdr.
-        FileSuffixToImageReaderClassMapping at:'xwd'                 put:rdr.
+        self imageReaderForType:'image/x-xwindowdump' put:rdr.
+        self imageReaderForType:'image/x-windowdump'  put:rdr.
+        self imageReaderForSuffix:'xwd'                 put:rdr.
     ].
     (rdr := Smalltalk at:#BlitImageReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-blitimage' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'48x48x1'           put:rdr.
+        self imageReaderForType:'image/x-blitimage' put:rdr.
+        self imageReaderForSuffix:'48x48x1'           put:rdr.
     ].
     (rdr := Smalltalk at:#IrisRGBReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-rgb' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'rgb'         put:rdr.
+        self imageReaderForType:'image/x-rgb' put:rdr.
+        self imageReaderForSuffix:'rgb'         put:rdr.
     ].
     (rdr := Smalltalk at:#SunRasterReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-sunraster' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'im8'               put:rdr.
-        FileSuffixToImageReaderClassMapping at:'icon'              put:rdr.
+        self imageReaderForType:'image/x-sunraster' put:rdr.
+        self imageReaderForSuffix:'im8'               put:rdr.
+        self imageReaderForSuffix:'icon'              put:rdr.
     ].
     (rdr := Smalltalk at:#ST80FormReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-st80-form' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'form'              put:rdr.
+        self imageReaderForType:'image/x-st80-form' put:rdr.
+        self imageReaderForSuffix:'form'              put:rdr.
     ].
     (rdr := Smalltalk at:#FaceReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-face' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'face'         put:rdr.
+        self imageReaderForType:'image/x-face' put:rdr.
+        self imageReaderForSuffix:'face'         put:rdr.
     ].
     (rdr := Smalltalk at:#PCDReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-photo-cd' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'pcd'              put:rdr.
+        self imageReaderForType:'image/x-photo-cd' put:rdr.
+        self imageReaderForSuffix:'pcd'              put:rdr.
     ].
     (rdr := Smalltalk at:#CMURasterReader) notNil ifTrue:[
-        TypeToImageReaderClassMapping       at:'image/x-cmu-raster' put:rdr.
-        FileSuffixToImageReaderClassMapping at:'ras'                put:rdr.
+        self imageReaderForType:'image/x-cmu-raster' put:rdr.
+        self imageReaderForSuffix:'ras'                put:rdr.
     ].
 
     "/ movie formats - experimental and not yet complete / finished / delivered / published
 "/    (rdr := Smalltalk at:#FLIReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/x-fli' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'fli'         put:rdr.
+"/        self imageReaderForType:'video/x-fli' put:rdr.
+"/        self imageReaderForSuffix:'fli'         put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#AVIReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/x-msvideo' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'avi'             put:rdr.
+"/        self imageReaderForType:'video/x-msvideo' put:rdr.
+"/        self imageReaderForSuffix:'avi'             put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#AVIReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/x-msvideo' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'avi'             put:rdr.
+"/        self imageReaderForType:'video/x-msvideo' put:rdr.
+"/        self imageReaderForSuffix:'avi'             put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#QuickTimeReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/quicktime' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'qt'              put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mov'             put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'moov'            put:rdr.
+"/        self imageReaderForType:'video/quicktime' put:rdr.
+"/        self imageReaderForSuffix:'qt'              put:rdr.
+"/        self imageReaderForSuffix:'mov'             put:rdr.
+"/        self imageReaderForSuffix:'moov'            put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#MPEG2Reader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/x-mpeg2' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpg2'          put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpv2'          put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mp2v'          put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mp2'           put:rdr.
+"/        self imageReaderForType:'video/x-mpeg2' put:rdr.
+"/        self imageReaderForSuffix:'mpg2'          put:rdr.
+"/        self imageReaderForSuffix:'mpv2'          put:rdr.
+"/        self imageReaderForSuffix:'mp2v'          put:rdr.
+"/        self imageReaderForSuffix:'mp2'           put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#MPEGReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/mpeg' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpg'        put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpeg'       put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpe'        put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpv'        put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'vps'        put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'mpegv'      put:rdr.
+"/        self imageReaderForType:'video/mpeg' put:rdr.
+"/        self imageReaderForSuffix:'mpg'        put:rdr.
+"/        self imageReaderForSuffix:'mpeg'       put:rdr.
+"/        self imageReaderForSuffix:'mpe'        put:rdr.
+"/        self imageReaderForSuffix:'mpv'        put:rdr.
+"/        self imageReaderForSuffix:'vps'        put:rdr.
+"/        self imageReaderForSuffix:'mpegv'      put:rdr.
 "/    ].
 "/    (rdr := Smalltalk at:#SGIMovieReader) notNil ifTrue:[
-"/        TypeToImageReaderClassMapping       at:'video/x-sgi-movie' put:rdr.
-"/        FileSuffixToImageReaderClassMapping at:'movie'             put:rdr.
+"/        self imageReaderForType:'video/x-sgi-movie' put:rdr.
+"/        self imageReaderForSuffix:'movie'             put:rdr.
 "/    ].
+
+    "Modified (format): / 09-02-2017 / 15:46:48 / stefan"
 !
 
 initializeParenthesisSpecMappings
@@ -584,19 +588,20 @@
     ^ #(
         "/ the first column is a list of extensions, the second the more-or-less official mimetype
 
-        ('a' 'o' 'obj' )                        'application/binary'
-        ('lic')                                 'application/license'
-        ('dll' 'so')                            'application/shared-library'
+        ('a' 'o' 'obj' )                      'application/binary'
+        'lic'                                 'application/license'
+        ('dll' 'so')                          'application/shared-library'
 
-        ('ets')                                 'application/x-expecco-testsuite'
-        ('etr')                                 'application/x-expecco-testrepository'
-        ('elf')                                 'application/x-expecco-logfile'
-        ('expeccolicense')                      'application/x-expecco-license'
-        ('expeccopatch')                        'application/x-expecco-patch'
+        'ets'                                 'application/x-expecco-testsuite'
+        'etr'                                 'application/x-expecco-testrepository'
+        'elf'                                 'application/x-expecco-logfile'
+        'expeccolicense'                      'application/x-expecco-license'
+        'expeccopatch'                        'application/x-expecco-patch'
     )
 
     "Modified: / 03-11-2011 / 10:42:28 / sr"
     "Modified (format): / 05-02-2017 / 19:37:05 / cg"
+    "Modified: / 09-02-2017 / 14:31:45 / stefan"
 !
 
 applicationProgLangTypeList
@@ -694,7 +699,7 @@
         "/ the first column is a list of extensions, the second the more-or-less official mimetype
 
         ('au' 'snd')            'audio/basic'
-        ('ra')                  'audio/x-realaudio'
+        'ra'                    'audio/x-realaudio'
         ('ram' 'rm')            'audio/x-pn-realaudio'
         "/ cg: see unixSpecific / windowsSpecific
         "/        'rpm'                   'audio/x-pn-realaudio-plugin'
@@ -708,6 +713,7 @@
 
     "Modified: / 26-05-2012 / 15:23:45 / cg"
     "Modified (comment): / 05-02-2017 / 19:37:48 / cg"
+    "Modified: / 09-02-2017 / 14:29:59 / stefan"
 !
 
 imageTypeList
@@ -990,20 +996,13 @@
         "/ allow for fallback ...
         type := OperatingSystem mimeTypeForSuffix:lcSuffix.
         "/ the special value #unknown is returned as nil;
-        "/ this avoids constant retry if a mimeType is not known in the OS.
-
-        type := type ? #unknown.
+        "/ this avoids constant retry if a suffix is not known in the OS.   
+        type := type isNil ifTrue:[#unknown] ifFalse:[MIMEType fromString:type].
         FileSuffixToTypeMapping at:lcSuffix put:type.
     ].
 
-    type == #unknown ifTrue:[
-        type := nil.
-    ].
-    type notNil ifTrue:[
-        LastSuffix := suffix.
-        LastType := MIMEType fromString:type.
-        ^ LastType
-    ].
+    LastSuffix := suffix.
+    LastType := type.
     ^ type
 
     "
@@ -1014,6 +1013,7 @@
 
     "Created: / 30-06-1997 / 21:55:51 / cg"
     "Modified: / 14-02-2011 / 17:14:34 / cg"
+    "Modified: / 09-02-2017 / 14:57:52 / stefan"
 !
 
 mimeTypeForSuffix:suffix put:mimeType
@@ -1022,10 +1022,11 @@
     FileSuffixToTypeMapping isNil ifTrue:[
         FileSuffixToTypeMapping := Dictionary new
     ].
-    FileSuffixToTypeMapping at:suffix put:mimeType asLowercase
+    FileSuffixToTypeMapping at:suffix ifAbsentPut:[MIMEType fromString:mimeType asLowercase].
 
-    "Created: / 30.6.1997 / 21:56:20 / cg"
-    "Modified: / 1.8.1998 / 17:03:18 / cg"
+    "Created: / 30-06-1997 / 21:56:20 / cg"
+    "Modified: / 01-08-1998 / 17:03:18 / cg"
+    "Modified: / 09-02-2017 / 15:09:17 / stefan"
 !
 
 mimeTypeForSuffixMapping
@@ -1286,23 +1287,14 @@
 imageReaderClasses
     "return a collection of registered image reader classes"
 
-    |setOfClasses|
-
-    setOfClasses := IdentitySet new.
-    FileSuffixToImageReaderClassMapping notNil ifTrue:[
-        FileSuffixToImageReaderClassMapping keysAndValuesDo:[:suff :cls |
-            setOfClasses add:cls
-        ].
+    TypeToImageReaderClassMapping notNil ifTrue:[
+        ^ TypeToImageReaderClassMapping values asSet.
     ].
-    TypeToImageReaderClassMapping notNil ifTrue:[
-        TypeToImageReaderClassMapping keysAndValuesDo:[:suff :cls |
-            setOfClasses add:cls
-        ].
-    ].
-    ^ setOfClasses
+    ^ #().
 
-    "Created: / 30.6.1997 / 22:03:42 / cg"
-    "Modified: / 1.8.1998 / 16:59:52 / cg"
+    "Created: / 30-06-1997 / 22:03:42 / cg"
+    "Modified: / 01-08-1998 / 16:59:52 / cg"
+    "Modified: / 09-02-2017 / 15:23:52 / stefan"
 !
 
 imageReaderForSuffix:aSuffix
@@ -1347,10 +1339,13 @@
     TypeToImageReaderClassMapping isNil ifTrue:[
         self initializeImageReaderMappings
     ].
-    TypeToImageReaderClassMapping at:mimeTypeString asLowercase put:aReaderClass
+    TypeToImageReaderClassMapping 
+        at:(MIMEType fromString:mimeTypeString asLowercase)
+        put:aReaderClass
 
-    "Created: / 30.6.1997 / 21:56:11 / cg"
-    "Modified: / 1.8.1998 / 17:02:40 / cg"
+    "Created: / 30-06-1997 / 21:56:11 / cg"
+    "Modified: / 01-08-1998 / 17:02:40 / cg"
+    "Modified: / 09-02-2017 / 15:32:58 / stefan"
 ! !
 
 !MIMETypes class methodsFor:'queries-language syntax'!
@@ -1533,10 +1528,12 @@
     ^ newType
 
     "
+     CachedTypes := nil.
      self fromString:'text/html'
     "
 
     "Modified: / 20-07-2012 / 17:36:31 / cg"
+    "Modified (comment): / 09-02-2017 / 15:36:06 / stefan"
 ! !
 
 !MIMETypes::MIMEType methodsFor:'queries'!