1<?php 2 3class StrategyWidthMin { 4 var $_maxw; 5 var $_cmaxw; 6 7 function StrategyWidthMin() { 8 } 9 10 function add_width($delta) { 11 $this->_cmaxw += $delta; 12 } 13 14 function line_break() { 15 $this->_maxw = max($this->_maxw, $this->_cmaxw); 16 $this->_cmaxw = 0; 17 } 18 19 function apply(&$box, &$context) { 20 $content_size = count($box->content); 21 22 /** 23 * If box does not have any context, its minimal width is determined by extra horizontal space: 24 * padding, border width and margins 25 */ 26 if ($content_size == 0) { 27 $min_width = $box->_get_hor_extra(); 28 return $min_width; 29 }; 30 31 /** 32 * If we're in 'nowrap' mode, minimal and maximal width will be equal 33 */ 34 $white_space = $box->get_css_property(CSS_WHITE_SPACE); 35 $pseudo_nowrap = $box->get_css_property(CSS_HTML2PS_NOWRAP); 36 if ($white_space == WHITESPACE_NOWRAP || 37 $pseudo_nowrap == NOWRAP_NOWRAP) { 38 $min_width = $box->get_min_nowrap_width($context); 39 return $min_width; 40 } 41 42 /** 43 * We need to add text indent size to the with of the first item 44 */ 45 $start_index = 0; 46 while ($start_index < $content_size && 47 $box->content[$start_index]->out_of_flow()) { 48 $start_index++; 49 }; 50 51 if ($start_index < $content_size) { 52 $ti = $box->get_css_property(CSS_TEXT_INDENT); 53 $minw = 54 $ti->calculate($box) + 55 $box->content[$start_index]->get_min_width($context); 56 } else { 57 $minw = 0; 58 }; 59 60 for ($i=$start_index; $i<$content_size; $i++) { 61 $item =& $box->content[$i]; 62 if (!$item->out_of_flow()) { 63 $minw = max($minw, $item->get_min_width($context)); 64 }; 65 }; 66 67 /** 68 * Apply width constraint to min width. Return maximal value 69 */ 70 $wc = $box->get_css_property(CSS_WIDTH); 71 $containing_block = $box->_get_containing_block(); 72 73 $min_width = max($minw, 74 $wc->apply($minw, $containing_block['right'] - $containing_block['left'])) + $box->_get_hor_extra(); 75 return $min_width; 76 } 77} 78 79?>