gui/PPBrowserStream.st
author Claus Gittinger <cg@exept.de>
Sun, 22 Jul 2018 22:41:13 +0200
changeset 633 4be0b0537d80
parent 328 2562070b22a5
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
328
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/gui' }"
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPStream subclass:#PPBrowserStream
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'positions stamps parsers'
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitGui-Core'
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPBrowserStream methodsFor:'accessing'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
next
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	| result |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	result := super next.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	self step.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	^ result
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
next: aNumber
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	| result |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	result := super next: aNumber.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	self step.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	^ result
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!PPBrowserStream methodsFor:'converting'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
asExecutionTrace
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	| trace |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
	trace := OrderedCollection new: parsers size.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	1 to: parsers size do: [ :index |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
		| parser |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
		parser := parsers at: index.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
		parser name isNil ifFalse: [
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
			| start stop |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
			start := positions at: index.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
			stop := positions at: index + 1 ifAbsent: [ self size ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
			trace addLast: (Array with: parser with: start with: stop) ] ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	^ trace
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
asFrequencyTable
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	| bag total result |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	bag := parsers asBag.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	total := 100.0 / bag size.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	result := OrderedCollection new.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	bag sortedCounts 
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
		do: [ :each | result addLast: (Array with: each value with: each key with: total * each key) ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	^ result
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
asPositionDrawing
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	| stream source last |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	stream := WriteStream on: String new.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	source := self contents readStream.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	last := 0.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	[ source atEnd ] whileFalse: [
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
		[ source atEnd not and: [ source peek isSeparator ] ]
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
			whileTrue: [ source next ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
		stream nextPutAll: '\fill [source] ('; print: source position / 100.0; nextPutAll: ', 0) rectangle ('.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
		[ source atEnd not and: [ source peek isSeparator not ] ]
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
			whileTrue: [ source next ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
		stream print: source position / 100.0; nextPutAll: ', '; print: self positions size / 100.0; nextPutAll: ');'; cr ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
	stream nextPutAll: '\draw [parser] (0, 0)'.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
	1 to: self positions size do: [ :index |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
		last <= (self positions at: index)
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
			ifTrue: [ stream nextPutAll: ' --' ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
		last := self positions at: index.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
		stream nextPutAll: ' ('; print: last / 100.0; nextPutAll: ', '; print: index / 100.0; nextPut: $) ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	stream nextPut: $;.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	^ stream contents
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
asPositionMorph
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	| width height canvas morph |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
	width := self size + 1 min: 2048.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	height := self positions size min: 2048.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	canvas := FormCanvas extent: width @ height.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	self contents keysAndValuesDo: [ :index :char |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
		char isSeparator 
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
			ifFalse: [ canvas line: index @ 1 to: index @ height color: Color paleBlue ] ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	1 to: height do: [ :index |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
		canvas form colorAt: (self positions at: index) @ index put: Color black ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	morph := canvas form asMorph.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	morph 
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
		on: #mouseDown
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
		send: #mouseDown:with:
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
		to: self.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	^ morph
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
asTimingTable
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	| bag total result |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	bag := Bag new.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	1 to: stamps size - 1 do: [ :index |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		bag
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
			add: (parsers at: index) 
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
			withOccurrences: (stamps at: index + 1) - (stamps at: index) ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	total := stamps last - stamps first.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	result := OrderedCollection new.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	bag sortedCounts
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		do: [ :each | result addLast: (Array with: each value with: each key with: total * each key) ].
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	^ result
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!PPBrowserStream methodsFor:'information'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
parsers
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	^ parsers
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
positions
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
	^ positions
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
stamps
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
	^ stamps
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
!PPBrowserStream methodsFor:'positioning'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
position: aNumber
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	super position: aNumber.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	self step
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
reset
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
	super reset.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
	positions := OrderedCollection new: 1024.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	stamps := OrderedCollection new: 1024.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
	parsers := OrderedCollection new: 1024
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!PPBrowserStream methodsFor:'private'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
mouseDown: anEvent with: aMorph
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	| location string parser |
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	location := anEvent position.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	string := collection 
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
		copyFrom: (location x - 5 min: collection size max: 1) asInteger
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
		to: (location x + 5 min: collection size max: 1) asInteger.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	parser := parsers at: location y
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
step
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	positions addLast: position.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	stamps addLast: Time millisecondClockValue.
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	parsers addLast: thisContext sender sender receiver
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
!PPBrowserStream class methodsFor:'documentation'!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
version
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPBrowserStream.st,v 1.1 2014-03-04 21:14:15 cg Exp $'
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
!
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
version_CVS
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPBrowserStream.st,v 1.1 2014-03-04 21:14:15 cg Exp $'
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
! !
2562070b22a5 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161