" -------------------------------------------------------------------- 1995 Copyright(C) Masashi Umezawa all rights reserved このクラスはDSTに日本語を通すためにつくられたものです。 CORBA2.0のIDLの仕様では String はISO8859L1 と定められているので、 そのままでは日本語を取り扱うことはできません。日本語の文字列は いったんコードの配列に変換し、IDLでの sequence などに対応させて やる必要があります。MockString は String -> WordArray(UTF)、 WordArray(UTF) -> String の変換を自動的に行います。 MockString は VisualWorksのコンポーネント群などの外部のViewに対しては StringのValueHolder のように振る舞いますが、実際にはStringをコード変換 してWordArrayの形で保持しています。 Modelの側で頻繁に利用する場合のために、MockStringはあたかも普通の Stringであるかのように取り扱うこともできるようになっています。 This class is made by VisualWorks 2.0 and DST 4.0 but it should work in VisualWorks 2.5 and DST 5.* Enjoy! -------------------------------------------------------------------- 以下はUTFです。 " ValueModel subclass: #MockString instanceVariableNames: 'code newValue converter ' classVariableNames: '' poolDictionaries: '' category: 'DST-MultiByteSupport'! MockString comment: 'Copyright(C) 1995 Masashi Umezawa All Rights Reserved 縺薙ョ繧ッ繝ゥ繧ケ縺ッDST縺ォ譌・譛ャ隱槭r騾壹☆縺溘a縺ォ縺、縺上i繧後◆繧ゅョ縺ァ縺吶 CORBA2.0縺ョIDL縺ョ莉墓ァ倥〒縺ッ String 縺ッISO8859L1 縺ィ螳壹a繧峨l縺ヲ縺繧九ョ縺ァ縲√◎縺ョ縺セ縺セ縺ァ縺ッ譌・譛ャ隱槭r蜿悶j謇ア縺縺薙→縺ッ縺ァ縺阪∪縺帙s縲よ律譛ャ隱槭ョ譁蟄怜励ッ縺縺」縺溘s繧ウ繝シ繝峨ョ驟榊励↓螟画鋤縺励!DL縺ァ縺ョ sequence 縺ェ縺ゥ縺ォ蟇セ蠢懊&縺帙※繧繧句ソ隕√′縺ゅj縺セ縺吶MockString 縺ッ String -> WordArray(UTF)縲仝ordArray(UTF) -> String 縺ョ螟画鋤繧定ェ蜍慕噪縺ォ陦後>縺セ縺吶 MockString 縺ッ VisualWorks縺ョ繧ウ繝ウ繝昴シ繝阪Φ繝育セ、縺ェ縺ゥ縺ョ螟夜Κ縺ョView縺ォ蟇セ縺励※縺ッString縺ョValueHolder 縺ョ繧医≧縺ォ謖ッ繧玖槭>縺セ縺吶′縲∝ョ滄圀縺ォ縺ッString繧偵さ繝シ繝牙、画鋤縺励※WordArray縺ョ蠖「縺ァ菫晄戟縺励※縺縺セ縺吶 Model縺ョ蛛エ縺ァ鬆サ郢√↓蛻ゥ逕ィ縺吶k蝣エ蜷医ョ縺溘a縺ォ縲`ockString縺ッ縺ゅ◆縺九b譎ョ騾壹ョString縺ァ縺ゅk縺九ョ繧医≧縺ォ蜿悶j謇ア縺縺薙→繧ゅ〒縺阪k繧医≧縺ォ縺ェ縺」縺ヲ縺縺セ縺吶 '! !MockString methodsFor: 'initialize-release'! initialize "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" converter := PluggableAdaptor new. converter getBlock: [:m | String fromIntegerArray: code] putBlock: [:m :v | code := v asWordArray] updateBlock: [:m :a :p | true]! ! !MockString methodsFor: 'accessing'! code "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^code! code: aWordArray "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" code := aWordArray! setValue: newString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" newValue := self class privateOn: newString! value "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^newValue! value: newString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" converter value: newString. self setValue: newString. self changed: #value! ! !MockString methodsFor: 'printing'! printOn: aStream "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" aStream nextPutAll: converter value! ! !MockString methodsFor: 'converting'! asString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^converter value! asValue "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^self! ! !MockString methodsFor: 'string mocking'! , aString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^self value: self asString , aString! asText "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^Text fromString: self asString! asWordArray "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^self asString asWordArray! do: aBlock "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" self asString do: aBlock! ! !MockString methodsFor: 'private'! converterValue: aValue "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" converter value: aValue! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! MockString class instanceVariableNames: ''! !MockString class methodsFor: 'instance creation'! fromCode: aWordArray "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^(super new) initialize; code: aWordArray! new "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^super new initialize! on: aString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^(super new) initialize; value: aString! ! !MockString class methodsFor: 'examples'! example1 "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" "繧ウ繝シ繝牙、画鋤縺ョ萓" "MockString example1" | ms co | ms := self on: '譌・譛ャ隱槭ョ譁蟄怜'. Transcript cr; show: ms. Transcript cr; show: ms code printString. co := ms code. ms := self fromCode: co. Transcript cr; show: ms. Transcript cr; show: ms code printString. ms inspect! example2 "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" "ValueHolder縺ョ縺セ縺ュ" "MockString example2" | ms | ms := self new asValue. ms value: '譌・譛ャ隱槭ョ譁蟄怜'. Transcript cr; show: ms value. Transcript cr; show: ms code printString. ms value: 'abcdefg'. Transcript cr; show: ms value. Transcript cr; show: ms code printString. ms inspect! example3 "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" "String 縺ョ縺セ縺ュ" "MockString example3" | ms | ms := MockString new. ms := ms , '譌・譛ャ隱槭ョ譁蟄怜'. Transcript cr; show: ms. Transcript cr; show: ms code printString. ms := ms , 'abcdefg'. Transcript cr; show: ms. Transcript cr; show: ms code printString. ms inspect! ! !MockString class methodsFor: 'private'! privateOn: aString "Copyright(C) 1995 Masashi Umezawa All Rights Reserved" ^(super new) initialize; converterValue: aString! !