The Trunk: Collections-fn.740.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Collections-fn.740.mcz

commits-2
Tobias Pape uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-fn.740.mcz

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

Name: Collections-fn.740
Author: fn
Time: 7 March 2017, 10:49:27.466847 am
UUID: 1133e89d-10ca-4fa1-a98c-c1082fd360e6
Ancestors: Collections-ul.739, Collections-fn.712

HtmlReadWriter: Add support for style attributes in div and span containers and numberic HTML entities.

=============== Diff against Collections-ul.739 ===============

Item was added:
+ ----- Method: HtmlReadWriter>>mapContainerTag: (in category 'mapping') -----
+ mapContainerTag: aTag
+
+ | result styleStart styleEnd styleAttributes |
+ result := OrderedCollection new.
+ styleStart := (aTag findString: 'style="' ) + 7.
+ styleStart <= 7 ifTrue: [^#()].
+ styleEnd := (aTag findString: '"' startingAt: styleStart) - 1.
+ styleAttributes := (aTag copyFrom: styleStart to: styleEnd) subStrings: ';'.
+ styleAttributes do: [:ea | |keyValue key value|
+ keyValue := (ea subStrings: ':') collect: [:s | s withBlanksTrimmed].
+ key := keyValue first asLowercase.
+ value := keyValue second.
+ keyValue size = 2 ifTrue: [
+ key = 'color' ifTrue: [result add: (TextColor color: (Color fromString: value))].
+ (key beginsWith: 'font') ifTrue: [
+ (value includesSubstring: 'bold')
+ ifTrue: [result add: TextEmphasis bold].
+ (value includesSubstring: 'italic')
+ ifTrue: [result add: TextEmphasis italic]]]].
+ ^ result!

Item was changed:
  ----- Method: HtmlReadWriter>>mapTagToAttribute: (in category 'mapping') -----
  mapTagToAttribute: aTag
 
  aTag = '<b>' ifTrue: [^ {TextEmphasis bold}].
  aTag = '<i>' ifTrue: [^ {TextEmphasis italic}].
  aTag = '<u>' ifTrue: [^ {TextEmphasis underlined}].
  aTag = '<s>' ifTrue: [^ {TextEmphasis struckOut}].
  aTag = '<code>' ifTrue: [^ self mapCodeTag].
  aTag = '<pre>' ifTrue: [self breakLines: false. ^ {}].
+ (#('<div' '<span' '<center>' ) anySatisfy: [:ea | aTag beginsWith: ea])
+ ifTrue: [^(self mapAlignmentTag: aTag) union: (self mapContainerTag: aTag)].
- (aTag = '<center>' or: [aTag beginsWith: '<div'])
- ifTrue: [^ self mapAlignmentTag: aTag].
  (aTag beginsWith: '<font') ifTrue: [^ self mapFontTag: aTag].
  (aTag beginsWith: '<a') ifTrue: [^ self mapATag: aTag].
 
  "h1, h2, h3, ..."
  (aTag second = $h and: [aTag third isDigit])
  ifTrue: [^ {TextEmphasis bold}].
 
  ^ {}!

Item was changed:
  ----- Method: HtmlReadWriter>>processHtmlEscape: (in category 'reading') -----
  processHtmlEscape: aString
+ | escapeSequence |
+ escapeSequence := aString copyFrom: 2 to: aString size - 1.
+ escapeSequence first = $# ifTrue: [^ self processHtmlEscapeNumber: escapeSequence allButFirst].
-
  (String htmlEntities at: (aString copyFrom: 2 to: aString size - 1) ifAbsent: [])
  ifNotNil: [:char |
  string add: char.
  count := count + 1].!

Item was added:
+ ----- Method: HtmlReadWriter>>processHtmlEscapeNumber: (in category 'reading') -----
+ processHtmlEscapeNumber: aString
+ | number |
+ number := aString first = $x
+ ifTrue: [ '16r', aString allButFirst ]
+ ifFalse: [ aString ].
+ string add: number asNumber asCharacter!