David T. Lewis uploaded a new version of 39Deprecated to project The Trunk:
http://source.squeak.org/trunk/39Deprecated-dtl.17.mcz
==================== Summary ====================
Name: 39Deprecated-dtl.17
Author: dtl
Time: 29 November 2009, 10:33:38 am
UUID: 503bc267-1a61-45a2-b1c6-4939c624ea7f
Ancestors: 39Deprecated-dtl.16
Move SharedQueue2>>removeAll and SharedQueue2>>removeAllSuchThat: from category "*39Deprecated" back to "accessing". These had been put in the 39Deprecated package, but have never been marked deprecated (and should not be).
=============== Diff against 39Deprecated-dtl.16 ===============
Item was removed:
- ----- Method: SharedQueue2>>removeAllSuchThat: (in category '*39Deprecated') -----
- removeAllSuchThat: aBlock
- "Remove from the queue all objects that satisfy aBlock."
- monitor critical: [
- items removeAllSuchThat: aBlock ]!
Item was removed:
- ----- Method: SharedQueue2>>removeAll (in category '*39Deprecated') -----
- removeAll
- monitor critical: [
- items next: (items size) ].!
David T. Lewis uploaded a new version of 39Deprecated to project The Trunk:
http://source.squeak.org/trunk/39Deprecated-dtl.17.mcz
==================== Summary ====================
Name: 39Deprecated-dtl.17
Author: dtl
Time: 29 November 2009, 10:33:38 am
UUID: 503bc267-1a61-45a2-b1c6-4939c624ea7f
Ancestors: 39Deprecated-dtl.16
Move SharedQueue2>>removeAll and SharedQueue2>>removeAllSuchThat: from category "*39Deprecated" back to "accessing". These had been put in the 39Deprecated package, but have never been marked deprecated (and should not be).
=============== Diff against 39Deprecated-dtl.16 ===============
Item was removed:
- ----- Method: SharedQueue2>>removeAllSuchThat: (in category '*39Deprecated') -----
- removeAllSuchThat: aBlock
- "Remove from the queue all objects that satisfy aBlock."
- monitor critical: [
- items removeAllSuchThat: aBlock ]!
Item was removed:
- ----- Method: SharedQueue2>>removeAll (in category '*39Deprecated') -----
- removeAll
- monitor critical: [
- items next: (items size) ].!
David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.214.mcz
==================== Summary ====================
Name: Collections-dtl.214
Author: dtl
Time: 29 November 2009, 10:32:29 am
UUID: 357d781b-6b29-47ba-a2f2-74faf72585ed
Ancestors: Collections-nice.213
Use "Project current" idiom in TestSqkProjectLink>>actOnClickFor:
Move SharedQueue2>>removeAll and SharedQueue2>>removeAllSuchThat: from category "*39Deprecated" back to "accessing". These had been put in the 39Deprecated package, but have never been marked deprecated (and should not be).
=============== Diff against Collections-nice.213 ===============
Item was added:
+ ----- Method: SharedQueue2>>removeAll (in category 'accessing') -----
+ removeAll
+ monitor critical: [
+ items next: (items size) ].!
Item was added:
+ ----- Method: SharedQueue2>>removeAllSuchThat: (in category 'accessing') -----
+ removeAllSuchThat: aBlock
+ "Remove from the queue all objects that satisfy aBlock."
+ monitor critical: [
+ items removeAllSuchThat: aBlock ]!
Item was changed:
----- Method: TextSqkProjectLink>>actOnClickFor: (in category 'as yet unclassified') -----
actOnClickFor: textMorph
+ Project current enterIfThereOrFind: url.
- Project enterIfThereOrFind: url.
^ true!
David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.214.mcz
==================== Summary ====================
Name: Collections-dtl.214
Author: dtl
Time: 29 November 2009, 10:32:29 am
UUID: 357d781b-6b29-47ba-a2f2-74faf72585ed
Ancestors: Collections-nice.213
Use "Project current" idiom in TestSqkProjectLink>>actOnClickFor:
Move SharedQueue2>>removeAll and SharedQueue2>>removeAllSuchThat: from category "*39Deprecated" back to "accessing". These had been put in the 39Deprecated package, but have never been marked deprecated (and should not be).
=============== Diff against Collections-nice.213 ===============
Item was added:
+ ----- Method: SharedQueue2>>removeAll (in category 'accessing') -----
+ removeAll
+ monitor critical: [
+ items next: (items size) ].!
Item was added:
+ ----- Method: SharedQueue2>>removeAllSuchThat: (in category 'accessing') -----
+ removeAllSuchThat: aBlock
+ "Remove from the queue all objects that satisfy aBlock."
+ monitor critical: [
+ items removeAllSuchThat: aBlock ]!
Item was changed:
----- Method: TextSqkProjectLink>>actOnClickFor: (in category 'as yet unclassified') -----
actOnClickFor: textMorph
+ Project current enterIfThereOrFind: url.
- Project enterIfThereOrFind: url.
^ true!
David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.214.mcz
==================== Summary ====================
Name: Collections-dtl.214
Author: dtl
Time: 29 November 2009, 10:32:29 am
UUID: 357d781b-6b29-47ba-a2f2-74faf72585ed
Ancestors: Collections-nice.213
Use "Project current" idiom in TestSqkProjectLink>>actOnClickFor:
Move SharedQueue2>>removeAll and SharedQueue2>>removeAllSuchThat: from category "*39Deprecated" back to "accessing". These had been put in the 39Deprecated package, but have never been marked deprecated (and should not be).
=============== Diff against Collections-nice.213 ===============
Item was added:
+ ----- Method: SharedQueue2>>removeAll (in category 'accessing') -----
+ removeAll
+ monitor critical: [
+ items next: (items size) ].!
Item was added:
+ ----- Method: SharedQueue2>>removeAllSuchThat: (in category 'accessing') -----
+ removeAllSuchThat: aBlock
+ "Remove from the queue all objects that satisfy aBlock."
+ monitor critical: [
+ items removeAllSuchThat: aBlock ]!
Item was changed:
----- Method: TextSqkProjectLink>>actOnClickFor: (in category 'as yet unclassified') -----
actOnClickFor: textMorph
+ Project current enterIfThereOrFind: url.
- Project enterIfThereOrFind: url.
^ true!
David T. Lewis uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-dtl.67.mcz
==================== Summary ====================
Name: Multilingual-dtl.67
Author: dtl
Time: 29 November 2009, 9:34:12 am
UUID: 674101cf-1ac8-4cc7-9e61-257bbd794434
Ancestors: Multilingual-nice.66
Use Beeper class>>beep rather than deprecated Object>>beep
=============== Diff against Multilingual-nice.66 ===============
Item was changed:
Object subclass: #LanguageEnvironment
instanceVariableNames: 'id'
classVariableNames: 'ClipboardInterpreterClass Current FileNameConverterClass InputInterpreterClass KnownEnvironments SystemConverterClass'
poolDictionaries: ''
category: 'Multilingual-Languages'!
!LanguageEnvironment commentStamp: 'bf 8/16/2009 16:52' prior: 0!
The name multilingualized Squeak suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same.
Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well.
+ When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
- When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least.
!
Item was changed:
----- Method: LanguageEditor>>loadFromFile (in category 'gui methods') -----
loadFromFile
| fileName |
fileName := self selectTranslationFileName.
fileName isNil
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator loadFromFileNamed: fileName.
self changed: #translations.
self changed: #untranslated]!
Item was changed:
----- Method: LanguageEditor>>searchUntranslated: (in category 'gui methods') -----
searchUntranslated: aString
| untranslateds results index |
untranslateds := self untranslated.
results := untranslateds
select: [:each | '*' , aString , '*' match: each].
""
results isEmpty
ifTrue: [""
self inform: 'no matches for' translated , ' ''' , aString , ''''.
^ self].
""
results size = 1
ifTrue: [""
self selectUntranslatedPhrase: results first.
^ self].
""
index := (UIManager default
chooseFrom: (results
collect: [:each | each copy replaceAll: Character cr with: $\])
title: 'select the untranslated phrase...' translated).
""
index isZero
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self
selectUntranslatedPhrase: (results at: index)!
Item was changed:
----- Method: LanguageEditor>>saveToFile (in category 'gui methods') -----
saveToFile
"save the translator to a file"
| fileName |
fileName := UIManager default request: 'file name' translated initialAnswer: translator localeID isoString , '.translation'.
(fileName isNil
or: [fileName isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator saveToFileNamed: fileName]!
Item was changed:
----- Method: LanguageEditor>>searchUntranslated (in category 'gui methods') -----
searchUntranslated
| search |
search := UIManager default request: 'search for' translated initialAnswer: ''.
(search isNil
or: [search isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self searchUntranslated: search!
Item was changed:
----- Method: LanguageEditor>>removeTranslation (in category 'gui methods') -----
removeTranslation
"remove the selected translation"
| translation |
self selectedTranslation isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the translation to remove' translated.
^ self].
""
translation := self translations at: self selectedTranslation.
""
(self
confirm: ('Removing "{1}".
Are you sure you want to do this?' translated format: {translation}))
ifFalse: [^ self].
""
self translator removeTranslationFor: translation.
self changed: #translations.
self changed: #untranslated.!
Item was changed:
----- Method: LanguageEditor>>searchTranslation (in category 'gui methods') -----
searchTranslation
| search |
search := UIManager default request: 'search for' translated initialAnswer: ''.
(search isNil
or: [search isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self searchTranslation: search!
Item was changed:
----- Method: LanguageEditor>>addTranslation (in category 'gui methods') -----
addTranslation
"translate a phrase"
| phrase |
phrase := UIManager default
request: 'enter the original:'
initialAnswer: ''.
(phrase isNil
or: [phrase = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self translatePhrase: phrase!
Item was changed:
----- Method: LanguageEditor>>removeUntranslated (in category 'gui methods') -----
removeUntranslated
"remove the selected untranslated phrase"
| untranslated |
self selectedUntranslated isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the untranslated phrase to remove' translated.
^ self].
""
untranslated := self untranslated at: self selectedUntranslated.
""
(self
confirm: ('Removing "{1}".
Are you sure you want to do this?' translated format: {untranslated}))
ifFalse: [^ self].
""
self translator removeUntranslated: untranslated!
Item was changed:
----- Method: LanguageEditor>>translate (in category 'gui methods') -----
translate
"translate a phrase"
| phrase |
phrase := self phraseToTranslate.
""
(phrase isNil
or: [phrase = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self translatePhrase: phrase!
Item was changed:
----- Method: LanguageEditor>>searchTranslation: (in category 'gui methods') -----
searchTranslation: aString
| translations results index |
translations := self translations.
results := translations
select: [:each | ""
('*' , aString , '*' match: each)
or: ['*' , aString , '*' match: (self translator translationFor: each)]].
""
results isEmpty
ifTrue: [""
self inform: 'no matches for' translated , ' ''' , aString , ''''.
^ self].
""
results size = 1
ifTrue: [""
self selectTranslationPhrase: results first.
^ self].
""
index := (UIManager default
chooseFrom: (results
collect: [:each | ""
(each copy replaceAll: Character cr with: $\)
, ' -> '
, ((self translator translationFor: each) copy replaceAll: Character cr with: $\)])
title: 'select the translation...' translated).
""
index isZero
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self
selectTranslationPhrase: (results at: index)!
Item was changed:
----- Method: LanguageEditor>>mergeFromFile (in category 'gui methods') -----
mergeFromFile
| fileName |
fileName := self selectTranslationFileName.
fileName isNil
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator loadFromFileNamed: fileName.
self changed: #translations.
self changed: #untranslated]!
Item was changed:
----- Method: LanguageEditor>>translatePhrase: (in category 'gui methods') -----
translatePhrase: aString
"translate aString"
| translation |
translation := UIManager default
multiLineRequest: 'translation for: ' translated , '''' , aString , ''''
centerAt: Sensor cursorPoint
initialAnswer: aString
answerHeight: 200.
""
(translation isNil
or: [translation = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self phrase: aString translation: translation!
Item was changed:
----- Method: LanguageEditor>>browseMethodsWithTranslation (in category 'gui methods') -----
browseMethodsWithTranslation
| translation |
self selectedTranslation isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the translation to look for' translated.
^ self].
""
translation := self translations at: self selectedTranslation.
self systemNavigation browseMethodsWithLiteral: translation!
Item was changed:
----- Method: LanguageEditor>>browseMethodsWithUntranslated (in category 'gui methods') -----
browseMethodsWithUntranslated
| untranslated |
self selectedUntranslated isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the untranslated phrase to look for' translated.
^ self].
""
untranslated := self untranslated at: self selectedUntranslated.
SystemNavigation default browseMethodsWithLiteral: untranslated.
!
David T. Lewis uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-dtl.67.mcz
==================== Summary ====================
Name: Multilingual-dtl.67
Author: dtl
Time: 29 November 2009, 9:34:12 am
UUID: 674101cf-1ac8-4cc7-9e61-257bbd794434
Ancestors: Multilingual-nice.66
Use Beeper class>>beep rather than deprecated Object>>beep
=============== Diff against Multilingual-nice.66 ===============
Item was changed:
Object subclass: #LanguageEnvironment
instanceVariableNames: 'id'
classVariableNames: 'ClipboardInterpreterClass Current FileNameConverterClass InputInterpreterClass KnownEnvironments SystemConverterClass'
poolDictionaries: ''
category: 'Multilingual-Languages'!
!LanguageEnvironment commentStamp: 'bf 8/16/2009 16:52' prior: 0!
The name multilingualized Squeak suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same.
Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well.
+ When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
- When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical.
Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least.
!
Item was changed:
----- Method: LanguageEditor>>loadFromFile (in category 'gui methods') -----
loadFromFile
| fileName |
fileName := self selectTranslationFileName.
fileName isNil
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator loadFromFileNamed: fileName.
self changed: #translations.
self changed: #untranslated]!
Item was changed:
----- Method: LanguageEditor>>searchUntranslated: (in category 'gui methods') -----
searchUntranslated: aString
| untranslateds results index |
untranslateds := self untranslated.
results := untranslateds
select: [:each | '*' , aString , '*' match: each].
""
results isEmpty
ifTrue: [""
self inform: 'no matches for' translated , ' ''' , aString , ''''.
^ self].
""
results size = 1
ifTrue: [""
self selectUntranslatedPhrase: results first.
^ self].
""
index := (UIManager default
chooseFrom: (results
collect: [:each | each copy replaceAll: Character cr with: $\])
title: 'select the untranslated phrase...' translated).
""
index isZero
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self
selectUntranslatedPhrase: (results at: index)!
Item was changed:
----- Method: LanguageEditor>>saveToFile (in category 'gui methods') -----
saveToFile
"save the translator to a file"
| fileName |
fileName := UIManager default request: 'file name' translated initialAnswer: translator localeID isoString , '.translation'.
(fileName isNil
or: [fileName isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator saveToFileNamed: fileName]!
Item was changed:
----- Method: LanguageEditor>>searchUntranslated (in category 'gui methods') -----
searchUntranslated
| search |
search := UIManager default request: 'search for' translated initialAnswer: ''.
(search isNil
or: [search isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self searchUntranslated: search!
Item was changed:
----- Method: LanguageEditor>>removeTranslation (in category 'gui methods') -----
removeTranslation
"remove the selected translation"
| translation |
self selectedTranslation isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the translation to remove' translated.
^ self].
""
translation := self translations at: self selectedTranslation.
""
(self
confirm: ('Removing "{1}".
Are you sure you want to do this?' translated format: {translation}))
ifFalse: [^ self].
""
self translator removeTranslationFor: translation.
self changed: #translations.
self changed: #untranslated.!
Item was changed:
----- Method: LanguageEditor>>searchTranslation (in category 'gui methods') -----
searchTranslation
| search |
search := UIManager default request: 'search for' translated initialAnswer: ''.
(search isNil
or: [search isEmpty])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self searchTranslation: search!
Item was changed:
----- Method: LanguageEditor>>addTranslation (in category 'gui methods') -----
addTranslation
"translate a phrase"
| phrase |
phrase := UIManager default
request: 'enter the original:'
initialAnswer: ''.
(phrase isNil
or: [phrase = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self translatePhrase: phrase!
Item was changed:
----- Method: LanguageEditor>>removeUntranslated (in category 'gui methods') -----
removeUntranslated
"remove the selected untranslated phrase"
| untranslated |
self selectedUntranslated isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the untranslated phrase to remove' translated.
^ self].
""
untranslated := self untranslated at: self selectedUntranslated.
""
(self
confirm: ('Removing "{1}".
Are you sure you want to do this?' translated format: {untranslated}))
ifFalse: [^ self].
""
self translator removeUntranslated: untranslated!
Item was changed:
----- Method: LanguageEditor>>translate (in category 'gui methods') -----
translate
"translate a phrase"
| phrase |
phrase := self phraseToTranslate.
""
(phrase isNil
or: [phrase = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self translatePhrase: phrase!
Item was changed:
----- Method: LanguageEditor>>searchTranslation: (in category 'gui methods') -----
searchTranslation: aString
| translations results index |
translations := self translations.
results := translations
select: [:each | ""
('*' , aString , '*' match: each)
or: ['*' , aString , '*' match: (self translator translationFor: each)]].
""
results isEmpty
ifTrue: [""
self inform: 'no matches for' translated , ' ''' , aString , ''''.
^ self].
""
results size = 1
ifTrue: [""
self selectTranslationPhrase: results first.
^ self].
""
index := (UIManager default
chooseFrom: (results
collect: [:each | ""
(each copy replaceAll: Character cr with: $\)
, ' -> '
, ((self translator translationFor: each) copy replaceAll: Character cr with: $\)])
title: 'select the translation...' translated).
""
index isZero
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self
selectTranslationPhrase: (results at: index)!
Item was changed:
----- Method: LanguageEditor>>mergeFromFile (in category 'gui methods') -----
mergeFromFile
| fileName |
fileName := self selectTranslationFileName.
fileName isNil
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
Cursor wait
showWhile: [
self translator loadFromFileNamed: fileName.
self changed: #translations.
self changed: #untranslated]!
Item was changed:
----- Method: LanguageEditor>>translatePhrase: (in category 'gui methods') -----
translatePhrase: aString
"translate aString"
| translation |
translation := UIManager default
multiLineRequest: 'translation for: ' translated , '''' , aString , ''''
centerAt: Sensor cursorPoint
initialAnswer: aString
answerHeight: 200.
""
(translation isNil
or: [translation = ''])
ifTrue: [""
+ Beeper beep.
- self beep.
^ self].
""
self phrase: aString translation: translation!
Item was changed:
----- Method: LanguageEditor>>browseMethodsWithTranslation (in category 'gui methods') -----
browseMethodsWithTranslation
| translation |
self selectedTranslation isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the translation to look for' translated.
^ self].
""
translation := self translations at: self selectedTranslation.
self systemNavigation browseMethodsWithLiteral: translation!
Item was changed:
----- Method: LanguageEditor>>browseMethodsWithUntranslated (in category 'gui methods') -----
browseMethodsWithUntranslated
| untranslated |
self selectedUntranslated isZero
ifTrue: [""
+ Beeper beep.
- self beep.
self inform: 'select the untranslated phrase to look for' translated.
^ self].
""
untranslated := self untranslated at: self selectedUntranslated.
SystemNavigation default browseMethodsWithLiteral: untranslated.
!