/var/www/hkosl.com/littleark/webadmin/libraies/dompdf/dompdf/src/FrameReflower/TableCell.php


1
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
/**
 * @package dompdf
 * @link    http://dompdf.github.com/
 * @author  Benj Carson <benjcarson@digitaljunkies.ca>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use 
Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use 
Dompdf\FrameDecorator\Table as TableFrameDecorator;

/**
 * Reflows table cells
 *
 * @package dompdf
 */
class TableCell extends Block
{
    function 
__construct(BlockFrameDecorator $frame)
    {
        
parent::__construct($frame);
    }

    function 
reflow(BlockFrameDecorator $block null)
    {

        
$style $this->_frame->get_style();

        
$table TableFrameDecorator::find_parent_table($this->_frame);
        
$cellmap $table->get_cellmap();

        list(
$x$y) = $cellmap->get_frame_position($this->_frame);
        
$this->_frame->set_position($x$y);

        
$cells $cellmap->get_spanned_cells($this->_frame);

        
$w 0;
        foreach (
$cells["columns"] as $i) {
            
$col $cellmap->get_column($i);
            
$w += $col["used-width"];
        }

        
//FIXME?
        
$h $this->_frame->get_containing_block("h");

        
$left_space $style->length_in_pt(array($style->margin_left,
                
$style->padding_left,
                
$style->border_left_width),
            
$w);

        
$right_space $style->length_in_pt(array($style->padding_right,
                
$style->margin_right,
                
$style->border_right_width),
            
$w);

        
$top_space $style->length_in_pt(array($style->margin_top,
                
$style->padding_top,
                
$style->border_top_width),
            
$h);
        
$bottom_space $style->length_in_pt(array($style->margin_bottom,
                
$style->padding_bottom,
                
$style->border_bottom_width),
            
$h);

        
$style->width $cb_w $w $left_space $right_space;

        
$content_x $x $left_space;
        
$content_y $line_y $y $top_space;

        
// Adjust the first line based on the text-indent property
        
$indent $style->length_in_pt($style->text_indent$w);
        
$this->_frame->increase_line_width($indent);

        
$page $this->_frame->get_root();

        
// Set the y position of the first line in the cell
        
$line_box $this->_frame->get_current_line_box();
        
$line_box->$line_y;

        
// Set the containing blocks and reflow each child
        
foreach ($this->_frame->get_children() as $child) {

            if (
$page->is_full())
                break;

            
$child->set_containing_block($content_x$content_y$cb_w$h);

            
$this->process_clear($child);

            
$child->reflow($this->_frame);

            
$this->process_float($child$x $left_space$w $right_space $left_space);
        }

        
// Determine our height
        
$style_height $style->length_in_pt($style->height$h);

        
$this->_frame->set_content_height($this->_calculate_content_height());

        
$height max($style_height$this->_frame->get_content_height());

        
// Let the cellmap know our height
        
$cell_height $height count($cells["rows"]);

        if (
$style_height <= $height)
            
$cell_height += $top_space $bottom_space;

        foreach (
$cells["rows"] as $i)
            
$cellmap->set_row_height($i$cell_height);

        
$style->height $height;

        
$this->_text_align();

        
$this->vertical_align();

    }

}