166_uppsrc.diff
uppsrc/ide/Browser/Lay.cpp 2011-11-12 00:21:52 +0600 | ||
---|---|---|
19 | 19 |
} |
20 | 20 |
} |
21 | 21 |
|
22 |
inline void WriteLines(String& r, int count) |
|
23 |
{ |
|
24 |
for (int i = 0; i < count; ++i) |
|
25 |
r << '\n'; |
|
26 |
} |
|
27 |
|
|
22 | 28 |
void ScanLayFile(const char *fn) |
23 | 29 |
{ |
24 | 30 |
LTIMING("Lay file"); |
... | ... | |
26 | 32 |
CParser p(s); |
27 | 33 |
String r; |
28 | 34 |
try { |
35 |
int line = p.GetLine(); |
|
29 | 36 |
if(p.Char('#') && p.Id("ifdef")) { |
30 | 37 |
if(!p.Id("LAYOUTFILE")) |
31 | 38 |
p.Id("LAYOUT"); |
39 |
WriteLines(r, p.GetLine() - line); |
|
32 | 40 |
} |
33 | 41 |
while(!p.IsEof()) { |
42 |
line = p.GetLine(); |
|
34 | 43 |
p.PassId("LAYOUT"); |
35 | 44 |
p.PassChar('('); |
36 |
r << "template <class T> struct With" << p.ReadId() << " : public T {\n"
|
|
37 |
<< "\tstatic Size GetLayoutSize();\n";
|
|
45 |
r << "template <class T> struct With" << p.ReadId() << " : public T {" |
|
46 |
<< "\tstatic Size GetLayoutSize();"; |
|
38 | 47 |
LaySkipRest(p); |
48 |
WriteLines(r, p.GetLine() - line); |
|
39 | 49 |
for(;;) { |
50 |
line = p.GetLine(); |
|
40 | 51 |
if(p.Id("ITEM")) { |
41 | 52 |
p.PassChar('('); |
42 | 53 |
if(p.IsId()) { |
... | ... | |
44 | 55 |
if(strncmp(type, "dv___", 5)) { |
45 | 56 |
r << '\t' << type; |
46 | 57 |
p.PassChar(','); |
47 |
r << ' ' << p.ReadId() << ";\n";
|
|
58 |
r << ' ' << p.ReadId() << ";"; |
|
48 | 59 |
} |
49 | 60 |
} |
50 | 61 |
} |
... | ... | |
54 | 65 |
else |
55 | 66 |
break; |
56 | 67 |
LaySkipRest(p); |
68 |
WriteLines(r, p.GetLine() - line); |
|
57 | 69 |
} |
70 |
line = p.GetLine(); |
|
58 | 71 |
p.PassId("END_LAYOUT"); |
59 | 72 |
if(p.Char('#')) |
60 | 73 |
p.Id("endif"); |
61 |
r << "};\n\n"; |
|
74 |
r << "};"; |
|
75 |
WriteLines(r, p.GetLine() - line); |
|
62 | 76 |
} |
63 | 77 |
} |
64 | 78 |
catch(CParser::Error) {} |