PageRenderTime 47ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/headerParser/run.php

https://github.com/nwsw/wxphp
PHP | 316 lines | 267 code | 35 blank | 14 comment | 36 complexity | c40deb931550d9242b4e078af97b65a7 MD5 | raw file
  1. <?php
  2. $mapClasses = array(
  3. "wxBoxSizer"
  4. ,"wxSizer"
  5. ,"wxSplitterWindow"
  6. ,"wxMenuItem"
  7. ,"wxMenu"
  8. ,"wxMenuBar"
  9. ,"wxToolBar"
  10. ,"wxEvent"
  11. ,"wxCommandEvent"
  12. ,"wxPanel"
  13. ,"wxFrame"
  14. ,"wxImage"
  15. ,"wxBitmap"
  16. ,"wxStaticBitmap"
  17. ,"wxGauge"
  18. ,"wxButton"
  19. ,"wxBitmapButton"
  20. ,"wxToggleButton"
  21. ,"wxCalendarCtrl"
  22. ,"wxCheckBox"
  23. ,"wxChoice"
  24. ,"wxListBox"
  25. ,"wxCheckListBox"
  26. ,"wxTreeEvent"
  27. ,"wxTreeItemId"
  28. ,"wxTreeCtrl"
  29. ,"wxListCtrl"
  30. ,"wxDataViewCtrl"
  31. ,"wxArrayString"
  32. ,"wxIcon"
  33. ,"wxTaskBarIcon"
  34. ,"wxValidator"
  35. ,"wxPoint"
  36. ,"wxSize"
  37. ,"wxTextCtrl"
  38. ,"wxComboBox"
  39. );
  40. $doc = new DOMDocument();
  41. $doc->load('wx.xml');
  42. $xpath = new DOMXPath($doc);
  43. //variables;
  44. $defConsts = array();
  45. $entries = $xpath->evaluate('//EnumValue[@name]', $doc);
  46. for ($i = 0; $i < $entries->length; $i++)
  47. {
  48. $k = $entries->item($i)->getAttribute('name');
  49. if(substr($k,0,2)=="wx")
  50. $defConsts[$k]=1;
  51. }
  52. echo "Found ".count($defConsts)." enumVariables\n";
  53. //mapped to another const index in Linux
  54. //$entries = $xpath->evaluate('//Variable[@name and @type="_5372c"]', $doc);
  55. $entries = $xpath->evaluate('//Variable[@name and @type="_4372c"]', $doc);
  56. //$entries = $xpath->evaluate('//Variable[@name and @type="_4867c"]', $doc);
  57. //$entries = $xpath->evaluate('//Variable[@name and @type="_1405c"]', $doc);
  58. for ($i = 0; $i < $entries->length; $i++)
  59. {
  60. $k = $entries->item($i)->getAttribute('name');
  61. if(substr($k,0,2)=="wx")
  62. $defConsts[$k]=1;
  63. }
  64. echo "Found ".count($defConsts)." variables\n";
  65. $hd = fopen("consts.dump","w");
  66. fwrite($hd,serialize($defConsts));
  67. fclose($hd);
  68. $_classes = array();
  69. $entries = $xpath->evaluate('//Class[@id]', $doc);
  70. for ($i = 0; $i < $entries->length; $i++)
  71. {
  72. $_classes[$entries->item($i)->getAttribute('id')] = array(
  73. "name" =>$entries->item($i)->getAttribute('name')
  74. ,"members" =>$entries->item($i)->getAttribute('members')
  75. ,"bases" =>trim($entries->item($i)->getAttribute('bases'))
  76. );
  77. }
  78. echo "Found ".count($_classes)." classes\n";
  79. $_types = array();
  80. $entries = $xpath->evaluate('//FundamentalType[@id]', $doc);
  81. for ($i = 0; $i < $entries->length; $i++)
  82. {
  83. $_types[$entries->item($i)->getAttribute('id')] = $entries->item($i)->getAttribute('name');
  84. }
  85. echo "Found ".count($_types)." types\n";
  86. $entries = $xpath->evaluate('//Enumeration[@id]', $doc);
  87. for ($i = 0; $i < $entries->length; $i++)
  88. {
  89. $_types[$entries->item($i)->getAttribute('id')] = $entries->item($i)->getAttribute('name');//"int";//"long";//$entries->item($i)->getAttribute('name');
  90. }
  91. echo "Found ".count($_types)." types (enumerations)\n";
  92. $entries = $xpath->evaluate('//Typedef[@id]', $doc);
  93. for ($i = 0; $i < $entries->length; $i++)
  94. {
  95. if(isset($_classes[$entries->item($i)->getAttribute('type')]))
  96. {
  97. $_types[$entries->item($i)->getAttribute('id')] = $_classes[$entries->item($i)->getAttribute('type')]['name'];
  98. }
  99. elseif(isset($_types[$entries->item($i)->getAttribute('type')]))
  100. {
  101. $_types[$entries->item($i)->getAttribute('id')] = $_types[$entries->item($i)->getAttribute('type')];
  102. }
  103. }
  104. echo "Found ".count($_types)." types (typedefs)\n";
  105. $entries = $xpath->evaluate('//CvQualifiedType[@id]', $doc);
  106. for ($i = 0; $i < $entries->length; $i++)
  107. {
  108. if(isset($_classes[$entries->item($i)->getAttribute('type')]))
  109. $_types[$entries->item($i)->getAttribute('id')] = "const ".$_classes[$entries->item($i)->getAttribute('type')]['name'];
  110. elseif(isset($_types[$entries->item($i)->getAttribute('type')]))
  111. $_types[$entries->item($i)->getAttribute('id')] = "const ".$_types[$entries->item($i)->getAttribute('type')];
  112. //echo $entries->item($i)->getAttribute('id')."\n";
  113. /*else
  114. die("::".$entries->item($i)->getAttribute('id'));*/
  115. }
  116. echo "Found ".count($_types)." types\n";
  117. $entries = $xpath->evaluate('//PointerType[@id]', $doc);
  118. for ($i = 0; $i < $entries->length; $i++)
  119. {
  120. if(isset($_classes[$entries->item($i)->getAttribute('type')]))
  121. $_types[$entries->item($i)->getAttribute('id')] = $_classes[$entries->item($i)->getAttribute('type')]['name']."*";
  122. elseif(isset($_types[$entries->item($i)->getAttribute('type')]))
  123. {
  124. $_types[$entries->item($i)->getAttribute('id')] =$_types[$entries->item($i)->getAttribute('type')]."*";
  125. }
  126. else
  127. $_types[$entries->item($i)->getAttribute('id')] = "ref:".$entries->item($i)->getAttribute('type');
  128. }
  129. echo "Found ".count($_types)." types (pointers)\n";
  130. //$entries = $xpath->evaluate('//PointerType[@id]', $doc);
  131. $entries = $xpath->evaluate('//ReferenceType[@id]', $doc);
  132. for ($i = 0; $i < $entries->length; $i++)
  133. {
  134. if(isset($_classes[$entries->item($i)->getAttribute('type')]))
  135. $_types[$entries->item($i)->getAttribute('id')] =$_classes[$entries->item($i)->getAttribute('type')]['name']."&";
  136. elseif(isset($_types[$entries->item($i)->getAttribute('type')]))
  137. $_types[$entries->item($i)->getAttribute('id')] =$_types[$entries->item($i)->getAttribute('type')]."&";
  138. else
  139. $_types[$entries->item($i)->getAttribute('id')] = "ref:".$entries->item($i)->getAttribute('type');
  140. }
  141. echo "Found ".count($_types)." types\n";
  142. $_methods = array();
  143. $entries = $xpath->evaluate('//Constructor[@id and @access="public"]', $doc);
  144. for ($i = 0; $i < $entries->length; $i++)
  145. {
  146. $_methods[$entries->item($i)->getAttribute('id')] = array(
  147. "name" =>$entries->item($i)->getAttribute('name')
  148. ,"Argument" =>array()
  149. ,"returns" =>$_types[$entries->item($i)->getAttribute('returns')].$_classes[$entries->item($i)->getAttribute('returns')]['name']
  150. );
  151. $args = $entries->item($i)->getElementsByTagName('Argument');
  152. for ($e = 0; $e < $args->length; $e++)
  153. {
  154. if(isset($_types[$args->item($e)->getAttribute('type')]))
  155. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')] =
  156. array(
  157. "type" =>$_types[$args->item($e)->getAttribute('type')]
  158. );
  159. else
  160. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')] =
  161. array(
  162. "type" => $args->item($e)->getAttribute('type')
  163. );
  164. if($args->item($e)->hasAttribute('default'))
  165. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')]["default"]= $args->item($e)->getAttribute('default');
  166. }
  167. }
  168. echo "Found ".count($_methods)." methods\n";
  169. $entries = $xpath->evaluate('//Method[@id and @access="public" or @access="protected"]', $doc);
  170. for ($i = 0; $i < $entries->length; $i++)
  171. {
  172. $_methods[$entries->item($i)->getAttribute('id')] = array(
  173. "name" =>$entries->item($i)->getAttribute('name')
  174. ,"Argument" =>array()
  175. ,"returns" =>$_types[$entries->item($i)->getAttribute('returns')].$_classes[$entries->item($i)->getAttribute('returns')]['name']
  176. ,"pure_virtual" => $entries->item($i)->getAttribute('pure_virtual') || $entries->item($i)->getAttribute('access')=="protected"
  177. );
  178. if($entries->item($i)->getAttribute('const'))
  179. $_methods[$entries->item($i)->getAttribute('id')]['const'] = true;
  180. $args = $entries->item($i)->getElementsByTagName('Argument');
  181. for ($e = 0; $e < $args->length; $e++)
  182. {
  183. if(isset($_types[$args->item($e)->getAttribute('type')]))
  184. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')] =
  185. array(
  186. "type" =>$_types[$args->item($e)->getAttribute('type')]
  187. );
  188. else
  189. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')] =
  190. array(
  191. "type" => $args->item($e)->getAttribute('type')
  192. );
  193. if($args->item($e)->hasAttribute('default'))
  194. $_methods[$entries->item($i)->getAttribute('id')]["Argument"][$args->item($e)->getAttribute('name')]["default"]= $args->item($e)->getAttribute('default');
  195. }
  196. }
  197. echo "Found ".count($_methods)." methods\n";
  198. function iterateImplements($implements)
  199. {
  200. global $_classes;
  201. $implements = trim($implements);
  202. $implements = split(" ",$implements);
  203. $results = array();
  204. if($implements)
  205. foreach($implements as $impId)
  206. {
  207. if(isset($_classes[$impId]))
  208. {
  209. $results[] = $_classes[$impId]['name'];
  210. $results = array_merge($results,iterateImplements($_classes[$impId]['bases']));
  211. }
  212. }
  213. return $results;
  214. }
  215. $counter = 0;
  216. $defIni = array();
  217. $query = '//Namespace[@name="::"]';
  218. $entries = $xpath->evaluate($query, $doc);
  219. for ($i = 0; $i < $entries->length; $i++) {
  220. $members = split(" ",$entries->item($i)->getAttribute('members'));
  221. foreach($members as $memberId)
  222. {
  223. if(isset($_classes[$memberId]))
  224. {
  225. /*if(!in_array($_classes[$memberId]['name'],$mapClasses))
  226. continue;*/
  227. $defIni[$_classes[$memberId]['name']] = array();
  228. $ptr = &$defIni[$_classes[$memberId]['name']];
  229. $ptr['_implements'] = iterateImplements($_classes[$memberId]['bases']);
  230. echo $_classes[$memberId]['name']."::".(isset($_classes[$_classes[$memberId]['bases']])?$_classes[$_classes[$memberId]['bases']]['name']:"")."\n";
  231. $meths = split(" ",$_classes[$memberId]['members']);
  232. foreach($meths as $meth)
  233. {
  234. if(isset($_methods[$meth]))
  235. {
  236. if($_methods[$meth]['pure_virtual']==1)
  237. {
  238. if(!isset($ptr['_pure_virtual']))
  239. $ptr['_pure_virtual'] = array($_methods[$meth]['name']);
  240. else
  241. $ptr['_pure_virtual'][] = $_methods[$meth]['name'];
  242. }
  243. if($_methods[$meth]['const']==1)
  244. {
  245. if(!isset($ptr['_const']))
  246. $ptr['_const'] = array($_methods[$meth]['name']);
  247. else
  248. $ptr['_const'][] = $_methods[$meth]['name'];
  249. }
  250. if(!isset($ptr[$_methods[$meth]['name']]))
  251. $ptr[$_methods[$meth]['name']] = array();
  252. $ptm = &$ptr[$_methods[$meth]['name']];
  253. $ptm[] = array($_methods[$meth]['returns']);
  254. $pta = &$ptm[count($ptm)-1];
  255. $ptm[] = array(array(1),array(null));
  256. $ptb = &$ptm[count($ptm)-1];
  257. echo "\t".$_methods[$meth]['name']." => ".$_methods[$meth]['returns']."\n";
  258. foreach($_methods[$meth]['Argument'] as $argk => $argv)
  259. {
  260. $pta[] = $argv['type'];
  261. if(!isset($argv['default']))
  262. {
  263. $ptb[0][]=1;
  264. $ptb[1][]=null;
  265. }
  266. else
  267. $ptb[1][]=$argv['default'];
  268. echo "\t\t".$argk." => ".$argv['type'].(isset($argv['default'])?" = ".$argv['default']:"")."\n";
  269. }
  270. }
  271. }
  272. /*if($count++ ==5)
  273. die();*/
  274. }
  275. }
  276. }
  277. $hd = fopen("classes.dump","w");
  278. fwrite($hd,serialize($defIni));
  279. fclose($hd);
  280. //print_r($defIni);
  281. ?>