XPMReader.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 17:23:55 +0200
changeset 3228 187a4158a51a
parent 3091 5f05dc4d3a10
child 3419 2e30918fce3a
permissions -rw-r--r--
class: FlyByHelp changed: #initiateHelpFor:at:now: #showHelp:for: changed the flyBy suppression slightly: if the same text is to be shown again, do not show it except if the help is for another widget. (used to check for the text only previously)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     1
"
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
     3
	      All Rights Reserved
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     4
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
24b4aff428c0 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    11
"
1400
8a7b55b08bf3 category change
Claus Gittinger <cg@exept.de>
parents: 1012
diff changeset
    12
"{ Package: 'stx:libview2' }"
8a7b55b08bf3 category change
Claus Gittinger <cg@exept.de>
parents: 1012
diff changeset
    13
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    14
ImageReader subclass:#XPMReader
1814
2f204c2a957d image saving - use save:onStream:
Claus Gittinger <cg@exept.de>
parents: 1812
diff changeset
    15
	instanceVariableNames:'charsPerPixel maskPixelValue characterTranslation imageName'
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    16
	classVariableNames:''
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    17
	poolDictionaries:''
1745
4fa0fad2a463 code cleanup (colorMap handling)
Claus Gittinger <cg@exept.de>
parents: 1743
diff changeset
    18
	category:'Graphics-Images-Readers'
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    19
!
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    20
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
    21
!XPMReader class methodsFor:'documentation'!
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    23
copyright
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    24
"
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    25
 COPYRIGHT (c) 1994 by Claus Gittinger
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
    26
	      All Rights Reserved
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    27
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    28
 This software is furnished under a license and may be used
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    33
 hereby transferred.
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    34
"
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    35
!
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    36
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    37
documentation
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    38
"
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    39
    This class provides methods for loading x-pixmap-file (xpm) images.
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    40
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    41
    These images are used (in X) for palette images 
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    42
    (see ctwm or hp-vue for a lot of them).
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    43
    The format is actually a piece of C-code, which can be compiled by the C-compiler
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    44
    into a constant image data structure.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    45
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    46
    The code here is a hack - it may not work for all images 
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    47
    (it works for the testfiles I got here).
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
    48
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    49
    Limitations: 
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    50
        only reads the full-color specification, ignoring monochrome
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    51
        and greyscale info.
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
    52
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    53
        Can only handle single-character index.
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
    54
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    55
        Only understands single-word color names (i.e. names with spaces 
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    56
        are not supported)
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    57
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    58
        Image writing is only supported for images with less than about 200
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    59
        colors (single byte encoding). 
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    60
        If present, the mask must be a single bit mask (i.e. no alpha channel).
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
    61
        Due to the algorithm, writing may be slow for big images
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    62
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    63
    Suggestions: adapt & use the XPM library here.
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    64
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    65
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    66
    [See also:]
234
b6352d13e792 xrefs in documentation
Claus Gittinger <cg@exept.de>
parents: 210
diff changeset
    67
        Image Form Icon
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    68
        BlitImageReader FaceReader GIFReader JPEGReader PBMReader PCXReader 
210
5405de794686 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 203
diff changeset
    69
        ST80FormReader SunRasterReader TargaReader TIFFReader WindowsIconReader 
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    70
        XBMReader XWDReader 
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
    71
