1 : <?php
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 : class XmlOutputter extends MetadataOutputter {
36 : private $dom;
37 : private $root;
38 :
39 :
40 :
41 :
42 :
43 : public function get_ext()
44 : {
45 0 : return 'xml';
46 : }
47 :
48 :
49 :
50 :
51 :
52 : public function get_mimetype()
53 : {
54 0 : return 'text/xml';
55 : }
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 : public function output($parser_items, Config $config)
65 : {
66 1 : $this->dom = new DOMDocument('1.0', 'UTF-8');
67 1 : $this->dom->formatOutput = true;
68 :
69 1 : $this->root = $this->dom->createElement('documentation');
70 1 : $this->dom->appendChild($this->root);
71 :
72 1 : foreach ($parser_items as $item) {
73 1 : if ($item instanceof ParserFile) {
74 1 : $this->process_file($item);
75 :
76 1 : } else if ($item instanceof ParserDocument) {
77 1 : $this->process_document($item);
78 :
79 1 : }
80 1 : }
81 :
82 1 : $this->dom->save($this->filename);
83 :
84 1 : return true;
85 : }
86 :
87 :
88 :
89 :
90 :
91 : private function process_file($item)
92 : {
93 1 : $node = $this->dom->createElement('file');
94 1 : $this->root->appendChild($node);
95 :
96 1 : $node->setAttribute('name', $item->name);
97 :
98 1 : $this->create_description_node($node, $item->description);
99 :
100 :
101 1 : foreach ($item->functions as $child) {
102 1 : $this->process_function ($node, $child);
103 1 : }
104 :
105 1 : foreach ($item->classes as $child) {
106 1 : $this->process_class ($node, $child);
107 1 : }
108 1 : }
109 :
110 :
111 :
112 :
113 :
114 : private function process_function($parent_node, $item)
115 : {
116 1 : $node = $this->dom->createElement('function');
117 1 : $parent_node->appendChild($node);
118 :
119 1 : $node->setAttribute('name', $item->name);
120 1 : $node->setAttribute('visibility', $item->visibility);
121 1 : if ($item->abstract) $node->setAttribute('abstract', 'abstract');
122 1 : if ($item->static) $node->setAttribute('static', 'static');
123 1 : if ($item->final) $node->setAttribute('final', 'final');
124 :
125 1 : $this->create_description_node($node, $item->description);
126 :
127 1 : foreach ($item->args as $child) {
128 1 : $this->process_argument($node, $child);
129 1 : }
130 :
131 1 : foreach ($item->returns as $child) {
132 1 : $this->process_return($node, $child);
133 1 : }
134 1 : }
135 :
136 :
137 :
138 :
139 :
140 : private function process_argument($parent_node, $item)
141 : {
142 1 : $node = $this->dom->createElement('argument');
143 1 : $parent_node->appendChild($node);
144 :
145 1 : $node->setAttribute('name', $item->name);
146 1 : $node->setAttribute('type', $item->type);
147 1 : $node->appendChild($this->dom->createTextNode(
148 1 : trim(strip_tags($item->description))
149 1 : ));
150 1 : }
151 :
152 :
153 :
154 :
155 :
156 : private function process_return($parent_node, $item)
157 : {
158 1 : $node = $this->dom->createElement('return');
159 1 : $parent_node->appendChild($node);
160 :
161 1 : $node->setAttribute('type', $item->type);
162 1 : $node->appendChild($this->dom->createTextNode(
163 1 : trim(strip_tags($item->description))
164 1 : ));
165 1 : }
166 :
167 :
168 :
169 :
170 :
171 : private function process_class($parent_node, $item)
172 : {
173 1 : $node = $this->dom->createElement('class');
174 1 : $parent_node->appendChild($node);
175 :
176 1 : $node->setAttribute('name', $item->name);
177 1 : if (isset($item->abstract) and $item->abstract) $node->setAttribute('abstract', 'abstract');
178 1 : if (isset($item->final) and $item->final) $node->setAttribute('final', 'final');
179 :
180 1 : $this->create_description_node($node, $item->description);
181 :
182 :
183 1 : foreach ($item->functions as $child) {
184 1 : $this->process_function ($node, $child);
185 1 : }
186 1 : }
187 :
188 :
189 :
190 :
191 :
192 : private function process_document($item)
193 : {
194 :
195 1 : }
196 :
197 :
198 :
199 :
200 :
201 : private function create_description_node($node, $description)
202 : {
203 1 : $description = trim(strip_tags($description));
204 :
205 1 : $desc = $this->dom->createElement('description');
206 1 : $desc->appendChild ($this->dom->createTextNode ($description));
207 :
208 1 : $node->appendChild ($desc);
209 1 : }
210 :
211 : }
|