Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-ct.299.mcz
==================== Summary ====================
Name: MorphicExtras-ct.299
Author: ct
Time: 3 October 2021, 3:39:23.706874 pm
UUID: 771933d3-7bec-9346-aa54-c4549fa6ae87
Ancestors: MorphicExtras-ul.298
Adds FrameRateMorph to the 'Tools' category of the parts bin. I seriously use this morph for performance measuring.
=============== Diff against MorphicExtras-ul.298 ===============
Item was changed:
----- Method: FrameRateMorph class>>descriptionForPartsBin (in category 'parts bin') -----
descriptionForPartsBin
^ self partName: 'FrameRate' translatedNoop
+ categories: {'Just for Fun' translatedNoop. 'Tools' translatedNoop}
- categories: {'Just for Fun' translatedNoop}
documentation: 'A readout that allows you to monitor the frame rate of your system' translatedNoop!
Marcel Taeumel uploaded a new version of System to project The Treated Inbox:
http://source.squeak.org/treated/System-ct.1240.mcz
==================== Summary ====================
Name: System-ct.1240
Author: ct
Time: 15 July 2021, 12:04:53.78757 am
UUID: 624f6c2a-2072-d94c-8dd0-90beb93b74d4
Ancestors: System-mt.1239
MailSender: Allows for empty passwords. Also improves multilingual support. Thanks to David Stes for the pointer!
=============== Diff against System-mt.1239 ===============
Item was changed:
----- Method: MailSender class>>setSmtpServer (in category 'settings') -----
setSmtpServer
"Set the SMTP server used to send outgoing messages via"
SmtpServer ifNil: [SmtpServer := ''].
SmtpServer := UIManager default
+ request: 'What is your mail server for outgoing mail?' translated
- request: 'What is your mail server for outgoing mail?'
initialAnswer: SmtpServer.
!
Item was changed:
----- Method: MailSender class>>setSmtpServerPort (in category 'settings') -----
setSmtpServerPort
"Set the SMTP server port used to send outgoing messages via"
SmtpServerPort ifNil: [SmtpServerPort := 25].
SmtpServerPort := (UIManager default
+ request: 'What is your mail server port for outgoing mail?' translated
- request: 'What is your mail server port for outgoing mail?'
initialAnswer: SmtpServerPort asString) asNumber.
!
Item was changed:
----- Method: MailSender class>>setUserEmail (in category 'settings') -----
setUserEmail
"Change the user's email for use in composing messages."
(UIManager default
+ request: 'What is your email address?\(This is the address other people will reply to you)' withCRs translated
- request: 'What is your email address?\(This is the address other people will reply to you)' withCRs
initialAnswer: (UserEmail ifNil: [UserEmail := '']))
ifNotNil: [:answer | UserEmail := answer]!
Item was changed:
----- Method: MailSender class>>setUserName (in category 'settings') -----
setUserName
(UIManager default
+ request: 'What is your user name on the SMTP server?' translated
- request: 'What is your user name on the SMTP server?' withCRs
initialAnswer: (UserName ifNil: [UserName := '']))
ifNotNil: [:answer | UserName := answer]!
Item was changed:
----- Method: MailSender class>>setUserPassword (in category 'settings') -----
setUserPassword
UserPassword ifNil: [UserPassword := ''].
(UIManager default
+ requestPassword: 'What is your server password?' translated)
- requestPassword: 'What is your server passwort?' withCRs)
ifNotNil: [:answer | UserPassword := answer]!
Item was changed:
----- Method: MailSender class>>smtpServer (in category 'accessing') -----
smtpServer
"Answer the server for sending email"
self isSmtpServerSet ifFalse: [self setSmtpServer].
+ SmtpServer isEmpty ifTrue: [self error: 'no SMTP server specified' translated].
- SmtpServer isEmpty ifTrue: [ self error: 'no SMTP server specified' ].
^SmtpServer!
Item was changed:
----- Method: MailSender class>>smtpServerPort (in category 'accessing') -----
smtpServerPort
"Answer the server for sending email"
self isSmtpServerPortSet ifFalse: [self setSmtpServerPort].
+ SmtpServerPort isNil ifTrue: [self error: 'no SMTP server port specified' translated].
- SmtpServerPort isNil ifTrue: [ self error: 'no SMTP server port specified' ].
^SmtpServerPort!
Item was changed:
----- Method: MailSender class>>userEmail (in category 'accessing') -----
userEmail
"Answer the user name to be used for sending out messages."
self isUserEmailSet ifFalse: [self setUserEmail].
+ UserEmail isEmpty ifTrue: [self error: 'no user email specified' translated].
- UserEmail isEmpty ifTrue: [ self error: 'no user email specified' ].
^UserEmail!
Item was changed:
----- Method: MailSender class>>userName (in category 'accessing') -----
userName
"Answer the user name to be used for sending out messages."
self isUserNameSet ifFalse: [self setUserName].
+ UserName isEmpty ifTrue: [self error: 'no user name specified' translated].
- UserName isEmpty ifTrue: [ self error: 'no user name specified' ].
^UserName!
Item was changed:
----- Method: MailSender class>>userPassword (in category 'accessing') -----
userPassword
self isUserPasswordSet ifFalse: [self setUserPassword].
+ "UserPassword isEmpty ifTrue: [self error: 'no user name specified' translated]."
- UserPassword isEmpty ifTrue: [ self error: 'no user name specified' ].
^ UserPassword!
Item was added:
+ ----- Method: Preferences class>>allowEtoyUserCustomEvents (in category 'standard queries') -----
+ allowEtoyUserCustomEvents
+ ^ self
+ valueOfFlag: #allowEtoyUserCustomEvents
+ ifAbsent: [false]!
Marcel Taeumel uploaded a new version of Regex-Core to project The Treated Inbox:
http://source.squeak.org/treated/Regex-Core-ct.61.mcz
==================== Summary ====================
Name: Regex-Core-ct.61
Author: ct
Time: 8 July 2021, 1:30:44.09436 am
UUID: 63655b8f-ad42-0946-b6fe-4dc3100995f1
Ancestors: Regex-Core-ct.59
Adds String >> #escapeRegex to escape special characters in a string before composing it into another regex.
Usage:
':-)' matchesRegex: ':-)' escapeRegex
=============== Diff against Regex-Core-ct.59 ===============
Item was added:
+ ----- Method: RxParser class>>escapeString: (in category 'utilities') -----
+ escapeString: aString
+ "Answer a copy of aString which does not contain any unescaped characters. This is the inverse function of String >> #matchesRegex:.
+ NB: Basically, we could simply escape every single character in the string, but this would not produce human-readable outputs."
+
+ ^ aString
+ copyWithRegex: ('[{1}]' format: {self specialCharacters collect: [:character | '\', character]})
+ matchesTranslatedUsing: [:match | '\', match]!
Item was added:
+ ----- Method: RxParser class>>specialCharacters (in category 'utilities') -----
+ specialCharacters
+
+ ^ #($( $) $[ $] $* $+ $? ${ $} $. $^ $$ $: $\)!
Item was added:
+ ----- Method: String>>escapeRegex (in category '*Regex-Core') -----
+ escapeRegex
+
+ ^ RxParser escapeString: self!
Marcel Taeumel uploaded a new version of Kernel to project The Treated Inbox:
http://source.squeak.org/treated/Kernel-eem.1415.mcz
==================== Summary ====================
Name: Kernel-eem.1415
Author: eem
Time: 20 September 2021, 3:40:41.04035 pm
UUID: b3b62e4b-49b1-4463-93de-6c69109de02d
Ancestors: Kernel-eem.1414
An alternative fix to http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-September/21652…
c.f. Kernel-ul.1415
=============== Diff against Kernel-eem.1414 ===============
Item was added:
+ ----- Method: MethodDictionary>>add: (in category 'adding') -----
+ add: anAssociation
+
+ | index |
+ index := self scanFor: anAssociation key.
+ (array at: index)
+ ifNil: [ self atNewIndex: index put: anAssociation ]
+ ifNotNil: [ array at: index put: anAssociation value ].
+ ^anAssociation!
Item was changed:
----- Method: MethodDictionary>>at:put: (in category 'accessing') -----
at: key put: value
"Set the value at key to be value."
| index |
index := self scanFor: key.
(self basicAt: index)
ifNil: [
self
basicAt: index put: key;
+ atNewIndex: index putValue: value ]
- atNewIndex: index put: value ]
ifNotNil: [
(array at: index) flushCache.
array at: index put: value ].
^value!
Item was added:
+ ----- Method: MethodDictionary>>atNewIndex:put: (in category 'private') -----
+ atNewIndex: index put: anAssociation
+ "Override to deal with the internal organization of MethodDIctionaries
+ which, to suit the VM, do not use Associations."
+ self assert: anAssociation isVariableBinding.
+ self basicAt: index put: anAssociation key.
+ array at: index put: anAssociation value.
+ tally := tally + 1.
+ "Keep array at least 1/4 free for decent hash behavior"
+ array size * 3 < (tally * 4) ifTrue: [ self grow ]!
Item was added:
+ ----- Method: MethodDictionary>>atNewIndex:putValue: (in category 'private') -----
+ atNewIndex: index putValue: anObject
+ "Override to deal with the internal organization of MethodDIctionaries
+ which, to suit the VM, do not use Associations."
+ array at: index put: anObject.
+ tally := tally + 1.
+ "Keep array at least 1/4 free for decent hash behavior"
+ array size * 3 < (tally * 4) ifTrue: [ self grow ]!