gui/PPBrowserStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 19 Mar 2016 00:12:47 +0100
changeset 556 51c6afba5c91
parent 328 2562070b22a5
permissions -rw-r--r--
CI: Use VM provided by Pharo team on both Linux and Windows. Hand-crafter Pharo VM is no longer needed as the Linux slave in SWING build farm has been upgraded so it has compatible GLIBC. This makes CI scripts simpler and more usable for other people.
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