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 | } |