Rev 28 | Rev 31 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
27 | daniel-mar | 1 | <?php |
2 | |||
29 | daniel-mar | 3 | // TODO: Parsing der Datei codeexplorer.php bricht einfach so ab? |
4 | |||
27 | daniel-mar | 5 | define('ICON_ATTR_PUBLIC', 1); |
6 | define('ICON_ATTR_PRIVATE', 2); |
||
7 | define('ICON_ATTR_PROTECTED', 4); |
||
8 | define('ICON_ATTR_ABSTRACT', 8); |
||
9 | define('ICON_ATTR_STATIC', 16); |
||
10 | define('ICON_ATTR_CONST', 32); |
||
11 | define('ICON_ATTR_VAR', 64); |
||
12 | define('ICON_ATTR_FUNCTION', 128); |
||
13 | define('ICON_ATTR_CONSTRUCTOR', 256); |
||
14 | define('ICON_ATTR_DESTRUCTOR', 512); |
||
15 | define('ICON_ATTR_MAGICMETHOD', 1024); |
||
16 | define('ICON_ATTR_CLASS', 2048); |
||
17 | define('ICON_ATTR_TRAIT', 4096); |
||
18 | define('ICON_ATTR_INTERFACE', 8192); |
||
19 | |||
20 | error_reporting(0); |
||
21 | |||
22 | while (true) { |
||
23 | $lines = array(); |
||
24 | while ($f = fgets(STDIN)){ |
||
25 | if (trim($f) == chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8)) break; |
||
26 | $lines[] = $f; |
||
27 | } |
||
28 | $code = implode("", $lines); |
||
29 | |||
30 | echo "FAST100!\n"; |
||
31 | |||
32 | $code = str_replace(chr(0), '', $code); // TODO: attention: delphi outputs unicode here!!!! find solution. |
||
33 | |||
34 | $x = token_get_all($code); |
||
35 | |||
36 | // file_put_contents('debug.tmp', $code); |
||
37 | |||
38 | if (!$x) { |
||
29 | daniel-mar | 39 | // TODO: when this happens, do not update the output in the editor... |
27 | daniel-mar | 40 | echo _outputLeafNode(2048, 1, 'SYNTAX ERROR'); |
41 | } |
||
42 | |||
43 | //print_r($x); // debug |
||
44 | $wait_function = false; |
||
45 | $wait_class = false; |
||
46 | $class = array(); |
||
29 | daniel-mar | 47 | $icon_add_flags = 0; |
27 | daniel-mar | 48 | $dep = 0; |
49 | |||
50 | foreach ($x as $n => $data) { |
||
51 | if ($data == '{') $dep++; |
||
52 | if ($data == '}') { |
||
53 | $dep--; |
||
29 | daniel-mar | 54 | if ((count($class) > 0) && (array_peek($class)[1] == $dep)) { |
55 | array_pop($class); |
||
56 | echo _outputDecreaseLevel(); |
||
57 | } |
||
27 | daniel-mar | 58 | } |
59 | |||
29 | daniel-mar | 60 | $token = (!is_array($data)) ? null : $data[0]; |
61 | $value = (!is_array($data)) ? null : $data[1]; |
||
62 | $line = (!is_array($data)) ? null : $data[2]; |
||
27 | daniel-mar | 63 | |
64 | if ($wait_function && ($token == T_STRING)) { |
||
29 | daniel-mar | 65 | $desc = "function "; |
66 | /* |
||
27 | daniel-mar | 67 | foreach ($class as $cdata) { |
68 | $desc .= $cdata[0].'->'; |
||
69 | } |
||
29 | daniel-mar | 70 | */ |
71 | $desc .= "$value()"; |
||
72 | $icon_add_flags = 0; |
||
27 | daniel-mar | 73 | $wait_function = false; |
29 | daniel-mar | 74 | |
75 | if ($value == '__construct') { // TODO: auch eine methode mit dem namen der klasse soll eine konstruktor sein |
||
76 | echo _outputLeafNode(ICON_ATTR_CONSTRUCTOR | $icon_add_flags, $line, $desc); |
||
77 | } else if ($value == '__destruct') { |
||
78 | echo _outputLeafNode(ICON_ATTR_DESTRUCTOR | $icon_add_flags, $line, $desc); |
||
79 | } else if (substr($value, 0, 2) == '__') { |
||
80 | echo _outputLeafNode(ICON_ATTR_MAGICMETHOD | $icon_add_flags, $line, $desc); |
||
81 | } else { |
||
82 | echo _outputLeafNode(ICON_ATTR_FUNCTION | $icon_add_flags, $line, $desc); |
||
83 | } |
||
27 | daniel-mar | 84 | } |
85 | |||
86 | if ($wait_class && ($token == T_STRING)) { |
||
29 | daniel-mar | 87 | $desc = "Class "; |
88 | /* |
||
27 | daniel-mar | 89 | foreach ($class as $cdata) { |
90 | $desc .= $cdata[0].'->'; |
||
91 | } |
||
29 | daniel-mar | 92 | */ |
93 | $desc .= "$value\n"; |
||
27 | daniel-mar | 94 | $class[] = array($value, $dep); |
95 | $wait_class = false; |
||
96 | |||
29 | daniel-mar | 97 | echo _outputLeafNode(ICON_ATTR_CLASS | $icon_add_flags, $line, $desc); |
98 | echo _outputIncreaseLevel(); |
||
27 | daniel-mar | 99 | } |
100 | |||
29 | daniel-mar | 101 | if ($token == T_PUBLIC) $icon_add_flags |= ICON_ATTR_PUBLIC; |
102 | if ($token == T_PRIVATE) $icon_add_flags |= ICON_ATTR_PRIVATE; |
||
103 | if ($token == T_PROTECTED) $icon_add_flags |= ICON_ATTR_PROTECTED; |
||
104 | if ($token == T_STATIC) $icon_add_flags |= ICON_ATTR_STATIC; |
||
105 | if (($data == ';') || ($data == '{') || ($data == '}')) $icon_add_flags = 0; |
||
27 | daniel-mar | 106 | |
107 | if ($token == T_FUNCTION) { |
||
108 | $wait_function = true; |
||
109 | } |
||
110 | if ($token == T_CLASS) { |
||
111 | $wait_class = true; |
||
112 | $dep = 0; |
||
113 | } |
||
114 | |||
115 | if ($token == T_COMMENT) { |
||
116 | if (stripos($value, 'TODO') !== false) { |
||
117 | echo _outputLeafNode(0/*TODO*/, $line, $value); |
||
118 | } |
||
119 | } |
||
120 | } |
||
121 | |||
122 | echo _outputExit(); |
||
29 | daniel-mar | 123 | |
27 | daniel-mar | 124 | echo chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8); |
125 | |||
126 | sleep(1); |
||
127 | } |
||
128 | |||
28 | daniel-mar | 129 | function _outputLeafNode($icon, $line, $description) { |
27 | daniel-mar | 130 | return 'N'. |
28 | daniel-mar | 131 | sprintf('%08s', $icon). |
27 | daniel-mar | 132 | sprintf('%08s', $line). |
133 | sprintf('%04s', strlen($description)). |
||
134 | $description; |
||
135 | } |
||
136 | |||
137 | function _outputIncreaseLevel() { |
||
138 | return 'I'; |
||
139 | } |
||
140 | |||
141 | function _outputDecreaseLevel() { |
||
142 | return 'D'; |
||
143 | } |
||
144 | |||
145 | function _outputExit() { |
||
146 | return 'X'; |
||
147 | } |
||
148 | |||
149 | function array_peek($array) { |
||
150 | if (!isset($array[count($array)-1])) return null; |
||
151 | return $array[count($array)-1]; |
||
152 | } |
||
153 | |||
154 | function strip_comment($x) { |
||
29 | daniel-mar | 155 | if (substr($x, 0, 1) == '#') return trim(substr($x, 1)); |
27 | daniel-mar | 156 | if (substr($x, 0, 2) == '//') return trim(substr($x, 2)); |
157 | if (substr($x, 0, 2) == '/*') return trim(substr($x, 2, strlen($x)-4)); |
||
158 | } |
||
29 | daniel-mar | 159 | |
160 | |||
161 | // TODO: hallo |
||
162 | # TODO: xxx |