Subversion Repositories fastphp

Rev

Rev 33 | Rev 37 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 33 Rev 36
Line 1... Line 1...
1
<?php
1
<?php
2
 
2
 
3
error_reporting(0);
3
// TODO: show full signature of each element?
4
 
4
 
5
define('ICON_ATTR_PRIVATE',             1);
-
 
6
define('ICON_ATTR_PROTECTED',           2);
-
 
7
define('ICON_ATTR_PUBLIC',              4);
-
 
8
define('ICON_ATTR_ABSTRACT',            8);
-
 
9
define('ICON_ATTR_STATIC',             16);
-
 
10
 
-
 
11
define('ICON_TYPE_FUNCTION',       'FUNC');
5
error_reporting(0);
12
define('ICON_TYPE_CONSTRUCTOR',    'CSTR');
-
 
13
define('ICON_TYPE_DESTRUCTOR',     'DSTR');
-
 
14
define('ICON_TYPE_MAGICMETHOD',    'MGIC');
-
 
15
define('ICON_TYPE_CLASS',          'CLAS');
-
 
16
define('ICON_TYPE_TRAIT',          'TRAI');
-
 
17
define('ICON_TYPE_INTERFACE',      'INTF');
-
 
18
define('ICON_TYPE_TODO',           'TODO');
-
 
19
define('ICON_TYPE_ERROR',          'ERR!');
-
 
20
define('ICON_TYPE_VAR',            'VAR_');
-
 
21
define('ICON_TYPE_CONST',          'CONS');
-
 
22
 
6
 
-
 
7
define('ICON_TYPE_FUNCTION',       'FUN');
-
 
8
define('ICON_TYPE_CONSTRUCTOR',    'CST');
-
 
9
define('ICON_TYPE_DESTRUCTOR',     'DST');
-
 
10
define('ICON_TYPE_MAGICMETHOD',    'MAG');
23
define('ICON_TYPE_FOLDER',         'FOLD'); // unused (TODO: use for TODO)
11
define('ICON_TYPE_CLASS',          'CLS');
-
 
12
define('ICON_TYPE_TRAIT',          'TRA');
-
 
13
define('ICON_TYPE_INTERFACE',      'INT');
-
 
14
define('ICON_TYPE_VAR',            'VAR');
-
 
15
define('ICON_TYPE_CONST',          'CON');
24
define('ICON_TYPE_FILE',           'FILE'); // unused
16
define('ICON_TYPE_TODO',           'TDO');
-
 
17
define('ICON_TYPE_ERROR',          'ERR');
25
 
18
 
