Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Загрузим весь исходник в строку
- $fileContents = file_get_contents('uml/ManageTest.java');
- // Сделаем из строки массив
- $fileArray = str_split($fileContents);
- // Объявим массив в который будем записывать индексы
- // с который начинается новый класс
- $stratIndex = array();
- // Создадим массив где будем хранить массивы с классами
- $classArray = array();
- // Пройдемся по всему массиву и запомним индексы
- // с который начинается новый класс
- for ($i = 0; $i < count($fileArray); ++$i) {
- if ($fileArray[$i] == "c" && $fileArray[$i + 1] == "l" &&
- $fileArray[$i + 2] == "a" && $fileArray[$i + 3] == "s" &&
- $fileArray[$i + 4] == "s") {
- $startIndex[] = $i;
- }
- }
- // Скопируем каждый класс в свой массив
- for ($i = 0; $i < count($startIndex); $i++) {
- $classArray[$i] = array();
- if (isset($startIndex[$i + 1])) {
- for ($q = $startIndex[$i], $t = 0;
- $q < $startIndex[$i + 1]; $q++, $t++) {
- $classArray[$i][$t] = $fileArray[$q];
- }
- } else {
- for ($q = $startIndex[$i], $t = 0;
- $q < count($fileArray); $q++, $t++) {
- $classArray[$i][$t] = $fileArray[$q];
- }
- }
- }
- // Спарсим инфу по каждому классу в массив
- for ($i = 0; $i < count($classArray); $i++) {
- $infoArray[$i] = getClassInfo($classArray[$i]);
- }
- echo "<pre style='font-size: 11px;'>";
- print_r($infoArray);
- echo "</pre>";
- writeJS($infoArray);
- // Функция параметр которой является массивом,
- // который содержит класс. Возвращает массив содержащий
- // имя класса, родителя(если есть), поля и функции
- function getClassInfo($array) {
- return array( "Name" => getClassName($array),
- "Parents" => getClassParents($array),
- "Fields" => getClassField($array),
- "Methods" => getClassMethods($array));
- }
- function getClassName($array) {
- $name = array();
- for ($i = 0; $i < count($array); $i++) {
- if ($array[$i] == "c" && $array[$i + 1] == "l" &&
- $array[$i + 2] == "a" && $array[$i + 3] == "s" &&
- $array[$i + 4] == "s") break;
- }
- for ($q = $i + 6, $t = 0; $q < count($array); $q++, $t++) {
- if ($array[$q] == "{") break;
- if ($array[$q] == "e" && $array[$q + 1] == "x" &&
- $array[$q + 2] == "t" && $array[$q + 3] == "e" &&
- $array[$q + 4] == "n" && $array[$q + 5] == "d" &&
- $array[$q + 6] == "s") break;
- $name[$t] = $array[$q];
- }
- return implode($name);
- }
- function getClassParents($array) {
- $name = array();
- for ($i = 0; $i < count($array); $i++) {
- if ($array[$i] == "e" && $array[$i + 1] == "x" &&
- $array[$i + 2] == "t" && $array[$i + 3] == "e" &&
- $array[$i + 4] == "n" && $array[$i + 5] == "d" &&
- $array[$i + 6] == "s") break;
- }
- for ($q = $i + 8, $t = 0; $q < count($array); $q++, $t++) {
- if ($array[$q] == "{") break;
- $name[$t] = $array[$q];
- }
- return implode($name);
- }
- function getClassField($array) {
- $fields = array();
- $t = 0;
- $modifiers = findModifier($array);
- if (isset($modifiers)) {
- foreach ($modifiers as $key => $modifier) {
- for ($q = 0; $q < count($modifier); $q++) {
- for ($i = $modifier[$q]; $i < count($array); $i++) {
- if ($array[$i] == ";") break;
- if ($array[$i] == "(") {
- unset($fields[$t]);
- break;
- }
- $fields[$t][] = $array[$i];
- }
- if (isset($fields[$t])) $t++;
- }
- }
- for ($i = 0; $i < count($fields); $i++) {
- for ($q = 0; $q < count($fields[$i]); $q++) {
- if ($fields[$i][$q] != " ") {
- $fullInfo[$i]["Type"][] = $fields[$i][$q];
- } else break;
- }
- for ($t = $q + 1; $t < count($fields[$i]); $t++) {
- $fullInfo[$i]["Name"][] = $fields[$i][$t];
- }
- $fullInfo[$i] = implode($fullInfo[$i]["Name"]) . " : " .
- implode($fullInfo[$i]["Type"]);
- }
- return $fullInfo;
- }
- }
- function getClassMethods($array) {
- $fields = array();
- $t = 0;
- $modifiers = findModifier($array);
- if (isset($modifiers)) {
- foreach ($modifiers as $key => $modifier) {
- for ($q = 0; $q < count($modifier); $q++) {
- for ($i = $modifier[$q]; $i < count($array); $i++) {
- if ($array[$i] == ";") {
- unset($fields[$t]);
- break;
- }
- if ($array[$i] == "{") break;
- $fields[$t][] = $array[$i];
- }
- if ($fields[$t] != "") {
- $fullInfo[$t] = implode($fields[$t]);
- $t++;
- }
- }
- }
- return $fullInfo;
- }
- }
- function findModifier($array) {
- for ($i = 0; $i < count($array); $i++) {
- if ($array[$i] == "p" && $array[$i + 1] == "u" && $array[$i + 2] == "b" &&
- $array[$i + 3] == "l" && $array[$i + 4] == "i" && $array[$i + 5] == "c")
- $a["public"][] = $i + 7;
- if ($array[$i] == "p" && $array[$i + 1] == "r" && $array[$i + 2] == "i" &&
- $array[$i + 3] == "v" && $array[$i + 4] == "a" && $array[$i + 5] == "t" &&
- $array[$i + 6] == "e") $a["private"][] = $i + 8;
- if ($array[$i] == "s" && $array[$i + 1] == "t" && $array[$i + 2] == "a" &&
- $array[$i + 3] == "t" && $array[$i + 4] == "i" && $array[$i + 5] == "c")
- $a["static"][] = $i + 7;
- if ($array[$i] == "p" && $array[$i + 1] == "r" && $array[$i + 2] == "o" &&
- $array[$i + 3] == "t" && $array[$i + 4] == "e" && $array[$i + 5] == "c" &&
- $array[$i + 6] == "t" && $array[$i + 7] == "e" && $array[$i + 8] == "d")
- $a["protected"][] = $i + 10;
- }
- return $a;
- }
- function writeJS($classArray) {
- $temp = 'var all = [';
- foreach ($classArray as $class) {
- $newObject = 'var ' . $class["Name"] . ' = Joint.dia.uml.Class.create({
- rect : {
- width : 145,
- height : 150
- },
- label : "' . $class["Name"] . '",
- attributes : ["' . implode('","', $class["Fields"]) . '"],
- methods : ["' . implode('","', $class["Methods"]) . '"]
- });
- ';
- writeToJsFile($newObject);
- $temp .= $class["Name"] . ',';
- }
- $temp .= '];';
- writeToJsFile($temp);
- foreach ($classArray as $class) {
- if ($class["Parents"]) {
- $temp = trim($class["Name"]) . '.joint(' . $class["Parents"]
- . ', Joint.dia.uml.dependencyArrow).register(all);';
- writeToJsFile($temp);
- }
- }
- }
- function writeToJsFile($string) {
- $filename = 'uml/class.js';
- if (is_writable($filename)) {
- $r = fopen($filename, 'a');
- if ($r) {
- fwrite($r, $string);
- fclose($r);
- }
- }
- }
- ?>
Add Comment
Please, Sign In to add comment