'From Squeak3.1alpha of 5 February 2001 [latest update: #3792] on 5 March 2001 at 6:24:43 pm'! "Change Set: syntax13 Date: 5 March 2001 Author: Bob Arning Improved deagglutination of keywords in method header Initial foray into ST76-style rcvr message <- value Browse SyntaxTestMethods>>st76LeftArrowTest: and get a tile scriptor from the menu to see how it works. "! !Object methodsFor: 'scripting' stamp: 'RAA 3/5/2001 18:13'! contentsGetz: x self contents: x! ! !SyntaxMorph methodsFor: 'menus' stamp: 'RAA 3/5/2001 18:00'! addToken: aString type: aColorOrSymbol on: aNode | sMorph modifiedString noiseWord col | self flag: #emphasis:. "who needs it. who doesn't" col _ (self addRow: aColorOrSymbol on: aNode) layoutInset: 1. noiseWord _ [ :w | w ifNotNil: [ col addMorphBack: (self noiseStringMorph: w); addMorphBack: (self tokenVerticalSeparator) ]. ]. self alansTest1 ifTrue: [ (self shouldBeBrokenIntoWords: aColorOrSymbol) ifTrue: [ modifiedString _ self substituteKeywordFor: aString. sMorph _ self addString: modifiedString special: (aColorOrSymbol == #unary). sMorph setProperty: #syntacticallyCorrectContents toValue: aString; contents: modifiedString. ] ifFalse: [ sMorph _ self addString: (modifiedString _ aString) special: false. ]. (#(keyword2 upArrow) includes: aColorOrSymbol) ifTrue: [ sMorph font: (self fontToUseForSpecialWord: modifiedString); color: (self colorForKeywords: aString and: modifiedString). ]. (#(keyword2 unary assignmentArrow methodHeader1 methodHeader2) includes: aColorOrSymbol) ifTrue: [ sMorph emphasis: 1. ]. aColorOrSymbol == #binary ifTrue: [sMorph color: self colorForBinaries]. aColorOrSymbol == #blockarg1 ifTrue: [ ]. (aColorOrSymbol == #variable or: [aColorOrSymbol == #tempVariable]) ifTrue: [ aString = 'self' ifTrue: [ sMorph setProperty: #wordyVariantOfSelf toValue: true. ]. noiseWord value: (self noiseWordBeforeVariableNode: aNode string: aString). ]. ] ifFalse: [ sMorph _ self addString: aString special: false. ]. col addMorphBack: sMorph. ^col! ! !SyntaxMorph methodsFor: 'node to morph' stamp: 'RAA 3/5/2001 18:06'! alanKeywordMessage: aNode isAConditional: template key: key args: args | nodeWithNilReceiver column keywords row onlyOne | (key == #collect: and: [args first isKindOf: BlockNode]) ifTrue: [ ^self alanKwdCollect: aNode isAConditional: template key: key args: args ]. key == #repeatFor:doing: ifTrue: [ ^self alanKwdRepeatForDoing: aNode isAConditional: template key: key args: args ]. key == #if:do: ifTrue: [ ^self alanKwdIfDo: aNode isAConditional: template key: key args: args ]. (args size = 1 and: [key endsWith: 'Getz:']) ifTrue: [ ^self alanKwdSetter: aNode isAConditional: 0 key: key args: args ]. nodeWithNilReceiver _ aNode copy receiver: nil. template = 1 ifTrue: [ self listDirection: #topToBottom. ]. column _ self addColumn: #keyword1 on: nodeWithNilReceiver. keywords _ key keywords. onlyOne _ args size = 1. keywords with: (args first: keywords size) do: [:kwd :arg | template = 1 ifTrue: [ column addMorphBack: (column transparentSpacerOfSize: 3@3). ]. (row _ column addRow: #keyword2 on: nodeWithNilReceiver) parseNode: (nodeWithNilReceiver as: (onlyOne ifTrue: [MessageNode] ifFalse: [MessagePartNode])); borderColor: row stdBorderColor. template = 1 ifTrue: [row addMorphBack: (row transparentSpacerOfSize: 20@6)]. row addToken: kwd type: #keyword2 on: (onlyOne ifTrue: [SelectorNode new key: kwd code: nil "fill this in?"] ifFalse: [KeyWordNode new]). (arg asMorphicSyntaxIn: row) setConditionalPartStyle. ]. onlyOne ifTrue: [ self replaceSubmorph: column by: row. column _ row. ]. ! ! !SyntaxMorph methodsFor: 'node to morph' stamp: 'RAA 3/5/2001 18:24'! alanKwdSetter: aNode isAConditional: template key: key args: args | nodeWithNilReceiver row kwdHolder | "== * For the line of code: ΚΚΚΚΚΚ LowerBox contents: 'abcde .....xyz' we are now displaying: ΚΚΚΚΚ [ (LowerBox ) contents ( 'abc .... xyz' ) ] We really want: ΚΚΚΚΚ [ (LowerBox)'s contents <-Κ ( 'abc ... xyz') ] ==" nodeWithNilReceiver _ aNode copy receiver: nil. (row _ self addRow: #keyword2 on: nodeWithNilReceiver) borderWidth: 1; parseNode: (nodeWithNilReceiver as: MessageNode); borderColor: row stdBorderColor. row addNoiseString: '''s' emphasis: 1. kwdHolder _ row addToken: key type: #keywordGetz on: (SelectorNode new key: key code: nil "fill this in?"). kwdHolder firstSubmorph setProperty: #syntacticallyCorrectContents toValue: key asString; contents: (key asString allButLast: 5); emphasis: 1. row addNoiseString: '_' emphasis: 1. (args first asMorphicSyntaxIn: row) setConditionalPartStyle ! ! !SyntaxMorph methodsFor: 'alans styles' stamp: 'RAA 3/5/2001 17:58'! shouldBeBrokenIntoWords: aSymbol ^#(methodHeader1 methodHeader2 keyword2 upArrow tempVariable tempVariableDeclaration blockarg2 variable) includes: aSymbol! ! !SyntaxTestMethods methodsFor: 'as yet unclassified' stamp: 'RAA 3/5/2001 18:10'! st76LeftArrowTest: foo foo contentsGetz: foo contents asUppercase ! !