gui/PPParserInspector.st
changeset 332 b86b6a59e3c6
equal deleted inserted replaced
331:33ef8249a32b 332:b86b6a59e3c6
       
     1 "{ Package: 'stx:goodies/petitparser/gui' }"
       
     2 
       
     3 GLMCompositePresentation subclass:#PPParserInspector
       
     4 	instanceVariableNames:''
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'PetitGui-Core'
       
     8 !
       
     9 
       
    10 
       
    11 !PPParserInspector class methodsFor:'as yet unclassified'!
       
    12 
       
    13 openOn: aParserInstance
       
    14 	^ self new openOn: aParserInstance
       
    15 ! !
       
    16 
       
    17 !PPParserInspector methodsFor:'building'!
       
    18 
       
    19 compose
       
    20 	"self new openOn: PPArithmeticParser new"
       
    21 
       
    22 	self title: [:each | 'Parser Inspector on ', (each name ifNil: [each class name])].
       
    23 
       
    24 	self tabulator with: [ :browser | 
       
    25 		browser
       
    26 			column: #sample;
       
    27 			column: #inspectors.
       
    28 		(browser transmit)
       
    29 			fromOutsidePort: #entity;
       
    30 			fromOutsidePort: #sampleText;
       
    31 			to: #sample;
       
    32 			andShowIfNone: [ :a | self sampleIn: a ].
       
    33 		(browser transmit) 
       
    34 			from: #sample port: #text;
       
    35 			toOutsidePort: #sampleText.
       
    36 		(browser transmit)
       
    37 			from: #sample; "result"
       
    38 			passivelyFrom: #sample port: #text; "sample text"
       
    39 			from: #sample port: #stream; "parser stream"
       
    40 			fromOutsidePort: #entity; "parser"  
       
    41 			to: #inspectors;
       
    42 			andShow: [ :a | self inspectorsIn: a ].
       
    43 		browser transmit 
       
    44 			from: #inspectors; 
       
    45 			to: #sample port: #selectionInterval; 
       
    46 			transformed: [:debugResult | debugResult ifNotNil: [debugResult start to: debugResult end] ] ]
       
    47 ! !
       
    48 
       
    49 !PPParserInspector methodsFor:'private building'!
       
    50 
       
    51 debuggerIn: composite
       
    52 	composite tree
       
    53 		title: 'Debugger';
       
    54 		format: [:resultNode | resultNode formattedText ];
       
    55 		display: [ :result :sample :stream :parser | {PPParserDebuggerResult parse: sample with: parser } ];
       
    56 		children: [:resultNode | resultNode children ].
       
    57 !
       
    58 
       
    59 inspectorsIn: composite
       
    60 	self resultIn: composite.
       
    61 	self debuggerIn: composite.
       
    62 	self tallyIn: composite.
       
    63 	self profileIn: composite.
       
    64 	self progressIn: composite
       
    65 !
       
    66 
       
    67 profileIn: composite
       
    68 	composite table 
       
    69 		title: 'Profile';
       
    70 		column: 'Parser' evaluated: [ :each | each first displayName ];
       
    71 		column: 'Time (ms)' evaluated: [ :each | each second printString ];
       
    72 		column: 'Percentage (%)' evaluated: [ :each | each third printString ];
       
    73 		display: [ :result :sample :stream :parser  | stream asFrequencyTable ];
       
    74 		noSelection;
       
    75 		showOnly: 50
       
    76 !
       
    77 
       
    78 progressChartIn: composite
       
    79 	composite morph 
       
    80 		title: 'Progress';
       
    81 		display: [ :stream |
       
    82 			| morph |
       
    83 			morph := ScrollPane new.
       
    84 			morph color: Color white.
       
    85 			morph scroller addMorph: stream asPositionMorph.
       
    86 			morph ]
       
    87 !
       
    88 
       
    89 progressIn: composite
       
    90 	composite morph 
       
    91 		title: 'Progress';
       
    92 		display: [:result :sample :stream :parser  | 
       
    93 			| morph |
       
    94 			morph := ScrollPane new.
       
    95 			morph color: Color white.
       
    96 			morph scroller addMorph: stream asPositionMorph.
       
    97 			morph ]
       
    98 !
       
    99 
       
   100 resultIn: composite
       
   101 	(composite text)
       
   102 		title: 'Result';
       
   103 		display: [ :result :sample :stream :parser | result ];
       
   104 		act: [ :text :result :sample :stream :parser | result inspect ] icon: GLMUIThemeExtraIcons glamorousInspect entitled: 'Inspect';
       
   105 		act: [ :text :result :sample :stream :parser | result explore ] icon: GLMUIThemeExtraIcons glamorousSearch entitled: 'Explore'.
       
   106 !
       
   107 
       
   108 sampleIn: composite
       
   109 	(composite text)
       
   110 		title: 'Sample';
       
   111 		display: [:parser :sample | sample ifNil: [''] ];
       
   112 		allowNil;
       
   113 		populate: #selection
       
   114 			icon: GLMUIThemeExtraIcons glamorousPlay
       
   115 			on: $s
       
   116 			entitled: 'Parse (s)'
       
   117 			with: [ :presentation :parser | 
       
   118 				| stream output |
       
   119 				stream := PPBrowserStream on: presentation text asString.
       
   120 				output := parser parse: stream.
       
   121 				output isPetitFailure
       
   122 					ifTrue: [ presentation selectionInterval: (output position + 1 to: output position) ].
       
   123 				(presentation pane port: #stream) value: stream.
       
   124 				output ]
       
   125 !
       
   126 
       
   127 tallyIn: composite
       
   128 	composite table 
       
   129 		title: 'Tally';
       
   130 		column: 'Parser' evaluated: [ :each | each first displayName ];
       
   131 		column: 'Count' evaluated: [ :each | each second printString ];
       
   132 		column: 'Percentage (%)' evaluated: [ :each | each third printString ];
       
   133 		display: [:result :sample :stream :parser | stream asFrequencyTable ];
       
   134 		noSelection;
       
   135 		showOnly: 50
       
   136 ! !
       
   137 
       
   138 !PPParserInspector class methodsFor:'documentation'!
       
   139 
       
   140 version
       
   141     ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPParserInspector.st,v 1.1 2014-03-04 21:14:44 cg Exp $'
       
   142 !
       
   143 
       
   144 version_CVS
       
   145     ^ '$Header: /cvs/stx/stx/goodies/petitparser/gui/PPParserInspector.st,v 1.1 2014-03-04 21:14:44 cg Exp $'
       
   146 ! !
       
   147