[squeak-dev] The Trunk: Graphics-nice.135.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jun 11 20:09:06 UTC 2010


Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-nice.135.mcz

==================== Summary ====================

Name: Graphics-nice.135
Author: nice
Time: 11 June 2010, 10:08:12.299 pm
UUID: 8f262453-aaa3-3240-b062-5a54c8d95b3a
Ancestors: Graphics-mtf.134

Use a few nextLine instead of to upTo: Character cr to make things work even if a LF has leaked in.

=============== Diff against Graphics-mtf.134 ===============

Item was changed:
  ----- Method: BitBlt class>>benchDiffsFrom:to: (in category 'benchmarks') -----
  benchDiffsFrom: before to: afterwards
  	"Given two outputs of BitBlt>>benchmark show the relative improvements."
  	| old new log oldLine newLine oldVal newVal improvement |
  	log := WriteStream on: String new.
  	old := ReadStream on: before.
  	new := ReadStream on: afterwards.
  	[old atEnd or:[new atEnd]] whileFalse:[
+ 		oldLine := old nextLine.
+ 		newLine := new nextLine.
- 		oldLine := old upTo: Character cr.
- 		newLine := new upTo: Character cr.
  		(oldLine includes: Character tab) ifTrue:[
  			oldLine := ReadStream on: oldLine.
  			newLine := ReadStream on: newLine.
  			Transcript cr; show: (oldLine upTo: Character tab); tab.
  			log cr; nextPutAll: (newLine upTo: Character tab); tab.
  
  			[oldLine skipSeparators. newLine skipSeparators.
  			oldLine atEnd] whileFalse:[
  				oldVal := Integer readFrom: oldLine.
  				newVal := Integer readFrom: newLine.
  				improvement := oldVal asFloat / newVal asFloat roundTo: 0.01.
  				Transcript show: improvement printString; tab; tab.
  				log print: improvement; tab; tab].
  		] ifFalse:[
  			Transcript cr; show: oldLine.
  			log cr; nextPutAll: oldLine.
  		].
  	].
  	^log contents!

Item was changed:
  ----- Method: BDFFontReader>>getLine (in category 'reading') -----
  getLine
+ 	^file nextLine!
- 	^file upTo: Character cr.!

Item was changed:
  ----- Method: StrikeFont>>readFromBitFont: (in category 'file in/out') -----
  readFromBitFont: fileName
  	"This builds a StrikeFont instance by reading the data file format
  	produced by BitFont, a widely available font conversion utility
  	written by Peter DiCamillo at Brown University"
  	"StrikeFont new readFromBitFont: 'Palatino10.BF' "
  	| f lastAscii charLine width ascii charForm line missingForm tempGlyphs iRect p rectLine left tokens right |
  	f := FileStream readOnlyFileNamed: fileName.
  	self readBFHeaderFrom: f.
  
  	"NOTE: if font has been scaled (and in any case),
  	the REAL bitmap dimensions come after the header."
  	self restOfLine: 'Extent information for entire font' from: f.
  	"Parse the following line (including mispelling!!)"
  	"Image rectange: left = -2, right = 8, bottom = -2, top = 7"
+ 	tokens := f nextLine  findTokens: ' '.
- 	tokens := (f upTo: Character cr)  findTokens: ' '.
  	iRect := Rectangle left: (tokens at: 5) asNumber right: (tokens at: 8) asNumber
  				top: (tokens at: 14) asNumber bottom: (tokens at: 11) asNumber.
  	ascent := iRect top.
  	descent := iRect bottom negated.
  	
  	tempGlyphs := Form extent: (maxWidth*257) @ self height.
  	xTable := (Array new: 258) atAllPut: 0.
  	xTable at: 1 put: 0.
  
  	"Read character forms and blt into tempGlyphs"
  	lastAscii := -1.
  	[charLine := self restOfLine: 'Character: ' from: f.
  	charLine == nil ifFalse:
  		[p := f position.
+ 		rectLine := f nextLine.
- 		rectLine := f upTo: Character cr.
  		(rectLine beginsWith: 'Image rectange: left = ')
  			ifTrue: [tokens := rectLine findTokens: ' '.
  					left := (tokens at: 5) asNumber. right := (tokens at: 8) asNumber]
  			ifFalse: [left := right := 0. f position: p].
  		width:= (self restOfLine: 'Width (final pen position) = ' from: f) asNumber - left
  					max: (right-left+1).
  		(charLine beginsWith: 'Missing character') ifTrue: [ascii := 256].
  		('x''*' match: charLine) ifTrue:
  			[ascii := Number readFrom: (charLine copyFrom: 3 to: 4) asUppercase base: 16].
  		charForm := Form extent: width at self height.
  		('*[all blank]' match: charLine) ifFalse:
  			[self restOfLine: '  +' from: f.
  			1 to: self height do:
+ 				[:y | line := f nextLine.
- 				[:y | line := f upTo: Character cr.
  				4 to: (width + 3 min: line size + iRect left - left) do:
  					[:x | (line at: x - iRect left + left) = $*
  						ifTrue: [charForm pixelValueAt: (x-4)@(y-1) put: 1]]]]].
  	charLine == nil]
  		whileFalse:
  			[self displayChar: ascii form: charForm.
  			ascii = 256
  				ifTrue: [missingForm := charForm deepCopy]
  				ifFalse:
  				[minAscii := minAscii min: ascii.
  				maxAscii := maxAscii max: ascii.
  				lastAscii+1 to: ascii-1 do: [:a | xTable at: a+2 put: (xTable at: a+1)].
  				tempGlyphs copy: ((xTable at: ascii+1)@0
  										extent: charForm extent)
  							from: 0 at 0 in: charForm rule: Form over.
  				xTable at: ascii+2 put: (xTable at: ascii+1) + width.
  				lastAscii := ascii]].
  	f close.
  	lastAscii+1 to: maxAscii+1 do: [:a | xTable at: a+2 put: (xTable at: a+1)].
  	missingForm == nil ifFalse:
  		[tempGlyphs copy: missingForm boundingBox from: missingForm
  				to: (xTable at: maxAscii+2)@0 rule: Form over.
  		xTable at: maxAscii+3 put: (xTable at: maxAscii+2) + missingForm width].
  	glyphs := Form extent: (xTable at: maxAscii+3) @ self height.
  	glyphs copy: glyphs boundingBox from: 0 at 0 in: tempGlyphs rule: Form over.
  	xTable := xTable copyFrom: 1 to: maxAscii+3.
  	characterToGlyphMap := nil.!

Item was changed:
  ----- Method: StrikeFont>>restOfLine:from: (in category 'file in/out') -----
  restOfLine: leadString from: file
  	"Utility method to assist reading of BitFont data files"
  	| line |
+ 	[line := file nextLine.
- 	[line := file upTo: Character cr.
  	line size < leadString size or: [leadString ~= (line copyFrom: 1 to: leadString size)]]
  	whileTrue: [file atEnd ifTrue: [^ nil]].
  	^ line copyFrom: leadString size+1 to: line size!




More information about the Squeak-dev mailing list