root / trunk / docscripts / inc / helpers.inc

Revision 6362, 10.5 kB (checked in by pottedmeat, 2 years ago)

Delete properly, and parse full source

Line 
1<?php
2
3require_once('lib/JSON.php');
4require_once('DojoVariable.php');
5
6function writeToDisk($output, $dir, $format = 'json', $environment = 'remote') {
7        if ($dir{strlen($dir) - 1} == '/') {
8    $dir = substr($dir, 0, -1);
9  }
10        if (!file_exists($dir)) {
11                mkdir($dir);
12                chmod($dir, 0777);
13        }
14        delTree($dir);
15
16  if ($format == 'xml' && $environment == 'pretty') {
17    $document = new DomDocument();
18    $dojo = $document->appendChild($document->createElement('dojo'));
19    unset($output['function_names']);
20    foreach ($output as $package_name => $package_content) {
21      $package = $dojo->appendChild($document->createElement('resource'));
22      $package->setAttribute('location', $package_name);
23
24      if ($package_content['meta']['requires']) {
25        foreach ($package_content['meta']['requires'] as $environment_name => $environment_content) {
26          $requires = $package->appendChild($document->createElement('requires'));
27          $environment = $requires->appendChild($document->createElement('environment'));
28          $environment->setAttribute('type', $environment_name);
29          foreach ($environment_content as $require_name) {
30            $require = $environment->appendChild($document->createElement('require'));
31            $require->appendChild($document->createTextNode($require_name));
32          }
33        }
34      }
35     
36      if ($package_content['meta']['functions']) {
37        foreach ($package_content['meta']['functions'] as $function_name => $function_content) {
38          $function = $package->appendChild($document->createElement('function'));
39          $function->setAttribute('name', $function_name);
40          if ($function_content['meta']['returns']) {
41            $returns = $function->appendChild($document->createElement('returns'));
42            $returns->appendChild($document->createTextNode($function_content['meta']['returns']));
43          }
44          if ($function_content['meta']['summary']) {
45            $summary = $function->appendChild($document->createElement('summary'));
46            $summary->appendChild($document->createTextNode($function_content['meta']['summary']));
47          }
48          if ($function_content['meta']['parameters']) {
49            $parameters = $function->appendChild($document->createElement('parameters'));
50            foreach ($function_content['meta']['parameters'] as $parameter_name => $parameter_content) {
51              $parameter = $parameters->appendChild($document->createElement('parameter'));
52              $parameter->setAttribute('name', $parameter_name);
53              if ($parameter_content['type']) {
54                $type = $parameter_content['type'];
55                if (substr($type, -1) == '?') {
56                  $parameter->setAttribute('optional', 'true');
57                  $type = trim(substr($type, 0, -1));
58                }
59                $parameter->setAttribute('type', $type);
60              }
61              if (!empty($function_content['extra']['parameters'][$parameter_name])) {
62                $parameter->appendChild($document->createTextNode($function_content['extra']['parameters'][$parameter_name]));
63              }
64            }
65          }
66          if ($function_content['meta']['prototype']) {
67            $prototype = $function->appendChild($document->createElement('prototype'));
68            $prototype->appendChild($document->createTextNode($function_content['meta']['prototype']));
69          }
70          if ($function_content['meta']['call_chain'] || $function_content['meta']['prototype_chain']) {
71            $chains = $function->appendChild($document->createElement('chains'));
72            if ($function_content['meta']['call_chain']) {
73              foreach ($function_content['meta']['call_chain'] as $function_name) {
74                $chain = $chains->appendChild($document->createElement('chain'));
75                $chain->setAttribute('type', 'call');
76                $chain->appendChild($document->createTextNode($function_name));
77              }
78            }
79            if ($function_content['meta']['prototype_chain']) {
80              foreach ($function_content['meta']['prototype_chain'] as $function_name) {
81                $chain = $chains->appendChild($document->createElement('chain'));
82                $chain->setAttribute('type', 'prototype');
83                $chain->appendChild($document->createTextNode($function_name));
84              }
85            }
86          }
87          if ($function_content['meta']['instance_variables'] || $function_content['meta']['prototype_variables'] || $function_content['meta']['variables']) {
88            $variables = $function->appendChild($document->createElement('variables'));
89            if ($function_content['meta']['variables']) {
90              foreach ($function_content['meta']['variables'] as $variable_name) {
91                $variable = $variables->appendChild($document->createElement('variable'));
92                $variable->setAttribute('name', $variable_name);
93                if (!empty($function_content['extra']['variables'][$variable_name])) {
94                  $variable->setAttribute('type', $function_content['extra']['variables'][$variable_name]['type']);
95                  $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name]['summary']));
96                }
97              }
98            }
99            if ($function_content['meta']['instance_variables']) {
100              foreach ($function_content['meta']['instance_variables'] as $variable_name) {
101                $variable = $variables->appendChild($document->createElement('variable'));
102                $variable->setAttribute('scope', 'instance');
103                $variable->setAttribute('name', $variable_name);
104                if (!empty($function_content['extra']['variables'][$variable_name])) {
105                  $variable->setAttribute('type', $function_content['extra']['variables'][$variable_name]['type']);
106                  $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name]['summary']));
107                }
108                $parent_function_name = preg_replace('%\.([^.]+)$%', '', $function_name);
109                if (!empty($package_content['meta']['functions'][$parent_function_name]) && !empty($package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name])) {
110                  $variable->setAttribute('type', $package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name]['type']);
111                  $variable->appendChild($document->createTextNode($package_content['meta']['functions'][$parent_function_name]['extra']['variables'][$variable_name]['summary']));
112                }
113              }
114            }
115            if ($function_content['meta']['prototype_variables']) {
116              foreach ($function_content['meta']['prototype_variables'] as $variable_name) {
117                $variable = $variables->appendChild($document->createElement('variable'));
118                $variable->setAttribute('scope', 'prototype');
119                $variable->setAttribute('name', $variable_name);
120                if (!empty($function_content['extra']['variables'][$variable_name])) {
121                  $variable->appendChild($document->createTextNode($function_content['extra']['variables'][$variable_name]));
122                }
123              }
124            }
125          }
126          if ($function_content['meta']['description']) {
127            $summary = $function->appendChild($document->createElement('description'));
128            $summary->appendChild($document->createTextNode($function_content['meta']['description']));
129          }
130        }
131      }
132    }
133    file_put_contents($dir . '/api.xml', $document->saveXML());
134  }
135        elseif ($format == 'json' && $environment == 'local') {
136                $json = new Services_JSON();
137                $merged = array();
138    if (isset($output['function_names'])) {
139      $data = $json->encode($output['function_names']);
140      file_put_contents($dir . '/function_names', $data);
141                        unset($output['function_names']);
142    }
143                foreach ($output as $package_name => $package) {
144                        $merged_name = $package_name;
145                        if (strpos($merged_name, '.')) {
146                                $merged_parts = explode('.', $merged_name);
147                                $merged_name = $merged_parts[0] . '.' . $merged_parts[1];
148                                unset($merged_parts);
149                        }
150                        $merged[$merged_name][$package_name] = $package;
151                }
152                foreach ($merged as $merged_name => $package) {
153                        $data = $json->encode($package);
154                        file_put_contents($dir . '/' . $merged_name, $data);
155                        chmod($dir . '/' . $merged_name, 0777);
156                }
157                unset($merged_name);
158                unset($package_name);
159                unset($package);
160                unset($merged);
161                unset($json);
162        }
163        else if ($format == 'json' && $environment == 'remote') {
164          $json = new Services_JSON();
165    if (isset($output['function_names'])) {
166      $data = $json->encode($output['function_names']);
167      file_put_contents($dir . '/function_names', $data);
168                        unset($output['function_names']);
169    }
170          foreach ($output as $package_name => $package) {
171      if (!file_exists($dir . '/' . $package_name)) {
172        mkdir($dir . '/' . $package_name);
173                                chmod($dir . '/' . $package_name, 0777);
174      }
175                        if (isset($package['meta'])) {
176                                $meta = array();
177                                foreach ($package['meta'] as $key => $value) {
178                                        if ($key != 'functions') {
179                                                $meta[$key] = $value;
180                                                unset($package['meta'][$key]);
181                                        }
182                                }
183
184                                if (isset($package['meta']['functions'])) {
185                                        ksort($package['meta']['functions']);
186
187                      foreach ($package['meta']['functions'] as $function_name => $function) {
188                  if (!file_exists($dir . '/' . $package_name . '/' . $function_name)) {
189                    mkdir($dir . '/' . $package_name . '/' . $function_name);
190                  }
191            if (isset($function['meta'])) {
192              foreach ($function['meta'] as $type => $data) {
193                if (empty($data)) {
194                  continue;
195                }
196
197                if ($type == 'summary') {
198                  $meta['functions'][$function_name]['meta']['summary'] = $data;
199                  unset($function['meta'][$type]);
200                }
201                else if ($type == 'description' || $type == 'src') {
202                  file_put_contents($dir . '/' . $package_name . '/' . $function_name . '/' . $type, $data);
203                  unset($function['meta'][$type]);
204                }
205              }
206              if (!empty($function['meta'])) {
207                $data = $json->encode($function['meta']);
208                file_put_contents($dir . '/' . $package_name . '/' . $function_name . '/meta', $data);
209              }
210            }
211                }
212                                }
213                               
214                                $data = $json->encode($meta);
215                                file_put_contents($dir . '/' . $package_name . '/meta', $data);
216      }
217          }
218        }
219}
220
221?>
Note: See TracBrowser for help on using the browser.