26
while (true) {
19
while (true) {
27
        $lines = array();
20
        $lines = array();
28
        while ($f = fgets(STDIN)){
21
        while ($f = fgets(STDIN)){
29
                if (trim($f) == chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8)) break;
22
                if (trim($f) == chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8)) break;
Line 34... Line 27...
34
        echo "FAST100!\n";
27
        echo "FAST100!\n";
35
       
28
       
36
        $x = token_get_all($code);
29
        $x = token_get_all($code);
37
       
30
       
38
        if (!$x) {
31
        if (!$x) {
39
                echo _outputLeafNode(ICON_TYPE_ERROR, 0, 1, 'SYNTAX ERROR');
32
                echo _outputLeafNode(ICON_TYPE_ERROR.implode('', $icon_add_flags), 1, 'SYNTAX ERROR');
40
        }
33
        }
41
       
34
       
42
        $wait_function = false;
35
        $wait_function = false;
43
        $wait_class = false;
36
        $wait_class = false;
44
        $wait_trait = false;
37
        $wait_trait = false;
45
        $wait_interface = false;
38
        $wait_interface = false;
46
        $wait_abstract_func_list_end = false;
39
        $wait_abstract_func_list_end = false;
47
        $levelAry = array();
40
        $levelAry = array();
48
        $icon_add_flags = 0;
41
        $icon_add_flags = array('_', '_', '_');
49
        $dep = 0;
42
        $dep = 0;
50
        $insideFuncAry = array();
43
        $insideFuncAry = array();
51
 
44
 
52
        foreach ($x as $n => $data) {
45
        foreach ($x as $n => $data) {
53
                if ($data == '{') $dep++;
46
                if ($data == '{') $dep++;
Line 66... Line 59...
66
                $value = (!is_array($data)) ? null : $data[1];
59
                $value = (!is_array($data)) ? null : $data[1];
67
                $line  = (!is_array($data)) ? null : $data[2];
60
                $line  = (!is_array($data)) ? null : $data[2];
68
 
61
 
69
                if ($wait_function && ($token == T_STRING)) {
62
                if ($wait_function && ($token == T_STRING)) {
70
                        $wait_function = false;
63
                        $wait_function = false;
71
                        if (($icon_add_flags & ICON_ATTR_ABSTRACT) == ICON_ATTR_ABSTRACT) {
64
                        if ($icon_add_flags[1] == 'A') {
72
                                $desc = "abstract function $value()";
65
                                $desc = "abstract function $value()";
73
                                $wait_abstract_func_list_end = true;
66
                                $wait_abstract_func_list_end = true;
74
                        } else {
67
                        } else {
75
                                $desc = "function $value()";
68
                                $desc = "function $value()";
76
                                $insideFuncAry[] = $dep;
69
                                $insideFuncAry[] = $dep;
77
                        }
70
                        }
78
                        $icon_add_flags = 0;
-
 
79
 
71
 
80
                        if ($value == '__construct') { // TODO: auch eine methode mit dem namen der klasse soll eine konstruktor sein
72
                        if ($value == '__construct') { // TODO: auch eine methode mit dem namen der klasse soll eine konstruktor sein
81
                                echo _outputLeafNode(ICON_TYPE_CONSTRUCTOR, $icon_add_flags, $line, $desc);
73
                                echo _outputLeafNode(ICON_TYPE_CONSTRUCTOR.implode('', $icon_add_flags), $line, $desc);
82
                        } else if ($value == '__destruct') {
74
                        } else if ($value == '__destruct') {
83
                                echo _outputLeafNode(ICON_TYPE_DESTRUCTOR,  $icon_add_flags, $line, $desc);
75
                                echo _outputLeafNode(ICON_TYPE_DESTRUCTOR.implode('', $icon_add_flags), $line, $desc);
84
                        } else if (substr($value, 0, 2) == '__') {
76
                        } else if (substr($value, 0, 2) == '__') {
85
                                echo _outputLeafNode(ICON_TYPE_MAGICMETHOD, $icon_add_flags, $line, $desc);
77
                                echo _outputLeafNode(ICON_TYPE_MAGICMETHOD.implode('', $icon_add_flags), $line, $desc);
86
                        } else {
78
                        } else {
87
                                echo _outputLeafNode(ICON_TYPE_FUNCTION,    $icon_add_flags, $line, $desc);
79
                                echo _outputLeafNode(ICON_TYPE_FUNCTION.implode('', $icon_add_flags), $line, $desc);
88
                        }
80
                        }
-
 
81
 
-
 
82
                        $icon_add_flags = array('_', '_', '_');
89
                }
83
                }
90
 
84
 
91
                if ($wait_class && ($token == T_STRING)) {
85
                if ($wait_class && ($token == T_STRING)) {
-
 
86
                        if ($icon_add_flags[1] == 'A') {
92
                        $desc = "Class $value\n";
87
                                $desc = "abstract class $value\n";
-
 
88
                        } else {
93
                        $icon_add_flags = 0;
89
                                $desc = "class $value\n";
-
 
90
                        }
94
                        $wait_class = false;
91
                        $wait_class = false;
95
                        $levelAry[] = $dep;
92
                        $levelAry[] = $dep;
96
 
93
 
97
                        echo _outputLeafNode(ICON_TYPE_CLASS, $icon_add_flags, $line, $desc);
94
                        echo _outputLeafNode(ICON_TYPE_CLASS.implode('', $icon_add_flags), $line, $desc);
-
 
95
                        $icon_add_flags = array('_', '_', '_');
-
 
96
 
98
                        echo _outputIncreaseLevel();
97
                        echo _outputIncreaseLevel();
99
                }
98
                }
100
 
99
 
101
                if ($wait_trait && ($token == T_STRING)) {
100
                if ($wait_trait && ($token == T_STRING)) {
102
                        $desc = "Trait $value\n";
101
                        $desc = "Trait $value\n";
103
                        $icon_add_flags = 0;
-
 
104
                        $wait_trait = false;
102
                        $wait_trait = false;
105
                        $levelAry[] = $dep;
103
                        $levelAry[] = $dep;
106
 
104
 
107
                        echo _outputLeafNode(ICON_TYPE_TRAIT, $icon_add_flags, $line, $desc);
105
                        echo _outputLeafNode(ICON_TYPE_TRAIT.implode('', $icon_add_flags), $line, $desc);
-
 
106
                        $icon_add_flags = array('_', '_', '_');
-
 
107
 
108
                        echo _outputIncreaseLevel();
108
                        echo _outputIncreaseLevel();
109
                }
109
                }
110
 
110
 
111
                if ($wait_interface && ($token == T_STRING)) {
111
                if ($wait_interface && ($token == T_STRING)) {
112
                        $desc = "Interface $value\n";
112
                        $desc = "Interface $value\n";
113
                        $icon_add_flags = 0;
-
 
114
                        $wait_interface = false;
113
                        $wait_interface = false;
115
                        $levelAry[] = $dep;
114
                        $levelAry[] = $dep;
116
 
115
 
117
                        echo _outputLeafNode(ICON_TYPE_INTERFACE, $icon_add_flags, $line, $desc);
116
                        echo _outputLeafNode(ICON_TYPE_INTERFACE.implode('', $icon_add_flags), $line, $desc);
-
 
117
                        $icon_add_flags = array('_', '_', '_');
-
 
118
 
118
                        echo _outputIncreaseLevel();
119
                        echo _outputIncreaseLevel();
119
                }
120
                }
120
 
121
 
121
                if ($wait_const && ($token == T_STRING)) {
122
                if ($wait_const && ($token == T_STRING)) {
122
                        $desc = "const $value\n";
123
                        $desc = "const $value\n";
123
                        $icon_add_flags = 0;
-
 
124
                        $wait_const = false;
124
                        $wait_const = false;
125
 
125
 
126
                        echo _outputLeafNode(ICON_TYPE_CONST, $icon_add_flags, $line, $desc);
126
                        echo _outputLeafNode(ICON_TYPE_CONST.implode('', $icon_add_flags), $line, $desc);
-
 
127
                        $icon_add_flags = array('_', '_', '_');
127
                }
128
                }
128
 
129
 
129
                if ((!$wait_abstract_func_list_end) && (count($levelAry) > 0) && (count($insideFuncAry) == 0) && ($token == T_VARIABLE)) {
130
                if ((!$wait_abstract_func_list_end) && (count($levelAry) > 0) && (count($insideFuncAry) == 0) && ($token == T_VARIABLE)) {
130
                        $desc = "$value\n";
131
                        $desc = "$value\n";
131
                        $icon_add_flags = 0;
-
 
132
 
132
 
133
                        echo _outputLeafNode(ICON_TYPE_VAR, $icon_add_flags, $line, $desc);
133
                        echo _outputLeafNode(ICON_TYPE_VAR.implode('', $icon_add_flags), $line, $desc);
-
 
134
                        $icon_add_flags = array('_', '_', '_');
134
                }
135
                }
135
 
136
 
136
                if ($token == T_PRIVATE)   $icon_add_flags |= ICON_ATTR_PRIVATE;
137
                if ($token == T_PRIVATE)   $icon_add_flags[0] = '1';
137
                if ($token == T_PROTECTED) $icon_add_flags |= ICON_ATTR_PROTECTED;
138
                if ($token == T_PROTECTED) $icon_add_flags[0] = '2';
138
                if ($token == T_PUBLIC)    $icon_add_flags |= ICON_ATTR_PUBLIC;
139
                if ($token == T_PUBLIC)    $icon_add_flags[0] = '3';
139
                if ($token == T_ABSTRACT)  $icon_add_flags |= ICON_ATTR_ABSTRACT;
140
                if ($token == T_ABSTRACT)  $icon_add_flags[1] = 'A';
-
 
141
                if ($token == T_FINAL)     $icon_add_flags[1] = 'F';
140
                if ($token == T_STATIC)    $icon_add_flags |= ICON_ATTR_STATIC;
142
                if ($token == T_STATIC)    $icon_add_flags[2] = 'S';
141
 
143
 
142
                if (($data == ';') || ($data == '{') || ($data == '}')) {
144
                if (($data == ';') || ($data == '{') || ($data == '}')) {
143
                        $wait_abstract_func_list_end = false;
145
                        $wait_abstract_func_list_end = false;
144
                        $icon_add_flags = 0;
146
                        $icon_add_flags = array('_', '_', '_');
145
                }
147
                }
146
 
148
 
147
                if ($token == T_FUNCTION) {
149
                if ($token == T_FUNCTION) {
148
                        $wait_function = true;
150
                        $wait_function = true;
149
                }
151
                }
150
                if ($token == T_CLASS) {
152
                if ($token == T_CLASS) {
151
                        $wait_class = true;
153
                        $wait_class = true;
152
                        $dep = 0;
154
                        $dep = 0;
153
                }
155
                }
-
 
156
                if ($token == T_INTERFACE) {
-
 
157
                        $wait_interface = true;
-
 
158
                        $dep = 0;
-
 
159
                }
154
                if ($token == T_TRAIT) {
160
                if ($token == T_TRAIT) {
155
                        $wait_trait = true;
161
                        $wait_trait = true;
156
                        $dep = 0;
162
                        $dep = 0;
157
                }
163
                }
158
 
164
 
Line 163... Line 169...
163
                if ($token == T_COMMENT) {
169
                if ($token == T_COMMENT) {
164
                        if ((stripos($value, 'TODO')   !== false) ||
170
                        if ((stripos($value, 'TODO')   !== false) ||
165
                            (stripos($value, 'BUGBUG') !== false) ||
171
                            (stripos($value, 'BUGBUG') !== false) ||
166
                            (stripos($value, 'FIXME')  !== false) ||
172
                            (stripos($value, 'FIXME')  !== false) ||
167
                            (stripos($value, 'XXX')    !== false)) {
173
                            (stripos($value, 'XXX')    !== false)) {
168
                                echo _outputLeafNode(ICON_TYPE_TODO, 0, $line, strip_comment($value));
174
                                echo _outputLeafNode(ICON_TYPE_TODO.implode('', $icon_add_flags), $line, strip_comment($value));
169
                        }
175
                        }
170
                }
176
                }
171
        }
177
        }
172
       
178
       
173
        echo _outputExit();
179
        echo _outputExit();
Line 175... Line 181...
175
        echo chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8);
181
        echo chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8);