"
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    72
!
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    73
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    74
examples
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    75
"
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    76
  Reading from a file:
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    77
                                                                        [exBegin]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    78
    |image|
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    79
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    80
    image := Image fromFile:('../../goodies/bitmaps/xpmBitmaps/INFO.xpm').
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    81
    image inspect
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    82
                                                                        [exEnd]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    83
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    84
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    85
  Saving to a file:
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    86
                                                                        [exBegin]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    87
    |image|
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    88
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    89
    image := Image fromScreen:(0@0 corner:30@30).
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    90
    image usedColors size > 256 ifTrue:[
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    91
        image := image asDitheredImageUsing:(Color standardDitherColorsForDepth8) depth:8.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    92
    ].
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    93
    XPMReader save:image onFile:'/tmp/test.xpm'.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    94
    '/tmp/test.xpm' asFilename contents asString inspect
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    95
                                                                        [exEnd]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    96
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    97
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    98
  Or directly into a stream:
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
    99
                                                                        [exBegin]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   100
    |image stream|
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   101
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   102
    image := Image fromScreen:(0@0 corner:30@30).
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   103
    image usedColors size > 256 ifTrue:[
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   104
        image := image asDitheredImageUsing:(Color standardDitherColorsForDepth8) depth:8.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   105
    ].
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   106
    stream := WriteStream on:(String new).
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   107
    XPMReader save:image onStream:stream.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   108
    stream contents inspect
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   109
                                                                        [exEnd]
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   110
"
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   111
! !
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   112
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   113
!XPMReader class methodsFor:'initialization'!
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   114
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   115
initialize
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
   116
    "tell Image-class, that a new fileReader is present
400
b40294e3fee0 new suffix-table
Claus Gittinger <cg@exept.de>
parents: 398
diff changeset
   117
     for the '.xpm' and '.pm' extensions."
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
   118
647
6f26c76aa0c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 623
diff changeset
   119
    MIMETypes defineImageType:'image/x-xpixmap' suffix:'xpm' reader:self.
6f26c76aa0c9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 623
diff changeset
   120
    MIMETypes defineImageType:nil               suffix:'pm'  reader:self.
398
aef700d15416 new suffix-table
Claus Gittinger <cg@exept.de>
parents: 384
diff changeset
   121
400
b40294e3fee0 new suffix-table
Claus Gittinger <cg@exept.de>
parents: 398
diff changeset
   122
    "Modified: 1.2.1997 / 15:10:29 / cg"
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   123
! !
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   124
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   125
!XPMReader class methodsFor:'testing'!
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   126
460
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   127
canRepresent:anImage
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   128
    "return true, if anImage can be represented in my file format.
461
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   129
     Currently only images with less than 80 colors are supported."
460
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   130
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   131
    anImage depth <= 6 ifTrue:[^ true].
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   132
    anImage photometric == #palette ifTrue:[
1907
67dd6f3420b7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1882
diff changeset
   133
        anImage colorMap size < 256 ifTrue:[^ true].
460
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   134
    ].
1907
67dd6f3420b7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1882
diff changeset
   135
    anImage usedColors size < 256 ifTrue:[^ true].
2030
cfe668c44a8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1952
diff changeset
   136
    ('XPMReader [info]: too many colors in image.') infoPrintCR.
1495
100e4e782f71 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1403
diff changeset
   137
    ^ false
460
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   138
461
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   139
    "Modified: 27.2.1997 / 12:40:22 / cg"
460
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   140
!
2c2215c50c28 added #canRepresent:
Claus Gittinger <cg@exept.de>
parents: 459
diff changeset
   141
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   142
isValidImageFile:aFileName
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   143
    "return true, if aFileName contains an x-bitmap-file image"
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   144
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   145
    |line inStream |
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   146
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   147
    inStream := self streamReadingFile:aFileName.
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   148
    inStream isNil ifTrue:[^ false].
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   149
550
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   150
    Stream readErrorSignal handle:[:ex |
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   151
        line := nil
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   152
    ] do:[
1510
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   153
        Stream lineTooLongErrorSignal handle:[:ex |
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   154
            line := nil.
2803
b1f0edb9c078 changed: #isValidImageFile:
Claus Gittinger <cg@exept.de>
parents: 2030
diff changeset
   155
            Transcript showCR:'XPMReader [info]: long line'.
1510
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   156
            ex return.
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   157
        ] do:[
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   158
            line := inStream nextLine.
4e0133eec046 care for invalid format (long line)
Claus Gittinger <cg@exept.de>
parents: 1495
diff changeset
   159
        ]
550
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   160
    ].
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   161
    inStream close.
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   162
    line isNil ifTrue:[^ false].
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   163
    (line startsWith:'/* XPM') ifFalse:[^ false].
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   164
    ^ true
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   165
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   166
    "
