@implementation HtmlTag { + new: { tagName } { return [[$self new] type: $tagName] } + new:withAttributes: { tagName anAttributesString } { return [[[$self new] type: $tagName] \ attributes: $anAttributesString] } + new:withValue: { tagName aValue } { return [[[$self new] type: $tagName] \ value: $aValue] } + new:withAttributes:andValue: { tagName anAttributesString aValue } { return [[[[$self new] type: $tagName] \ attributes: $anAttributesString] \ value: $aValue] } + new:withValue:andAttributes: { tagName aValue anAttributesString } { return [[[[$self new] type: $tagName] \ attributes: $anAttributesString] \ value: $aValue] } - init {} { $super init set closed 1 set value "" set type HTML } - type: { tagName } { set type $tagName switch -exact -- [string toupper $tagName] { BR { $self dontClose } BODY { $self attributes: \ "BGCOLOR=WHITE TEXT=BLACK LINK=8080C0 VLINK=8080C0 ALINK=808C0" } STYLE { $self value: { BODY, TABLE, TR, TD, A:link, A:visited { font-size: 13 ; font-weight: normal ; font-family: "arial, helvetica" ; text-decoration: none ; background-color: white ; } A:link, A:visited, A:active { color: #8080C0 } A:hover, A:active { text-decoration: underline ; } LI { list-style-type: circle; } } } UL { $self attributes: "TYPE=CIRCLE" } TABLE { $self attributes: \ "BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=100% ALIGN=CENTER" } TD { $self attributes: "ALIGN=CENTER VALIGN=CENTER" } TR { $self attributes: "ALIGN=CENTER VALIGN=CENTER" } } } - type {} { return $type } - value: { aValue } { set value $aValue } - value {} { return $value } - attributes: { anAttributesString } { set attributes $anAttributesString } - attributes {} { return $attributes } - dontClose {} { set closed 0 } - add: aTagObject { lappend tags $aTagObject } - remove: aTagObject { if [tags contains: $aTagObject] { tags remove: $aTagObject } } - html {} { set txt "<$type" if [string length $attributes] { append txt " " append txt $attributes } append txt ">\n" if [string length $value] { append txt $value append txt "\n" } if [llength $tags] { foreach subtag $tags { append txt [$subtag html] } } if {$closed} { append txt "</$type>" append txt "\n" } return $txt } - dealloc {} { foreach subtag $tags { $subtag release } return [$super dealloc] } - tags {} { return $tags } - tagsOfType: aTagName { set subtags "" foreach tag $tags { if {"[string toupper [$tag type]]" == "[string toupper $aTagName]"} { lappend subtags $tag } } return $subtags } - allTagsOfType: aTagName { set subtags [$self tagsOfType: $aTagName] foreach tag $tags { if [string length [set t [$tag allTagsOfType: $aTagName]]] { lappend subtags $t set subtags [join $subtags] } } return $subtags } }