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?>