Levente Uzonyi uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-ul.159.mcz ==================== Summary ==================== Name: Network-ul.159 Author: ul Time: 1 April 2015, 11:44:21.852 pm UUID: 22d0dece-43ac-4ce7-b81f-9516fccd1843 Ancestors: Network-ul.158 Use CharacterSet's #nonSeparators shared set instead of creating and storing another one in MailAddressTokenizer. Initialize other character sets lazily, and release them during cleanUp. =============== Diff against Network-ul.158 =============== Item was changed: Stream subclass: #MailAddressTokenizer instanceVariableNames: 'cachedToken text pos' + classVariableNames: 'CSNonAtom CSParens CSSpecials' - classVariableNames: 'CSNonAtom CSNonSeparators CSParens CSSpecials' poolDictionaries: '' category: 'Network-RFC822'! !MailAddressTokenizer commentStamp: '<historical>' prior: 0! Divides an address into tokens, as specified in RFC 822. Used by MailAddressParser.! Item was added: + ----- Method: MailAddressTokenizer class>>cleanUp: (in category 'class initialization') ----- + cleanUp: aggressive + + CSParens := CSSpecials := CSNonAtom := nil! Item was removed: - ----- Method: MailAddressTokenizer class>>initialize (in category 'class initialization') ----- - initialize - "Initalize class variables using MailAddressTokenizer initialize" - - | atomChars | - - CSParens := CharacterSet empty. - CSParens addAll: '()'. - - CSSpecials := CharacterSet empty. - CSSpecials addAll: '()<>@,;:\".[]'. - - CSNonSeparators := CharacterSet separators complement. - - - "(from RFC 2822)" - atomChars := CharacterSet empty. - atomChars addAll: ($A to: $Z). - atomChars addAll: ($a to: $z). - atomChars addAll: ($0 to: $9). - atomChars addAll: '!!#$%^''*+-/=?^_`{|}~'. - - CSNonAtom := atomChars complement.! Item was added: + ----- Method: MailAddressTokenizer class>>nonAtomSet (in category 'class initialization') ----- + nonAtomSet + "(from RFC 2822)" + + ^CSNonAtom ifNil: [ + CSNonAtom := CharacterSet new + addAll: ($A to: $Z); + addAll: ($a to: $z); + addAll: ($0 to: $9); + addAll: '!!#$%^''*+-/=?^_`{|}~'; + complement ]! Item was added: + ----- Method: MailAddressTokenizer class>>parenthesesSet (in category 'class initialization') ----- + parenthesesSet + + ^CSParens ifNil: [ CSParens:= CharacterSet newFrom: '()' ]! Item was added: + ----- Method: MailAddressTokenizer class>>specialsSet (in category 'class initialization') ----- + specialsSet + + ^CSSpecials ifNil: [ CSSpecials := CharacterSet newFrom: '()<>@,;:\".[]' ]! Item was changed: ----- Method: MailAddressTokenizer>>nextAtom (in category 'tokenizing') ----- nextAtom | start end | start := pos. + pos := text indexOfAnyOf: self class nonAtomSet startingAt: start ifAbsent: [ text size + 1]. - pos := text indexOfAnyOf: CSNonAtom startingAt: start ifAbsent: [ text size + 1]. end := pos - 1. ^MailAddressToken type: #Atom text: (text copyFrom: start to: end)! Item was changed: ----- Method: MailAddressTokenizer>>nextComment (in category 'tokenizing') ----- nextComment | start nestLevel paren | start := pos. pos := pos + 1. nestLevel := 1. [ nestLevel > 0 ] whileTrue: [ + pos := text indexOfAnyOf: self class parenthesesSet startingAt: pos ifAbsent: [ 0 ]. - pos := text indexOfAnyOf: CSParens startingAt: pos ifAbsent: [ 0 ]. pos = 0 ifTrue: [ self error: 'unterminated comment. ie, more (''s than )''s' ]. paren := self nextChar. paren = $( ifTrue: [ nestLevel := nestLevel + 1 ] ifFalse: [ nestLevel := nestLevel - 1 ]]. ^ MailAddressToken type: #Comment text: (text copyFrom: start to: pos - 1)! Item was changed: ----- Method: MailAddressTokenizer>>nextToken (in category 'tokenizing') ----- nextToken | c | self skipSeparators. c := self peekChar. c ifNil: [ ^nil ]. c = $( ifTrue: [ ^self nextComment ]. c = $" ifTrue: [ ^self nextQuotedString ]. c = $[ ifTrue: [ ^self nextDomainLiteral ]. + (self class specialsSet includes: c) ifTrue: [ ^self nextSpecial ]. - (CSSpecials includes: c) ifTrue: [ ^self nextSpecial ]. ^self nextAtom! Item was changed: ----- Method: MailAddressTokenizer>>skipSeparators (in category 'tokenizing') ----- skipSeparators + pos := text indexOfAnyOf: CharacterSet nonSeparators startingAt: pos ifAbsent: [ text size + 1 ].! - pos := text indexOfAnyOf: CSNonSeparators startingAt: pos ifAbsent: [ text size + 1 ].! |
Free forum by Nabble | Edit this page |