'From etoys4.0 of 9 October 2008 [latest update: #2334] on 20 October 2009 at 3:40:29 pm'! "Change Set: JapaneseMacVM4-mu Date: 1 July 2009 Author: Masashi Umezawa Added a support of input and clipboard copy & paste in Japanese especially for Mac VM 4.*."! ClipboardInterpreter subclass: #MacUTF8ClipboardInterpreter instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Multilingual-TextConversion'! !ExtendedClipboardMacInterface methodsFor: 'general-api-read' stamp: 'mu 10/20/2009 15:36'! readUTF8StringClipboardData ^(self readClipboardData: 'public.utf8-plain-text') ifNotNilDo: [:bytes | bytes asString convertFromEncoding: #utf8 ] ! ! !JapaneseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'mu 10/20/2009 15:10'! clipboardInterpreterClass | platformName osVersion | platformName := SmalltalkImage current platformName. osVersion := SmalltalkImage current getSystemAttribute: 1002. (platformName = 'Win32' and: [osVersion = 'CE']) ifTrue: [^NoConversionClipboardInterpreter]. platformName = 'Win32' ifTrue: [^WinShiftJISClipboardInterpreter]. platformName = 'Mac OS' ifTrue: [ ^('4.*' match: (SmalltalkImage current macVmMajorMinorBuildVersionString)) ifTrue: [MacUTF8ClipboardInterpreter] ifFalse: [MacShiftJISClipboardInterpreter]]. ^platformName = 'unix' ifTrue: [(ShiftJISTextConverter encodingNames includes: X11Encoding getEncoding) ifTrue: [MacShiftJISClipboardInterpreter] ifFalse: [UnixJPClipboardInterpreter]] ifFalse: [ NoConversionClipboardInterpreter ]! ! !MacUnicodeInputInterpreter methodsFor: 'initialization' stamp: 'mu 6/30/2009 23:57'! initialize | satisfiesVersion | satisfiesVersion := self majorMinorBuildFrom: SmalltalkImage current vmVersion satisfies: [:major :minor :build | major >= 4 or: [ major >= 3 and: [minor >= 8 and: [build >= 7]]]]. satisfiesVersion ifTrue: [keyValueIndex := 6] ifFalse: [keyValueIndex := 3]! ! !MacUnicodeInputInterpreter methodsFor: 'version check' stamp: 'mu 10/20/2009 15:04'! majorMinorBuildFrom: aString satisfies: aBlock | versionArray | versionArray := SmalltalkImage current macVmMajorMinorBuildVersion. ^ aBlock valueWithArguments: versionArray! ! !MacUTF8ClipboardInterpreter methodsFor: 'as yet unclassified' stamp: 'mu 6/30/2009 23:45'! fromSystemClipboard: aString ^ aString convertFromWithConverter: UTF8TextConverter new! ! !MacUTF8ClipboardInterpreter methodsFor: 'as yet unclassified' stamp: 'mu 10/20/2009 15:11'! toSystemClipboard: text | string | string := text asString. string isAsciiString ifTrue: [^ string asOctetString]. string isOctetString ifTrue: [^ string ]. ^ string convertToWithConverter: UTF8TextConverter new . ! ! !SmalltalkImage methodsFor: 'system attribute' stamp: 'mu 10/20/2009 15:04'! macVmMajorMinorBuildVersion "SmalltalkImage current macVmMajorMinorBuildVersion" | aString rawTokens versionPart versionTokens versionArray | aString := self vmVersion. aString ifNil: [^ #(0 0 0)]. rawTokens := ((aString copyAfter: $]) findTokens: $ ). versionPart := rawTokens detect: [:each | each includes: $.] ifNone: [^#(0 0 0)]. versionTokens := versionPart findTokens: $.. versionArray := #(0 0 0) collectWithIndex: [:each :index | (versionTokens at: index ifAbsent:['']) initialIntegerOrNil ifNil: [each]]. ^versionArray! ! !SmalltalkImage methodsFor: 'system attribute' stamp: 'mu 10/20/2009 15:09'! macVmMajorMinorBuildVersionString "SmalltalkImage current macVmMajorMinorBuildVersionString" ^ String streamContents: [:str | self macVmMajorMinorBuildVersion do: [:each | str nextPutAll: each asString] separatedBy: [str nextPut: $.]]! !