562
921472d151d9 handle commented lines (in colorSpec)
Claus Gittinger <cg@exept.de>
parents: 560
diff changeset
   167
     XPMReader isValidImageFile:'fooBar'    
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   168
     XPMReader isValidImageFile:'../../goodies/bitmaps/xpmBitmaps/device_images/ljet.xpm'      
562
921472d151d9 handle commented lines (in colorSpec)
Claus Gittinger <cg@exept.de>
parents: 560
diff changeset
   169
     XPMReader isValidImageFile:'bitmaps/gifImages/garfield.gif' 
550
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   170
    "
254480517864 handle long line read error.
Claus Gittinger <cg@exept.de>
parents: 509
diff changeset
   171
562
921472d151d9 handle commented lines (in colorSpec)
Claus Gittinger <cg@exept.de>
parents: 560
diff changeset
   172
    "Modified: 24.4.1997 / 20:29:40 / cg"
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   173
! !
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   174
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   175
!XPMReader methodsFor:'private-reading'!
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   176
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   177
colorNameFrom:aStream
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   178
    "read either a color-name or value specified in X-notation
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   179
     (#rrggbb where rr, gg and bb are 2-digit hex numbers)"
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   180
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   181
    |s|
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   182
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   183
    aStream peek == $# ifTrue:[
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   184
	aStream next.
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   185
	s := '#'.
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
   186
    ] ifFalse:[
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   187
	s := ''.
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   188
    ].
28
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   189
    [aStream peek isLetterOrDigit] whileTrue:[
8daff0234d2e *** empty log message ***
claus
parents: 24
diff changeset
   190
	s := s copyWith:aStream next
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
   191
    ].
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
   192
    ^ s
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   193
!
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   194
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   195
readColorMap:colorMapSize
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   196
    |redMap greenMap blueMap s key lineDone state
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   197
     symbolicName monoName greyName grey4Name colorName|
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   198
107
Claus Gittinger <cg@exept.de>
parents: 99
diff changeset
   199
    redMap := ByteArray new:colorMapSize.
Claus Gittinger <cg@exept.de>
parents: 99
diff changeset
   200
    greenMap := ByteArray new:colorMapSize.
Claus Gittinger <cg@exept.de>
parents: 99
diff changeset
   201
    blueMap := ByteArray new:colorMapSize.
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   202
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   203
    1 to:colorMapSize do:[:colorIndex |
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   204
        |index line color t word|
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   205
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   206
        line := inStream nextLine.
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   207
        [line notNil and:[line startsWith:'/*']] whileTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   208
            [line notNil and:[(line endsWith:'*/') not]] whileTrue:[
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   209
                line := inStream nextLine.
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   210
            ].
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   211
            line := inStream nextLine.
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   212
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   213
        line notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   214
            line := line withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   215
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   216
        (line notNil and:[line startsWith:'"']) ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   217
            ^ self fileFormatError:'format error (expected color spec)'.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   218
        ].
