'From Squeakland 3.8.5976 of 25 August 2004 [latest update: #387] on 19 January 2005 at 9:31:47 pm'! "Change Set: SaveMorphWithUTF8.cs Date: 19 January 2005 Author: Takashi Yamamiya Save morph with UTF-8. This change set is needed if you save a morph with scripts or variables named in multilingual characters"! !FileStream class methodsFor: 'file reader services' stamp: 'tak 1/12/2005 14:59'! writeSourceCodeFrom: aStream baseName: baseName isSt: stOrCsFlag useHtml: useHtml | extension converter f fileName | aStream contents isAsciiString ifTrue: [ stOrCsFlag ifTrue: [ extension _ (FileDirectory dot, FileStream st). ] ifFalse: [ extension _ (FileDirectory dot, FileStream cs). ]. converter _ MacRomanTextConverter new. ] ifFalse: [ stOrCsFlag ifTrue: [ extension _ (FileDirectory dot, FileStream st "multiSt"). ] ifFalse: [ extension _ (FileDirectory dot, FileStream cs "multiCs"). ]. converter _ UTF8TextConverter new. ]. fileName _ useHtml ifTrue: [baseName, '.html'] ifFalse: [baseName, extension]. f _ FileStream newFileNamed: fileName. f ifNil: [^ self error: 'Cannot open file']. (converter isMemberOf: UTF8TextConverter) ifTrue: [f binary. UTF8TextConverter writeBOMOn: f]. f text. f converter: converter. f nextPutAll: aStream contents. f close. ! ! !Morph methodsFor: 'caching' stamp: 'tak 1/12/2005 14:57'! releaseCachedState "Release any state that can be recomputed on demand, such as the pixel values for a color gradient or the editor state for a TextMorph. This method may be called to save space when a morph becomes inaccessible. Implementations of this method should do 'super releaseCachedState'." self formerOwner: nil. self formerPosition: nil. self removeProperty: #undoGrabCommand. self wonderlandTexture: nil. "We can recreate it if needed" self borderStyle releaseCachedState. ! ! !MultiByteBinaryOrTextStream methodsFor: 'fileIn/Out' stamp: 'tak 1/12/2005 13:47'! fileOutClass: extraClass andObject: theObject UTF8TextConverter writeBOMOn: self. ^ super fileOutClass: extraClass andObject: theObject! ! !MultiByteFileStream methodsFor: 'fileIn/Out' stamp: 'tak 1/12/2005 14:48'! fileOutClass: extraClass andObject: theObject self binary. UTF8TextConverter writeBOMOn: self. self text. ^ super fileOutClass: extraClass andObject: theObject! ! !UTF8TextConverter class methodsFor: 'accessing' stamp: 'tak 1/12/2005 13:22'! writeBOMOn: aStream "Write Byte Order Mark" aStream nextPut: 16rEF. aStream nextPut: 16rBB. aStream nextPut: 16rBF. ! ! !UTF8TextConverter class reorganize! ('accessing' writeBOMOn:) ('as yet unclassified' encodingNames) ! FileStream class removeSelector: #writeUTF8PreambleOn:!