176
 
182
 
177
        sleep(1);
183
        sleep(1);
178
}
184
}
179
 
185
 
-
 
186
function _iconCodeToIndex($icon) {
-
 
187
        $typ = substr($icon, 0, 3);
-
 
188
 
-
 
189
        if ($icon[3] == '_') $icon[3] = '3'; // public is default visibility
-
 
190
 
-
 
191
        if (($typ == 'MAG') || ($typ == 'CST') || ($typ == 'DST')) {
-
 
192
                $typ = 'FUN';
-
 
193
        } else if ($typ == 'INT') {
-
 
194
                $typ = 'CLS';
-
 
195
                $icon[4] = 'A';
-
 
196
        }
-
 
197
 
-
 
198
             if (($typ == 'CLS')                      && ($icon[4] != 'A')) return  0;
-
 
199
        else if (($typ == 'CLS')                      && ($icon[4] == 'A')) return  1;
-
 
200
        else if (($typ == 'TRA')                                          ) return  2;
-
 
201
        else if (($typ == 'CON') && ($icon[3] == '1')                     ) return  3;
-
 
202
        else if (($typ == 'VAR') && ($icon[3] == '1')                     ) return  4;
-
 
203
        else if (($typ == 'FUN') && ($icon[3] == '1') && ($icon[4] != 'A')) return  5;
-
 
204
        else if (($typ == 'FUN') && ($icon[3] == '1') && ($icon[4] == 'A')) return  6;
-
 
205
        else if (($typ == 'CON') && ($icon[3] == '2')                     ) return  7;
-
 
206
        else if (($typ == 'VAR') && ($icon[3] == '2')                     ) return  8;
-
 
207
        else if (($typ == 'FUN') && ($icon[3] == '2') && ($icon[4] != 'A')) return  9;
-
 
208
        else if (($typ == 'FUN') && ($icon[3] == '2') && ($icon[4] == 'A')) return 10;
-
 
209
        else if (($typ == 'CON') && ($icon[3] == '3')                     ) return 11;
-
 
210
        else if (($typ == 'VAR') && ($icon[3] == '3')                     ) return 12;
-
 
211
        else if (($typ == 'FUN') && ($icon[3] == '3') && ($icon[4] != 'A')) return 13;
-
 
212
        else if (($typ == 'FUN') && ($icon[3] == '3') && ($icon[4] == 'A')) return 14;
-
 
213
        else if (($typ == 'TDO')                                          ) return 15;
-
 
214
        else                                                                return -1;
-
 
215
}
-
 
216
 
180
function _outputLeafNode($iconType, $iconAttr, $line, $description) {
217
function _outputLeafNode($icon, $line, $description) {
181
        return 'N'.str_pad($iconType, 4).
218
        $imageindex = _iconCodeToIndex($icon);
182
                   sprintf('%04s', $iconAttr).
219
        return 'N'.($imageindex == -1 ? '____' : sprintf('%04s', $imageindex)).
183
                   sprintf('%08s', $line).
220
                   sprintf('%08s', $line).
184
                   sprintf('%04s', strlen(trim($description))).
221
                   sprintf('%04s', strlen(trim($description))).
185
                   trim($description).
222
                   trim($description).
186
                   "\n";
223
                   "\n";
187
}
224
}