'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) !