gui/PPDrabBrowser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Jun 2015 06:45:26 +0100
changeset 489 0ca7a70db0f5
parent 346 54014cb98092
permissions -rw-r--r--
Fix in codegen for inlined sequence nodes. For inlined sequence nodes, generate nested ifs rather than sequential code which does not work when inlined. The reason is that #codeReturn: in inline generates instvar assignment, not method return, so in sequential code the next child of a sequence will be probed even if previous failed. If that happends, the whole sequence fail and therefore we must generate nested ifs to correctly handle this w.r.t. inlining.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
329
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/gui' }"
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#PPDrabBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'browser input stream output rootClass'
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitGui-Core'
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPDrabBrowser methodsFor:'accessing'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
rootClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ rootClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
rootModel
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	^ self subclassesOf: self rootClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!PPDrabBrowser methodsFor:'accessing-view'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
production
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	| parser |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	^ (parser := self selectedClass new)
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
		productionAt: (self selectedSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
			ifNil: [ ^ parser ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
selectedClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
	^ ((browser paneNamed: #class) port: #selection) value
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
selectedClass: aClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	((browser paneNamed: #class) update; port: #selection) value: aClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
selectedSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	^ ((browser paneNamed: #selector) port: #selection) value
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
selectedSelector: aSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	((browser paneNamed: #selector) update; port: #selection) value: aSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
sourceCode
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	^ (self selectedClass ifNil: [ ^ String new ]) 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
		sourceCodeAt: (self selectedSelector ifNil: [ #start ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
		ifAbsent: [ String new ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
sourceCode: aString in: aClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        | tree source selector |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        tree := RBParser parseMethod: aString onError: [ :msg :pos | nil ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        source := tree isNil
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
                ifTrue: [ aString ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
                ifFalse: [ 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
                        | rewriter |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
                        rewriter := ParseTreeRewriter new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
                        rewriter
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
                                replace: '`#literal' with: '`#literal asParser' when: [ :node |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
                                        (node isLiteralNode and: [ node value isString or: [ node value isCharacter ] ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
                                                and: [ (node parent isNil or: [ node parent isMessage not or: [ node parent selector ~= #asParser ] ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
                                                and: [ (node parents noneSatisfy: [ :each | each isBlock ]) ] ] ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
                                replaceMethod: '`@method: `@args | `@temps | ``@.statements. ``.statement `{ :node | node isReturn not }' 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
                                        with: '`@method: `@args | `@temps | ``@.statements. ^ ``.statement'.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
                        (rewriter executeTree: tree)
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
                                ifTrue: [ rewriter tree newSource ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
                                ifFalse: [ aString ] ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        selector := aClass compile: source.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
        (aString numArgs = 0 and: [ (aClass allInstVarNames includes: selector) not ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
                ifTrue: [ aClass addInstVarNamed: selector asString ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
        ^ selector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
!PPDrabBrowser methodsFor:'browse'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
browseClassesOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	aBrowser tree
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
		title: 'Grammars';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
		format: [ :class | class name ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
		children: [ :class | self subclassesOf: class ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
			| className |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
			className := UIManager default 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
				request: 'Class name' 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
				initialAnswer: '' 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
				title: 'New Parser'.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
			className isNil ifFalse: [ 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
				PPRefactoringUtils new 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
					performRefactoring: (PPAddParserRefactoring
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
						name: className asSymbol
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
						category: #ParserExample
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
						superclass: self selectedClass).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
				self selectedClass: (self class environment classNamed: className) ] ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
			on: $n entitled: 'New ... (n)';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
			| superclass |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
			superclass := self selectedClass superclass.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
			self performRefactoring: (PPRemoveParserRefactoring onClass: self selectedClass).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
			self selectedClass: superclass ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
			on: $r entitled: 'Remove (x)';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
			self selectedClass browse ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
			on: $b entitled: 'Browse (b)'
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
browseDynamicOn: aBrowser
346
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   109
        | tabulator |
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   110
        aBrowser useExplicitNotNil.
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   111
        
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   112
        tabulator := aBrowser tabulator.
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   113
        tabulator
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   114
                title: 'Dynamic';
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   115
                useExplicitNotNil;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   116
                row: #input; row: #output.
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   117
        tabulator transmit
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   118
                to: #input;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   119
                andShow: [ :a | self browseInputOn: a ].
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   120
        tabulator transmit
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   121
                to: #output;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   122
                from: #input;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   123
                andShow: [ :a | self browseOutputOn: a ].
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   124
                
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   125
        tabulator transmit
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   126
                from: #output;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   127
                to: #input -> #selectionInterval;
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   128
                when: [ :selection | selection notNil ];
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   129
                transformed: [ :selection | selection second to: selection third ]
329
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
browseOn: aComposite
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
	aComposite title: PPBrowser label; color: Color yellow muchDarker.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
	aComposite row: [ :row | row column: #class; column: #selector ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
	aComposite row: [ :row | row column: #part span: 2 ] span: 2.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
	aComposite transmit 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
		to: #class; 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
		andShow: [ :composite | self browseClassesOn: composite ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	aComposite transmit 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
		to: #selector; 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
		from: #class; 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
		andShow: [ :composite | self browseSelectorsOn: composite ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	aComposite transmit
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
		to: #part;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
		from: #class;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
		from: #selector;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
		andShow: [ :composite | self browsePartsOn: composite ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
browsePartsOn: aComposite
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	aComposite useExplicitNotNil.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
	aComposite tabbedArrangement.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	self browseStaticOn: aComposite.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	self browseDynamicOn: aComposite
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
browseSelectorsOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
	aBrowser list
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
		title: 'Productions';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
		format: [ :class | class asString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
		display: [ :class | 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
			((((class allInstVarNames
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
				copyWithoutAll: class ignoredNames)
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
				copyWithoutAll: self rootClass allInstVarNames)
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
				collect: [ :each | each asSymbol ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
				select: [ :each | class includesSelector: each ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
				asSortedCollection ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
			| selector |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
			selector := UIManager default 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
				request: 'Production name' 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
				initialAnswer: self selectedSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
				title: 'New production'.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
			selector isNil ifFalse: [ 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
				self performRefactoring: (PPRenameProdcutionRefactoring
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
					onClass: self selectedClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
					rename: self selectedSelector
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
					to: selector asSymbol).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
				self selectedSelector: selector asSymbol ] ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
			on: $r entitled: 'Rename... (r)';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
			self performRefactoring: (PPRemoveProdcutionRefactoring
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
				onClass: self selectedClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
				production: self selectedSelector).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
			self selectedSelector: nil ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
			on: $r entitled: 'Remove (x)';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
		selectionAct: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
			Smalltalk tools browser 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
				fullOnClass: self selectedClass 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
				selector: self selectedSelector ] 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
			on: $b entitled: 'Browse (b)'
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
browseStaticOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
	aBrowser useExplicitNotNil.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	aBrowser tabbedArrangement.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	self browseSourceOn: aBrowser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
	self browseGraphOn: aBrowser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
	self browseCyclesOn: aBrowser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
	self browseFirstOn: aBrowser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
	self browseFollowOn: aBrowser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
	self browseExampleOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
!PPDrabBrowser methodsFor:'browse-dynamic'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
browseInputOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
	aBrowser text
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
		display: [ :class :selector | input ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
		selectionPopulate: #selection on: $s entitled: 'Parse (s)' with: [ :presentation |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
			input := presentation text asString.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
			stream := PPBrowserStream on: input.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
			output := self production end 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
				parse: stream.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
			output isPetitFailure
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
				ifTrue: [ presentation selectionInterval: (output position + 1 to: output position) ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
			output ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
browseOutputOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
	aBrowser text
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
		title: 'Result';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
		display: [ output ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
		act: [:text | output inspect ] entitled: 'Inspect'.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
	aBrowser list
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
		title: 'Debugger';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
		format: [ :each | (String new: 2 * each fourth withAll: $ ) asText , each first, ' - ', each last printString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
		selectionAct: [:list | list selection last inspect ] entitled: 'Inspect token';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
		display: [ 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
			| depth trace |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
			depth := -1.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
			trace := OrderedCollection new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
			(self production end transform: [ :each |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
				each name notNil 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
					ifTrue: [ 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
						each >=> [ :s :cc |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
							| t r |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
							depth := depth + 1. 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
							trace addLast: (t := Array with: each name with: s position + 1 with: s position with: depth with: Object new with: nil).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
							r := cc value.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
							t at: t size put: r.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
							t at: 3 put: s position.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
							r isPetitFailure
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
								ifFalse: [ t at: 1 put: (t at: 1) asText allBold ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
							depth := depth - 1.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
							r ] ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
					ifFalse: [ each ] ])
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
				parse: input.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
			trace ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
	aBrowser table 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
		title: 'Tally';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
		column: 'Parser' evaluated: [ :each | each first displayName ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
		column: 'Count' evaluated: [ :each | each second printString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
		column: 'Percentage (%)' evaluated: [ :each | each third printString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
		display: [ stream asFrequencyTable ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
	aBrowser table 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
		title: 'Profile';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
		column: 'Parser' evaluated: [ :each | each first displayName ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
		column: 'Time (ms)' evaluated: [ :each | each second printString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
		column: 'Percentage (%)' evaluated: [ :each | each third printString ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
		display: [ stream asTimingTable ].
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
	aBrowser morph 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
		title: 'Progress';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
		display: [
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
			| morph |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
			morph := ScrollPane new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
			morph color: Color white.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
			morph scroller addMorph: stream asPositionMorph.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
			morph ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
!PPDrabBrowser methodsFor:'browse-static'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
browseCyclesOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	aBrowser list
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
		title: 'Cycles';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
		format: [ :parser | parser displayName ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
		display: [ :parsers | self production cycleSet ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
browseExampleOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
	aBrowser text
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
		title: 'Example';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
		display: [ :parsers | self production example ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
browseFirstOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
	aBrowser list
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
		title: 'First';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
		format: [ :parser | parser displayName ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
		display: [ :parsers | self production firstSet ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
browseFollowOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
	aBrowser list
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
		title: 'Follow';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
		format: [ :parser | parser displayName ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
		display: [ :parsers | 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
			| parser |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
			parser := self selectedClass new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
			parser followSets
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
				at: (parser productionAt: self selectedSelector)
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
				ifAbsent: [ Array with: nil asParser ] ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
browseGraphOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
	aBrowser morph
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
		title: 'Graph';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
		display: [ :parsers |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
			| morph |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
			morph := ScrollPane new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
			morph color: Color white.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
			morph scroller addMorph: self production morphicProduction.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
			morph ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
browseSourceOn: aBrowser
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
	aBrowser smalltalkCode
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
		title: 'Source';
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
		useExplicitNotNil;
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
		display: [ self sourceCode ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
		smalltalkClass: [ self selectedClass ];
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
		act: [ :node |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
			| refactoring |
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
			refactoring := PPDefineProdcutionRefactoring 	
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
				onClass: self selectedClass 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
				source: node text asString
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
				protocols: #(production).
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
			self performRefactoring: refactoring.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
			self selectedSelector: refactoring selector ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
		on: $s 
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
		entitled: 'accept (s)'
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!PPDrabBrowser methodsFor:'initialize-release'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
initialize
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
	super initialize.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
	input := String new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
	output := String new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
	stream := PPBrowserStream on: input
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
!PPDrabBrowser methodsFor:'public'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
openOn: aClass
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
	rootClass := aClass.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
	browser := GLMTabulator new.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
	self browseOn: browser.
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
	browser openOn: self rootModel
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
update
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
	browser entity: self rootModel
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
!PPDrabBrowser methodsFor:'querying'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
performRefactoring: aRefactoring
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
	^ PPRefactoringUtils new performRefactoring: aRefactoring
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
subclassesOf: aBehavior
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
	^ aBehavior subclasses asSortedCollection: [ :a :b | a name < b name ]
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
!PPDrabBrowser class methodsFor:'documentation'!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
version
346
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   377
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPDrabBrowser.st,v 1.2 2014-03-04 21:19:25 cg Exp $'
329
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
!
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
version_CVS
346
54014cb98092 class: PPDrabBrowser
Claus Gittinger <cg@exept.de>
parents: 329
diff changeset
   381
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPDrabBrowser.st,v 1.2 2014-03-04 21:19:25 cg Exp $'
329
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
! !
a5bd27e8e4c1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383