1<?php 2// $Header: /cvsroot/html2ps/xhtml.tables.inc.php,v 1.9 2006/10/28 12:24:16 Konstantin Exp $ 3 4function process_cell(&$sample_html, $offset) { 5 $r = autoclose_tag($sample_html, $offset, 6 "(table|td|th|tr|thead|tbody|tfoot|/td|/th|/table|/thead|/tbody|/tfoot|/tr)", 7 array("table" => "process_table"), 8 "/td"); 9 return $r; 10}; 11 12function process_header_cell(&$sample_html, $offset) { 13 return autoclose_tag($sample_html, $offset, 14 "(table|td|th|tr|thead|tbody|tfoot|/td|/th|/table|/thead|/tbody|/tfoot|/tr)", 15 array("table" => "process_table"), 16 "/th"); 17}; 18 19function process_cell_without_row(&$html, $offset) { 20 // Insert missing <tr> tag and fall to the 'process_row' 21 22 // get the LAST tag before offset point; it should be the TD tag outside the row 23 preg_match("#<[^>]+>$#",substr($html,0,$offset),$matches); 24 25 // Now 'matches' contains the bad TD tag (opening) 26 27 // Insert the TR tag before the TD found 28 $html = substr_replace($html, "<tr>".$matches[0], $offset - strlen($matches[0]), strlen($matches[0])); 29 30 // Restart row processing from the beginning of inserted TR (not inclusing the TR tag itself!, as it will cause the closing 31 // tag to be inserted automatically) 32 // 33 $r = process_row($html, $offset - strlen($matches[0]) + strlen("<tr>")); 34 35 return $r; 36}; 37 38function process_row(&$sample_html, $offset) { 39 return autoclose_tag_cleanup($sample_html, $offset, 40 "(td|th|thead|tbody|tfoot|tr|/table|/thead|/tbody|/tfoot|/tr)", 41 array("td" => "process_cell", 42 "th" => "process_header_cell"), 43 "/tr"); 44}; 45 46 47function process_rowgroup($group, &$sample_html, $offset) { 48 return autoclose_tag_cleanup($sample_html, $offset, 49 "(thead|tbody|tfoot|td|th|tr|/table|/{$group})", 50 array("tr" => "process_row", 51 "td" => "process_cell", 52 "th" => "process_header_cell"), 53 "/{$group}"); 54} 55 56function process_thead(&$html, $offset) { return process_rowgroup('thead', $html, $offset); } 57function process_tbody(&$html, $offset) { return process_rowgroup('tbody', $html, $offset); } 58function process_tfoot(&$html, $offset) { return process_rowgroup('tfoot', $html, $offset); } 59 60function process_col(&$html, $offset) { 61 // As COL is self-closing tag, we just continue processing 62 return $offset; 63} 64 65function process_col_without_colgroup(&$html, $offset) { 66 // Insert missing <colgroup> tag and fall to the 'process_colgroup' 67 68 // get the LAST tag before offset point; it should be the COL tag outside the COLGROUP 69 preg_match("#<[^>]+>$#",substr($html,0,$offset),$matches); 70 71 // Now 'matches' contains this COL tag (self-closing) 72 73 // Insert the COLGROUP tag before the COL found 74 $sample_html = substr_replace($html, "<colgroup>".$matches[0], $offset - strlen($matches[0]), strlen($matches[0])); 75 76 // Restart colgroup processing from the beginning of inserted COLGROUP 77 return process_colgroup($html, $offset - strlen($matches[0])); 78} 79 80function process_colgroup(&$html, $offset) { 81 return autoclose_tag_cleanup($html, $offset, 82 "(col|colgroup|thead|tbody|tfoot|tr|td|th|/colgroup)", 83 array("col" => "process_col"), 84 "/colgroup"); 85} 86 87function process_table(&$html, $offset) { 88 return autoclose_tag_cleanup($html, $offset, 89 "(col|colgroup|thead|tbody|tfoot|tr|td|th|/table)", 90 array("col" => "process_col_without_colgroup", 91 "colgroup" => "process_colgroup", 92 "thead" => "process_thead", 93 "tbody" => "process_tbody", 94 "tfoot" => "process_tfoot", 95 "tr" => "process_row", 96 "td" => "process_cell_without_row", 97 "th" => "process_cell_without_row"), 98 "/table"); 99}; 100 101function process_tables(&$sample_html, $offset) { 102 return autoclose_tag($sample_html, $offset, 103 "(table)", 104 array("table" => "process_table"), 105 ""); 106}; 107 108?>