<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
                                        Hi there :-)<div><br></div><div>-0.5 for the output beautification</div><div>+1 for the rest</div><div><br></div><div>If you would like to add commas to the text, please also put one before the "and": <span style="font-size: 10pt"><a href="https://www.grammarly.com/blog/what-is-the-oxford-comma-and-why-do-people-care-so-much-about-it/" style="font-size: 10pt">https://www.grammarly.com/blog/what-is-the-oxford-comma-and-why-do-people-care-so-much-about-it/</a></span></div><div><br></div><div>In general, I don't think that adding more characters to the annotation bar is a good idea since its space is restricted so much already. Also, maybe a simpler representation would promote do-it scripting? :-) Such as through #splitBy:, which becomes more complicated with "," and "and".</div><div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div>
                                        <blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 01.11.2020 14:58:58 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">Christoph Thiede uploaded a new version of Tools to project The Inbox:
<br>http://source.squeak.org/inbox/Tools-ct.1015.mcz
<br>
<br>==================== Summary ====================
<br>
<br>Name: Tools-ct.1015
<br>Author: ct
<br>Time: 1 November 2020, 3:58:41.62325 pm
<br>UUID: 0f1723d1-90c5-ca4e-88ad-56f6800b2b17
<br>Ancestors: Tools-tpr.1014
<br>
<br>Beautify CodeHolder >> #annotationForSelector:ofClass: implementation and output. Remove dangling separator character and add multilingual support.
<br>
<br>Example - before:
<br>      mt 2/13/2020 13:49 · running · 2 implementors · in change sets: Morphic-pre.1466 Morphic-mt.1507 Morphic-mt.1607 Morphic-cmm.1617 Morphic-mt.1622  · 
<br>Example - after:
<br>      mt 2/13/2020 13:49 · running · 2 implementors · in change sets: Morphic-pre.1466, Morphic-mt.1507, Morphic-mt.1607, Morphic-cmm.1617 and Morphic-mt.1622
<br>
<br>=============== Diff against Tools-tpr.1014 ===============
<br>
<br>Item was changed:
<br>  ----- Method: CodeHolder>>annotationForSelector:ofClass: (in category 'annotation') -----
<br>  annotationForSelector: aSelector ofClass: aClass 
<br>      "Provide a line of content for an annotation pane, representing  
<br>      information about the given selector and class"
<br>      | separator aStream requestList |
<br>      aSelector == #Comment
<br>              ifTrue: [^ self annotationForClassCommentFor: aClass].
<br>      aSelector == #Definition
<br>              ifTrue: [^ self annotationForClassDefinitionFor: aClass].
<br>      aSelector == #Hierarchy
<br>              ifTrue: [^ self annotationForHierarchyFor: aClass].
<br>      aStream := (String new: 512) writeStream.
<br>      requestList := self annotationRequests.
<br>+     separator := self annotationSeparator.
<br>-     separator := requestList size > 1
<br>-                             ifTrue: [self annotationSeparator]
<br>-                             ifFalse: [''].
<br>      requestList
<br>              do: [:aRequest | | aString sendersCount aComment aCategory implementorsCount aList stamp authorInitials | 
<br>                      aRequest == #firstComment
<br>                              ifTrue: [aComment := aClass firstCommentAt: aSelector.
<br>                                      aComment isEmptyOrNil
<br>+                                             ifFalse: [aStream nextPutAll: aComment]].
<br>-                                             ifFalse: [aStream nextPutAll: aComment , separator]].
<br>                      aRequest == #masterComment
<br>                              ifTrue: [aComment := aClass supermostPrecodeCommentFor: aSelector.
<br>                                      aComment isEmptyOrNil
<br>+                                             ifFalse: [aStream nextPutAll: aComment]].
<br>-                                             ifFalse: [aStream nextPutAll: aComment , separator]].
<br>                      aRequest == #documentation
<br>                              ifTrue: [aComment := aClass precodeCommentOrInheritedCommentFor: aSelector.
<br>                                      aComment isEmptyOrNil
<br>+                                             ifFalse: [aStream nextPutAll: aComment]].
<br>-                                             ifFalse: [aStream nextPutAll: aComment , separator]].
<br>                      aRequest == #timeStamp
<br>                              ifTrue: [stamp := self timeStamp.
<br>                                      aStream
<br>+                                             nextPutAll: (stamp ifEmpty: ['no timeStamp' translated])].
<br>-                                             nextPutAll: (stamp size > 0
<br>-                                                             ifTrue: [stamp , separator]
<br>-                                                             ifFalse: ['no timeStamp' , separator])].
<br>                      aRequest == #author
<br>                              ifTrue: [authorInitials := self timeStamp
<br>                                      findTokens ifEmpty: [''] ifNotEmpty: [:tokens | tokens first].
<br>                                      aStream
<br>                                              nextPutAll: (SystemNavigation authorsInverted
<br>                                                      at: authorInitials
<br>                                                      ifPresent: [:fullNames | fullNames anyOne]
<br>                                                      ifAbsent: ['unknown author']), separator].
<br>                      aRequest == #messageCategory
<br>                              ifTrue: [aCategory := aClass organization categoryOfElement: aSelector.
<br>                                      aCategory
<br>                                              ifNotNil: ["woud be nil for a method no longer present,  
<br>                                                      e.g. in a recent-submissions browser"
<br>+                                                     aStream nextPutAll: aCategory]].
<br>-                                                     aStream nextPutAll: aCategory , separator]].
<br>                      aRequest == #sendersCount
<br>                              ifTrue: [sendersCount := (self systemNavigation allCallsOn: aSelector) size.
<br>                                      sendersCount := sendersCount = 1
<br>+                                                     ifTrue: ['1 sender' translated]
<br>+                                                     ifFalse: ['{1} senders' translated format: {sendersCount}].
<br>+                                     aStream nextPutAll: sendersCount].
<br>-                                                             ifTrue: ['1 sender']
<br>-                                                             ifFalse: [sendersCount printString , ' senders'].
<br>-                                     aStream nextPutAll: sendersCount , separator].
<br>                      aRequest == #implementorsCount
<br>                              ifTrue: [implementorsCount := self systemNavigation numberOfImplementorsOf: aSelector.
<br>                                      implementorsCount := implementorsCount = 1
<br>+                                                     ifTrue: ['1 implementor' translated]
<br>+                                                     ifFalse: ['{1} implementors' translated format: {implementorsCount}].
<br>+                                     aStream nextPutAll: implementorsCount].
<br>-                                                             ifTrue: ['1 implementor']
<br>-                                                             ifFalse: [implementorsCount printString , ' implementors'].
<br>-                                     aStream nextPutAll: implementorsCount , separator].
<br>                      aRequest == #priorVersionsCount
<br>                              ifTrue: [self
<br>                                              addPriorVersionsCountForSelector: aSelector
<br>                                              ofClass: aClass
<br>                                              to: aStream].
<br>                      aRequest == #priorTimeStamp
<br>                              ifTrue: [stamp := VersionsBrowser
<br>                                                              timeStampFor: aSelector
<br>                                                              class: aClass
<br>                                                              reverseOrdinal: 2.
<br>                                      stamp
<br>+                                             ifNotNil: [aStream nextPutAll: 'prior time stamp: ' translated , stamp]].
<br>-                                             ifNotNil: [aStream nextPutAll: 'prior time stamp: ' , stamp , separator]].
<br>                      aRequest == #recentChangeSet
<br>                              ifTrue: [aString := ChangesOrganizer mostRecentChangeSetWithChangeForClass: aClass selector: aSelector.
<br>+                                     aStream nextPutAll: aString].
<br>-                                     aString size > 0
<br>-                                             ifTrue: [aStream nextPutAll: aString , separator]].
<br>                      aRequest == #allChangeSets
<br>                              ifTrue: [aList := ChangesOrganizer allChangeSetsWithClass: aClass selector: aSelector.
<br>+                                     aList
<br>+                                             ifNotEmpty: [aList size = 1
<br>+                                                             ifTrue: [aStream nextPutAll: 'only in change set ' translated]
<br>+                                                             ifFalse: [aStream nextPutAll: 'in change sets: ' translated].
<br>+                                                     aStream nextPutAll: (aList collect:
<br>+                                                             [:changeSet | changeSet name]) asCommaStringAnd]
<br>+                                             ifEmpty: [aStream nextPutAll: 'in no change set' translated]]]
<br>+             separatedBy: [
<br>+                     aStream nextPutAll: separator].
<br>-                                     aList size > 0
<br>-                                             ifTrue: [aList size = 1
<br>-                                                             ifTrue: [aStream nextPutAll: 'only in change set ']
<br>-                                                             ifFalse: [aStream nextPutAll: 'in change sets: '].
<br>-                                                     aList
<br>-                                                             do: [:aChangeSet | aStream nextPutAll: aChangeSet name , ' ']]
<br>-                                             ifFalse: [aStream nextPutAll: 'in no change set'].
<br>-                                     aStream nextPutAll: separator]].
<br>      ^ aStream contents!
<br>
<br><br></div></blockquote></div>