gdscript/php/operandParser.php (55 lines of code) (raw):

<?php $files = []; $classes = scandir("./godot-master/doc/classes"); foreach ($classes as $filename) { $files[] = sprintf("./godot-master/doc/classes/%s", $filename); } // Search modules $modules = scandir("./godot-master/modules"); foreach ($modules as $module) { //$files[] = sprintf("./classes/%s", $filename); $modulePath = sprintf("./godot-master/modules/%s", $module); if (substr($module, 0, 1) == ".") continue; if (is_dir($modulePath)) { $modulePath = sprintf("%s/doc_classes", $modulePath); if (is_dir($modulePath)) { $classes = scandir($modulePath); foreach ($classes as $filename) { $files[] = sprintf("%s/%s", $modulePath, $filename); } } } } $target = "./classesGd/operators.gdconf"; $operators = []; $operatorPrefix = strlen("operator "); foreach ($files as $filepath) { $paths = explode("/", $filepath); $filename = $paths[count($paths) - 1]; if ($filename == "." || $filename == "..") continue; if (substr($filename, strlen($filename) - 4) != ".xml") continue; $data = ""; $class_name = substr($filename, 0, strlen($filename) - 4); if (substr($class_name, 0, 1) == "@") continue; $content = file_get_contents($filepath); $xml = (array)simplexml_load_string($content); foreach ($xml['operators'] ?? [] as $value) { $value = (array)$value; $att = (array)$value['@attributes']; $operator = substr($att['name'], $operatorPrefix); if (strpos($operator, "unary") !== false) continue; if ($operator == '~') continue; $return = ((array)((array)($value['return']))['@attributes'])['type']; $rightParam = ((array)((array)($value['param']))['@attributes'])['type']; $operators[$class_name][$operator][$rightParam] = $return; } } $parsed = ""; foreach ($operators as $left => $operator) { $parsed .= "OP $left\n"; foreach ($operator as $operand => $operands) { foreach ($operands as $right => $result) { $parsed .= "$operand $right : $result\n"; } } $parsed .= "\n"; } file_put_contents($target, $parsed);