24
6bc436eb4c4a *** empty log message ***
claus
parents: 22
diff changeset
   219
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   220
        s := ReadStream on:line.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   221
        s next. "skip quote"
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   222
        charsPerPixel ~~ 1 ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   223
            key := s next:charsPerPixel.
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   224
            characterTranslation at:key put:colorIndex - 1.
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   225
        ] ifFalse:[
1952
5009754ae556 Use #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 1907
diff changeset
   226
            index := s next codePoint.
1737
a1ed08195ee7 refactorings
Claus Gittinger <cg@exept.de>
parents: 1710
diff changeset
   227
            characterTranslation at:index put:colorIndex - 1.
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   228
        ].
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   229
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   230
        lineDone := false.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   231
        state := nil.
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   232
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   233
        [lineDone] whileFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   234
            s skipSeparators.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   235
            s peek == $# ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   236
                word := self colorNameFrom:s
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   237
            ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   238
                word := s nextAlphaNumericWord.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   239
            ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   240
            word isNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   241
                lineDone := true
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   242
            ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   243
                word = 's' ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   244
                    "/ symbolic name ...
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   245
                    state := $s. symbolicName := ''.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   246
                ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   247
                    word = 'm' ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   248
                        "/ monochrome data
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   249
                        state := $m. monoName := ''.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   250
                    ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   251
                        word = 'g' ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   252
                            "/ grey data
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   253
                            state := $g. greyName := ''.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   254
                        ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   255
                            word = 'g4' ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   256
                                "/ grey data
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   257
                                state := $G. grey4Name := ''.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   258
                            ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   259
                                word = 'c' ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   260
                                    "/ color data
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   261
                                    state := $c. colorName := ''.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   262
                                ] ifFalse:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   263
                                    "/ append to name
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   264
                                    state isNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   265
                                        ^ self fileFormatError:('format error got: ' 
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   266
                                                                , word printString 
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   267
                                                                , ' (expected ''c'',''m'',''g'' or ''s'')').
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   268
                                    ].
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   269
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   270
                                    state == $m ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   271
                                        monoName := monoName , ' ' , word.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   272
                                    ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   273
                                    state == $g ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   274
                                        greyName := greyName , ' ' , word.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   275
                                    ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   276
                                    state == $G ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   277
                                        grey4Name := grey4Name , ' ' , word.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   278
                                    ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   279
                                    state == $c ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   280
                                        colorName := colorName , ' ' , word.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   281
                                    ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   282
                                    state == $s ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   283
                                        symbolicName := symbolicName , ' ' , word.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   284
                                    ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   285
                                    (word startsWith:'#') ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   286
                                        state := nil.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   287
                                    ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   288
                                ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   289
                            ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   290
                        ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   291
                    ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   292
                ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   293
            ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   294
        ].
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   295
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   296
        colorName notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   297
            colorName := colorName withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   298
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   299
        monoName notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   300
            monoName := monoName withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   301
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   302
        greyName notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   303
            greyName := greyName withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   304
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   305
        grey4Name notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   306
            grey4Name := grey4Name withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   307
        ].
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   308
        symbolicName notNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   309
            symbolicName := symbolicName withoutSeparators
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   310
        ].
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   311
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   312
        "/
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   313
        "/ for now - ignore everything, except
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   314
        "/ colorName (if there is one)
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   315
        "/
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   316
        colorName isNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   317
            colorName := greyName.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   318
            colorName isNil ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   319
                colorName := monoName.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   320
            ]
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   321
        ].
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   322
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   323
        (colorName sameAs: 'none') ifTrue:[
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   324
            color := Color noColor. "/ white
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   325
            redMap at:colorIndex put:0.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   326
            greenMap at:colorIndex put:0.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   327
            blueMap at:colorIndex put:0.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   328
            maskPixelValue := colorIndex-1.
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   329
        ] ifFalse:[
1745
4fa0fad2a463 code cleanup (colorMap handling)
Claus Gittinger <cg@exept.de>
parents: 1743
diff changeset
   330
            color := Color name:colorName ifIllegal:(Color black).
1403
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   331
            redMap at:colorIndex put:(color red asFloat * 255.0 // 100).
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   332
            greenMap at:colorIndex put:(color green asFloat * 255.0 // 100).
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   333
            blueMap at:colorIndex put:(color blue asFloat * 255.0 // 100).
94f9ec117aa5 tuned image reading with 2-char color encoding
Claus Gittinger <cg@exept.de>
parents: 1400
diff changeset
   334
        ].
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   335
    ].
1745
4fa0fad2a463 code cleanup (colorMap handling)
Claus Gittinger <cg@exept.de>
parents: 1743
diff changeset
   336
1759
f52382e5a9b8 slowly getting rid of the Colormap class
Claus Gittinger <cg@exept.de>
parents: 1745
diff changeset
   337
    colorMap := MappedPalette redVector:redMap greenVector:greenMap blueVector:blueMap.
22
24b4aff428c0 Initial revision
claus
parents:
diff changeset
   338
! !
41
66edc847b9c8 *** empty log message ***
claus
parents: 36
diff changeset
   339
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   340
!XPMReader methodsFor:'private-writing'!
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   341
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   342
colorNameOf:aColor
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   343
    "generate a name for a color. If its a standard color,
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   344
     return its name; otherwise return the hex representation."
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   345
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   346
    #(white black red green blue
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   347
      yellow magenta cyan orange) do:[:aStandardColorName |
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   348
        aColor = (Color name:aStandardColorName) ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   349
            ^ aStandardColorName.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   350
        ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   351
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   352
    ^ '#' 
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   353
     , (aColor redByte hexPrintString:2)
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   354
     , (aColor greenByte hexPrintString:2)
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   355
     , (aColor blueByte hexPrintString:2)
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   356
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   357
    "Created: / 27.2.1997 / 11:48:40 / cg"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   358
    "Modified: / 6.6.1998 / 20:58:49 / cg"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   359
! !
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   360
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   361
!XPMReader methodsFor:'reading'!
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   362
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   363
readImage
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   364
    "read an XPM-image from my inStream. Return the receiver 
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   365
     (with all relevant instance variables set for the image) 
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   366
     or nil on error"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   367
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   368
    |line 
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   369
     srcIndex "{ Class: SmallInteger }"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   370
     dstIndex "{ Class: SmallInteger }"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   371
     colorMapSize   
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   372
     s bitsPerPixel bytesPerPixel 
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   373
     key lastKey lastChar1 lastChar2 
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   374
     c1 c2 lastXLation clr|
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   375
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   376
    line := inStream nextLine.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   377
    (line notNil and:[line startsWith:'/* XPM']) ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   378
        ^ self fileFormatError:'format error (expected XPM)'.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   379
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   380
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   381
    line := inStream nextLine.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   382
    [line notNil and:[(line startsWith:'/*') or:[line isBlank or:[(line startsWith:' *')]]]] whileTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   383
        line := inStream nextLine.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   384
    ].
1882
34b809b880a9 read new xpm files (with 'static const char' - line)
Claus Gittinger <cg@exept.de>
parents: 1858
diff changeset
   385
    line notNil ifFalse:[
34b809b880a9 read new xpm files (with 'static const char' - line)
Claus Gittinger <cg@exept.de>
parents: 1858
diff changeset
   386
        ^ self fileFormatError:'format error (unexpected end of file)'.
34b809b880a9 read new xpm files (with 'static const char' - line)
Claus Gittinger <cg@exept.de>
parents: 1858
diff changeset
   387
    ].
34b809b880a9 read new xpm files (with 'static const char' - line)
Claus Gittinger <cg@exept.de>
parents: 1858
diff changeset
   388
    ((line startsWith:'static char') or:[(line startsWith:'static const char')]) ifFalse:[
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   389
        ^ self fileFormatError:'format error (expected static char)'.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   390
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   391
    line := inStream nextLine.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   392
    (line notNil and:[line startsWith:'/*']) ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   393
        [line notNil 
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   394
         and:[(line startsWith:'/*') or:[line startsWith:' *']]] whileTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   395
            line := inStream nextLine.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   396
        ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   397
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   398
    line notNil ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   399
        line := line withoutSeparators
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   400
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   401
    (line notNil and:[line startsWith:'"']) ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   402
        ^ self fileFormatError:'format error (expected "ww hh nn mm)'.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   403
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   404
    s := ReadStream on:line.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   405
    s next.  "skip quote"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   406
    width := Integer readFrom:s.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   407
    height := Integer readFrom:s.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   408
    colorMapSize := Integer readFrom:s.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   409
    charsPerPixel := Integer readFrom:s.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   410
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   411
    self reportDimension.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   412
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   413
    charsPerPixel ~~ 1 ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   414
        characterTranslation := Dictionary new:colorMapSize.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   415
    ] ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   416
        characterTranslation := Array new:256.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   417
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   418
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   419
    self readColorMap:colorMapSize.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   420
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   421
    "actually, could make it an image with less depth most of the time ..."
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   422
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   423
"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   424
    bitsPerPixel := ((colorMapSize - 1) log:2) truncated + 1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   425
"
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   426
    colorMapSize > 16r100 ifTrue:[
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   427
        colorMapSize > 16r10000 ifTrue:[
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   428
            bitsPerPixel := 24.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   429
            bytesPerPixel := 3.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   430
        ] ifFalse:[
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   431
            bitsPerPixel := 16.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   432
            bytesPerPixel := 2.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   433
        ].
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   434
    ] ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   435
        bitsPerPixel := 8.
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   436
        bytesPerPixel := 1.
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   437
    ].
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   438
    data := ByteArray new:(width * bytesPerPixel * height).
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   439
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   440
    dstIndex := 1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   441
    1 to:height do:[:row |
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   442
        line := inStream nextLine withoutSpaces.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   443
        [line notNil and:[line startsWith:'/*']] whileTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   444
            line := inStream nextLine withoutSpaces.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   445
        ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   446
        line notNil ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   447
            line := line withoutSeparators
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   448
        ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   449
        (line notNil and:[line startsWith:'"']) ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   450
            ^ self fileFormatError:'format error (expected pixels)'.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   451
        ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   452
        charsPerPixel == 1 ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   453
            srcIndex := 2. "skip dquote"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   454
            1 to:width do:[:col |
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   455
                key := line at:srcIndex.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   456
                key ~~ lastKey ifTrue:[
1952
5009754ae556 Use #codePoint instead of deprecated #asciiValue
Stefan Vogel <sv@exept.de>
parents: 1907
diff changeset
   457
                    lastXLation := characterTranslation at:key codePoint.
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   458
                    lastKey := key
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   459
                ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   460
                data at:dstIndex put:lastXLation.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   461
                srcIndex := srcIndex + 1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   462
                dstIndex := dstIndex + 1
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   463
            ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   464
        ] ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   465
            charsPerPixel == 2 ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   466
                "/ sorry, but this ugly code does a lot for speed,
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   467
                "/ when reading big Xpm files (factor=5 for banner8.xpm)  ...
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   468
                srcIndex := 2."skip dquote"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   469
                lastChar1 := lastChar2 := nil.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   470
                key := String new:2.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   471
                1 to:width do:[:col |
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   472
                    c1 := line at:srcIndex.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   473
                    c2 := line at:srcIndex+1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   474
                    (c1 ~~ lastChar1 or:[c2 ~~ lastChar2]) ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   475
                        key at:1 put:c1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   476
                        key at:2 put:c2.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   477
                        lastXLation := characterTranslation at:key.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   478
                        lastChar1 := c1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   479
                        lastChar2 := c2.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   480
                    ].
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   481
                    bitsPerPixel == 8 ifTrue:[
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   482
                        data at:dstIndex put:lastXLation.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   483
                        dstIndex := dstIndex + 1.
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   484
                    ] ifFalse:[    
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   485
                        bitsPerPixel == 16 ifTrue:[
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   486
                            data at:dstIndex   put:(lastXLation bitAnd:16rFF).
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   487
                            data at:dstIndex+1 put:((lastXLation bitShift:-8) bitAnd:16rFF).
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   488
                            dstIndex := dstIndex + 2.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   489
                        ] ifFalse:[
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   490
                            clr := colorMap at:lastXLation+1.    
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   491
                            data at:dstIndex   put:clr redByte.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   492
                            data at:dstIndex+1 put:clr greenByte.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   493
                            data at:dstIndex+2 put:clr blueByte.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   494
                            dstIndex := dstIndex + 3.
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   495
                        ]
1848
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   496
                    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   497
                    srcIndex := srcIndex + 2.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   498
                ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   499
            ] ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   500
                s := line readStream.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   501
                s next. "/ skip dquote
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   502
                1 to:width do:[:col |
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   503
                    key := s next:charsPerPixel.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   504
"/                data at:dstIndex put:(characterTranslation at:key).
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   505
                    key ~= lastKey ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   506
                        lastXLation := characterTranslation at:key.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   507
                        lastKey := key
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   508
                    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   509
                    data at:dstIndex put:lastXLation.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   510
                    dstIndex := dstIndex + 1
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   511
                ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   512
            ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   513
        ]
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   514
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   515
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   516
    bitsPerPixel == 24 ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   517
        photometric := #rgb.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   518
        samplesPerPixel := 3.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   519
        bitsPerSample := #(8 8 8).
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   520
    ] ifFalse:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   521
        photometric := #palette.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   522
        samplesPerPixel := 1.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   523
        bitsPerSample := Array with:bitsPerPixel.
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   524
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   525
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   526
    maskPixelValue notNil ifTrue:[
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   527
        self buildMaskFromColor:maskPixelValue
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   528
    ].
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   529
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   530
    "
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   531
     XPMReader fromStream:('../../goodies/bitmaps/xpmBitmaps/FATAL.xpm' asFilename readStream)
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   532
    "
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   533
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   534
    "Created: / 24.9.1995 / 06:20:06 / claus"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   535
    "Modified: / 24.9.1995 / 07:07:33 / claus"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   536
    "Modified: / 5.7.1996 / 17:27:59 / stefan"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   537
    "Modified: / 27.7.1998 / 20:01:56 / cg"
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   538
! !
864ca2cd4e71 category
Claus Gittinger <cg@exept.de>
parents: 1846
diff changeset
   539
1805
93f557cbe600 category changes
Claus Gittinger <cg@exept.de>
parents: 1759
diff changeset
   540
!XPMReader methodsFor:'writing'!
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   541
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   542
save:image onFile:aFileName
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   543
    "save image as XPM file on aFileName.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   544
     Caveat: currently, only a maximum of roughly 50 colors is handled
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   545
             (i.e. very simple images)"
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   546
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   547
    imageName := aFileName asFilename baseName asFilename withoutSuffix asString.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   548
    imageName replaceAll:$. with:$_.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   549
1814
2f204c2a957d image saving - use save:onStream:
Claus Gittinger <cg@exept.de>
parents: 1812
diff changeset
   550
    super save:image onFile:aFileName.
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   551
!
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   552
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   553
save:image onStream:aStream
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   554
    "save image as XPM file on aStream.
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   555
     Caveat: currently, only a maximum of 256 colors is handled
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   556
            (i.e. very simple images)"
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   557
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   558
    |usedColors nColorsUsed nColors nChars map maskColorIndex
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   559
     isMasked imageMask|
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   560
1858
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   561
    usedColors := image usedColorsMax:4096.
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   562
    usedColors isNil ifTrue:[
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   563
        ^ Image cannotRepresentImageSignal 
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   564
            raiseWith:image
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   565
            errorString:('XPMReader cannot represent this image (too many colors)').
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   566
    ].
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   567
3770543620e2 better error report for too many colors
Claus Gittinger <cg@exept.de>
parents: 1848
diff changeset
   568
    usedColors := usedColors asArray.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   569
    nColors := nColorsUsed := usedColors size.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   570
    (imageMask := image mask) notNil ifTrue:[
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   571
        nColors := nColors + 1.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   572
        maskColorIndex := nColors.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   573
    ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   574
    nColors > 256 ifTrue:[
461
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   575
        ^ Image cannotRepresentImageSignal 
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   576
            raiseWith:image
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   577
            errorString:('XPMReader cannot represent this image (too many colors)').
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   578
    ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   579
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   580
    map := ($a to: $z) asOrderedCollection.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   581
    map addAll:($A to: $Z) asOrderedCollection.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   582
    map addAll:($0 to: $9) asOrderedCollection.
461
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   583
    map addAll:#($. $, $` $^ $* $: $; $< $> $? $% $# $& $( $) $- $+ $=) asOrderedCollection.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   584
    nChars := 1.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   585
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   586
    nColors > map size ifTrue:[
668
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   587
        map := OrderedCollection new.
693
e228da8c7ddf Fix compiler warning.
Stefan Vogel <sv@exept.de>
parents: 668
diff changeset
   588
        $a to: $j do:[:c1 |
668
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   589
            map addAll:(($a to: $z) collect:[:c2 | c1 asString , c2 asString]).
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   590
        ].
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   591
        nChars := 2.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   592
    ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   593
1812
5c902c4135f1 writing onto a stream
Claus Gittinger <cg@exept.de>
parents: 1805
diff changeset
   594
    outStream := aStream.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   595
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   596
    outStream nextPutLine:'/* XPM */'.
1814
2f204c2a957d image saving - use save:onStream:
Claus Gittinger <cg@exept.de>
parents: 1812
diff changeset
   597
    outStream nextPutLine:'static char *' , (imageName ? 'unnamed') , '_xpm[] = {'.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   598
    outStream nextPutLine:'/* width height ncolors chars_per_pixel */'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   599
    outStream nextPutLine:'"' , image width printString , ' '
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   600
                              , image height printString , ' '
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   601
                              , nColors printString , ' '
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   602
                              , nChars printString , '",'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   603
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   604
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   605
    outStream nextPutLine:'/* colors */'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   606
    1 to:nColorsUsed do:[:idx |
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   607
        |clr|
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   608
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   609
        clr := usedColors at:idx.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   610
        outStream nextPutLine:'"' , (map at:idx) asString ,
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   611
                              ' ' , 'c ' , (self colorNameOf:clr) ,
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   612
                              '",'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   613
    ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   614
    maskColorIndex notNil ifTrue:[
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   615
        outStream nextPutLine:'"' , (map at:maskColorIndex) asString ,
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   616
                              ' c none",'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   617
    ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   618
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   619
    outStream nextPutLine:'/* pixels */'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   620
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   621
    maskColorIndex isNil ifTrue:[
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   622
        isMasked := false
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   623
    ].
560
4cce4f58bbbf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 550
diff changeset
   624
1743
2f206c9f1319 replace $. in c-variables name
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
   625
    0 to:image height - 1 do:[:y |
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   626
        outStream nextPutAll:'"'.
1743
2f206c9f1319 replace $. in c-variables name
Claus Gittinger <cg@exept.de>
parents: 1737
diff changeset
   627
        0 to:image width - 1 do:[:x |
461
bacef118f54a more signals to be raised if anything happens during
Claus Gittinger <cg@exept.de>
parents: 460
diff changeset
   628
            |clr idx|
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   629
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   630
            maskColorIndex notNil ifTrue:[
560
4cce4f58bbbf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 550
diff changeset
   631
                isMasked := (imageMask pixelAtX:x y:y) == 0
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   632
            ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   633
            isMasked ifTrue:[
668
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   634
                outStream nextPutAll:(map at:maskColorIndex) asString
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   635
            ] ifFalse:[
564
8a31b6fbe9a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 562
diff changeset
   636
                clr := image colorAtX:x y:y.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   637
                idx := usedColors indexOf:clr.
668
2c741725cc08 allow save of images with up-to 256 colors
Claus Gittinger <cg@exept.de>
parents: 647
diff changeset
   638
                outStream nextPutAll:(map at:idx) asString
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   639
            ]
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   640
        ].
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   641
        outStream nextPutLine:'",'.
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   642
    ].
469
7b58a1bf581c dont forget to close the stream at the end
Claus Gittinger <cg@exept.de>
parents: 461
diff changeset
   643
    outStream nextPutLine:'};'.
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   644
1012
8dd3d70caedb oops - usedColors returns a set.
Claus Gittinger <cg@exept.de>
parents: 1007
diff changeset
   645
    "Modified: / 28.7.1998 / 21:52:13 / cg"
459
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   646
! !
9cdd02f994a4 added image writing support
Claus Gittinger <cg@exept.de>
parents: 400
diff changeset
   647
384
f139a7fc423b fixed color reading - color names may consist of multiple
Claus Gittinger <cg@exept.de>
parents: 316
diff changeset
   648
!XPMReader class methodsFor:'documentation'!
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
   649
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
   650
version
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   651
    ^ '$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.65 2013-02-08 12:49:41 cg Exp $'
2803
b1f0edb9c078 changed: #isValidImageFile:
Claus Gittinger <cg@exept.de>
parents: 2030
diff changeset
   652
!
b1f0edb9c078 changed: #isValidImageFile:
Claus Gittinger <cg@exept.de>
parents: 2030
diff changeset
   653
b1f0edb9c078 changed: #isValidImageFile:
Claus Gittinger <cg@exept.de>
parents: 2030
diff changeset
   654
version_CVS
3091
5f05dc4d3a10 class: XPMReader
Claus Gittinger <cg@exept.de>
parents: 2803
diff changeset
   655
    ^ '$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.65 2013-02-08 12:49:41 cg Exp $'
203
a38debd57097 commentary
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
   656
! !
1650
916067641a59 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   657
41
66edc847b9c8 *** empty log message ***
claus
parents: 36
diff changeset
   658
XPMReader initialize!