[squeak-dev] The Trunk: Collections-mt.705.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Aug 11 14:29:31 UTC 2016


Marcel Taeumel uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-mt.705.mcz

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

Name: Collections-mt.705
Author: mt
Time: 11 August 2016, 4:29:13.490564 pm
UUID: fbaaa045-4df3-c746-9de5-d8102495a1e3
Ancestors: Collections-mt.704

Fix two small bugs in HTML parser regarding strings in tag properties and href contents.

=============== Diff against Collections-mt.704 ===============

Item was changed:
  ----- Method: HtmlReadWriter>>mapATag: (in category 'mapping') -----
  mapATag: aTag
  
  	| result startIndex stopIndex attribute |
  	result := OrderedCollection new.
  	
  	"<a href=""http://google.de"">"
  	attribute := 'href'.
  	startIndex := aTag findString: attribute.
  	startIndex > 0 ifTrue: [
+ 		startIndex := aTag findString: '"' startingAt: startIndex+attribute size.
+ 		stopIndex := aTag findString: '"' startingAt: startIndex+1.
- 		startIndex := aTag findString: '=' startingAt: startIndex+attribute size.
- 		stopIndex := aTag findString: ' ' startingAt: startIndex+1.
- 		stopIndex = 0 ifTrue: [
- 			stopIndex := aTag findString: '>' startingAt: startIndex+1].
- 		
- 		(aTag at: startIndex + 1) = $"
- 			ifTrue: [startIndex := startIndex + 1].
- 		(aTag at: stopIndex - 1) = $"
- 			ifTrue: [stopIndex := stopIndex - 1].
  		result add: (TextURL new url: (aTag copyFrom: startIndex+1 to: stopIndex-1))].
  	
  	^ result!

Item was changed:
  ----- Method: HtmlReadWriter>>processNextTag (in category 'reading') -----
  processNextTag
  
+ 	| tag htmlEscape lookForNewTag lookForHtmlEscape tagFound valid inComment inTagString |
- 	| tag htmlEscape lookForNewTag lookForHtmlEscape tagFound valid inComment |
  	lookForNewTag := true.
  	lookForHtmlEscape := false.
  	tagFound := false.
  	tag := OrderedCollection new.
  	htmlEscape := OrderedCollection new.
  	inComment := false.
+ 	inTagString := false.
  	
  	[stream atEnd not and: [tagFound not]] whileTrue: [
  		| character |
  		character := stream next.
  		valid := (#(10 13) includes: character asciiValue) not.
  		count := count + 1.
  	
  		character = $< ifTrue: [lookForNewTag := false].
  		character = $& ifTrue: [
  			inComment ifFalse: [lookForHtmlEscape := true]].
  		
  		lookForNewTag
  			ifTrue: [
  				lookForHtmlEscape
  					ifFalse: [valid ifTrue: [string add: character] ifFalse: [offset := offset + 1]]
  					ifTrue: [valid ifTrue: [htmlEscape add: character]. offset := offset + 1]]
  			ifFalse: [valid ifTrue: [tag add: character]. offset := offset + 1].
  
+ 		"Toggle within tag string/text."
+ 		(character = $" and: [lookForNewTag not])
+ 			ifTrue: [inTagString := inTagString not].
+ 		
  		inComment := ((lookForNewTag not and: [tag size >= 4])
  			and: [tag beginsWith: '<!!--'])
  			and: [(tag endsWith: '-->') not].
  
+ 		(((character = $> and: [inComment not]) and: [lookForNewTag not]) and: [inTagString not]) ifTrue: [
- 		((character = $> and: [inComment not]) and: [lookForNewTag not]) ifTrue: [
  			lookForNewTag := true.
  			(tag beginsWith: '<!!--')
  				ifTrue: [self processComment: (String withAll: tag)]
  				ifFalse: [tag second ~= $/
  					ifTrue: [
  						(tag atLast: 2) == $/
  							ifTrue: [self processEmptyTag: (String withAll: tag)]
  							ifFalse: [self processStartTag: (String withAll: tag)]]
  					ifFalse: [self processEndTag: (String withAll: tag)]].			
  			tagFound := true].
  
  		(((character = $; and: [lookForNewTag])
  			and: [htmlEscape notEmpty]) and: [htmlEscape first = $&]) ifTrue: [
  				lookForHtmlEscape := false.
  				self processHtmlEscape: (String withAll: htmlEscape).
  				htmlEscape := OrderedCollection new]].
  !



More information about the Squeak-dev mailing list