profligacy 0.2-jruby → 0.3-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +6 -4
- data/doc/rdoc/classes/Proc.src/M000001.html +4 -4
- data/doc/rdoc/classes/Proc.src/M000002.html +4 -4
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.html +296 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000014.html +28 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000015.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000016.html +19 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000017.html +23 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000018.html +27 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000019.html +19 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000020.html +23 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000021.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000022.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000023.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELGroupLayout.src/M000024.html +21 -0
- data/doc/rdoc/classes/Profligacy/LELNameScanner.html +189 -0
- data/doc/rdoc/classes/Profligacy/LELNameScanner.src/M000025.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELNameScanner.src/M000026.html +18 -0
- data/doc/rdoc/classes/Profligacy/LELNameScanner.src/M000027.html +18 -0
- data/doc/rdoc/classes/Profligacy/Swing/Build.html +30 -0
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000003.html +3 -6
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000004.html +4 -4
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000005.html +25 -31
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000006.html +4 -4
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000007.html +8 -8
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000008.html +21 -0
- data/doc/rdoc/classes/Profligacy/Swing/Build.src/M000009.html +24 -0
- data/doc/rdoc/classes/Profligacy/Swing/LEL.html +169 -0
- data/doc/rdoc/classes/Profligacy/Swing/LEL.src/M000010.html +33 -0
- data/doc/rdoc/classes/Profligacy/Swing/LEL.src/M000011.html +36 -0
- data/doc/rdoc/classes/Profligacy/Swing/RunnableProc.html +10 -10
- data/doc/rdoc/classes/Profligacy/Swing/RunnableProc.src/{M000008.html → M000012.html} +0 -0
- data/doc/rdoc/classes/Profligacy/Swing/RunnableProc.src/{M000009.html → M000013.html} +0 -0
- data/doc/rdoc/classes/Profligacy/Swing.html +5 -0
- data/doc/rdoc/classes/Profligacy.html +6 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/lib/profligacy/lel_rb.html +101 -0
- data/doc/rdoc/files/lib/profligacy/swing_rb.html +1 -1
- data/doc/rdoc/fr_class_index.html +3 -0
- data/doc/rdoc/fr_file_index.html +1 -0
- data/doc/rdoc/fr_method_index.html +20 -2
- data/examples/layout_test.rb +25 -0
- data/examples/swing8_lel.rb +63 -0
- data/lib/profligacy/LELParser$LELEventListener.class +0 -0
- data/lib/profligacy/LELParser.class +0 -0
- data/lib/profligacy/LELParser.java +342 -0
- data/lib/profligacy/LELParser.rl +84 -0
- data/lib/profligacy/lel.rb +199 -0
- data/lib/profligacy/swing.rb +18 -11
- metadata +38 -6
@@ -0,0 +1,342 @@
|
|
1
|
+
// line 1 "lib/profligacy/LELParser.rl"
|
2
|
+
package profligacy;
|
3
|
+
|
4
|
+
import java.io.IOException;
|
5
|
+
import javax.swing.*;
|
6
|
+
|
7
|
+
public class LELParser {
|
8
|
+
|
9
|
+
public interface LELEventListener {
|
10
|
+
public void col();
|
11
|
+
public void ltab();
|
12
|
+
public void valign(String dir);
|
13
|
+
public void id(String name);
|
14
|
+
public void row();
|
15
|
+
public void align(String dir);
|
16
|
+
public void setwidth(int width);
|
17
|
+
public void setheight(int height);
|
18
|
+
public void finished(boolean error);
|
19
|
+
public void expand();
|
20
|
+
}
|
21
|
+
|
22
|
+
// line 49 "lib/profligacy/LELParser.rl"
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
// line 27 "lib/profligacy/LELParser.java"
|
27
|
+
private static void init__LayoutExpressionLanguage_actions_0( byte[] r )
|
28
|
+
{
|
29
|
+
r[0]=0; r[1]=1; r[2]=2; r[3]=1; r[4]=3; r[5]=1; r[6]=6; r[7]=1;
|
30
|
+
r[8]=9; r[9]=1; r[10]=10; r[11]=1; r[12]=11; r[13]=2; r[14]=0; r[15]=7;
|
31
|
+
r[16]=2; r[17]=0; r[18]=8; r[19]=2; r[20]=4; r[21]=1; r[22]=2; r[23]=4;
|
32
|
+
r[24]=5;
|
33
|
+
}
|
34
|
+
|
35
|
+
private static byte[] create__LayoutExpressionLanguage_actions( )
|
36
|
+
{
|
37
|
+
byte[] r = new byte[25];
|
38
|
+
init__LayoutExpressionLanguage_actions_0( r );
|
39
|
+
return r;
|
40
|
+
}
|
41
|
+
|
42
|
+
private static final byte _LayoutExpressionLanguage_actions[] = create__LayoutExpressionLanguage_actions();
|
43
|
+
|
44
|
+
|
45
|
+
private static void init__LayoutExpressionLanguage_key_offsets_0( byte[] r )
|
46
|
+
{
|
47
|
+
r[0]=0; r[1]=0; r[2]=4; r[3]=15; r[4]=17; r[5]=21; r[6]=23; r[7]=26;
|
48
|
+
r[8]=35;
|
49
|
+
}
|
50
|
+
|
51
|
+
private static byte[] create__LayoutExpressionLanguage_key_offsets( )
|
52
|
+
{
|
53
|
+
byte[] r = new byte[9];
|
54
|
+
init__LayoutExpressionLanguage_key_offsets_0( r );
|
55
|
+
return r;
|
56
|
+
}
|
57
|
+
|
58
|
+
private static final byte _LayoutExpressionLanguage_key_offsets[] = create__LayoutExpressionLanguage_key_offsets();
|
59
|
+
|
60
|
+
|
61
|
+
private static void init__LayoutExpressionLanguage_trans_keys_0( char[] r )
|
62
|
+
{
|
63
|
+
r[0]=32; r[1]=91; r[2]=9; r[3]=13; r[4]=40; r[5]=42; r[6]=46; r[7]=60;
|
64
|
+
r[8]=62; r[9]=94; r[10]=95; r[11]=65; r[12]=90; r[13]=97; r[14]=122; r[15]=48;
|
65
|
+
r[16]=57; r[17]=41; r[18]=44; r[19]=48; r[20]=57; r[21]=48; r[22]=57; r[23]=41;
|
66
|
+
r[24]=48; r[25]=57; r[26]=93; r[27]=95; r[28]=124; r[29]=48; r[30]=57; r[31]=65;
|
67
|
+
r[32]=90; r[33]=97; r[34]=122; r[35]=32; r[36]=91; r[37]=9; r[38]=13; r[39]=0;
|
68
|
+
}
|
69
|
+
|
70
|
+
private static char[] create__LayoutExpressionLanguage_trans_keys( )
|
71
|
+
{
|
72
|
+
char[] r = new char[40];
|
73
|
+
init__LayoutExpressionLanguage_trans_keys_0( r );
|
74
|
+
return r;
|
75
|
+
}
|
76
|
+
|
77
|
+
private static final char _LayoutExpressionLanguage_trans_keys[] = create__LayoutExpressionLanguage_trans_keys();
|
78
|
+
|
79
|
+
|
80
|
+
private static void init__LayoutExpressionLanguage_single_lengths_0( byte[] r )
|
81
|
+
{
|
82
|
+
r[0]=0; r[1]=2; r[2]=7; r[3]=0; r[4]=2; r[5]=0; r[6]=1; r[7]=3;
|
83
|
+
r[8]=2;
|
84
|
+
}
|
85
|
+
|
86
|
+
private static byte[] create__LayoutExpressionLanguage_single_lengths( )
|
87
|
+
{
|
88
|
+
byte[] r = new byte[9];
|
89
|
+
init__LayoutExpressionLanguage_single_lengths_0( r );
|
90
|
+
return r;
|
91
|
+
}
|
92
|
+
|
93
|
+
private static final byte _LayoutExpressionLanguage_single_lengths[] = create__LayoutExpressionLanguage_single_lengths();
|
94
|
+
|
95
|
+
|
96
|
+
private static void init__LayoutExpressionLanguage_range_lengths_0( byte[] r )
|
97
|
+
{
|
98
|
+
r[0]=0; r[1]=1; r[2]=2; r[3]=1; r[4]=1; r[5]=1; r[6]=1; r[7]=3;
|
99
|
+
r[8]=1;
|
100
|
+
}
|
101
|
+
|
102
|
+
private static byte[] create__LayoutExpressionLanguage_range_lengths( )
|
103
|
+
{
|
104
|
+
byte[] r = new byte[9];
|
105
|
+
init__LayoutExpressionLanguage_range_lengths_0( r );
|
106
|
+
return r;
|
107
|
+
}
|
108
|
+
|
109
|
+
private static final byte _LayoutExpressionLanguage_range_lengths[] = create__LayoutExpressionLanguage_range_lengths();
|
110
|
+
|
111
|
+
|
112
|
+
private static void init__LayoutExpressionLanguage_index_offsets_0( byte[] r )
|
113
|
+
{
|
114
|
+
r[0]=0; r[1]=0; r[2]=4; r[3]=14; r[4]=16; r[5]=20; r[6]=22; r[7]=25;
|
115
|
+
r[8]=32;
|
116
|
+
}
|
117
|
+
|
118
|
+
private static byte[] create__LayoutExpressionLanguage_index_offsets( )
|
119
|
+
{
|
120
|
+
byte[] r = new byte[9];
|
121
|
+
init__LayoutExpressionLanguage_index_offsets_0( r );
|
122
|
+
return r;
|
123
|
+
}
|
124
|
+
|
125
|
+
private static final byte _LayoutExpressionLanguage_index_offsets[] = create__LayoutExpressionLanguage_index_offsets();
|
126
|
+
|
127
|
+
|
128
|
+
private static void init__LayoutExpressionLanguage_trans_targs_wi_0( byte[] r )
|
129
|
+
{
|
130
|
+
r[0]=1; r[1]=2; r[2]=1; r[3]=0; r[4]=3; r[5]=2; r[6]=2; r[7]=2;
|
131
|
+
r[8]=2; r[9]=2; r[10]=7; r[11]=7; r[12]=7; r[13]=0; r[14]=4; r[15]=0;
|
132
|
+
r[16]=2; r[17]=5; r[18]=4; r[19]=0; r[20]=6; r[21]=0; r[22]=2; r[23]=6;
|
133
|
+
r[24]=0; r[25]=8; r[26]=7; r[27]=2; r[28]=7; r[29]=7; r[30]=7; r[31]=0;
|
134
|
+
r[32]=8; r[33]=2; r[34]=8; r[35]=0; r[36]=0;
|
135
|
+
}
|
136
|
+
|
137
|
+
private static byte[] create__LayoutExpressionLanguage_trans_targs_wi( )
|
138
|
+
{
|
139
|
+
byte[] r = new byte[37];
|
140
|
+
init__LayoutExpressionLanguage_trans_targs_wi_0( r );
|
141
|
+
return r;
|
142
|
+
}
|
143
|
+
|
144
|
+
private static final byte _LayoutExpressionLanguage_trans_targs_wi[] = create__LayoutExpressionLanguage_trans_targs_wi();
|
145
|
+
|
146
|
+
|
147
|
+
private static void init__LayoutExpressionLanguage_trans_actions_wi_0( byte[] r )
|
148
|
+
{
|
149
|
+
r[0]=0; r[1]=1; r[2]=0; r[3]=0; r[4]=0; r[5]=7; r[6]=3; r[7]=5;
|
150
|
+
r[8]=5; r[9]=3; r[10]=11; r[11]=11; r[12]=11; r[13]=0; r[14]=9; r[15]=0;
|
151
|
+
r[16]=13; r[17]=13; r[18]=0; r[19]=0; r[20]=9; r[21]=0; r[22]=16; r[23]=0;
|
152
|
+
r[24]=0; r[25]=22; r[26]=0; r[27]=19; r[28]=0; r[29]=0; r[30]=0; r[31]=0;
|
153
|
+
r[32]=0; r[33]=1; r[34]=0; r[35]=0; r[36]=0;
|
154
|
+
}
|
155
|
+
|
156
|
+
private static byte[] create__LayoutExpressionLanguage_trans_actions_wi( )
|
157
|
+
{
|
158
|
+
byte[] r = new byte[37];
|
159
|
+
init__LayoutExpressionLanguage_trans_actions_wi_0( r );
|
160
|
+
return r;
|
161
|
+
}
|
162
|
+
|
163
|
+
private static final byte _LayoutExpressionLanguage_trans_actions_wi[] = create__LayoutExpressionLanguage_trans_actions_wi();
|
164
|
+
|
165
|
+
|
166
|
+
static final int LayoutExpressionLanguage_start = 1;
|
167
|
+
static final int LayoutExpressionLanguage_error = 0;
|
168
|
+
|
169
|
+
static final int LayoutExpressionLanguage_en_main = 1;
|
170
|
+
|
171
|
+
// line 52 "lib/profligacy/LELParser.rl"
|
172
|
+
|
173
|
+
public int cs, p = 0, pe = 0;
|
174
|
+
|
175
|
+
public boolean scan(String input, LELEventListener listener) {
|
176
|
+
int tk_start = 0;
|
177
|
+
p = 0;
|
178
|
+
String tk = null;
|
179
|
+
|
180
|
+
|
181
|
+
// line 182 "lib/profligacy/LELParser.java"
|
182
|
+
{
|
183
|
+
cs = LayoutExpressionLanguage_start;
|
184
|
+
}
|
185
|
+
// line 61 "lib/profligacy/LELParser.rl"
|
186
|
+
|
187
|
+
pe = input.length();
|
188
|
+
char data[] = input.toCharArray();
|
189
|
+
|
190
|
+
|
191
|
+
// line 192 "lib/profligacy/LELParser.java"
|
192
|
+
{
|
193
|
+
int _klen;
|
194
|
+
int _trans;
|
195
|
+
int _acts;
|
196
|
+
int _nacts;
|
197
|
+
int _keys;
|
198
|
+
|
199
|
+
if ( p != pe ) {
|
200
|
+
if ( cs != 0 ) {
|
201
|
+
_resume: while ( true ) {
|
202
|
+
_again: do {
|
203
|
+
_match: do {
|
204
|
+
_keys = _LayoutExpressionLanguage_key_offsets[cs];
|
205
|
+
_trans = _LayoutExpressionLanguage_index_offsets[cs];
|
206
|
+
_klen = _LayoutExpressionLanguage_single_lengths[cs];
|
207
|
+
if ( _klen > 0 ) {
|
208
|
+
int _lower = _keys;
|
209
|
+
int _mid;
|
210
|
+
int _upper = _keys + _klen - 1;
|
211
|
+
while (true) {
|
212
|
+
if ( _upper < _lower )
|
213
|
+
break;
|
214
|
+
|
215
|
+
_mid = _lower + ((_upper-_lower) >> 1);
|
216
|
+
if ( data[p] < _LayoutExpressionLanguage_trans_keys[_mid] )
|
217
|
+
_upper = _mid - 1;
|
218
|
+
else if ( data[p] > _LayoutExpressionLanguage_trans_keys[_mid] )
|
219
|
+
_lower = _mid + 1;
|
220
|
+
else {
|
221
|
+
_trans += (_mid - _keys);
|
222
|
+
break _match;
|
223
|
+
}
|
224
|
+
}
|
225
|
+
_keys += _klen;
|
226
|
+
_trans += _klen;
|
227
|
+
}
|
228
|
+
|
229
|
+
_klen = _LayoutExpressionLanguage_range_lengths[cs];
|
230
|
+
if ( _klen > 0 ) {
|
231
|
+
int _lower = _keys;
|
232
|
+
int _mid;
|
233
|
+
int _upper = _keys + (_klen<<1) - 2;
|
234
|
+
while (true) {
|
235
|
+
if ( _upper < _lower )
|
236
|
+
break;
|
237
|
+
|
238
|
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
|
239
|
+
if ( data[p] < _LayoutExpressionLanguage_trans_keys[_mid] )
|
240
|
+
_upper = _mid - 2;
|
241
|
+
else if ( data[p] > _LayoutExpressionLanguage_trans_keys[_mid+1] )
|
242
|
+
_lower = _mid + 2;
|
243
|
+
else {
|
244
|
+
_trans += ((_mid - _keys)>>1);
|
245
|
+
break _match;
|
246
|
+
}
|
247
|
+
}
|
248
|
+
_trans += _klen;
|
249
|
+
}
|
250
|
+
} while (false);
|
251
|
+
|
252
|
+
cs = _LayoutExpressionLanguage_trans_targs_wi[_trans];
|
253
|
+
|
254
|
+
if ( _LayoutExpressionLanguage_trans_actions_wi[_trans] == 0 )
|
255
|
+
break _again;
|
256
|
+
|
257
|
+
_acts = _LayoutExpressionLanguage_trans_actions_wi[_trans];
|
258
|
+
_nacts = (int) _LayoutExpressionLanguage_actions[_acts++];
|
259
|
+
while ( _nacts-- > 0 )
|
260
|
+
{
|
261
|
+
switch ( _LayoutExpressionLanguage_actions[_acts++] )
|
262
|
+
{
|
263
|
+
case 0:
|
264
|
+
// line 25 "lib/profligacy/LELParser.rl"
|
265
|
+
{ tk = input.substring(tk_start, p); }
|
266
|
+
break;
|
267
|
+
case 1:
|
268
|
+
// line 26 "lib/profligacy/LELParser.rl"
|
269
|
+
{ listener.col(); }
|
270
|
+
break;
|
271
|
+
case 2:
|
272
|
+
// line 27 "lib/profligacy/LELParser.rl"
|
273
|
+
{ listener.ltab(); }
|
274
|
+
break;
|
275
|
+
case 3:
|
276
|
+
// line 28 "lib/profligacy/LELParser.rl"
|
277
|
+
{ listener.valign(input.substring(p,p+1)); }
|
278
|
+
break;
|
279
|
+
case 4:
|
280
|
+
// line 29 "lib/profligacy/LELParser.rl"
|
281
|
+
{ listener.id(input.substring(tk_start, p)); }
|
282
|
+
break;
|
283
|
+
case 5:
|
284
|
+
// line 30 "lib/profligacy/LELParser.rl"
|
285
|
+
{ listener.row(); }
|
286
|
+
break;
|
287
|
+
case 6:
|
288
|
+
// line 31 "lib/profligacy/LELParser.rl"
|
289
|
+
{ listener.align(input.substring(p, p+1)); }
|
290
|
+
break;
|
291
|
+
case 7:
|
292
|
+
// line 32 "lib/profligacy/LELParser.rl"
|
293
|
+
{ listener.setwidth(Integer.parseInt(tk)); }
|
294
|
+
break;
|
295
|
+
case 8:
|
296
|
+
// line 33 "lib/profligacy/LELParser.rl"
|
297
|
+
{ listener.setheight(Integer.parseInt(tk)); }
|
298
|
+
break;
|
299
|
+
case 9:
|
300
|
+
// line 34 "lib/profligacy/LELParser.rl"
|
301
|
+
{ listener.expand(); }
|
302
|
+
break;
|
303
|
+
case 10:
|
304
|
+
// line 42 "lib/profligacy/LELParser.rl"
|
305
|
+
{ tk_start = p; }
|
306
|
+
break;
|
307
|
+
case 11:
|
308
|
+
// line 45 "lib/profligacy/LELParser.rl"
|
309
|
+
{tk_start = p;}
|
310
|
+
break;
|
311
|
+
// line 312 "lib/profligacy/LELParser.java"
|
312
|
+
}
|
313
|
+
}
|
314
|
+
|
315
|
+
} while (false);
|
316
|
+
if ( cs == 0 )
|
317
|
+
break _resume;
|
318
|
+
if ( ++p == pe )
|
319
|
+
break _resume;
|
320
|
+
}
|
321
|
+
} }
|
322
|
+
}
|
323
|
+
// line 66 "lib/profligacy/LELParser.rl"
|
324
|
+
|
325
|
+
|
326
|
+
listener.finished(isInErrorState());
|
327
|
+
|
328
|
+
if(isInErrorState()) {
|
329
|
+
return false;
|
330
|
+
} else {
|
331
|
+
return true;
|
332
|
+
}
|
333
|
+
}
|
334
|
+
|
335
|
+
public boolean isInErrorState() {
|
336
|
+
return cs == LayoutExpressionLanguage_error;
|
337
|
+
}
|
338
|
+
|
339
|
+
public int getPosition() {
|
340
|
+
return p;
|
341
|
+
}
|
342
|
+
}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
package profligacy;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import javax.swing.*;
|
5
|
+
|
6
|
+
public class LELParser {
|
7
|
+
|
8
|
+
public interface LELEventListener {
|
9
|
+
public void col();
|
10
|
+
public void ltab();
|
11
|
+
public void valign(String dir);
|
12
|
+
public void id(String name);
|
13
|
+
public void row();
|
14
|
+
public void align(String dir);
|
15
|
+
public void setwidth(int width);
|
16
|
+
public void setheight(int height);
|
17
|
+
public void finished(boolean error);
|
18
|
+
public void expand();
|
19
|
+
}
|
20
|
+
|
21
|
+
%%{
|
22
|
+
machine LayoutExpressionLanguage;
|
23
|
+
alphtype char;
|
24
|
+
|
25
|
+
action token { tk = input.substring(tk_start, fpc); }
|
26
|
+
action col { listener.col(); }
|
27
|
+
action ltab { listener.ltab(); }
|
28
|
+
action valign { listener.valign(input.substring(fpc,fpc+1)); }
|
29
|
+
action id { listener.id(input.substring(tk_start, fpc)); }
|
30
|
+
action row { listener.row(); }
|
31
|
+
action align { listener.align(input.substring(fpc, fpc+1)); }
|
32
|
+
action setwidth { listener.setwidth(Integer.parseInt(tk)); }
|
33
|
+
action setheight { listener.setheight(Integer.parseInt(tk)); }
|
34
|
+
action expand { listener.expand(); }
|
35
|
+
|
36
|
+
col = "|" $col;
|
37
|
+
ltab = "[" $ltab;
|
38
|
+
rtab = "]" $row;
|
39
|
+
valign = ("^" | ".") $valign;
|
40
|
+
expand = "*" $expand;
|
41
|
+
halign = ("<" | ">") $align;
|
42
|
+
number = digit+ >{ tk_start = fpc; } %token;
|
43
|
+
setw = ("(" number %setwidth ("," number %setheight)? ")") ;
|
44
|
+
modifiers = (expand | valign | halign | setw);
|
45
|
+
id = modifiers* ((alpha | '_')+ :>> (alnum | '_')*) >{tk_start = fpc;} %id;
|
46
|
+
row = space* ltab id (col id)* rtab space*;
|
47
|
+
|
48
|
+
main := row+;
|
49
|
+
}%%
|
50
|
+
|
51
|
+
%% write data nofinal;
|
52
|
+
|
53
|
+
public int cs, p = 0, pe = 0;
|
54
|
+
|
55
|
+
public boolean scan(String input, LELEventListener listener) {
|
56
|
+
int tk_start = 0;
|
57
|
+
p = 0;
|
58
|
+
String tk = null;
|
59
|
+
|
60
|
+
%% write init;
|
61
|
+
|
62
|
+
pe = input.length();
|
63
|
+
char data[] = input.toCharArray();
|
64
|
+
|
65
|
+
%% write exec;
|
66
|
+
|
67
|
+
|
68
|
+
listener.finished(isInErrorState());
|
69
|
+
|
70
|
+
if(isInErrorState()) {
|
71
|
+
return false;
|
72
|
+
} else {
|
73
|
+
return true;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
public boolean isInErrorState() {
|
78
|
+
return cs == LayoutExpressionLanguage_error;
|
79
|
+
}
|
80
|
+
|
81
|
+
public int getPosition() {
|
82
|
+
return p;
|
83
|
+
}
|
84
|
+
}
|
@@ -0,0 +1,199 @@
|
|
1
|
+
|
2
|
+
module Profligacy
|
3
|
+
include_package 'profligacy'
|
4
|
+
|
5
|
+
class LELNameScanner
|
6
|
+
include Profligacy::LELParser::LELEventListener
|
7
|
+
attr_reader :children
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@children = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def id(name)
|
14
|
+
@children << name.to_sym
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(symb, *args)
|
18
|
+
#ignored
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class LELGroupLayout
|
23
|
+
include Profligacy::LELParser::LELEventListener
|
24
|
+
|
25
|
+
include_class 'javax.swing.GroupLayout'
|
26
|
+
include_class 'javax.swing.JPanel'
|
27
|
+
include_class 'java.lang.Short'
|
28
|
+
|
29
|
+
def initialize(layout, components)
|
30
|
+
@layout = layout
|
31
|
+
@hgroup = @layout.createSequentialGroup
|
32
|
+
@vgroup = @layout.createSequentialGroup
|
33
|
+
@vertical = nil
|
34
|
+
@horizontals = []
|
35
|
+
@components = components
|
36
|
+
|
37
|
+
alignments_reset
|
38
|
+
widths_reset
|
39
|
+
heights_reset
|
40
|
+
horizontals_reset
|
41
|
+
end
|
42
|
+
|
43
|
+
def col
|
44
|
+
horizontals_push; alignments_reset ; widths_reset
|
45
|
+
end
|
46
|
+
|
47
|
+
def ltab
|
48
|
+
horizontals_reset
|
49
|
+
@vertical = @layout.createParallelGroup
|
50
|
+
end
|
51
|
+
|
52
|
+
def valign(dir)
|
53
|
+
case dir
|
54
|
+
when "^" then @valign = GroupLayout::Alignment::LEADING
|
55
|
+
when "." then @valign = GroupLayout::Alignment::TRAILING
|
56
|
+
else
|
57
|
+
raise "Invalid Vertical Alignment: #{dir}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def id(name)
|
62
|
+
h = horizontals_cur
|
63
|
+
component = @components[name]
|
64
|
+
|
65
|
+
if component
|
66
|
+
# add it in
|
67
|
+
@vertical.addComponent(component, @valign, GroupLayout::DEFAULT_SIZE, @height, @max)
|
68
|
+
h.addComponent(component, @halign, GroupLayout::DEFAULT_SIZE, @width, @max)
|
69
|
+
elsif name != "_"
|
70
|
+
raise "Cell named '#{name}' does not have a component set during build."
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def row
|
75
|
+
@vgroup.addGroup(@vertical);
|
76
|
+
alignments_reset ; widths_reset ; heights_reset
|
77
|
+
end
|
78
|
+
|
79
|
+
def align(direction)
|
80
|
+
case direction
|
81
|
+
when "<" then @halign = GroupLayout::Alignment::LEADING
|
82
|
+
when ">" then @halign = GroupLayout::Alignment::TRAILING
|
83
|
+
else
|
84
|
+
raise "Invalid Horizontal Alignment: #{direction}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def setwidth(width)
|
89
|
+
@width = width
|
90
|
+
end
|
91
|
+
|
92
|
+
def setheight(height)
|
93
|
+
@height = height
|
94
|
+
end
|
95
|
+
|
96
|
+
def expand
|
97
|
+
@max = Short::MAX_VALUE
|
98
|
+
end
|
99
|
+
|
100
|
+
def finished(error)
|
101
|
+
if !error
|
102
|
+
@layout.setHorizontalGroup(@hgroup);
|
103
|
+
@layout.setVerticalGroup(@vgroup);
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def alignments_reset
|
110
|
+
@valign = GroupLayout::Alignment::CENTER
|
111
|
+
@halign = GroupLayout::Alignment::CENTER
|
112
|
+
end
|
113
|
+
|
114
|
+
def widths_reset
|
115
|
+
@width = GroupLayout::DEFAULT_SIZE
|
116
|
+
@max = GroupLayout::DEFAULT_SIZE
|
117
|
+
end
|
118
|
+
|
119
|
+
def heights_reset
|
120
|
+
@height = GroupLayout::DEFAULT_SIZE
|
121
|
+
end
|
122
|
+
|
123
|
+
def horizontals_reset
|
124
|
+
@htop = 0
|
125
|
+
end
|
126
|
+
|
127
|
+
def horizontals_push
|
128
|
+
@htop += 1
|
129
|
+
end
|
130
|
+
|
131
|
+
def horizontals_cur
|
132
|
+
if !@horizontals[@htop]
|
133
|
+
@horizontals[@htop] = @layout.createParallelGroup(@valign)
|
134
|
+
@hgroup.addGroup(@horizontals[@htop])
|
135
|
+
end
|
136
|
+
|
137
|
+
@horizontals[@htop]
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
module Swing
|
144
|
+
class LEL < Build
|
145
|
+
include_class 'javax.swing.GroupLayout'
|
146
|
+
attr_reader :prefs
|
147
|
+
|
148
|
+
def initialize(type, expr)
|
149
|
+
|
150
|
+
@expr = expr
|
151
|
+
@container_class = type
|
152
|
+
@parser = LELParser.new
|
153
|
+
names = LELNameScanner.new
|
154
|
+
@prefs = {
|
155
|
+
:auto_create_gaps => true,
|
156
|
+
:auto_create_container_gaps => true,
|
157
|
+
:honors_visibility => true,
|
158
|
+
:pack => true,
|
159
|
+
:visible => true,
|
160
|
+
:args => []
|
161
|
+
}
|
162
|
+
parse(names)
|
163
|
+
setup_children_and_interactions(names.children)
|
164
|
+
yield @contents, @interactions
|
165
|
+
end
|
166
|
+
|
167
|
+
def build(prefs={})
|
168
|
+
prefs = @prefs.merge prefs
|
169
|
+
|
170
|
+
@container = @container_class.new(*(prefs[:args]))
|
171
|
+
pane = @container.respond_to?(:content_pane) ? @container.content_pane : @container
|
172
|
+
layout = GroupLayout.new pane
|
173
|
+
@container.layout = layout
|
174
|
+
layout.auto_create_gaps = prefs[:auto_create_gaps]
|
175
|
+
layout.auto_create_container_gaps = prefs[:auto_create_container_gaps]
|
176
|
+
layout.honors_visibility = prefs[:honors_visibility]
|
177
|
+
|
178
|
+
parse(LELGroupLayout.new(layout, @contents))
|
179
|
+
|
180
|
+
@children.each {|child|
|
181
|
+
configure_interactions_for(child,@contents[child]) if @contents[child]
|
182
|
+
}
|
183
|
+
|
184
|
+
@container.pack if (prefs[:pack] && @container.respond_to?(:pack))
|
185
|
+
@container.visible = prefs[:visible] if @container.respond_to? :visible
|
186
|
+
@container
|
187
|
+
end
|
188
|
+
|
189
|
+
private
|
190
|
+
|
191
|
+
def parse(listener)
|
192
|
+
if !@parser.scan(@expr, listener)
|
193
|
+
raise "LEL parsing error at #{@parser.position} from: '#{@expr[@parser.position-1 .. @parser.position + 30]}' ..."
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
199
|
+
end
|
data/lib/profligacy/swing.rb
CHANGED
@@ -65,10 +65,7 @@ module Profligacy
|
|
65
65
|
|
66
66
|
def initialize(*children)
|
67
67
|
@container_class = children.shift
|
68
|
-
|
69
|
-
@klass = Struct.new *@children
|
70
|
-
@contents = @klass.new
|
71
|
-
@interactions = @klass.new
|
68
|
+
setup_children_and_interactions(children)
|
72
69
|
yield @contents, @interactions
|
73
70
|
end
|
74
71
|
|
@@ -89,13 +86,7 @@ module Profligacy
|
|
89
86
|
component = @contents[child]
|
90
87
|
each_or_one(component) {|c| @container.add(c) }
|
91
88
|
|
92
|
-
|
93
|
-
# now we tack on the callback
|
94
|
-
actions.each { |type, callback|
|
95
|
-
each_or_one(component) do |c|
|
96
|
-
c.send("add_#{type}_listener", callback.to_proc.to_listener(type))
|
97
|
-
end
|
98
|
-
} if actions
|
89
|
+
configure_interactions_for child, component
|
99
90
|
end
|
100
91
|
}
|
101
92
|
|
@@ -123,6 +114,22 @@ module Profligacy
|
|
123
114
|
end
|
124
115
|
end
|
125
116
|
|
117
|
+
def setup_children_and_interactions(children)
|
118
|
+
@children = children
|
119
|
+
@klass = Struct.new *@children
|
120
|
+
@contents = @klass.new
|
121
|
+
@interactions = @klass.new
|
122
|
+
end
|
123
|
+
|
124
|
+
def configure_interactions_for(child,component)
|
125
|
+
actions = @interactions[child]
|
126
|
+
# now we tack on the callback
|
127
|
+
actions.each { |type, callback|
|
128
|
+
each_or_one(component) do |c|
|
129
|
+
c.send("add_#{type}_listener", callback.to_proc.to_listener(type))
|
130
|
+
end
|
131
|
+
} if actions
|
132
|
+
end
|
126
133
|
end
|
127
134
|
end
|
128
135
|
end
|