I've just added CharacterArray>>#% to 2.3 and 3.0.
In 3.0 however I also want to change the callers. Could a brave soul help reviewing the attached patch? Paolo * looking for [hidden email]--2004b/smalltalk--devo--2.2--patch-419 to compare with * auto-adding [hidden email]--2004b/smalltalk--devo--2.2--patch-419 to greedy revision library /Users/bonzinip/Archives/revlib * found immediate ancestor revision in library ([hidden email]--2004b/smalltalk--devo--2.2--patch-418) * patching for this revision ([hidden email]--2004b/smalltalk--devo--2.2--patch-419) * comparing to [hidden email]--2004b/smalltalk--devo--2.2--patch-419 M scripts/Package.st M compiler/STFileParser.st M scripts/Getopt.st M blox/gtk/BloxBasic.st M blox/gtk/BloxText.st M examples/Publish.st M kernel/Regex.st M blox/tk/BloxBasic.st M blox/tk/BloxText.st M blox/tk/BloxWidgets.st M browser/ClassBrow.st M browser/ClassHierBrow.st M browser/Inspector.st M browser/test.st M compiler/STDecompiler.st M compiler/STSymTable.st M i18n/Locale.st M java/JavaTranslation.st M kernel/AnsiExcept.st M kernel/Behavior.st M kernel/CStruct.st M kernel/CharArray.st M kernel/Collection.st M kernel/CompildCode.st M kernel/Directory.st M kernel/Float.st M kernel/Object.st M kernel/Semaphore.st M kernel/SeqCollect.st M kernel/VFS.st M net/SMTP.st M net/httpd/FileServer.st M net/httpd/WebServer.st M net/httpd/WikiServer.st M tests/AnsiRun.st M tests/ackermann.st M tests/ary3.st M tests/except.st M tests/hash2.st M tests/lists1.st M tests/matrix.st M tests/prodcons.st M tests/sieve.st M xml/XML.st M xml/XPath.st M xml/XSL.st * modified files --- orig/blox/gtk/BloxBasic.st +++ mod/blox/gtk/BloxBasic.st @@ -575,10 +575,10 @@ getKeyPressEventNames: key ^(keySym size = 1 and: [ keySym first isLetter ]) ifTrue: [ "Use both the lowercase and uppercase variants" - { '<%1KeyPress-%2>' bindWith: mod with: keySym asLowercase. - '<%1KeyPress-%2>' bindWith: mod with: keySym asUppercase } ] + { '<%1KeyPress-%2>' % { mod. keySym asLowercase } . + '<%1KeyPress-%2>' % { mod. keySym asUppercase } } ] ifFalse: [ - { '<%1KeyPress-%2>' bindWith: mod with: keySym } ]! + { '<%1KeyPress-%2>' % { mod. keySym } } ]! translateModifier: mod platform: platform | name | --- orig/blox/gtk/BloxText.st +++ mod/blox/gtk/BloxText.st @@ -851,7 +851,7 @@ tag: name bind: event to: aSymbol of: an to: aSymbol of: anObject parameters: params - prefix: ('%1 tag bind %2' bindWith: self connected with: name) + prefix: ('%1 tag bind %2' % { self connected. name }) ! ! --- orig/blox/tk/BloxBasic.st +++ mod/blox/tk/BloxBasic.st @@ -449,10 +449,10 @@ getKeyPressEventNames: key ^(keySym size = 1 and: [ keySym first isLetter ]) ifTrue: [ "Use both the lowercase and uppercase variants" - { '<%1KeyPress-%2>' bindWith: mod with: keySym asLowercase. - '<%1KeyPress-%2>' bindWith: mod with: keySym asUppercase } ] + { '<%1KeyPress-%2>' % { mod. keySym asLowercase }. + '<%1KeyPress-%2>' % { mod. keySym asUppercase } } ] ifFalse: [ - { '<%1KeyPress-%2>' bindWith: mod with: keySym } ]! + { '<%1KeyPress-%2>' % { mod. keySym } } ]! translateModifier: mod platform: platform | name | @@ -2694,6 +2694,6 @@ asTkImageString "R0lG is `GIF' in Base-64 encoding." ^(self match: 'R0lG*') - ifTrue: [ '{%1}' bindWith: self ] + ifTrue: [ '{%1}' % {self} ] ifFalse: [ self asTkString ] ! ! --- orig/blox/tk/BloxText.st +++ mod/blox/tk/BloxText.st @@ -807,10 +807,8 @@ destroyed from: aPoint to: endPoint ^'%1.%2 %3.%4' - bindWith: aPoint y printString - with: (aPoint x - 1) printString - with: endPoint y printString - with: (endPoint x - 1) printString + % { aPoint y printString. (aPoint x - 1) printString. + endPoint y printString. (endPoint x - 1) printString } ! parseResult @@ -835,7 +833,7 @@ tag: name bind: event to: aSymbol of: an to: aSymbol of: anObject parameters: params - prefix: ('%1 tag bind %2' bindWith: self connected with: name) + prefix: ('%1 tag bind %2' % { self connected. name }) ! widgetType --- orig/blox/tk/BloxWidgets.st +++ mod/blox/tk/BloxWidgets.st @@ -879,8 +879,8 @@ label: value !BButton methodsFor: 'private'! create - self create: ('-highlightthickness 0 -takefocus 1 -command {callback %1 invokeCallback} -font {', self class defaultFont, '}' - bindWith: self asOop printString) + self create: ('-highlightthickness 0 -takefocus 1 -command {callback %1 invokeCallback} -font {%2}' + % { self asOop. self class defaultFont }) ! setInitialSize @@ -3687,8 +3687,7 @@ initialize: parentWidget label := ''. exists := false. primitive := '%1.w%2' - bindWith: self parent container - with: (self asOop printString: 36). + % { self parent container. self asOop printString: 36 }). ! newMenuItemFor: pair notifying: receiver --- orig/browser/ClassBrow.st +++ mod/browser/ClassBrow.st @@ -41,7 +41,7 @@ nil! !ClassBrowser methodsFor: 'initializing'! createTopView - ^BrowserShell new: ('Class Browser on %1' bindWith: startingClass)! + ^BrowserShell new: ('Class Browser on %1' % { startingClass })! openOn: aClass "Create and open a class hierarchy browser on startingClass" --- orig/browser/ClassHierBrow.st +++ mod/browser/ClassHierBrow.st @@ -419,8 +419,7 @@ printHierarchyOf: dict hierarchy: desc s [:each | | template | template := (dict at: each) ifTrue: ['%1%2'] ifFalse: ['%1(%2)']. - string := template bindWith: indent - with: (each nameIn: self currentNamespace). + string := template % { indent. each nameIn: self currentNamespace }. shownClasses at: string put: each. stream nextPut: string. self --- orig/browser/Inspector.st +++ mod/browser/Inspector.st @@ -131,10 +131,10 @@ initFieldListsMenu open | pane | topView := BrowserShell new: ('Inspecting %1%2' - bindWith: (fieldList value isClass + % { fieldList value isClass ifFalse: [ fieldList value class article, ' ' ] - ifTrue: [ '' ]) - with: (fieldList value class nameIn: Namespace current)). + ifTrue: [ '' ]. + fieldList value class nameIn: Namespace current }. topView data: self. topView blox x: 20 @@ -322,7 +322,7 @@ currentFieldValue currentFieldString ^[ self currentFieldValue printString ] on: Error do: [ :ex | ex return: ('[%1 exception raised while printing item]' - bindWith: ex class) ]! + % { ex class }) ]! fieldsSortBlock "nil = use OrderedCollection, else a block to be used as fields' --- orig/browser/test.st +++ mod/browser/test.st @@ -149,7 +149,7 @@ points: p coords: coords dropdownTest ^[ :win || cb name size label | cb := [ - [ label font: ('{%1} %2' bindWith: name text with: size text) ] + [ label font: ('{%1} %2' % { name text. size text }) ] on: ExAll do: [ :sig | sig return ] ]. --- orig/compiler/STDecompiler.st +++ mod/compiler/STDecompiler.st @@ -880,8 +880,8 @@ source primitive names in the decompiled code." ^context method primitive > 0 - ifTrue: [ '<primitive: %1>' bindWith: - (VMPrimitives keyAtValue: context method primitive) asString ] + ifTrue: [ '<primitive: %1>' + % { VMPrimitives keyAtValue: context method primitive } ] ifFalse: [ '' ]! tags: source --- orig/compiler/STFileParser.st +++ mod/compiler/STFileParser.st @@ -280,7 +280,7 @@ next name "Answer a string that represents what the receiver is streaming on" - ^'(%1 %2)' bindWith: self species article with: self species name + ^'(%1 %2)' % { self species article. self species name } ! segmentFrom: startPos to: endPos --- orig/compiler/STSymTable.st +++ mod/compiler/STSymTable.st @@ -209,7 +209,7 @@ declareTemporary: tempName canStore: can ifTrue: [(variables at: symbol) scope < scopes size ifTrue: [stCompiler compileWarning: ('variable ''%1'' shadows another' - bindWith: tempName)] + % { tempName })] ifFalse: [^stCompiler compileError: 'duplicate variable name ', tempName]]. variables at: symbol put: (STVariable --- orig/examples/Publish.st +++ mod/examples/Publish.st @@ -884,7 +884,7 @@ Alphabetic list of classes:'. ('writing documentation into ', fileName, '.htm') displayNl. self publish: each onFile: fileName, '.htm'. aFileStream - nextPutAll: ('<A HREF="%1.htm">%1</A>' bindWith: fileName); + nextPutAll: ('<A HREF="%1.htm">%1</A>' % { fileName }); nl. ]. @@ -989,10 +989,7 @@ Filed out from %1 on %2 %3 --> <TITLE>%4</TITLE> </HEAD> <BODY> -' bindWith: Smalltalk version - with: (now at: 1) printString - with: (now at: 2) printString - with: self className). +' % { Smalltalk version. now at: 1. now at: 2. self className }). self nextPutAll: '<DL><DT><B>Category: '; @@ -1364,7 +1361,7 @@ emitHeader: now @section %1 @clindex %1 -' bindWith: self className). +' % { self className }). self nextPutAll: '@table @b'; nl; --- orig/i18n/Locale.st +++ mod/i18n/Locale.st @@ -384,9 +384,7 @@ id languageDirectory: rootDirectory "Answer the directory where data files for the current language reside, given the root directory of the locale data." - ^'%1/%2' - bindWith: rootDirectory - with: self language! + ^'%1/%2' % { rootDirectory. self language }! languageDirectory "Answer the directory where data files for the current language reside." @@ -396,10 +394,7 @@ territoryDirectory: rootDirectory "Answer the directory where data files for the current language, specific to the territory, reside, given the root directory of the locale data." - ^'%1/%2_%3' - bindWith: rootDirectory - with: self language - with: self territory! + ^'%1/%2_%3' % { rootDirectory. self language. self territory }! territoryDirectory "Answer the directory where data files for the current language, --- orig/java/JavaTranslation.st +++ mod/java/JavaTranslation.st @@ -3756,7 +3756,7 @@ makeDirtyBlock ! popIntoArray: anIndex - stream tab; nextPutAll: ('pop and store into array element[%1]' bindWith: anIndex); nl + stream tab; nextPutAll: ('pop and store into array element[%1]' % { anIndex }); nl ! popJumpIfFalseTo: destination @@ -3796,7 +3796,7 @@ pushGlobal: anObject ! pushInstVar: anIndex - stream tab; nextPutAll: ('push Instance Variable[%1]' bindWith: anIndex); nl + stream tab; nextPutAll: ('push Instance Variable[%1]' % { anIndex }); nl ! pushLiteral: anObject @@ -3805,7 +3805,7 @@ pushLiteral: anObject (printString isNil or: [ printString size > 40 ]) ifTrue: [ printString := anObject isClass ifTrue: [ anObject name displayString ] - ifFalse: [ '%1 %2' bindWith: anObject class article with: anObject class name displayString ]]. + ifFalse: [ '%1 %2' % { anObject class article. anObject class name } ]]. stream tab; nextPutAll: 'push '; nextPutAll: printString; nl ! @@ -3815,11 +3815,11 @@ pushSelf ! pushTemporary: anIndex - stream tab; nextPutAll: ('push Temporary[%1]' bindWith: anIndex); nl + stream tab; nextPutAll: ('push Temporary[%1]' % { anIndex }); nl ! pushTemporary: anIndex outer: scopes - stream tab; nextPutAll: ('push Temporary[%1] from outer context #%2' bindWith: anIndex with: scopes); nl + stream tab; nextPutAll: ('push Temporary[%1] from outer context #%2' % { anIndex. scopes }); nl ! returnFromContext @@ -3831,7 +3831,7 @@ returnFromMethod ! send: aSymbol numArgs: anInteger - stream tab; nextPutAll: ('send %2 args message %1' bindWith: aSymbol storeString with: anInteger); nl + stream tab; nextPutAll: ('send %2 args message %1' % { aSymbol storeString. anInteger }); nl ! storeGlobal: anObject @@ -3839,19 +3839,19 @@ storeGlobal: anObject ! storeInstVar: anIndex - stream tab; nextPutAll: ('store into Instance Variable[%1]' bindWith: anIndex); nl + stream tab; nextPutAll: ('store into Instance Variable[%1]' % { anIndex }); nl ! storeTemporary: anIndex - stream tab; nextPutAll: ('store into Temporary[%1]' bindWith: anIndex); nl + stream tab; nextPutAll: ('store into Temporary[%1]' % { anIndex }); nl ! storeTemporary: anIndex outer: scopes - stream tab; nextPutAll: ('store into Temporary[%1] from outer context #%2' bindWith: anIndex with: scopes); nl + stream tab; nextPutAll: ('store into Temporary[%1] from outer context #%2' % { anIndex. scopes }); nl ! superSend: aSymbol numArgs: anInteger - stream tab; nextPutAll: ('send %2 args message %1 to super' bindWith: aSymbol with: anInteger); nl + stream tab; nextPutAll: ('send %2 args message %1 to super' % { aSymbol. anInteger }); nl ! ! !TargetInstructionPrinter methodsFor: 'decoding bytecodes'! --- orig/kernel/AnsiExcept.st +++ mod/kernel/AnsiExcept.st @@ -877,8 +877,7 @@ description messageText "Answer an exception's message text." - ^'%1: %2 element(s) missing' bindWith: self basicMessageText - with: self remainingCount! + ^'%1: %2 element(s) missing' % { self basicMessageText. self remainingCount }! remainingCount "Answer the number of items that were to be read." @@ -913,7 +912,7 @@ description messageText "Answer an exception's message text." - ^'Invalid value %1: %2' bindWith: self value with: self basicMessageText! + ^'Invalid value %1: %2' % { self value. self basicMessageText }! value "Answer the object that was found to be invalid." @@ -927,9 +926,7 @@ value: anObject messageText "Answer an exception's message text." - ^'Invalid argument %1: %2' - bindWith: self value - with: self basicMessageText! ! + ^'Invalid argument %1: %2' % { self value. self basicMessageText }! ! !SystemExceptions.AlreadyDefined methodsFor: 'accessing'! @@ -994,8 +991,7 @@ description messageText "Answer an exception's message text." - ^'Invalid index %1: %2' - bindWith: self value with: self basicMessageText! + ^'Invalid index %1: %2' % { self value. self basicMessageText }! collection "Answer the collection that triggered the error" @@ -1062,7 +1058,7 @@ messageText self validClasses isNil ifTrue: [ ^'Invalid argument ', self value printString ]. ^'Invalid argument %1: must be %2' - bindWith: self value with: self validClassesString! + % { self value. self validClassesString }! validClasses "Answer the list of classes whose instances would have been valid." @@ -1255,9 +1251,8 @@ signalOn: selector useInstead: aSymbol messageText "Answer an exception's message text." - ^'%1, use %2 instead' - bindWith: self basicMessageText - with: self suggestedSelector storeString! + ^'%1, use %2 instead' % + { self basicMessageText. self suggestedSelector storeString }! selector "Answer which selector was sent." --- orig/kernel/Behavior.st +++ mod/kernel/Behavior.st @@ -101,7 +101,7 @@ createGetMethod: what default: value ^self compile: ('%1 "Answer the receiver''s %1. Its default value is %2" %1 isNil ifTrue: [ %1 := %2 ]. - ^%1' bindWith: what with: value) + ^%1' % { what. value }) ! createGetMethod: what @@ -109,7 +109,7 @@ createGetMethod: what ^self compile: ('%1 "Answer the receiver''s %1" - ^%1' bindWith: what) + ^%1' % { what }) ! createSetMethod: what @@ -120,7 +120,7 @@ createSetMethod: what ^self compile: ('%1: %2 "Set the receiver''s %1 to %2" - %1 := %2' bindWith: what with: parameter) + %1 := %2' % { what. parameter }) ! defineAsyncCFunc: cFuncNameString @@ -134,9 +134,7 @@ defineAsyncCFunc: cFuncNameString code := ( '%1 <asyncCCall: ''%2'' args: #%3>') - bindWith: selectorAndArgs - with: cFuncNameString - with: argsArray printString. + % { selectorAndArgs. cFuncNameString. argsArray printString }. ^self compile: code ifError: [ :file :line :error | code error: error ]. ! @@ -153,10 +151,8 @@ defineCFunc: cFuncNameString code := ( '%1 <cCall: ''%2'' returning: %3 args: #%4>') - bindWith: selectorAndArgs - with: cFuncNameString - with: returnTypeSymbol storeString - with: argsArray printString. + % { selectorAndArgs. cFuncNameString. returnTypeSymbol storeString. + argsArray printString }. ^self compile: code ifError: [ :file :line :error | code error: error ]. ! @@ -1123,7 +1119,7 @@ name "Answer the class name; this prints to the name of the superclass enclosed in braces. This class name is used, for example, to print the receiver." - ^'{%1}' bindWith: self asClass printString + ^'{%1}' % { self asClass } ! ! --- orig/kernel/CStruct.st +++ mod/kernel/CStruct.st @@ -210,8 +210,7 @@ computeTypeString: type block: aBlock type isSymbol ifFalse: [ typeString := '#{%1} value type' - bindWith: ((type value nameIn: Namespace current) - copyReplaceAll: $ with: $.). + % { type value nameIn: Namespace current }. ^aBlock value: type value value: typeString. ]. --- orig/kernel/CharArray.st +++ mod/kernel/CharArray.st @@ -305,14 +305,14 @@ subStrings: aCharacter bindWith: s1 "Answer the receiver with every %1 replaced by the displayString of s1" - ^self bindWithArguments: { s1 } + ^self % { s1 } ! bindWith: s1 with: s2 "Answer the receiver with every %1 or %2 replaced by s1 or s2, respectively. s1 and s2 are `displayed' (i.e. their displayString is used) upon replacement." - ^self bindWithArguments: { s1. s2 } + ^self % { s1. s2 } ! bindWith: s1 with: s2 with: s3 @@ -320,7 +320,7 @@ bindWith: s1 with: s2 with: s3 respectively. s1, s2 and s3 are `displayed' (i.e. their displayString is used) upon replacement." - ^self bindWithArguments: { s1. s2. s3 } + ^self % { s1. s2. s3 } ! bindWith: s1 with: s2 with: s3 with: s4 @@ -328,7 +328,7 @@ bindWith: s1 with: s2 with: s3 with: s4 or s4, respectively. s1, s2, s3 and s4 are `displayed' (i.e. their displayString is used) upon replacement." - ^self bindWithArguments: { s1. s2. s3. s4 } + ^self % { s1. s2. s3. s4 } ! bindWithArguments: anArray @@ -338,6 +338,16 @@ bindWithArguments: anArray %<trueString|falseString>n is replaced with one of the two strings depending on the n-th element of anArray being true or false." + ^self % anArray +! + +% anArray + "Answer the receiver with every %n (1<=n<=9) replaced by the n-th element + of anArray. The replaced elements are `displayed' (i.e. their + displayString is used). In addition, the special pattern + %<trueString|falseString>n is replaced with one of the two + strings depending on the n-th element of anArray being true or false." + | result wasPercent pattern char ifTrue ifFalse | result := WriteStream on: (self copyEmpty: self size + 20). wasPercent := false. --- orig/kernel/Collection.st +++ mod/kernel/Collection.st @@ -519,8 +519,8 @@ inspect output := [ object printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: object class article - with: object class name asString) ]. + % { object class article. + object class name asString }) ]. Transcript nextPutAll: ' '; nextPutAll: (instVars at: i); @@ -534,8 +534,8 @@ inspect output := [ obj printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: obj class article - with: obj class name asString) ]. + % { obj class article. + obj class name asString }) ]. Transcript nextPutAll: ' '; nextPutAll: output; --- orig/kernel/CompildCode.st +++ mod/kernel/CompildCode.st @@ -394,8 +394,8 @@ inspect output := [ object printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: object class article - with: object class name asString) ]. + % { object class article. + object class name asString }) ]. Transcript nextPutAll: ' '; nextPutAll: (instVars at: i); @@ -727,31 +727,31 @@ invalidOpcode: aStream aStream tab; nextPutAll: 'invalid opcode'; nl! pushInstVar: anIndex with: aStream - aStream tab; nextPutAll: ('push Instance Variable[%1]' bindWith: anIndex); nl! + aStream tab; nextPutAll: ('push Instance Variable[%1]' % { anIndex }); nl! storeInstVar: anIndex with: aStream - aStream tab; nextPutAll: ('store into Instance Variable[%1]' bindWith: anIndex); nl! + aStream tab; nextPutAll: ('store into Instance Variable[%1]' % { anIndex }); nl! popIntoArray: anIndex with: aStream - aStream tab; nextPutAll: ('pop and store into array element[%1]' bindWith: anIndex); nl! + aStream tab; nextPutAll: ('pop and store into array element[%1]' % { anIndex }); nl! pushTemporary: anIndex outer: scopes with: aStream - aStream tab; nextPutAll: ('push Temporary[%1] from outer context #%2' bindWith: anIndex with: scopes); nl! + aStream tab; nextPutAll: ('push Temporary[%1] from outer context #%2' % { anIndex. scopes }); nl! storeTemporary: anIndex outer: scopes with: aStream - aStream tab; nextPutAll: ('store into Temporary[%1] from outer context #%2' bindWith: anIndex with: scopes); nl! + aStream tab; nextPutAll: ('store into Temporary[%1] from outer context #%2' % { anIndex. scopes }); nl! pushTemporary: anIndex with: aStream - aStream tab; nextPutAll: ('push Temporary[%1]' bindWith: anIndex); nl! + aStream tab; nextPutAll: ('push Temporary[%1]' % { anIndex }); nl! storeTemporary: anIndex with: aStream - aStream tab; nextPutAll: ('store into Temporary[%1]' bindWith: anIndex); nl! + aStream tab; nextPutAll: ('store into Temporary[%1]' % { anIndex }); nl! pushLiteral: anObject with: aStream | printString | printString := anObject printString. (anObject isClass not and: [ printString size > 30 ]) - ifTrue: [ printString := '%1 %2' bindWith: anObject class article with: anObject class name asString ]. + ifTrue: [ printString := '%1 %2' % { anObject class article. anObject class name asString } ]. aStream tab; nextPutAll: 'push '; nextPutAll: printString; nl! @@ -795,10 +795,10 @@ jumpTo: destination with: aStream aStream tab; nextPutAll: 'jump to '; print: destination; nl! superSend: aSymbol numArgs: anInteger with: aStream - aStream tab; nextPutAll: ('send %2 args message %1 to super' bindWith: aSymbol with: anInteger); nl! + aStream tab; nextPutAll: ('send %2 args message %1 to super' % { aSymbol. anInteger }); nl! send: aSymbol numArgs: anInteger with: aStream - aStream tab; nextPutAll: ('send %2 args message %1' bindWith: aSymbol with: anInteger); nl! + aStream tab; nextPutAll: ('send %2 args message %1' % { aSymbol. anInteger }); nl! bytecodeIndex: byte with: aStream "Private - Print the bytecode index for byte" --- orig/kernel/Directory.st +++ mod/kernel/Directory.st @@ -120,17 +120,14 @@ append: fileName to: directory ifTrue: [ (fileName at: 1) isPathSeparator ifTrue: [ ^(directory size >= 2 and: [ (directory at: 2) = $: ]) - ifTrue: [ '%1:%2' bindWith: directory first with: fileName ] + ifTrue: [ '%1:%2' % { directory first. fileName } ] ifFalse: [ fileName ] ]. (fileName size >= 2 and: [ (fileName at: 2) = $: ]) ifTrue: [ ^fileName ] ]. ^(directory at: directory size) isPathSeparator ifTrue: [ directory, fileName ] - ifFalse: [ '%1%2%3' - bindWith: directory - with: self pathSeparator - with: fileName ] + ifFalse: [ directory, self pathSeparatorString, fileName ] ! pathSeparator --- orig/kernel/Float.st +++ mod/kernel/Float.st @@ -420,14 +420,11 @@ printOn: aStream special: whatToPrintArr "First, take care of the easy cases." self isNaN ifTrue: [ - ^aStream nextPutAll: - ((whatToPrintArray at: 3) bindWith: self class) ]. + ^aStream nextPutAll: ((whatToPrintArray at: 3) % { self class }) ]. self = self class infinity ifTrue: [ - ^aStream nextPutAll: - ((whatToPrintArray at: 1) bindWith: self class) ]. + ^aStream nextPutAll: ((whatToPrintArray at: 1) % { self class }) ]. self = self class negativeInfinity ifTrue: [ - ^aStream nextPutAll: - ((whatToPrintArray at: 2) bindWith: self class) ]. + ^aStream nextPutAll: ((whatToPrintArray at: 2) % { self class }) ]. "We deal only with positive values." me := self abs. --- orig/kernel/Object.st +++ mod/kernel/Object.st @@ -598,8 +598,8 @@ inspect output := [ object printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: object class article - with: object class name asString) ]. + % { object class article. + object class name asString }) ]. i <= instVars size ifTrue: [ --- orig/kernel/Regex.st +++ mod/kernel/Regex.st @@ -558,7 +558,7 @@ copyFrom: from to: to replacingRegex: pa "Returns the substring of the receiver between from and to. If pattern has a match in that part of the string, the match is replaced with str after substituting %n sequences with the - captured subexpressions of the match (as in #bindWithArguments:)." + captured subexpressions of the match (as in #%)." | regs beg end repl res | regs := self searchRegex: pattern from: from to: to. @@ -566,7 +566,7 @@ copyFrom: from to: to replacingRegex: pa ifTrue: [ beg := regs from. end := regs to. - repl := str bindWithArguments: regs. + repl := str % regs. res := self species new: (to - from) - (end - beg) + repl size. res replaceFrom: 1 to: beg - from with: self startingAt: from. res replaceFrom: beg - from + 1 to: beg - from + repl size with: repl. @@ -579,7 +579,7 @@ copyFrom: from to: to replacingRegex: pa copyReplacingRegex: pattern with: str "Returns the receiver after replacing the first match of pattern (if any) with str. %n sequences present in str are substituted with the - captured subexpressions of the match (as in #bindWithArguments:)." + captured subexpressions of the match (as in #%)." ^self copyFrom: 1 to: self size replacingRegex: pattern with: str ! @@ -588,7 +588,7 @@ copyFrom: from to: to replacingAllRegex: "Returns the substring of the receiver between from and to. Any match of pattern in that part of the string is replaced with str after substituting %n sequences with the captured subexpressions - of the match (as in #bindWithArguments:)." + of the match (as in #%)." | res idx regex beg end regs | regex := pattern asRegex. @@ -601,7 +601,7 @@ copyFrom: from to: to replacingAllRegex: beg := regs from. end := regs to. res next: beg - idx putAll: self startingAt: idx. - res nextPutAll: (str bindWithArguments: regs). + res nextPutAll: (str % regs). idx := end + 1. beg > end ifTrue: [ res nextPut: (self at: idx). idx := idx + 1 ]. idx > self size ifTrue: [ ^res contents ]. @@ -614,7 +614,7 @@ copyFrom: from to: to replacingAllRegex: copyReplacingAllRegex: pattern with: str "Returns the receiver after replacing all the matches of pattern (if any) with str. %n sequences present in str are substituted with the - captured subexpressions of the match (as in #bindWithArguments:)." + captured subexpressions of the match (as in #%)." ^self copyFrom: 1 to: self size replacingAllRegex: pattern with: str ! --- orig/kernel/Semaphore.st +++ mod/kernel/Semaphore.st @@ -103,9 +103,7 @@ printOn: aStream aStream nextPutAll: self class name; nextPutAll: ('(%1: %<free|held>2, %3 %<available signals|waiting processes>2)' - bindWith: self name printString - with: self signals > 0 - with: self signals abs)! ! + % { self name printString. self signals > 0. self signals abs })! ! !Semaphore methodsFor: 'private'! --- orig/kernel/SeqCollect.st +++ mod/kernel/SeqCollect.st @@ -77,8 +77,8 @@ inspect output := [ object printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: object class article - with: object class name asString) ]. + % { object class article. + object class name asString }) ]. Transcript nextPutAll: ' '; nextPutAll: (instVars at: i); @@ -92,8 +92,8 @@ inspect output := [ obj printString ] on: Error do: [ :ex | ex return: ('%1 %2' - bindWith: obj class article - with: obj class name asString) ]. + % { obj class article. + obj class name asString }) ]. Transcript nextPutAll: ' ['; print: i; --- orig/kernel/VFS.st +++ mod/kernel/VFS.st @@ -680,7 +680,7 @@ vfsFor: file name: fsName subPath: subPa command := self fileTypes at: fsName. temp := FileStream openTemporaryFile: Directory temporary, '/vfs'. - Smalltalk system: (command bindWith: file with: temp name). + Smalltalk system: (command % { file. temp name }). ^self new name: file realFileName: temp name! ! @@ -874,10 +874,7 @@ vfsFor: file name: fsName createDir: dirName "Create a subdirectory of the receiver, naming it dirName." - Smalltalk system: command, - (' mkdir %1 %2' - bindWith: self name - with: dirName)! + Smalltalk system: ('%1 mkdir %2 %3' % { command. self name. dirName })! do: aBlock "Evaluate aBlock once for each file in the directory represented by the @@ -897,11 +894,8 @@ extractMember: anArchiveMemberHandler ^extractedFiles at: anArchiveMemberHandler ifAbsentPut: [ | temp | temp := FileStream openTemporaryFile: Directory temporary, '/vfs'. - Smalltalk system: command, - (' copyout %1 %2 %3' - bindWith: self name - with: anArchiveMemberHandler name - with: temp name). + Smalltalk system: ('%1 copyout %2 %3 %4' + % { command. self name. anArchiveMemberHandler name. temp name }). File fullNameFor: temp name ]! @@ -948,26 +942,17 @@ removeMember: anArchiveMemberHandler ifTrue: [ 'rmdir' ] ifFalse: [ 'rm' ]. - Smalltalk system: command, - (' %1 %2 %3' - bindWith: subcmd - with: self name - with: anArchiveMemberHandler name)! + Smalltalk system: ('%1 %2 %3 %4' + % { command. subcmd. self name. anArchiveMemberHandler name. })! updateMember: anArchiveMemberHandler "Update the member represented by anArchiveMemberHandler by copying the file into which it was extracted back to the archive." - | temp | - temp := FileStream openTemporaryFile: Directory temporary, '/vfs'. - Smalltalk system: command, - (' copyin %1 %2 %3' - bindWith: self name - with: anArchiveMemberHandler name - with: anArchiveMemberHandler realFileName). - - ^temp name! + Smalltalk system: ('%1 copyin %2 %3 %4' + % { command. self name. anArchiveMemberHandler name. + anArchiveMemberHandler realFileName })! refresh "Extract the directory listing from the archive" --- orig/net/SMTP.st +++ mod/net/SMTP.st @@ -83,9 +83,7 @@ example2Host: host "self example2Host: 'localhost'." | user message client | - user := '%1@%2' - bindWith: (Smalltalk getenv: 'USER') - with: IPAddress localHostName. + user := '%1@%2' % { Smalltalk getenv: 'USER'. IPAddress localHostName }. message := MIME.MimeEntity readFrom: ('From: ', user, ' @@ -106,9 +104,7 @@ exampleHost: host "self exampleHost: 'localhost'." | user message client | - user := '%1@%2' - bindWith: (Smalltalk getenv: 'USER') - with: IPAddress localHostName. + user := '%1@%2' % { Smalltalk getenv: 'USER'. IPAddress localHostName }. message := MIME.MimeEntity readFrom: ('From: ', user, ' To: ', user, ' --- orig/net/httpd/FileServer.st +++ mod/net/httpd/FileServer.st @@ -678,9 +678,7 @@ contentLength !MultiRangeResponse methodsFor: 'caching'! getBoundary - ^'------%1-!-GST-!-%2' - bindWith: Time secondClock printString - with: Time millisecondClock printString! + ^'------%1-!-GST-!-%2' % { Time secondClock. Time millisecondClock }! mimeType "Cache the MIME type as computed by the FileResponse implementation" --- orig/net/httpd/WebServer.st +++ mod/net/httpd/WebServer.st @@ -1138,7 +1138,7 @@ authorizer: aString authorizer := aString! challengeFor: aServlet - ^'Basic realm="%1"' bindWith: aServlet name! + ^'Basic realm="%1"' % { aServlet name }! authorize: aRequest in: aServlet ifAuthorized: aBlock ^(self authorize: aRequest) --- orig/net/httpd/WikiServer.st +++ mod/net/httpd/WikiServer.st @@ -1276,10 +1276,9 @@ sendBody emitMatchList self findMatches. referringPages isEmpty ifTrue: [ ^self emitNoMatches ]. - self heading: [self << ((referringPages size = 1 - ifTrue: ['There is 1 reference to the phrase:'] - ifFalse: ['There are %1 references to the phrase:']) - bindWith: referringPages size printString)]. + self heading: [ + self << ('There %<is|are>2 %1 reference%<|s>2 to the phrase:' + % { referringPages size. referringPages size = 1 })]. self << '<I> ...'; << self searchString; << '...</I>'; lineBreak. self << '<UL>'; nl. referringPages do: [:each | self listItem: [self linkToPage: each]]. --- orig/scripts/Getopt.st +++ mod/scripts/Getopt.st @@ -40,5 +40,5 @@ Getopt o := opt ifNil: [ '' ]. pat := o isString ifTrue: [ '--%1 %2' ] ifFalse: [ '-%1 %2' ]. a := arg ifNil: [ '' ]. - (pat bindWith: o with: a) displayNl ] + (pat % { o. a }) displayNl ] ifError: [ 'ERROR' displayNl ] --- orig/scripts/Package.st +++ mod/scripts/Package.st @@ -98,30 +98,25 @@ Kernel.PackageDirectories subclass: Pack File extend [ emitRemove [ - ('rm -f %1' bindWith: self) displayNl + ('rm -f %1' % { self }) displayNl ] emitSymlink: dest [ self isDirectory ifTrue: [ ^(Directory name: dest) emitMkdir ]. - - ('$LN_S -f %1 %2' - bindWith: self - with: (File name: dest)) displayNl + ('$LN_S -f %1 %2' % { self. File name: dest }) displayNl ] emitInstall: dest [ | mode | mode := self isExecutable ifTrue: [ 8r755 ] ifFalse: [ 8r644 ]. ('$INSTALL -m %1 %2 %3' - bindWith: (mode printString: 8) - with: self - with: (File name: dest)) displayNl + % { mode printString: 8. self. File name: dest }) displayNl ] ] Directory extend [ emitMkdir [ - ('$mkdir_p %1' bindWith: self) displayNl + ('$mkdir_p %1' % { self }) displayNl ] ] --- orig/tests/AnsiRun.st +++ mod/tests/AnsiRun.st @@ -35,7 +35,7 @@ Transcript message: stdout -> #nextPutAl Smalltalk arguments do: [ :each || results | results := (Smalltalk at: each asSymbol) suite run. - Transcript showCr: ('%1: %2' bindWith: each with: results printString). + Transcript showCr: ('%1: %2' % { each. results }). results failureCount > 0 ifTrue: [ results failures printNl ]. results errorCount > 0 ifTrue: [ results errors printNl ]. results correctCount < results runCount ifTrue: [ ObjectMemory quit: 1 ] --- orig/tests/ackermann.st +++ mod/tests/ackermann.st @@ -41,6 +41,6 @@ Eval [ ifTrue: [ 4 ] ifFalse: [ Smalltalk arguments first asInteger ]. - ('Ack(3,%1): %2' bindWith: n with: (3 ack: n)) displayNl + ('Ack(3,%1): %2' % { n. (3 ack: n) }) displayNl ] --- orig/tests/ary3.st +++ mod/tests/ary3.st @@ -38,5 +38,5 @@ Eval [ 1000 timesRepeat: [ n to: 1 by: -1 do: [ :i | y at: i put: (y at: i) + (x at: i) ] ]. - ('%1 %2' bindWith: y first with: y last) displayNl + ('%1 %2' % { y first. y last }) displayNl ] --- orig/tests/except.st +++ mod/tests/except.st @@ -72,6 +72,6 @@ Eval [ ifFalse: [ 1 max: Smalltalk arguments first asInteger ]. 1 to: n do: [ :each | each someFunction ]. - ('Exceptions: HI=%1 / LO=%2' - bindWith: HiException count with: LoException count) displayNl + ('Exceptions: HI=%1 / LO=%2' % { HiException count. LoException count }) + displayNl ] --- orig/tests/hash2.st +++ mod/tests/hash2.st @@ -43,8 +43,9 @@ Eval [ hash1 keysAndValuesDo: [ :k :v | hash2 at: k put: (hash2 at: k ifAbsent: [0]) + v ]]. - ('%1 %2 %3 %4' bindWith: (hash1 at: 'foo_1') - with: (hash1 at: 'foo_9999') - with: (hash2 at: 'foo_1') - with: (hash2 at: 'foo_9999')) displayNl + ('%1 %2 %3 %4' % { + hash1 at: 'foo_1'. + hash1 at: 'foo_9999'. + hash2 at: 'foo_1'. + hash2 at: 'foo_9999' }) displayNl ] --- orig/tests/lists1.st +++ mod/tests/lists1.st @@ -36,7 +36,7 @@ SmallInteger extend [ [ a isEmpty ] whileFalse: [ b addLast: a removeLast ]. - ('%1 %2' bindWith: (b at: 1) with: (b at: 2)) displayNl. + ('%1 %2' % { b at: 1. b at: 2 }) displayNl. b := b reverse. (b includes: 0) printNl. @@ -56,7 +56,7 @@ SmallInteger extend [ sum printNl. a := a, b. - ('%1 %2' bindWith: a size with: a last) displayNl + ('%1 %2' % { a size. a last }) displayNl ] ] --- orig/tests/matrix.st +++ mod/tests/matrix.st @@ -77,7 +77,9 @@ Eval [ m1 := Array newMatrix: size columns: size. m2 := Array newMatrix: size columns: size. n timesRepeat: [ mm := m1 mmult: m2 ]. - ('%1 %2 %3 %4' bindWith: (mm atXY: 1@1) - with: (mm atXY: 3@4) with: (mm atXY: 4@3) - with: (mm atXY: 5@5)) displayNl + ('%1 %2 %3 %4' % { + mm atXY: 1@1. + mm atXY: 3@4. + mm atXY: 4@3. + mm atXY: 5@5 }) displayNl ] --- orig/tests/prodcons.st +++ mod/tests/prodcons.st @@ -41,5 +41,5 @@ Eval [ join wait. join wait. - ('%1 %2' bindWith: produced with: consumed) displayNl + ('%1 %2' % { produced. consumed }) displayNl ] --- orig/tests/sieve.st +++ mod/tests/sieve.st @@ -44,5 +44,5 @@ Eval [ count := count + 1 ]]. ]. - ('Count: %1' bindWith: count) displayNl + ('Count: %1' % { count }) displayNl ] --- orig/xml/XML.st +++ mod/xml/XML.st @@ -1739,7 +1739,7 @@ definition: aPattern definition := aPattern! description - ^'an <%1> element' bindWith: tag! + ^'an <%1> element' % { tag }! elementNamed: elementName | list | @@ -2076,8 +2076,7 @@ completeValidationAgainst: aParser ndata isNil ifFalse: [aParser dtd notationAt: ndata ifAbsent: [aParser invalid: ('Unparsed entity "%1" uses an undeclared notation "%2"' - bindWith: name - with: ndata)]]! ! + % { name. ndata })]]! ! !SAXDriver methodsFor: 'other'! @@ -2692,7 +2691,7 @@ normalizeFor: aParser ifFalse: [aParser malformed: 'Incomplete translation']. (self duplicatesNeedTested and: [t hasDuplicatesInFollowSet]) ifTrue: [aParser warn: ('Nondeterministic content model %1' - bindWith: self printString)]. + % { self })]. done add: t. t followSet do: [:t1 | (done includes: t1) ifFalse: [list add: t1]]]. @@ -2854,7 +2853,7 @@ named: aName !NamePattern methodsFor: 'accessing'! description - ^'<%1>' bindWith: name! + ^'<%1>' % { name }! name ^name! ! @@ -3041,7 +3040,7 @@ next large values of ch. If primitive failure code can not be trusted to do this, then the bounds check would have to be added back." (ch isNil or: [(CharacterClasses at: ch asInteger + 1) > 0]) - ifFalse: [parser errorHandler fatalError: (BadCharacterSignal new messageText:('A character with Unicode value %1 is not legal' bindWith: ch asInteger))]. + ifFalse: [parser errorHandler fatalError: (BadCharacterSignal new messageText:('A character with Unicode value %1 is not legal' % { ch asInteger }))]. ^ch! skip: n @@ -3517,8 +3516,7 @@ hasExpanded: anEntity [s == nil] whileFalse: [s entity == anEntity ifTrue: [self malformed: ('The %1 entity "%2" invokes itself recursively' - bindWith: anEntity entityType - with: anEntity name)]. + % { anEntity entityType. anEntity name })]. s := s nextLink]. ^false! @@ -3918,7 +3916,7 @@ PERef: refType exp := self dtd parameterEntityAt: nm. exp == nil ifTrue: [self warn: ('The parameter entity "%1" has not been defined' - bindWith: nm)]. + % { nm })]. exp == nil ifTrue: [self isValidating ifTrue: @@ -4060,7 +4058,7 @@ charEntity: data startedIn: str1 large values of ch. If primitive failure code can not be trusted to do this, then the bounds check would have to be added back." (CharacterClasses at: n + 1) = 0 - ifTrue: [sax fatalError: (BadCharacterSignal new messageText:('A character with Unicode value %1 is not legal' bindWith: n))]. + ifTrue: [sax fatalError: (BadCharacterSignal new messageText:('A character with Unicode value %1 is not legal' % { n }))]. data nextPut: (Character value: n). self getNextChar! @@ -4071,7 +4069,7 @@ closeTag: tag self skipSpace. self mustFind: '>'. nm = tag - ifFalse: [self malformed: ('The close tag for %1 was not found' bindWith: tag asString)]. + ifFalse: [self malformed: ('The close tag for %1 was not found' % { tag asString })]. sax endElement: nm namespace localName: nm type qName: nm asString. elementStack last definesNamespaces ifTrue: [elementStack last namespaces @@ -4176,7 +4174,7 @@ elementContent: tag openedIn: str braceCount := 0. buffer reset. [hereChar == nil - ifTrue: [self malformed: ('The end tag for <%1> was expected' bindWith: tag)]. + ifTrue: [self malformed: ('The end tag for <%1> was expected' % { tag })]. hereChar == $< ifTrue: [braceCount := 0. @@ -4239,7 +4237,7 @@ generalEntityInText: str canBeExternal: exp == nil ifTrue: [msg := 'The general entity "%1" has not been defined' - bindWith: nm. + % { nm }. self isValidating ifTrue: [self invalid: msg] ifFalse: [self warn: msg]. @@ -4270,7 +4268,7 @@ popTag self isValidating ifTrue: [elementStack last canTerminate - ifFalse: [self invalid: ('One of %1 was expected, but none was found' bindWith: elementStack last followSetDescription)]]. + ifFalse: [self invalid: ('One of %1 was expected, but none was found' % { elementStack last followSetDescription })]]. elementStack removeLast.! pushNewTag: nm @@ -4287,13 +4285,13 @@ pushNewTag: nm types == nil ifTrue: [self invalid: ('"%1" is not permitted at this point in the "%2" node' - bindWith: nm asString - with: elm tag asString)]. + % { nm asString. + elm tag asString })]. elm types: types]. elementStack addLast: (ElementContext new tag: nm). p := self dtd elementFor: nm from: self. p == nil - ifTrue: [self invalid: ('Using a tag (%1) without declaring it is not permitted' bindWith: nm asString)]. + ifTrue: [self invalid: ('Using a tag (%1) without declaring it is not permitted' % { nm asString })]. elementStack last type: p] ifFalse: [elementStack addLast: (ElementContext new tag: nm)]! @@ -4357,7 +4355,7 @@ attType 'ENTITY' 'ENTITIES' 'NMTOKEN' 'NMTOKENS'). (all includes: nm) - ifFalse: [self malformed: ('One of %1 was expected, but none was found' bindWith: all storeString)]. + ifFalse: [self malformed: ('One of %1 was expected, but none was found' % { all })]. type := #(#{NOTATION_AT} #{CDATA_AT} #{ID_AT} #{IDREF_AT} #{IDREFS_AT} #{ENTITY_AT} #{ENTITIES_AT} @@ -4586,7 +4584,7 @@ checkReservedAttributes: nm type: type v ifFalse: [self malformed: 'xml:space must have a value of "preserve" or "default"']].! illegalLanguageCode: value - self malformed: ('Illegal value (%1) for xml:lang' bindWith: value)! + self malformed: ('Illegal value (%1) for xml:lang' % { value })! isValidName: aTag aTag size = 0 ifTrue: [^false]. @@ -4615,7 +4613,7 @@ processAttributes: nm attributes addLast: (self attributeFor: nm). (attributes collect: [:i | i tag asString]) asSet size = attributes size ifFalse: [self malformed: ('The attribute "%1" was used twice in this element''s tag' - bindWith: attributes last tag asString)]]. + % { attributes last tag asString })]]. self isValidating ifTrue: [attributes := self validateAttributes: attributes for: nm]. attributes := self resolveNamespaces: attributes. @@ -4642,7 +4640,7 @@ validateAttributes: attributes for: tag attributeList do: [:i | (attr includesKey: i key asString) ifFalse: [self invalid: ('the attribute %1 was not defined in the DTD' - bindWith: i key)]]. + % { i key })]]. attr do: [:adef | | a | a := attributeList detect: [:at | at key isLike: adef name] ifNone: []. a == nil @@ -4654,8 +4652,8 @@ validateAttributes: attributes for: tag (Attribute name: adef name value: adef default)] ifFalse: [adef isRequired ifTrue: [self invalid: ('"%1" elements are required to have a "%2" attribute' - bindWith: tag asString - with: adef name asString)]]] + % { tag asString. + adef name asString })]]] ifFalse: [adef validateValueOf: a for: self]]. ^attributeList size = 0 ifTrue: [nil] @@ -4665,12 +4663,12 @@ validateAttributes: attributes for: tag checkUnresolvedIDREFs (self isValidating and: [unresolvedIDREFs isEmpty not]) - ifTrue: [self invalid: ('The IDREFs %1 have not been resolved to IDs' bindWith: unresolvedIDREFs asSortedCollection asArray)]! + ifTrue: [self invalid: ('The IDREFs %1 have not been resolved to IDs' % { unresolvedIDREFs asSortedCollection asArray })]! registerID: attribute latestID := attribute value. (definedIDs includes: latestID) - ifTrue: [self invalid: ('The id "%1" was used more than once' bindWith: latestID)]. + ifTrue: [self invalid: ('The id "%1" was used more than once' % { latestID })]. definedIDs add: latestID. unresolvedIDREFs remove: latestID ifAbsent: []! @@ -4797,7 +4795,7 @@ documentNode ^self document! expected: string - self malformed: ('%1 expected, but not found' bindWith: string)! + self malformed: ('%1 expected, but not found' % { string })! expectedWhitespace self malformed: 'White space expected but not found'! @@ -4863,12 +4861,12 @@ validateEncoding: encName c := encName first. (c asInteger < 128 and: [c isLetter]) ifFalse: [self malformed: ('The first letter of the encoding ("%1") must be an ASCII alphabetic letter' - bindWith: encName)]. + % { encName })]. 2 to: encName size do: [:i | c := encName at: i. (c asInteger < 128 and: [c isLetter or: [c isDigit or: ['._-' includes: c]]]) ifFalse: [self malformed: ('A letter in the encoding name ("%1") must be ''.'', ''_'', ''-'', or an ASCII letter or digit' - bindWith: encName)]]! + % { encName })]]! warn: aMessage sax warning: (WarningSignal new messageText: aMessage)! @@ -4979,7 +4977,7 @@ findNamespace: ns nsURI = nil ifFalse: [^nsURI]]. ^ns = '' ifTrue: [''] - ifFalse: [self invalid: ('The namespace qualifier %1 has not been bound to a namespace URI' bindWith: ns)]! + ifFalse: [self invalid: ('The namespace qualifier %1 has not been bound to a namespace URI' % { ns })]! resolveNamespaces: attributes | newAttributes showDecls t1 t2 k | @@ -5008,8 +5006,8 @@ resolveNamespaces: attributes (t1 type = t2 type and: [t1 namespace = t2 namespace]) ifTrue: [self malformed: ('The attributes "%1" and "%2" have the same namespace and type' - bindWith: t1 asString - with: t2 asString). + % { t1 asString. + t2 asString }). k := newAttributes size]. k := k + 1]]]. elementStack last tag: (self correctTag: elementStack last tag). @@ -5641,9 +5639,9 @@ validateValueOf: anAttribute for: aParse type validateValueOf: anAttribute for: aParser. (self isFixed not or: [anAttribute value = self default]) ifFalse: [aParser invalid: ('The attribute "%1" was declared FIXED, but the value used in the document ("%2") did not match the default ("%3")' - bindWith: anAttribute tag asString - with: anAttribute value - with: self default)].! ! + % { anAttribute tag asString. + anAttribute value. + self default })].! ! !AttributeDef methodsFor: 'private'! @@ -5905,22 +5903,22 @@ attributeFor: key subKey: k2 from: anErr | val | (val := attributeDefs at: key asString ifAbsent: []) == nil ifTrue: [anErrorReporter invalid: ('The attribute "%1 %2" has not been defined' - bindWith: key asString - with: k2 asString)]. + % { key asString. + k2 asString })]. ^val at: k2 asString ifAbsent: [anErrorReporter invalid: ('The attribute "%1 %2" has not been defined' - bindWith: key asString - with: k2 asString)]! + % { key asString. + k2 asString })]! attributeFor: key subKey: k2 put: value from: anErrorReporter | dict | dict := attributeDefs at: key asString ifAbsentPut: [Dictionary new]. (dict includesKey: k2 asString) ifTrue: [^anErrorReporter warn: ('The attribute "%1 %2" has been defined more than once' - bindWith: key asString - with: k2 asString)]. + % { key asString. + k2 asString })]. (value type isID and: [dict contains: [:attr | attr type isID]]) - ifTrue: [^anErrorReporter invalid: ('The element %1 has two attributes typed as ID' bindWith: key asString)]. + ifTrue: [^anErrorReporter invalid: ('The element %1 has two attributes typed as ID' % { key asString })]. dict at: k2 asString put: value! attributesFor: key @@ -5943,7 +5941,7 @@ elementFor: key from: anErrorReporter | val | (val := elementDefs at: key asString ifAbsent: []) == nil ifTrue: [anErrorReporter warn: ('The element "%1" has not been defined' - bindWith: key asString)]. + % { key asString })]. ^val! elementFor: key put: value from: anErrorReporter @@ -5951,7 +5949,7 @@ elementFor: key put: value from: anError ifTrue: [| msg | msg := ('The element "%1" has been defined more than once' - bindWith: key asString). + % { key asString }). anErrorReporter isValidating ifTrue: [anErrorReporter invalid: msg] ifFalse: [anErrorReporter warn: msg]]. @@ -5977,7 +5975,7 @@ generalEntityAt: key generalEntityAt: key put: value from: anErrorReporter (generalEntities includesKey: key) ifTrue: [^anErrorReporter warn: ('The general entity "%1" has been defined more than once' - bindWith: key)]. + % { key })]. generalEntities at: key put: value! notationAt: name from: anErrorReporter @@ -5997,7 +5995,7 @@ parameterEntityAt: key parameterEntityAt: key put: value from: anErrorReporter (parameterEntities includesKey: key) ifTrue: [^anErrorReporter warn: ('The parameter entity "%1" has been defined more than once' - bindWith: key)]. + % { key })]. parameterEntities at: key put: value! ! !DocumentType methodsFor: 'private'! @@ -6133,8 +6131,7 @@ completeValidationAgainst: aParser from: typeNames do: [:nm | aParser dtd notationAt: nm ifAbsent: [aParser invalid: ('Undeclared Notation "%1" used by attribute type "%2"' - bindWith: nm - with: anAttributeDef tag asString)]]! + % { nm. anAttributeDef tag asString })]]! validateValueOf: anAttribute for: aParser | v | @@ -6142,9 +6139,8 @@ validateValueOf: anAttribute for: aParse v := anAttribute value. (typeNames includes: v) ifFalse: [aParser invalid: ('A NOTATION attribute (%1="%2") should have had a value from %3.' - bindWith: anAttribute tag asString - with: v - with: typeNames asArray)].! ! + % { anAttribute tag asString + v. typeNames asArray })].! ! !NOTATION_AT class methodsFor: 'instance creation'! @@ -6161,8 +6157,7 @@ validateValueOf: anAttribute for: aParse ifTrue: [aParser invalid: 'white space must not occur in NMTOKEN attributes']. (aParser isValidNmToken: v) ifFalse: [aParser invalid: ('An NMTOKEN attribute (%1="%2") does not match the required syntax of an NmToken.' - bindWith: anAttribute tag asString - with: v)]! ! + % { anAttribute tag asString. v })]! ! !IDREF_AT methodsFor: 'validating'! @@ -6174,8 +6169,7 @@ validateValueOf: anAttribute for: aParse ifTrue: [aParser invalid: 'white space must not occur in IDREF attributes']. (aParser isValidName: v) ifFalse: [aParser invalid: ('An IDREF attribute (%1="%2") does not match the required syntax of a Name.' - bindWith: anAttribute tag asString - with: v)]. + % { anAttribute tag asString. v })]. aParser rememberIDREF: v! ! !NMTOKENS_AT methodsFor: 'validating'! @@ -6187,8 +6181,7 @@ validateValueOf: anAttribute for: aParse (all := self stringAsTokens: v) do: [:nm | (aParser isValidNmToken: nm) ifFalse: [aParser invalid: ('An NMTOKENS attribute (%1="%2") does not match the required syntax of a list of NmTokens.' - bindWith: anAttribute tag asString - with: v)]]. + % { anAttribute tag asString. v })]]. all size = 0 ifTrue: [aParser invalid: 'Attribute has empty list of NMTOKENS'].! ! !ENTITY_AT methodsFor: 'validating'! @@ -6208,17 +6201,14 @@ validateValueOf: anAttribute for: aParse ifTrue: [aParser invalid: 'white space must not occur in ENTITY attributes']. (aParser isValidName: v) ifFalse: [aParser invalid: ('An ENTITY attribute (%1="%2") does not match the required syntax of a Name.' - bindWith: anAttribute tag asString - with: v)]. + % { anAttribute tag asString. v })]. ent := aParser dtd generalEntityAt: v. ent == nil ifTrue: [aParser invalid: ('Undeclared unparsed entity "%1" used by attribute type "%2"' - bindWith: v - with: anAttribute tag asString)] + % { v. anAttribute tag asString })] ifFalse: [ent isParsed ifTrue: [aParser invalid: ('The entity "%1" used by attribute type "%2" is a parsed entity and should be unparsed' - bindWith: v - with: anAttribute tag asString)] + % { v. anAttribute tag asString })] ifFalse: []]! ! !CDATA_AT methodsFor: 'validating'! @@ -6240,8 +6230,7 @@ validateValueOf: anAttribute for: aParse ifTrue: [aParser invalid: 'white space must not occur in ID attributes']. (aParser isValidName: v) ifFalse: [aParser invalid: ('An ID attribute (%1="%2") does not match the required syntax of a Name.' - bindWith: anAttribute tag asString - with: v)]. + % { anAttribute tag asString. v })]. aParser registerID: anAttribute! ! !ID_AT methodsFor: 'testing'! @@ -6265,9 +6254,8 @@ validateValueOf: anAttribute for: aParse v := anAttribute value. (values includes: v) ifFalse: [aParser invalid: ('An attribute (%1="%2") should have had a value from %3.' - bindWith: anAttribute tag asString - with: v - with: values asArray)]! ! + % { anAttribute tag asString. v + values asArray })]! ! !Enumeration_AT class methodsFor: 'instance creation'! @@ -6283,8 +6271,7 @@ validateValueOf: anAttribute for: aParse (all := self stringAsTokens: v) do: [:nm | (aParser isValidName: nm) ifFalse: [aParser invalid: ('An IDREFS attribute (%1="%2") does not match the required syntax of a list of Names.' - bindWith: anAttribute tag asString - with: v)]. + % { anAttribute tag asString. v })]. aParser rememberIDREF: nm]. all size = 0 ifTrue: [aParser invalid: 'Attribute has empty list of IDREFS'].! ! @@ -6304,17 +6291,14 @@ validateValueOf: anAttribute for: aParse (all := self stringAsTokens: v) do: [:nm | (aParser isValidName: nm) ifFalse: [aParser invalid: ('An ENTITIES attribute (%1="%2") does not match the required syntax of a list of Names.' - bindWith: anAttribute tag asString - with: v)]. + % { anAttribute tag asString. v })]. ent := aParser dtd generalEntityAt: nm. ent == nil ifTrue: [aParser invalid: ('Undeclared unparsed entity "%1" used by attribute type "%2"' - bindWith: nm - with: anAttribute tag asString)] + % { nm. anAttribute tag asString })] ifFalse: [ent isParsed ifTrue: [aParser invalid: ('The entity "%1" used by attribute type "%2" is a parsed entity and should be unparsed' - bindWith: nm - with: anAttribute tag asString)] + % { nm. anAttribute tag asString })] ifFalse: []]]. all size = 0 ifTrue: [aParser invalid: 'Attribute has empty list of ENTITIES'].! ! @@ -6396,7 +6380,7 @@ defineDefaultNamespace: attribute defineNamespace: attribute from: aParser (#('xmlns' 'xml') includes: attribute tag type) - ifTrue: [self error: ('It is illegal to redefine the qualifier "%1".' bindWith: attribute tag type)]. + ifTrue: [self error: ('It is illegal to redefine the qualifier "%1".' % { attribute tag type })]. attribute value isEmpty ifTrue: [aParser invalid: 'It is not permitted to have an empty URI as a namespace name']. self namespaces at: attribute tag type put: attribute value! --- orig/xml/XPath.st +++ mod/xml/XPath.st @@ -388,7 +388,7 @@ xpathCompareEquality: aData using: aBloc ifTrue: [^nodes contains: [:nd1 | aData unsortedNodes contains: [:nd2 | aBlock value: nd1 xpathStringData value: nd2 xpathStringData]]]. - self error: ('Can''t compare a %1 with a node set' bindWith: aData class printString)! + self error: ('Can''t compare a %1 with a node set' % { aData class })! xpathCompareOrder: aData using: aBlock ^aData xpathIsNodeSet @@ -448,6 +448,11 @@ xpathUsedVarNames xpathUsedVarNames ^OrderedCollection new! ! +!Object methodsFor: 'xpath'! + +xpathUsedVarNames + ^OrderedCollection new! ! + !XPathExpression methodsFor: 'matching'! baseValueIn: aNodeContext @@ -850,7 +855,7 @@ baseValueIn: aNodeContext | var | var := aNodeContext variables at: self name - ifAbsent: [self error: ('No binding found for the variable $%1' bindWith: self name)]. + ifAbsent: [self error: ('No binding found for the variable $%1' % { self name })]. ^var! ! !XPathVariable methodsFor: 'accessing'! @@ -1372,7 +1377,7 @@ initializeNumeric !XPathBinaryExpression class methodsFor: 'instance creation'! operator: op with: arg1 with: arg2 - ^(operators at: op ifAbsent: [self error: ('Not implemented yet %1' bindWith: op)]) copy + ^(operators at: op ifAbsent: [self error: ('Not implemented yet %1' % { op })]) copy operator: op with: arg1 with: arg2! ! !XPathSortingVector methodsFor: 'sorting'! @@ -1611,7 +1616,7 @@ axis: axisName test: test | stepClass step | stepClass := self class nodeTypes at: axisName - ifAbsent: [self error: ('%1 is not an axis' bindWith: axisName)]. + ifAbsent: [self error: ('%1 is not an axis' % { axisName })]. step := stepClass new. step axisName: axisName. "Some classes represent multiple axes, and must be told which" step baseTest: test. @@ -2028,6 +2033,9 @@ atEndOfExpression init: streamOrString notifying: nothing failBlock: bah self source: streamOrString! +init: streamOrString notifying: nothing failBlock: bah + self source: streamOrString! + source: streamOrString buffer := String new writeStream. stack := OrderedCollection new. @@ -2053,6 +2061,9 @@ result initScanner "Present for compatibility with the parser in VW."! +initScanner + "Present for compatibility with the parser in VW."! + xmlNode: aNode xmlNode := aNode! ! @@ -2060,7 +2071,7 @@ xmlNode: aNode functionNamed: fName functions == nil ifTrue: [functions := XPathFunction baseFunctions]. - ^(functions at: fName ifAbsent: [self error: ('Not implemented yet %1()' bindWith: fName)]) copy! + ^(functions at: fName ifAbsent: [self error: ('Not implemented yet %1()' % { fName })]) copy! namespaceAt: aQualifier | elm ns | @@ -2072,7 +2083,7 @@ namespaceAt: aQualifier elm := elm parent]. aQualifier = 'xml' ifTrue: [^XML_URI]. self error: ('No namespace binding found for namespace qualifier "%1".' - bindWith: aQualifier)! + % { aQualifier })! peekFor: trialValue "Test to see if tokenType matches aType and token equals trialValue. If so, @@ -2498,7 +2509,7 @@ xpathCompareEquality: aData using: aBloc aData xpathIsNodeSet ifTrue: [^aData unsortedNodes contains: [:nd2 | aBlock value: self value: nd2 xpathStringData xpathAsBoolean]]. - self error: ('Can''t compare a %1 with a boolean' bindWith: aData class printString)! + self error: ('Can''t compare a %1 with a boolean' % { aData class })! xpathCompareOrder: aData using: aBlock | v | @@ -2564,7 +2575,7 @@ xpathCompareEquality: aData using: aBloc aData xpathIsNodeSet ifTrue: [^aData unsortedNodes contains: [:nd2 | aBlock value: self value: nd2 xpathStringData xpathAsNumber]]. - self error: ('Can''t compare a %1 with a number' bindWith: aData class printString)! + self error: ('Can''t compare a %1 with a number' % { aData class })! xpathCompareOrder: aData using: aBlock | v | @@ -2631,7 +2642,7 @@ xpathCompareEquality: aData using: aBloc aData xpathIsNodeSet ifTrue: [^aData unsortedNodes contains: [:nd2 | aBlock value: self value: nd2 xpathStringData]]. - self error: ('Can''t compare a %1 with a string' bindWith: aData class printString)! + self error: ('Can''t compare a %1 with a string' % { aData class })! xpathCompareOrder: aData using: aBlock | v | --- orig/xml/XSL.st +++ mod/xml/XSL.st @@ -419,7 +419,7 @@ addNamedTemplate: aRule all := namedTemplates at: aRule name ifAbsentPut: [OrderedCollection new]. (all contains: [:c | c importance = currentImportance value]) - ifTrue: [self error: ('There are two named templates named %1 with the same importance' bindWith: aRule name)]. + ifTrue: [self error: ('There are two named templates named %1 with the same importance' % { aRule name })]. all add: aRule! addRule: aRule @@ -438,13 +438,13 @@ addVariable: aVariable all := variables at: aVariable name ifAbsentPut: [OrderedCollection new]. (all contains: [:c | c importance = currentImportance value]) - ifTrue: [self error: ('There are two variables named %1 with the same importance' bindWith: aVariable name)]. + ifTrue: [self error: ('There are two variables named %1 with the same importance' % { aVariable name })]. all add: aVariable! attributesForSet: setName | list map | list := attributeSets at: setName - ifAbsent: [self error: ('No attribute set named "%1".' bindWith: setName asString)]. + ifAbsent: [self error: ('No attribute set named "%1".' % { setName asString })]. map := Dictionary new. list do: [:as | (as allAttributesFrom: self) do: [:attr | @@ -454,8 +454,8 @@ attributesForSet: setName map do: [:singleList | (singleList size > 1 and: [(singleList at: 1) key = (singleList at: 2) key]) ifTrue: [self error: ('Attribute set "%1" includes more than one definition of the attribute "%2".' - bindWith: setName asString - with: singleList first name asString)]. + % { setName asString. + singleList first name asString })]. list add: singleList first value]. ^list! @@ -535,7 +535,7 @@ readString: aString resolveAttributesForSet: setName | list | list := attributeSets at: setName - ifAbsent: [self error: ('No attribute set named "%1".' bindWith: setName asString)].! + ifAbsent: [self error: ('No attribute set named "%1".' % { setName asString })].! setOutput: anOutputCommand output := anOutputCommand! @@ -1291,11 +1291,11 @@ checkURISyntax: aString type := aString copyFrom: n + 1 to: aString size. ch := type at: 1. (ch = $_ or: [ch isLetter]) - ifFalse: [self error: ('Type name syntax error in "%1".' bindWith: type)]. + ifFalse: [self error: ('Type name syntax error in "%1".' % { type })]. 2 to: type size do: [:i | ch := type at: i. (ch isLetter or: [ch isDigit or: ['.-_' includes: ch]]) - ifFalse: [self error: ('Type name syntax error in "%1".' bindWith: type)]]! + ifFalse: [self error: ('Type name syntax error in "%1".' % { type })]]! collate: node1 to: node2 within: aNodeContext | list sign | @@ -1309,8 +1309,7 @@ collate: node1 to: node2 within: aNodeCo readAttribute: attName ^self readAttribute: attName default: [self error: ('%1 needs to have an attribute named %2' - bindWith: self tag asString - with: attName)]! + % { self tag asString. attName })]! readAttribute: attName default: def | att | @@ -1325,18 +1324,17 @@ readInteger: attName default: def ^att == nil ifTrue: [def value] ifFalse: - [att isEmpty ifTrue: [self error: ('The %1 attribute is empty' bindWith: attName)]. + [att isEmpty ifTrue: [self error: ('The %1 attribute is empty' % { attName })]. att := att readStream. val := Number readFrom: att. val = 0 ifTrue: [self error: 'Bad number format, ', (att instVarAt: 1)]. - att atEnd ifFalse: [self error: ('The %1 attribute is not a legal integer value' bindWith: attName)]. + att atEnd ifFalse: [self error: ('The %1 attribute is not a legal integer value' % { attName })]. val]! readMatchPattern: attName ^self readMatchPattern: attName default: [self error: ('%1 needs to have an attribute named %2' - bindWith: self tag asString - with: attName)]! + % { self tag asString. attName })]! readMatchPattern: attName default: def | att | @@ -1350,8 +1348,7 @@ readMatchPattern: attName default: def readSelectPattern: attName ^self readSelectPattern: attName default: [self error: ('%1 needs to have an attribute named %2' - bindWith: self tag asString - with: attName)]! + % { self tag asString. attName })]! readSelectPattern: attName default: def | att d | @@ -1372,8 +1369,7 @@ readTag: attName att := self valueOfAttribute: attName ifAbsent: [nil]. ^att == nil ifTrue: [self error: ('%1 needs to have an attribute named %2' - bindWith: self tag asString - with: attName)] + % { self tag asString. attName })] ifFalse: [att]! readTagList: attName default: defaultBlock @@ -1437,7 +1433,7 @@ generatesAttributes isStylesheetEntry Transcript nl; tab; show: ('Stylesheet contains a top-level element that is not permitted (%1)' - bindWith: self tag). + % { self tag }). Transcript nl; tab; show: 'It has been ignored'. ^false! @@ -1523,7 +1519,7 @@ resolveComputedTag: nm qualifier := self findQualifierAtNamespace: 'quote:', ns. qualifier == nil ifTrue: [qualifier := self findQualifierAtNamespace: ns]. - qualifier == nil ifTrue: [self error: ('The namespace %1 has not been bound to a qualifier in this stylesheet, and automatic creation of qualifiers has not been implemented.' bindWith: ns)]. + qualifier == nil ifTrue: [self error: ('The namespace %1 has not been bound to a qualifier in this stylesheet, and automatic creation of qualifiers has not been implemented.' % { ns })]. NodeTag new qualifier: qualifier ns: ns type: type] ifFalse: [self checkQNameSyntax: nm. @@ -1542,7 +1538,7 @@ resolveTag: aTagString ifTrue: [self error: 'A qualified name cannot begin or end with a colon.']. qual := aTagString copyFrom: 1 to: c - 1. ns := self findNamespaceAt: qual. - ns == nil ifTrue: [self error: ('The namespace qualifier %1 has not been bound to a namespace in this stylesheet' bindWith: qual)]. + ns == nil ifTrue: [self error: ('The namespace qualifier %1 has not been bound to a namespace in this stylesheet' % { qual })]. "Use a # in the match to make sure there's at least one more character" ('quote:#*' match: ns) ifTrue: [ns := ns copyFrom: 'quote:' size + 1 to: ns size]. @@ -1988,7 +1984,7 @@ sequenceSrc format: number by: aFormat | n s | aFormat size = 1 - ifFalse: [self error: ('Unrecognized number format = "%1"' bindWith: aFormat)]. + ifFalse: [self error: ('Unrecognized number format = "%1"' % { aFormat })]. aFormat = 'a' ifTrue: [n := self radix: number base: 26. @@ -2352,7 +2348,7 @@ topLevelAddToRuleDB: aDB self tag namespace = XSL_URI ifTrue: [self error: ('"%1" not recognized as an XSL command' - bindWith: self tag asString)]. + % { self tag asString })]. aDB addRule: self! ! !VariableDefinition methodsFor: 'loading'! _______________________________________________ help-smalltalk mailing list [hidden email] http://lists.gnu.org/mailman/listinfo/help-smalltalk |
Paolo Bonzini wrote:
> I've just added CharacterArray>>#% to 2.3 and 3.0. > > In 3.0 however I also want to change the callers. Could a brave soul > help reviewing the attached patch? I spotted a couple of mistakes and committed the fixed patch as [hidden email]/smalltalk--devo--2.2--patch-297 and [hidden email]--2004b/smalltalk--devo--2.2--patch-421 respectively. Also I had forgotten to say that #% is just a shortcut to #bindWithArguments:. Paolo _______________________________________________ help-smalltalk mailing list [hidden email] http://lists.gnu.org/mailman/listinfo/help-smalltalk |
In reply to this post by Paolo Bonzini
On Mon, 2007-06-25 at 15:40 +0200, Paolo Bonzini wrote:
> I've just added CharacterArray>>#% to 2.3 and 3.0. I think this is great. I'll be changing my #bindWith:* sends to it as soon as I update again. > from: aPoint to: endPoint > ^'%1.%2 %3.%4' > - bindWith: aPoint y printString > - with: (aPoint x - 1) printString > - with: endPoint y printString > - with: (endPoint x - 1) printString > + % { aPoint y printString. (aPoint x - 1) printString. > + endPoint y printString. (endPoint x - 1) printString } > ! I don't think these #'printString's are necessary, not that that has anything to do with it.... > setInitialSize > @@ -3687,8 +3687,7 @@ initialize: parentWidget > label := ''. > exists := false. > primitive := '%1.w%2' > - bindWith: self parent container > - with: (self asOop printString: 36). > + % { self parent container. self asOop printString: 36 }). Extra paren, I think. > ^(directory at: directory size) isPathSeparator > ifTrue: [ directory, fileName ] > - ifFalse: [ '%1%2%3' > - bindWith: directory > - with: self pathSeparator > - with: fileName ] > + ifFalse: [ directory, self pathSeparatorString, fileName ] {directory. self pathSeparatorString. fileName} join :) -- ;;; Stephen Compall ** http://scompall.nocandysw.com/blog ** "Peta" is Greek for fifth; a petabyte is 10 to the fifth power, as well as fifth in line after kilo, mega, giga, and tera. -- Lee Gomes, performing every Wednesday in his tech column "Portals" on page B1 of The Wall Street Journal _______________________________________________ help-smalltalk mailing list [hidden email] http://lists.gnu.org/mailman/listinfo/help-smalltalk signature.asc (196 bytes) Download Attachment |
Free forum by Nabble | Edit this page |