1 | <?php
|
---|
2 |
|
---|
3 | /**
|
---|
4 | * This file contains the /element/ class needed by xml2tree.php
|
---|
5 | * to create a tree which is then converted into DocBook XML
|
---|
6 | */
|
---|
7 |
|
---|
8 | class element {
|
---|
9 | var $name = '';
|
---|
10 | var $attrs = array ();
|
---|
11 | var $children = array ();
|
---|
12 |
|
---|
13 | # Temporary variables for link tags
|
---|
14 | var $link_target = "" ;
|
---|
15 | var $link_trail = "" ;
|
---|
16 | var $link_parts = array () ;
|
---|
17 |
|
---|
18 | # Variables only used by $tree root
|
---|
19 | var $list = array () ;
|
---|
20 | var $opentags = array () ;
|
---|
21 | var $sections = array () ;
|
---|
22 |
|
---|
23 | /**
|
---|
24 | * Parse the children ... why won't anybody think of the children?
|
---|
25 | */
|
---|
26 | function sub_parse(& $tree) {
|
---|
27 | $ret = '' ;
|
---|
28 | $temp = "" ;
|
---|
29 | foreach ($this->children as $key => $child) {
|
---|
30 | if (is_string($child)) {
|
---|
31 | $temp .= $child ;
|
---|
32 | } elseif ($child->name != 'ATTRS') {
|
---|
33 | $ret .= $this->add_temp_text ( $temp ) ;
|
---|
34 | $sub = $child->parse ( $tree , "" , $this ) ;
|
---|
35 | if ( $this->name == 'LINK' ) {
|
---|
36 | if ( $child->name == 'TARGET' ) $this->link_target = $sub ;
|
---|
37 | else if ( $child->name == 'PART' ) $this->link_parts[] = $sub ;
|
---|
38 | else if ( $child->name == 'TRAIL' ) $this->link_trail = $sub ;
|
---|
39 | }
|
---|
40 | $ret .= $sub ;
|
---|
41 | }
|
---|
42 | }
|
---|
43 | return $ret . $this->add_temp_text ( $temp ) ;
|
---|
44 | }
|
---|
45 |
|
---|
46 | function fix_text ( $s ) {
|
---|
47 | $s = html_entity_decode ( $s , ENT_COMPAT, 'UTF-8') ; // dbu 2007-08-20
|
---|
48 | filter_named_entities ( $s ) ;
|
---|
49 | $s = str_replace ( "&" , "&" , $s ) ;
|
---|
50 | $s = str_replace ( "<" , "<" , $s ) ;
|
---|
51 | $s = str_replace ( ">" , ">" , $s ) ;
|
---|
52 | return $s; // utf8_decode ( $s ) ; // dbu 2007-08-20
|
---|
53 | }
|
---|
54 |
|
---|
55 | function add_temp_text ( &$temp ) {
|
---|
56 | $s = $temp ;
|
---|
57 | $temp = "" ;
|
---|
58 | return $this->fix_text ( $s ) ;
|
---|
59 | }
|
---|
60 |
|
---|
61 | function add_new ( $tag , &$tree ) {
|
---|
62 | return $this->ensure_new ( $tag , $tree , "<{$tag}>\n" ) ;
|
---|
63 | }
|
---|
64 |
|
---|
65 | function ensure_new ( $tag , &$tree , $opttag = "" ) {
|
---|
66 | if ( $opttag == "" ) { # Catching special case (currently, <section>)
|
---|
67 | foreach ( $tree->opentags AS $o ) {
|
---|
68 | if ( $o == $tag ) return "" ; # Already open
|
---|
69 | }
|
---|
70 | }
|
---|
71 | array_push ( $tree->opentags , $tag ) ;
|
---|
72 | if ( $opttag == "" ) return "<{$tag}>\n" ;
|
---|
73 | else return $opttag ;
|
---|
74 | }
|
---|
75 |
|
---|
76 | function close_last ( $tag , &$tree , $all = false ) {
|
---|
77 | $found = false ;
|
---|
78 | foreach ( $tree->opentags AS $o ) {
|
---|
79 | if ( $o == $tag ) $found = true ;
|
---|
80 | }
|
---|
81 | if ( !$found ) return "" ; # Already closed
|
---|
82 | $ret = "\n" ;
|
---|
83 | while ( count ( $tree->opentags ) > 0 ) {
|
---|
84 | $o = array_pop ( $tree->opentags ) ;
|
---|
85 | $ret .= "</{$o}>\n" ;
|
---|
86 | if ( $o == $tag ) {
|
---|
87 | if ( $all ) return $ret . $this->close_last ( $tag , $tree , true ) ;
|
---|
88 | else return $ret ;
|
---|
89 | }
|
---|
90 | }
|
---|
91 | }
|
---|
92 |
|
---|
93 | function handle_extensions ( &$tree ) {
|
---|
94 | global $content_provider ;
|
---|
95 | $sub = "" ;
|
---|
96 | $name = strtolower ( $this->attrs['EXTENSION_NAME'] ) ;
|
---|
97 | $ot = $tree->opentags ;
|
---|
98 | $tree->opentags = array () ;
|
---|
99 | if ( $name == 'ref' )
|
---|
100 | $sub .= $this->ensure_new ( 'para' , $tree ) ;
|
---|
101 | $sub .= $this->sub_parse ( $tree ) ;
|
---|
102 | while ( count ( $tree->opentags ) > 0 )
|
---|
103 | $sub .= "</" . array_pop ( $tree->opentags ) . ">\n" ;
|
---|
104 | $tree->opentags = $ot ;
|
---|
105 | if ( $name == 'ref' ) {
|
---|
106 | $ret = '<footnote>' . $sub . '</footnote>' ;
|
---|
107 | } else {
|
---|
108 | $ret = $sub ;
|
---|
109 | }
|
---|
110 | return $ret ;
|
---|
111 | }
|
---|
112 |
|
---|
113 | function internal_id ( $title ) {
|
---|
114 | #return urlencode ( $title ) ;
|
---|
115 | $ret = "" ;
|
---|
116 | for ( $a = 0 ; $a < strlen ( $title ) ; $a++ ) {
|
---|
117 | if ( ( $title[$a] >= 'A' && $title[$a] <= 'Z' ) ||
|
---|
118 | ( $title[$a] >= 'a' && $title[$a] <= 'z' ) ||
|
---|
119 | ( $title[$a] >= '0' && $title[$a] <= '9' ) )
|
---|
120 | $ret .= $title[$a] ;
|
---|
121 | else $ret .= "_" ;
|
---|
122 | }
|
---|
123 | return $ret ;
|
---|
124 | }
|
---|
125 |
|
---|
126 | function handle_link ( &$tree ) {
|
---|
127 | global $content_provider ;
|
---|
128 | $ot = $tree->opentags ;
|
---|
129 | $sub = $this->sub_parse ( $tree ) ;
|
---|
130 | $tree->opentags = $ot ;
|
---|
131 | $link = "" ;
|
---|
132 | if ( isset ( $this->attrs['TYPE'] ) AND strtolower ( $this->attrs['TYPE'] ) == 'external' ) { # External link
|
---|
133 | $href = htmlentities ( $this->attrs['HREF'] ) ;
|
---|
134 | if ( trim ( $sub ) == "" ) {
|
---|
135 | $sub = $href ;
|
---|
136 | $sub = explode ( '://' , $sub , 2 ) ;
|
---|
137 | $sub = explode ( '/' , array_pop ( $sub ) , 2 ) ;
|
---|
138 | $sub = array_shift ( $sub ) ;
|
---|
139 | }
|
---|
140 | $sub = $this->fix_text ( $sub ) ;
|
---|
141 | $link = "<ulink url=\"{$href}\"><citetitle>{$sub}</citetitle></ulink>" ;
|
---|
142 | } else { # Internal link
|
---|
143 | if ( count ( $this->link_parts ) > 0 ) {
|
---|
144 | $link = array_pop ( $this->link_parts ) ;
|
---|
145 | array_push ( $this->link_parts , $link ) ; # Compensating array_pop
|
---|
146 | }
|
---|
147 | $link_text = $link ;
|
---|
148 | if ( $link == "" ) $link = $this->link_target ;
|
---|
149 | $link .= $this->link_trail ;
|
---|
150 |
|
---|
151 | $ns = $content_provider->get_namespace_id ( $this->link_target ) ;
|
---|
152 |
|
---|
153 |
|
---|
154 | if ( $ns == 6 ) { # Image
|
---|
155 | $nstext = explode ( ":" , $this->link_target , 2 ) ;
|
---|
156 | $target = array_pop ( $nstext ) ;
|
---|
157 | $nstext = array_shift ( $nstext ) ;
|
---|
158 |
|
---|
159 | $text = array_pop ( $this->link_parts ) ;
|
---|
160 | $is_thumb = false ;
|
---|
161 | $align = '' ;
|
---|
162 | $width = '' ;
|
---|
163 | foreach ( $this->link_parts AS $s ) {
|
---|
164 | $s = trim ( $s ) ;
|
---|
165 | if ( $s == 'thumb' ) {
|
---|
166 | $is_thumb = true ;
|
---|
167 | if ( $align == '' ) $align = 'right' ;
|
---|
168 | if ( $width == '' ) $width = '200px' ;
|
---|
169 | }
|
---|
170 | }
|
---|
171 |
|
---|
172 | $href = $content_provider->get_image_url ( $target ) ;
|
---|
173 |
|
---|
174 | $link = "<mediaobject>\n<imageobject>\n<imagedata" ;
|
---|
175 | $link .= " fileref=\"{$href}\"" ;
|
---|
176 | # if ( $align != '' ) $link .= " align='{$align}'" ; # Deactivated until DocBook supports floating images; meanwhile:
|
---|
177 | if ( $align == 'center' ) $link .= " align='{$align}'" ;
|
---|
178 | if ( $width != '' ) $link .= " width='$width' scalefit='1'" ; # depth='$width'
|
---|
179 | $link .= "/>\n</imageobject>\n" ;
|
---|
180 | $link .= "<textobject>\n" ;
|
---|
181 | $link .= "<phrase>{$text}</phrase>\n" ;
|
---|
182 | $link .= "</textobject>\n" ;
|
---|
183 | if ( $is_thumb ) {
|
---|
184 | $link .= "<caption>\n" ;
|
---|
185 | if ( substr ( $text , 0 , 5 ) == '<para' ) $link .= $text ; # Para-noia!
|
---|
186 | else $link .= "<para>{$text}</para>\n" ;
|
---|
187 | $link .= "</caption>\n" ;
|
---|
188 | }
|
---|
189 | $link .= "</mediaobject>\n" ;
|
---|
190 | } else if ( $ns == -9 ) { # Interlanguage link
|
---|
191 | $sub = $this->link_target ;
|
---|
192 | $nstext = explode ( ":" , $sub , 2 ) ;
|
---|
193 | $name = array_pop ( $nstext ) ;
|
---|
194 | $nstext = array_shift ( $nstext ) ;
|
---|
195 |
|
---|
196 | $href = "http://{$nstext}.wikipedia.org/wiki/" . htmlentities ( $name ) ;
|
---|
197 | $link = "<ulink url=\"{$href}\"><citetitle>{$sub}</citetitle></ulink>" ;
|
---|
198 | } else if ( $ns == -8 ) { # Category link
|
---|
199 | if ( $link_text == "!" || $link_text == '*' ) $link = "" ;
|
---|
200 | else $link = " ({$link})" ;
|
---|
201 | $link = "" . $this->link_target . $link . "" ;
|
---|
202 | } else {
|
---|
203 | if ( $content_provider->is_an_article ( $this->link_target ) ) {
|
---|
204 | $lt = $this->internal_id ( trim ( $this->link_target ) ) ;
|
---|
205 | $lt = str_replace ( "+" , "_" , $lt ) ;
|
---|
206 | $link = "<link linkend='{$lt}'>{$link}</link>" ;
|
---|
207 | } else {
|
---|
208 | #$link = "<link linkend='{$lt}'>{$link}</link>" ;
|
---|
209 | }
|
---|
210 | }
|
---|
211 | }
|
---|
212 | return $link ;
|
---|
213 | }
|
---|
214 |
|
---|
215 | function make_tgroup ( &$tree ) {
|
---|
216 | $num_rows = 0 ;
|
---|
217 | $max_num_cols = 0 ;
|
---|
218 | $caption = "" ;
|
---|
219 | foreach ($this->children AS $key1 => $row) {
|
---|
220 | if (is_string($row)) continue ;
|
---|
221 | elseif ($row->name == 'TABLECAPTION') {
|
---|
222 | $caption .= $row->parse ( $tree , "DOCAPTION" , $this ) ;
|
---|
223 | continue ;
|
---|
224 | } elseif ($row->name != 'TABLEROW') continue ;
|
---|
225 | $num_rows++ ;
|
---|
226 | $num_cols = 0 ;
|
---|
227 | foreach ( $row->children AS $key2 => $col ) {
|
---|
228 | if (is_string($col)) continue ;
|
---|
229 | if ($col->name != 'TABLECELL' && $col->name != 'TABLEHEAD') continue ;
|
---|
230 | if ( isset ( $col->attrs['COLSPAN'] ) ) $num_cols += $col->attrs['COLSPAN'] ;
|
---|
231 | else $num_cols++ ;
|
---|
232 | }
|
---|
233 | if ( $num_cols > $max_num_cols )
|
---|
234 | $max_num_cols = $num_cols ;
|
---|
235 | }
|
---|
236 | return "<title>{$caption}</title><tgroup cols='{$max_num_cols}'>" ;
|
---|
237 | }
|
---|
238 |
|
---|
239 | function top_tag ( &$tree ) {
|
---|
240 | if ( count ( $tree->opentags ) == 0 ) return "" ;
|
---|
241 | $x = array_pop ( $tree->opentags ) ;
|
---|
242 | array_push ( $tree->opentags , $x ) ;
|
---|
243 | return $x ;
|
---|
244 | }
|
---|
245 |
|
---|
246 | function convert_xhtml_tags ( &$oldtag , &$tree , &$ret ) {
|
---|
247 | if ( substr ( $oldtag , 0 , 6 ) != 'XHTML:' )
|
---|
248 | return false ;
|
---|
249 |
|
---|
250 | $tag = substr ( $oldtag , 6 ) ;
|
---|
251 | if ( $tag == 'UL' || $tag == 'OL' ) {
|
---|
252 | $ot = $tree->opentags ;
|
---|
253 | $r = "" ;
|
---|
254 | $found = false ;
|
---|
255 | while ( count ( $ot ) > 0 ) {
|
---|
256 | $x = array_pop ( $ot ) ;
|
---|
257 | $r .= "</{$x}>\n" ;
|
---|
258 | $found = true ;
|
---|
259 | if ( $x == 'para' ) break ;
|
---|
260 | # if ( $x == 'listitem' ) break ;
|
---|
261 | $found = false ;
|
---|
262 | }
|
---|
263 | if ( !$found ) return false ;
|
---|
264 | $tree->opentags = $ot ;
|
---|
265 | if ( $tag == 'UL' ) $this->attrs['TYPE'] = "bullet" ;
|
---|
266 | if ( $tag == 'OL' ) $this->attrs['TYPE'] = "numbered" ;
|
---|
267 | $oldtag = 'LIST' ;
|
---|
268 | $ret .= $r ;
|
---|
269 | return true ;
|
---|
270 | } else if ( $tag == 'LI' ) {
|
---|
271 | # $tt = $this->top_tag ( $tree ) ;
|
---|
272 | # print $tt . "<br/>" ;
|
---|
273 | # if ( $tt != 'itemizedlist' && $tt != 'orderedlist' ) return false ;
|
---|
274 | $oldtag = 'LISTITEM' ;
|
---|
275 | }
|
---|
276 |
|
---|
277 | return false ; # No match
|
---|
278 | }
|
---|
279 |
|
---|
280 | /*
|
---|
281 | * Parse the tag
|
---|
282 | */
|
---|
283 | function parse ( &$tree , $param = "" , $root = "" ) {
|
---|
284 | global $content_provider ;
|
---|
285 | $ret = '';
|
---|
286 | $tag = $this->name ;
|
---|
287 | $close_tag = "" ;
|
---|
288 |
|
---|
289 | # Pre-fixing XHTML to wiki tags
|
---|
290 | $xhtml_conversion = $this->convert_xhtml_tags ( $tag , $tree , $ret ) ;
|
---|
291 |
|
---|
292 | if ( $tag == 'SPACE' ) {
|
---|
293 | return ' ' ; # Speedup
|
---|
294 | } else if ( $tag == 'ARTICLES' ) {
|
---|
295 | # dummy, to prevent default action to be called
|
---|
296 | } else if ( $tag == 'AUTHORS' ) {
|
---|
297 | # dummy, to prevent default action to be called
|
---|
298 | } else if ( $tag == 'AUTHOR' ) {
|
---|
299 | add_author ( $this->sub_parse ( $tree ) ) ;
|
---|
300 | return "" ;
|
---|
301 | } else if ( $tag == 'ARTICLE' ) {
|
---|
302 | $title = isset ( $this->attrs["TITLE"] ) ? $this->attrs["TITLE"] : "Untiteled" ;
|
---|
303 | $id = $this->internal_id ( $title ) ;
|
---|
304 | $ret .= "<article id='{$id}'>\n";
|
---|
305 | $ret .= "<title>" . urldecode ( $title ) . "</title>\n" ;
|
---|
306 | } else if ( $tag == 'LINK' ) {
|
---|
307 | return $this->handle_link ( $tree ) ; # Shortcut
|
---|
308 | } else if ( $tag == 'EXTENSION' ) {
|
---|
309 | return $this->handle_extensions ( $tree ) ; # Shortcut
|
---|
310 | } else if ( $tag == 'HEADING' ) {
|
---|
311 | $level = count ( $tree->sections ) ;
|
---|
312 | $wanted = $this->attrs["LEVEL"] ;
|
---|
313 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
314 | while ( $level >= $wanted ) {
|
---|
315 | $x = array_pop ( $tree->sections ) ;
|
---|
316 | if ( $x == 1 ) {
|
---|
317 | $ret .= $this->close_last ( "section" , $tree ) ;
|
---|
318 | }
|
---|
319 | $level-- ;
|
---|
320 | }
|
---|
321 | while ( $level < $wanted ) {
|
---|
322 | $level++ ;
|
---|
323 | if ( $level < $wanted ) {
|
---|
324 | array_push ( $tree->sections , 0 ) ;
|
---|
325 | } else {
|
---|
326 | $ret .= $this->ensure_new ( "section" , $tree , "<section>" ) ;
|
---|
327 | array_push ( $tree->sections , 1 ) ;
|
---|
328 | }
|
---|
329 | }
|
---|
330 | $ret .= "<title>" ;
|
---|
331 | } else if ( $tag == 'PARAGRAPH' || $tag == 'XHTML:P' ) { # Paragraph
|
---|
332 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
333 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
334 | } else if ( $tag == 'LIST' ) { # List
|
---|
335 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
336 | $list_type = strtolower ( $this->attrs['TYPE'] ) ;
|
---|
337 | if ( $list_type == 'bullet' || $list_type == 'ident' || $list_type == 'def' ) $ret .= '<itemizedlist mark="opencircle">' ;
|
---|
338 | else if ( $list_type == 'numbered' ) $ret .= '<orderedlist numeration="arabic">' ;
|
---|
339 | } else if ( $tag == 'LISTITEM' ) { # List item
|
---|
340 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
341 | $ret .= "<listitem>\n" ;
|
---|
342 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
343 |
|
---|
344 |
|
---|
345 | } else if ( $tag == 'TABLE' ) { # Table
|
---|
346 | $ret .= $this->add_new ( "table" , $tree ) ;
|
---|
347 | # $ret .= "<title></title>" ;
|
---|
348 | $ret .= $this->make_tgroup ( $tree ) ;
|
---|
349 | $ret .= "<tbody>" ;
|
---|
350 | } else if ( $tag == 'TABLEROW' ) { # Tablerow
|
---|
351 | $retl_before = strlen ( $ret ) ;
|
---|
352 | $ret .= $this->add_new ( "row" , $tree ) ;
|
---|
353 | $retl_after = strlen ( trim ( $ret ) ) ;
|
---|
354 | } else if ( $tag == 'TABLEHEAD' ) { # Tablehead
|
---|
355 | $ret .= $this->add_new ( "entry" , $tree ) ;
|
---|
356 | } else if ( $tag == 'TABLECELL' ) { # Tablecell
|
---|
357 | $old_ret = $ret ;
|
---|
358 | $ret .= $this->add_new ( "entry" , $tree ) ;
|
---|
359 | } else if ( $tag == 'TABLECAPTION' ) { # Tablecaption
|
---|
360 | if ( $param != "DOCAPTION" ) return "" ;
|
---|
361 | # $ret .= $this->add_new ( "title" , $tree ) ;
|
---|
362 |
|
---|
363 |
|
---|
364 | } else if ( $tag == 'BOLD' || $tag == 'XHTML:STRONG' || $tag == 'XHTML:B' ) { # <b> or '''
|
---|
365 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
366 | $ret .= '<emphasis role="bold">' ;
|
---|
367 | $close_tag = "emphasis" ;
|
---|
368 | } else if ( $tag == 'ITALICS' || $tag == 'XHTML:EM' || $tag == 'XHTML:I' ) { # <i> or ''
|
---|
369 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
370 | $ret .= '<emphasis>' ;
|
---|
371 | $close_tag = "emphasis" ;
|
---|
372 | } else if ( $tag == 'XHTML:TT' ) { # <tt>
|
---|
373 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
374 | $ret .= '<literal>' ;
|
---|
375 | $close_tag = "literal" ;
|
---|
376 | } else if ( $tag == 'XHTML:SUB' ) { # <sub>
|
---|
377 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
378 | $ret .= '<subscript>' ;
|
---|
379 | $close_tag = "subscript" ;
|
---|
380 | } else if ( $tag == 'XHTML:SUP' ) { # <sup>
|
---|
381 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
382 | $ret .= '<superscript>' ;
|
---|
383 | $close_tag = "superscript" ;
|
---|
384 | } else if ( $tag == 'XHTML:SUP' ) { # <sup>
|
---|
385 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
386 | $ret .= '<superscript>' ;
|
---|
387 | $close_tag = "superscript" ;
|
---|
388 | } else if ( $tag == 'PRELINE' OR $tag == 'XHTML:PRE' ) { # <pre>
|
---|
389 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
390 | $ret .= '<programlisting>' ;
|
---|
391 | $close_tag = "programlisting" ;
|
---|
392 | } else if ( $tag == 'DEFVAL' ) {
|
---|
393 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
394 | $ret .= " : " ;
|
---|
395 | } else { # Default : normal text
|
---|
396 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
397 | }
|
---|
398 |
|
---|
399 |
|
---|
400 |
|
---|
401 | # Get the sub-items
|
---|
402 | $length_between = strlen ( $ret ) ;
|
---|
403 | if ( $tag != 'MAGIC_VARIABLE' && $tag != 'TEMPLATE' ) {
|
---|
404 | $ret .= $this->sub_parse ( $tree ) ;
|
---|
405 | }
|
---|
406 | $length_between = strlen ( $ret ) - $length_between ;
|
---|
407 |
|
---|
408 |
|
---|
409 |
|
---|
410 | # Close tags
|
---|
411 | if ( $tag == 'LIST' ) {
|
---|
412 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
413 | if ( $list_type == 'bullet' || $list_type == 'ident' || $list_type == 'def' ) $ret .= "</itemizedlist>\n" ;
|
---|
414 | else if ( $list_type == 'numbered' ) $ret .= "</orderedlist>\n" ;
|
---|
415 | if ( $xhtml_conversion )
|
---|
416 | $ret .= $this->ensure_new ( "para" , $tree ) ;
|
---|
417 | } else if ( $tag == 'LISTITEM' ) {
|
---|
418 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
419 | $ret .= "</listitem>\n" ;
|
---|
420 | } else if ( $close_tag != "" ) {
|
---|
421 | $ret .= "</{$close_tag}>" ;
|
---|
422 | } else if ( $tag == 'HEADING' ) {
|
---|
423 | $ret .= "</title>\n" ;
|
---|
424 |
|
---|
425 |
|
---|
426 | } else if ( $tag == 'TABLE' ) { # Table
|
---|
427 | $ret .= "</tbody>" ;
|
---|
428 | $ret .= "</tgroup>" ;
|
---|
429 | $ret .= $this->close_last ( "table" , $tree ) ;
|
---|
430 | } else if ( $tag == 'TABLEROW' ) { # Tablerow
|
---|
431 | if ( strlen ( trim ( $ret ) ) == $retl_after ) {
|
---|
432 | $ret = substr ( $ret , 0 , $retl_before ) ;
|
---|
433 | $this->close_last ( "row" , $tree ) ;
|
---|
434 | } else $ret .= $this->close_last ( "row" , $tree ) ;
|
---|
435 | } else if ( $tag == 'TABLEHEAD' ) { # Tablehead !!!!
|
---|
436 | $ret .= $this->close_last ( "entry" , $tree ) ;
|
---|
437 | } else if ( $tag == 'TABLECELL' ) { # Tablecell
|
---|
438 | $ret .= $this->close_last ( "entry" , $tree ) ;
|
---|
439 | # if ( $length_between == 0 ) $ret = $old_ret ;
|
---|
440 | } else if ( $tag == 'TABLECAPTION' ) { # Tablecaption
|
---|
441 | # $ret .= $this->close_last ( "title" , $tree ) ;
|
---|
442 |
|
---|
443 |
|
---|
444 | } else if ( $tag == 'ARTICLE' ) {
|
---|
445 | $ret .= $this->close_last ( "section" , $tree , true ) ;
|
---|
446 | $ret .= $this->close_last ( "para" , $tree ) ;
|
---|
447 | $ret .= "</article>";
|
---|
448 | }
|
---|
449 |
|
---|
450 | return $ret;
|
---|
451 | }
|
---|
452 | }
|
---|
453 |
|
---|
454 | require_once ( "xml2tree.php" ) ; # Uses the "element" class defined above
|
---|
455 |
|
---|
456 | ?>
|
---|