'From Squeakland.396-Nihongo7.29 of 18 March 2005 [latest update: #100] on 17 July 2005 at 12:13:09 pm'!
"Change Set: TakahashiMethod
Date: 27 April 2005
Author: Takashi Yamamiya
A simple presentation tool inspired from http://www.rubycolor.org/takahashi/
TakahashiMethod example1
"!
HtmlSpecialEntity subclass: #HtmlDoIt
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'TakahashiMethod'!
Object subclass: #HtmlFormatter
instanceVariableNames: 'browser baseUrl formDatas outputStream preformattedLevel indentLevel boldLevel italicsLevel underlineLevel strikeLevel centerLevel urlLink listLengths listTypes precedingSpaces precedingNewlines morphsToEmbed incompleteMorphs anchorLocations imageMaps doItText '
classVariableNames: 'CSNonSeparators CSSeparators '
poolDictionaries: ''
category: 'Network-HTML-Formatter'!
Object subclass: #TakahashiMethod
instanceVariableNames: 'texts cursor currentText navigation'
classVariableNames: 'Last'
poolDictionaries: ''
category: 'TakahashiMethod'!
!TakahashiMethod commentStamp: 'tak 4/21/2005 16:06' prior: 0!
TakahashiMethod example1!
TestCase subclass: #TakahashiMethodTest
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'TakahashiMethod'!
!AbstractString methodsFor: '*network-HTML' stamp: 'tak 4/28/2005 14:06'!
replaceHtmlCharRefs
| pos ampIndex scIndex special specialValue outString outPos newOutPos |
outString _ String new: self size.
outPos _ 0.
pos _ 1.
[ pos <= self size ] whileTrue: [
"read up to the next ampersand"
ampIndex _ self indexOf: $& startingAt: pos ifAbsent: [0].
ampIndex = 0 ifTrue: [
pos = 1 ifTrue: [ ^self ] ifFalse: [ ampIndex _ self size+1 ] ].
newOutPos _ outPos + ampIndex - pos.
outString
replaceFrom: outPos + 1
to: newOutPos
with: self
startingAt: pos.
outPos _ newOutPos.
pos _ ampIndex.
ampIndex <= self size ifTrue: [
"find the $;"
scIndex _ self indexOf: $; startingAt: ampIndex ifAbsent: [ self size + 1 ].
special _ self copyFrom: ampIndex+1 to: scIndex-1.
[specialValue _ HtmlEntity valueOfHtmlEntity: special]
ifError: [specialValue := nil].
specialValue
ifNil: [
"not a recognized entity. wite it back"
scIndex > self size ifTrue: [ scIndex _ self size ].
newOutPos _ outPos + scIndex - ampIndex + 1.
outString
replaceFrom: outPos+1
to: newOutPos
with: self
startingAt: ampIndex.
outPos _ newOutPos.]
ifNotNil: [
outPos _ outPos + 1.
outString at: outPos put: specialValue isoToSqueak.].
pos _ scIndex + 1. ]. ].
^outString copyFrom: 1 to: outPos! !
!HtmlDoIt methodsFor: 'formatting' stamp: 'tak 4/24/2005 23:26'!
addToFormatter: formatter
formatter startDoIt: self textualContents.
super addToFormatter: formatter.
formatter endDoIt: self textualContents! !
!HtmlDoIt methodsFor: 'testing' stamp: 'tak 4/24/2005 23:12'!
mayContain: anEntity
^true! !
!HtmlDoIt methodsFor: 'testing' stamp: 'tak 4/24/2005 23:12'!
tagName
^'doit'! !
!HtmlDoIt class methodsFor: 'class initialization' stamp: 'tak 4/24/2005 23:10'!
initialize
HtmlTag initialize! !
!HtmlDocument methodsFor: '*TakahashiMethod' stamp: 'tak 7/15/2005 01:00'!
formattedSlide
| formatter textMorph |
formatter := HtmlFormatter preferredFormatterClass new.
formatter browser: nil.
formatter baseUrl: 'file:' asUrl default.
self addToFormatter: formatter.
textMorph := formatter textMorph.
formatter incompleteMorphs
do: [:image |
image downloadStateIn: self.
image step].
^ textMorph! !
!HtmlFormatter methodsFor: '*takahashiMethod' stamp: 'tak 4/26/2005 10:23'!
endDoIt: string
doItText _ nil.
self setAttributes.! !
!HtmlFormatter methodsFor: '*takahashiMethod' stamp: 'tak 4/24/2005 23:24'!
startDoIt: string
doItText _ string.
self setAttributes.! !
!DHtmlFormatter methodsFor: 'private-formatting' stamp: 'tak 4/24/2005 23:27'!
setAttributes
"set attributes on the output stream"
| attribs |
attribs _ OrderedCollection new.
indentLevel > 0 ifTrue: [ attribs add: (TextIndent tabs: indentLevel) ].
boldLevel > 0 ifTrue: [ attribs add: TextEmphasis bold ].
italicsLevel > 0 ifTrue: [ attribs add: TextEmphasis italic ].
underlineLevel > 0 ifTrue: [ attribs add: TextEmphasis underlined ].
strikeLevel > 0 ifTrue: [ attribs add: TextEmphasis struckOut ].
urlLink isNil ifFalse: [ attribs add: (TextURL new url: urlLink) ].
doItText ifNotNil: [ attribs add: (TextDoIt evalString: doItText)].
fontSpecs isEmptyOrNil
ifFalse: [attribs addAll: fontSpecs last]
ifTrue: [attribs add: (TextFontChange defaultFontChange)].
outputStream currentAttributes: attribs! !
!HtmlTag class methodsFor: 'parser support' stamp: 'tak 4/24/2005 22:46'!
entityClasses
"a Dictionary mapping tag names into the correct entity class"
"EntityClasses _ nil"
EntityClasses isNil ifFalse: [ ^EntityClasses ].
EntityClasses _ Dictionary new.
#(
frameset HtmlFrame
frame HtmlFrame
title HtmlTitle
style HtmlStyle
meta HtmlMeta
p HtmlParagraph
form HtmlForm
blockquote HtmlBlockQuote
input HtmlInput
textarea HtmlTextArea
select HtmlSelect
optgroup HtmlOptionGroup
option HtmlOption
img HtmlImage
embed HtmlEmbedded
noembed HtmlNoEmbed
a HtmlAnchor
br HtmlBreak
map HtmlMap
area HtmlArea
li HtmlListItem
dd HtmlDefinitionDefinition
dt HtmlDefinitionTerm
ol HtmlOrderedList
ul HtmlUnorderedList
dl HtmlDefinitionList
h1 HtmlHeader
h2 HtmlHeader
h3 HtmlHeader
h4 HtmlHeader
h5 HtmlHeader
h6 HtmlHeader
hr HtmlHorizontalRule
strong HtmlBoldEntity
b HtmlBoldEntity
em HtmlItalicsEntity
i HtmlItalicsEntity
dfn HtmlItalicsEntity
u HtmlUnderlineEntity
tt HtmlFixedWidthEntity
kbd HtmlFixedWidthEntity
strike HtmlStrikeEntity
big HtmlBiggerFontEntity
small HtmlSmallerFontEntity
sub HtmlSubscript
sup HtmlSuperscript
font HtmlFontEntity
pre HtmlPreformattedRegion
table HtmlTable
tr HtmlTableRow
td HtmlTableDataItem
th HtmlTableHeader
doit HtmlDoIt
) pairsDo: [
:tagName :className |
EntityClasses at: tagName asString put: (Smalltalk at: className) ].
^EntityClasses ! !
!HttpUrl methodsFor: '*takahashiMethod' stamp: 'tak 4/28/2005 13:36'!
enter
ProjectLoading thumbnailFromUrl: self toText! !
!Morph methodsFor: '*TakahashiMethod' stamp: 'tak 7/14/2005 18:07'!
startFadeIn
self currentWorld addMorphBack: self.
self center: self currentWorld center.! !
!Morph methodsFor: '*TakahashiMethod' stamp: 'tak 7/14/2005 18:05'!
startFadeOut
self delete! !
!DownloadingImageMorph methodsFor: '*TakahashiMethod' stamp: 'tak 7/14/2005 17:42'!
image
^ image! !
!ServerFile methodsFor: '*takahashiMethod' stamp: 'tak 4/28/2005 13:33'!
fullNameFor: aFileName
^ self directoryUrl, aFileName! !
!String methodsFor: '*takahashiMethod' stamp: 'tak 4/24/2005 23:17'!
enter
^(Project named: self) enter! !
!String methodsFor: '*takahashiMethod' stamp: 'tak 4/26/2005 20:19'!
shellOpen
"'C:\WINDOWS\system32\calc.exe' shellOpen"
Win32Shell new shellOpen: self! !
!TakahashiMethod methodsFor: 'accessing' stamp: 'tak 7/15/2005 10:06'!
buildElement: string size: size
| morph downloadingImage ratio |
morph := (HtmlParser parse: string readStream) formattedSlide.
(TextStyle named: self defaultStyleName)
addNewFontSize: size.
morph fontName: self defaultStyleName pointSize: size.
morph textColor: self defaultTextColor.
"self halt."
" morph text addAttribute: (TextColor color: Color white)."
morph wrapFlag: true.
morph extent: Display extent.
morph hasSubmorphs
ifTrue: [downloadingImage := morph submorphs first.
downloadingImage step.
morph := SketchMorph withForm: downloadingImage image.
ratio := morph height / morph width.
Display height / Display width > ratio
ifTrue: [morph width: Display width.
morph height: Display width * ratio]
ifFalse: [morph height: Display height.
morph width: Display height / ratio]]
ifFalse: [morph centered.
morph composeToBounds].
morph center: Display center.
^ morph! !
!TakahashiMethod methodsFor: 'accessing' stamp: 'tak 7/14/2005 16:13'!
buildLines: lineSpec
| newTexts |
newTexts := OrderedCollection new.
'Building presentation spec'
displayProgressAt: Sensor cursorPoint
from: 1
to: lineSpec size
during: [:bar | lineSpec
keysAndValuesDo: [:i :spec |
bar value: i.
newTexts
add: (self buildElement: spec first size: spec second)]].
^ newTexts! !
!TakahashiMethod methodsFor: 'accessing' stamp: 'tak 7/15/2005 00:49'!
defaultStyleName
^ (TextStyle named: 'MultiMSGothic')
ifNil: ['BitstreamVeraSans']
ifNotNil: ['MultiMSGothic']! !
!TakahashiMethod methodsFor: 'accessing' stamp: 'tak 7/15/2005 10:05'!
defaultTextColor
^ ActiveWorld color brightness > 0.5
ifTrue: [Color black]
ifFalse: [Color white]! !
!TakahashiMethod methodsFor: 'accessing' stamp: 'tak 4/26/2005 20:23'!
readSpec: anArray
| newTexts |
newTexts := self buildLines: anArray.
texts do: [:each | each delete].
cursor > newTexts size ifTrue: [cursor := newTexts size].
texts := newTexts.
self goto: cursor! !
!TakahashiMethod methodsFor: 'actions' stamp: 'tak 4/21/2005 14:39'!
back
self goto: cursor - 1! !
!TakahashiMethod methodsFor: 'actions' stamp: 'tak 4/26/2005 15:03'!
delete
navigation delete.
texts do: [:each | each delete].
Last _ nil.! !
!TakahashiMethod methodsFor: 'actions' stamp: 'tak 4/26/2005 14:54'!
goto: aNumber
currentText ifNotNil: [currentText startFadeOut].
cursor := (aNumber - 1) \\ texts size + 1.
currentText := texts at: cursor.
currentText startFadeIn! !
!TakahashiMethod methodsFor: 'actions' stamp: 'tak 4/21/2005 14:35'!
next
self goto: cursor + 1! !
!TakahashiMethod methodsFor: 'actions' stamp: 'tak 4/26/2005 14:59'!
open
navigation ifNotNil: [navigation delete].
self buildNavigation openInWorld.
self goto: cursor! !
!TakahashiMethod methodsFor: 'initialize-release' stamp: 'tak 7/14/2005 21:55'!
buildNavigation
"self new buildNavigation openInWorld"
| base label selector center morph |
base := Morph new.
base extent: Display width @ 30.
base
color: (Color white alpha: 0.5).
base beSticky.
(self buttonSpec: base)
do: [:spec |
label := spec first.
selector := spec second.
center := spec third.
morph := SimpleButtonMorph new.
base addMorph: morph.
morph color: Color transparent.
morph borderColor: Color transparent.
morph
label: label
font: (StrikeFont familyName: self defaultStyleName size: 36).
morph target: self.
morph actionSelector: selector.
morph center: center].
^ navigation := base! !
!TakahashiMethod methodsFor: 'initialize-release' stamp: 'tak 4/25/2005 21:02'!
buildTextMorph
^ TextMorph new
"
| window |
window := (StringHolder new)
contents: '';
embeddedInMorphicWindowLabeled: 'null'.
^window findDeeplyA: TextMorphForEditView
"! !
!TakahashiMethod methodsFor: 'initialize-release' stamp: 'tak 4/21/2005 16:18'!
buttonSpec: base
"label, selector, position"
^ {
{' <- '. #back. 50 @ base center y}.
{' -> '. #next. base width - 70 @ base center y}.
{'X'. #delete. base width - 20 @ base center y}.
}! !
!TakahashiMethod methodsFor: 'initialize-release' stamp: 'tak 4/21/2005 14:07'!
initialize
texts _ #().
cursor _ 1.! !
!TakahashiMethod class methodsFor: 'instance creation' stamp: 'tak 4/26/2005 14:57'!
last
"Get last presentation"
^Last ifNil: [Last _ self new]! !
!TakahashiMethod class methodsFor: 'instance creation' stamp: 'tak 4/26/2005 20:24'!
openSpec: spec
^ (self last readSpec: spec) open! !
!TakahashiMethod class methodsFor: 'example' stamp: 'tak 4/28/2005 13:45'!
example1
"TakahashiMethod example1"
TakahashiMethod openSpec: #(
('TAKA
HASHI
method' 150)
('in Squeak' 200)
('How To Use' 200)
('See TakahashiMethod class >> example1
TakahashiMethod browse' 36)
('That is easy!!' 200)
('You can write a scenario as a' 100)
('text' 200)
('The syntax is just a Smalltalk Array' 100)
('Don''t worry' 200)
('That is tremendously' 100)
('Simple.' 200)
('(''Hi, there!!'' 150)' 100)
('First element is a string which you want to show' 50)
('Second is
font size' 150)
('Also, you can use
<font color=red>
HTML tag
</font>
in the text' 50)
('Additionally,
this is' 100)
('Smalltalk' 150)
('Everything is an' 100)
('Object!!' 200)
('<doit> tag can be used whenever you want to do it!!' 100)
('(3 + 4) inspect!!' 150)
('Object beep: ''croak''!!' 100)
('''C:\WINDOWS\system32\calc.exe'' shellOpen
(windows only)' 36)
('''C:\WINDOWS\system32\calc.exe'' shellOpen
(windows only)' 36)
('''http://www.squeakland.org/projects/etoys/PaintTutorial4.009.pr'' asUrl enter' 36)
('''PaintTutorial4'' enter' 36)
('Have fun!!' 200)
)! !
!TakahashiMethod class methodsFor: 'example' stamp: 'tak 4/28/2005 13:53'!
kyotoDemo20050427
"TakahashiMethod kyotoDemo20050427"
TakahashiMethod openSpec: #(
('Squeak Everyday' 150)
('Takashi Yamamiya Squeak Developer' 100)
('3 Years Ago' 100)
('I met Squeak' 100)
('I was fascinated by the idea of End User Programming.' 50)
('End User Programming?' 100)
('Today''s theme' 200)
('Language changed the way of thinking
-- 50,000 years ago' 50)
('Writing changed the way of thinking
-- 5,000 years ago' 50)
('Printing changed the way of thinking
-- 500 years ago' 50)
('How About Programming?
-- 50 years ago' 50)
('Today''s theme' 200)
('My activity with End User Programming' 100)
('Today''s sub theme' 100)
('1: Structure of Programming.
2: Notation of Programming.
3: Idea sharing with Programming.
4: Programming without language.
5: Learning Programming' 40)
('1: Structure of Programming.' 100)
('2003
- LanguageGame -
Interactive Parser Generator' 50)
('Why can computer understand language?' 100)
('Goal:
Visualization how to recognize a program by computer.' 50)
('LanguageGame has two pane.
Top: Describe the Grammar.
Bottom: Describe the Example.' 50)
('First example knows only the sentence ''Hello world''' 50)
('''HelloWorld'' enter' 50)
('A wild card is used to read any word or number.' 50)
('''WildCard'' enter' 50)
('Next example recognizes a structured sentence.' 50)
('''BonzeAlice'' enter' 50)
('An action block means how to do when a pattern matched.' 50)
('''ActionBlock'' enter' 50)
('User can design own language and play it.' 100)
('2: Notation of Programming.
' 100)
('2004
- Skeleton -
Easy constraint system' 50)
('There are two notation styles of programming language' 50)
('Imperative' 100)
('Declarative' 100)
('Imperative: How to
0 + 2 => 2
2 + 2 => 4
4 + 2 => 6
6 + 2 => 8 ...' 70)
('Declarative: What is
A(1) = 0
A(n) = A(n-1) + 2' 70)
('Declarative is better way to describe a relationship among objects' 70)
('Spread sheet is a poplar tool to describe a formula declarative way.' 70)
('''SpreadSheet'' enter' 50)
('You can connect any morph to cell.' 100)
('''SpreadSheet'' enter' 50)
('Bi-directional constraint' 100)
('''BiDirectional'' enter' 50)
('Making graph' 200)
('''Lissajous'' enter' 50)
('3: Idea sharing with Programming.
' 100)
('2004
- ScamperWorkspace -
Communication tool
by textual programming' 50)
('Recently, we can communicate through various kind of
rich media.' 50)
('Picture' 200)
('Sound' 200)
('Video' 200)
('... But' 200)
('We can make rich communication with just a text' 50)
('with Programming' 100)
('''ScamperWorkspace'' enter' 50)
('ScamperWorkspace
is a simple tool' 70)
('Web browser
+
Workspace
+
Swiki' 70)
('But it could be a very rich media' 100)
('4: Programming without language.
' 100)
('2004
- ODECo -
Dynamics engine toolkit' 50)
('''ODECoDemo.lnk'' shellOpen' 50)
('Why can user make something without language?' 100)
('Power of Metaphor' 150)
('I
know how the gravity works.' 100)
('You
know how the gravity works.' 100)
('Computer
knows how the gravity works.' 100)
('Metaphor is powerful tool to reduce complexity' 100)
('5: Learning Programming' 100)
('2004
- Metatoys -
Workshop curriculum
Making your own tools with etoys' 50)
('Meta Media' 200)
('One of the goal of early Smalltalk' 100)
('The computer can be other medium' 100)
('a painter''s canvas,
an animator''s cels,
a musician''s instrument...' 50)
('Our idea is Restricted by medium unconsciously.' 100)
('We can make our medium with the computer' 100)
('Let''s take off the restriction of media!!' 100)
('Meta-toys was made as a curriculum mainly for the humanities course student.' 50)
('- Goal -
Make your own tools in etoys' 100)
('Teacher''s examples' 50)
('''industrial'' enter' 50)
('''Pointillism'' enter' 50)
('Students'' works
Hakodate Future University
Kwansei Gakuin University' 50)
('''HakodateDemo.lnk'' shellOpen' 50)
('Conclusion' 100)
('Why is
programming
important?' 100)
('After invented
Language,
thinking became
monolog.' 70)
('After invented
Writing,
thinking became
reading and writing.' 70)
('After invented
Programming,
thinking would be
coding.' 70)
('Explicit idea -- Program
Implicit idea -- Art' 50)
('Goal:
Develop a tool
to bring
new culture' 100)
)! !
!TakahashiMethod class methodsFor: 'example' stamp: 'tak 4/28/2005 13:52'!
openFileNamed: fileName
"self openFileNamed: 'spec.txt'
-- spec.txt is like that,
('Good morning' 100)
('Good evening' 100)
('Good night' 100)
"
| f source |
f := FileDirectory default readOnlyFileNamed: fileName.
[source := Compiler evaluate: '#( ' , f contents , ' )'] ensure: [f close].
TakahashiMethod openSpec: source! !
!TakahashiMethod class methodsFor: 'configuration' stamp: 'tak 7/14/2005 15:46'!
initializeJapaneseFont
"self initializeJapaneseFont"
TTCFontReader encodingTag: JapaneseEnvironment leadingChar.
TTCFontSet newTextStyleFromTTFile: 'C:\WINDOWS\Fonts\msgothic.TTC'.
TTCFont allInstances do: [:i | i setupDefaultFallbackFontTo: (TextStyle named: 'MultiMSGothic')].! !
!TakahashiMethod class methodsFor: 'configuration' stamp: 'tak 7/16/2005 10:29'!
kyotoDemo20050706
"TakahashiMethod kyotoDemo20050706"
ActiveWorld color: Color black.
self openFileNamed: 'scenario.txt'.
! !
!TakahashiMethodTest methodsFor: 'testing' stamp: 'tak 7/14/2005 16:16'!
testBuildElement
"self debug: #testBuildElement"
| t morph |
t _ TakahashiMethod new.
morph _ t buildElement: 'hello' size: 100.
self assert: (morph text = 'hello').! !
!TakahashiMethodTest methodsFor: 'testing' stamp: 'tak 7/14/2005 18:01'!
testBuildImageElement
"self debug: #testBuildImageElement"
| t morph |
t _ TakahashiMethod new.
morph _ t buildElement: '
' size: 100.
self assert: morph class = SketchMorph! !
!TextMorph methodsFor: '*TakahashiMethod' stamp: 'tak 4/21/2005 15:47'!
fadeAlphaFrom: from to: to by: by
| fadeAlpha currentColor |
self world
ifNil: [self openInWorld].
fadeAlpha := (self valueOfProperty: #fadeAlpha)
ifNil: [from].
"Transcript cr; show: self contents, fadeAlpha printString."
fadeAlpha := fadeAlpha + by.
self setProperty: #fadeAlpha toValue: fadeAlpha.
currentColor := self textColor.
self
textColor: (Color
r: currentColor red
g: currentColor green
b: currentColor blue
alpha: fadeAlpha).
fadeAlpha <= 0
ifTrue: [self delete].
((from to: to by: by)
rangeIncludes: fadeAlpha)
ifFalse: [self removeProperty: #fadeAlpha.
ActiveWorld stopStepping: self selector: #fadeAlphaFrom:to:by:]! !
!TextMorph methodsFor: '*TakahashiMethod' stamp: 'tak 7/15/2005 01:06'!
startFadeIn
"(TextMorph new contents: 'FADE IN') startFadeIn"
self textColor: (self textColor alpha: 0).
self openInWorld.
self world
startStepping: self
at: Time millisecondClockValue
selector: #fadeAlphaFrom:to:by:
arguments: {0. 1. 0.2}
stepTime: 50! !
!TextMorph methodsFor: '*TakahashiMethod' stamp: 'tak 4/24/2005 23:36'!
startFadeOut
"(TextMorph new contents: 'FADE OUT') startFadeOut"
self openInWorld.
self world
startStepping: self
at: Time millisecondClockValue
selector: #fadeAlphaFrom:to:by:
arguments: {1. 0. -0.2}
stepTime: 50! !
!String reorganize!
('accessing' at: at:put: byteAt: byteAt:put: byteSize)
('comparing' < <= = > >= caseInsensitiveLessOrEqual: caseSensitiveLessOrEqual: compare: sameAs:)
('copying')
('converting' asCharacter asMultiString asOctetString asSignedInteger asUnHtml convertFromCompoundText convertFromSuperSwikiServerString convertFromSystemString convertToSuperSwikiServerString convertToSystemString)
('displaying')
('printing')
('private' replaceFrom:to:with:startingAt:)
('system primitives' compare:with:collated: findSubstring:in:startingAt:matchTable:)
('Celeste')
('internet')
('testing' includesUnifiedCharacter isOctetString)
('paragraph support')
('arithmetic')
('filter streaming')
('encoding')
('user interface')
('Camp Smalltalk')
('*packageinfo-base')
('translating')
('formatting')
('*morphic-Postscript Canvases')
('*versionnumber')
('*network-HTML' replaceHtmlCharRefs)
('*FSM-events' eventType)
('*connectors-converting' splitOnCapBoundaries)
('*connectors-comparing' beginsWith2:)
('*monticello')
('*ggame-smacc')
('*takahashiMethod' enter shellOpen)
!
!ServerFile reorganize!
('as yet unclassified' asStream directoryUrl exists fileName fileName: fileNameRelativeTo: fullPath: localName readOnly readWrite realUrl writable)
('file directory')
('*takahashiMethod' fullNameFor:)
!
!HttpUrl reorganize!
('downloading' askNamePassword checkAuthorization:retry: loadRemoteObjects normalizeContents: postFormArgs: postMultipartFormArgs: privateInitializeFromText:relativeTo: realm retrieveContents retrieveContentsAccept: retrieveContentsArgs: retrieveContentsArgs:accept:)
('*takahashiMethod' enter)
('testing' hasRemoteContents)
!
Object subclass: #HtmlFormatter
instanceVariableNames: 'browser baseUrl formDatas outputStream preformattedLevel indentLevel boldLevel italicsLevel underlineLevel strikeLevel centerLevel urlLink listLengths listTypes precedingSpaces precedingNewlines morphsToEmbed incompleteMorphs anchorLocations imageMaps doItText'
classVariableNames: 'CSNonSeparators CSSeparators'
poolDictionaries: ''
category: 'Network-HTML-Formatter'!
HtmlDoIt initialize!
!AbstractString reorganize!
('accessing' at:put: byteAt: byteAt:put: byteSize do:toFieldNumber: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findCloseParenthesisFor: findDelimiters:startingAt: findLastOccuranceOfString:startingAt: findString: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: findWordStart:startingAt: includesSubString: includesSubstring:caseSensitive: indexOf: indexOf:startingAt: indexOf:startingAt:ifAbsent: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: indexOfSubCollection: indexOfSubCollection:startingAt:ifAbsent: lastIndexOfPKSignature: leadingCharRunLengthAt: lineCorrespondingToIndex: lineCount lineNumber: linesDo: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit tabDelimitedFieldsDo:)
('comparing' < <= = > >= alike: beginsWith: caseInsensitiveLessOrEqual: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: crc16 endsWith: endsWithAnyOf: hash hashMappedBy: howManyMatch: match: sameAs: startingAt:match:startingAt:)
('copying' copyReplaceTokens:with: deepCopy padded:to:with:)
('converting' adaptToCollection:andSend: adaptToNumber:andSend: adaptToPoint:andSend: adaptToString:andSend: asCharacter asDate asDateAndTime asDefaultDecodedString asDisplayText asDuration asFileName asFourCode asHex asHtml asIRCLowercase asIdentifier: asInteger asLegalSelector asLowercase asMorph asNumber asOctetString asPacked asParagraph asSignedInteger asSmalltalkComment asSqueakPathName asString asStringOrText asSymbol asText asTime asTimeStamp asUnHtml asUppercase asUrl asUrlRelativeTo: asVmPathName askIfAddStyle:req: capitalized compressWithTable: contractTo: convertFromWithConverter: convertToWithConverter: correctAgainst: correctAgainst:continuedFrom: correctAgainstDictionary:continuedFrom: encodeForHTTP findSelector initialIntegerOrNil keywords numericSuffix onlyLetters openAsMorph romanNumber sansPeriodSuffix splitInteger stemAndNumericSuffix subStrings subStrings: substrings surroundedBySingleQuotes translateFrom:to:table: translateToLowercase translateToUppercase translateWith: truncateTo: truncateWithElipsisTo: unparenthetically unzipped withBlanksCondensed withBlanksTrimmed withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits withoutTrailingBlanks withoutTrailingDigits)
('displaying' displayAt: displayOn: displayOn:at: displayOn:at:textColor: displayProgressAt:from:to:during: newTileMorphRepresentative)
('printing' basicType encodeDoublingQuoteOn: isLiteral printOn: storeOn: stringRepresentation)
('private' correctAgainstEnumerator:continuedFrom: evaluateExpression:parameters: getEnclosedExpressionFrom: replaceFrom:to:with:startingAt: stringhash)
('system primitives' compare:with:collated: findSubstring:in:startingAt:matchTable: numArgs)
('Celeste' withCRs)
('internet' decodeMimeHeader decodeQuotedPrintable isoToSqueak isoToUtf8 squeakToIso unescapePercents utf8ToIso withInternetLineEndings withSqueakLineEndings withoutQuoting)
('testing' hasContentsInExplorer includesUnifiedCharacter isAllDigits isAllSeparators isAsciiString isOctetString isString isUnicodeString lastSpacePosition)
('paragraph support' indentationIfBlank:)
('arithmetic' * + - / // \\)
('filter streaming' byteEncode: putOn:)
('encoding' getInteger32: putInteger32:at:)
('user interface' asExplorerString openInWorkspaceWithTitle:)
('Camp Smalltalk' sunitAsSymbol sunitMatch: sunitSubStrings)
('*packageinfo-base' escapeEntities)
('translating' translated translatedIfCorresponds translatedTo:)
('formatting' format:)
('*morphic-Postscript Canvases' asPostscript)
('*versionnumber' asVersion)
('*Refactory-RBAddonsProblem')
('*Refactory-RBAddonsReasonable')
('*takahashiMethod')
('*network-HTML' replaceHtmlCharRefs)
!