Guest User

Untitled

a guest
Oct 11th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. <?php
  2. // Загрузим весь исходник в строку
  3. $fileContents = file_get_contents('uml/ManageTest.java');
  4. // Сделаем из строки массив
  5. $fileArray = str_split($fileContents);
  6. // Объявим массив в который будем записывать индексы
  7. // с который начинается новый класс
  8. $stratIndex = array();
  9. // Создадим массив где будем хранить массивы с классами
  10. $classArray = array();
  11. // Пройдемся по всему массиву и запомним индексы
  12. // с который начинается новый класс
  13. for ($i = 0; $i < count($fileArray); ++$i) {
  14. if ($fileArray[$i] == "c" && $fileArray[$i + 1] == "l" &&
  15. $fileArray[$i + 2] == "a" && $fileArray[$i + 3] == "s" &&
  16. $fileArray[$i + 4] == "s") {
  17. $startIndex[] = $i;
  18. }
  19. }
  20. // Скопируем каждый класс в свой массив
  21. for ($i = 0; $i < count($startIndex); $i++) {
  22. $classArray[$i] = array();
  23. if (isset($startIndex[$i + 1])) {
  24. for ($q = $startIndex[$i], $t = 0;
  25. $q < $startIndex[$i + 1]; $q++, $t++) {
  26. $classArray[$i][$t] = $fileArray[$q];
  27. }
  28. } else {
  29. for ($q = $startIndex[$i], $t = 0;
  30. $q < count($fileArray); $q++, $t++) {
  31. $classArray[$i][$t] = $fileArray[$q];
  32. }
  33. }
  34. }
  35. // Спарсим инфу по каждому классу в массив
  36. for ($i = 0; $i < count($classArray); $i++) {
  37. $infoArray[$i] = getClassInfo($classArray[$i]);
  38. }
  39. echo "<pre style='font-size: 11px;'>";
  40. print_r($infoArray);
  41. echo "</pre>";
  42. writeJS($infoArray);
  43. // Функция параметр которой является массивом,
  44. // который содержит класс. Возвращает массив содержащий
  45. // имя класса, родителя(если есть), поля и функции
  46. function getClassInfo($array) {
  47. return array( "Name" => getClassName($array),
  48. "Parents" => getClassParents($array),
  49. "Fields" => getClassField($array),
  50. "Methods" => getClassMethods($array));
  51. }
  52.  
  53. function getClassName($array) {
  54. $name = array();
  55. for ($i = 0; $i < count($array); $i++) {
  56. if ($array[$i] == "c" && $array[$i + 1] == "l" &&
  57. $array[$i + 2] == "a" && $array[$i + 3] == "s" &&
  58. $array[$i + 4] == "s") break;
  59. }
  60. for ($q = $i + 6, $t = 0; $q < count($array); $q++, $t++) {
  61. if ($array[$q] == "{") break;
  62. if ($array[$q] == "e" && $array[$q + 1] == "x" &&
  63. $array[$q + 2] == "t" && $array[$q + 3] == "e" &&
  64. $array[$q + 4] == "n" && $array[$q + 5] == "d" &&
  65. $array[$q + 6] == "s") break;
  66. $name[$t] = $array[$q];
  67. }
  68. return implode($name);
  69. }
  70.  
  71. function getClassParents($array) {
  72. $name = array();
  73. for ($i = 0; $i < count($array); $i++) {
  74. if ($array[$i] == "e" && $array[$i + 1] == "x" &&
  75. $array[$i + 2] == "t" && $array[$i + 3] == "e" &&
  76. $array[$i + 4] == "n" && $array[$i + 5] == "d" &&
  77. $array[$i + 6] == "s") break;
  78. }
  79. for ($q = $i + 8, $t = 0; $q < count($array); $q++, $t++) {
  80. if ($array[$q] == "{") break;
  81. $name[$t] = $array[$q];
  82. }
  83. return implode($name);
  84. }
  85.  
  86. function getClassField($array) {
  87. $fields = array();
  88. $t = 0;
  89. $modifiers = findModifier($array);
  90. if (isset($modifiers)) {
  91. foreach ($modifiers as $key => $modifier) {
  92. for ($q = 0; $q < count($modifier); $q++) {
  93. for ($i = $modifier[$q]; $i < count($array); $i++) {
  94. if ($array[$i] == ";") break;
  95. if ($array[$i] == "(") {
  96. unset($fields[$t]);
  97. break;
  98. }
  99. $fields[$t][] = $array[$i];
  100. }
  101. if (isset($fields[$t])) $t++;
  102. }
  103. }
  104. for ($i = 0; $i < count($fields); $i++) {
  105. for ($q = 0; $q < count($fields[$i]); $q++) {
  106. if ($fields[$i][$q] != " ") {
  107. $fullInfo[$i]["Type"][] = $fields[$i][$q];
  108. } else break;
  109. }
  110. for ($t = $q + 1; $t < count($fields[$i]); $t++) {
  111. $fullInfo[$i]["Name"][] = $fields[$i][$t];
  112. }
  113. $fullInfo[$i] = implode($fullInfo[$i]["Name"]) . " : " .
  114. implode($fullInfo[$i]["Type"]);
  115. }
  116. return $fullInfo;
  117. }
  118. }
  119.  
  120. function getClassMethods($array) {
  121. $fields = array();
  122. $t = 0;
  123. $modifiers = findModifier($array);
  124. if (isset($modifiers)) {
  125. foreach ($modifiers as $key => $modifier) {
  126. for ($q = 0; $q < count($modifier); $q++) {
  127. for ($i = $modifier[$q]; $i < count($array); $i++) {
  128. if ($array[$i] == ";") {
  129. unset($fields[$t]);
  130. break;
  131. }
  132. if ($array[$i] == "{") break;
  133. $fields[$t][] = $array[$i];
  134. }
  135. if ($fields[$t] != "") {
  136. $fullInfo[$t] = implode($fields[$t]);
  137. $t++;
  138. }
  139. }
  140. }
  141. return $fullInfo;
  142. }
  143. }
  144.  
  145. function findModifier($array) {
  146. for ($i = 0; $i < count($array); $i++) {
  147. if ($array[$i] == "p" && $array[$i + 1] == "u" && $array[$i + 2] == "b" &&
  148. $array[$i + 3] == "l" && $array[$i + 4] == "i" && $array[$i + 5] == "c")
  149. $a["public"][] = $i + 7;
  150.  
  151. if ($array[$i] == "p" && $array[$i + 1] == "r" && $array[$i + 2] == "i" &&
  152. $array[$i + 3] == "v" && $array[$i + 4] == "a" && $array[$i + 5] == "t" &&
  153. $array[$i + 6] == "e") $a["private"][] = $i + 8;
  154.  
  155. if ($array[$i] == "s" && $array[$i + 1] == "t" && $array[$i + 2] == "a" &&
  156. $array[$i + 3] == "t" && $array[$i + 4] == "i" && $array[$i + 5] == "c")
  157. $a["static"][] = $i + 7;
  158.  
  159. if ($array[$i] == "p" && $array[$i + 1] == "r" && $array[$i + 2] == "o" &&
  160. $array[$i + 3] == "t" && $array[$i + 4] == "e" && $array[$i + 5] == "c" &&
  161. $array[$i + 6] == "t" && $array[$i + 7] == "e" && $array[$i + 8] == "d")
  162. $a["protected"][] = $i + 10;
  163. }
  164. return $a;
  165. }
  166. function writeJS($classArray) {
  167. $temp = 'var all = [';
  168. foreach ($classArray as $class) {
  169. $newObject = 'var ' . $class["Name"] . ' = Joint.dia.uml.Class.create({
  170. rect : {
  171. width : 145,
  172. height : 150
  173. },
  174. label : "' . $class["Name"] . '",
  175. attributes : ["' . implode('","', $class["Fields"]) . '"],
  176. methods : ["' . implode('","', $class["Methods"]) . '"]
  177. });
  178. ';
  179. writeToJsFile($newObject);
  180. $temp .= $class["Name"] . ',';
  181. }
  182. $temp .= '];';
  183. writeToJsFile($temp);
  184.  
  185. foreach ($classArray as $class) {
  186. if ($class["Parents"]) {
  187. $temp = trim($class["Name"]) . '.joint(' . $class["Parents"]
  188. . ', Joint.dia.uml.dependencyArrow).register(all);';
  189. writeToJsFile($temp);
  190. }
  191. }
  192. }
  193. function writeToJsFile($string) {
  194. $filename = 'uml/class.js';
  195. if (is_writable($filename)) {
  196. $r = fopen($filename, 'a');
  197. if ($r) {
  198. fwrite($r, $string);
  199. fclose($r);
  200. }
  201. }
  202. }
  203. ?>
Add Comment
Please, Sign In to add comment