1<?php
2// $Header: /cvsroot/html2ps/utils_array.php,v 1.7 2006/09/07 18:38:16 Konstantin Exp $
3
4function any_flag_set(&$flags) {
5  for ($i=0, $size = count($flags); $i<$size; $i++) {
6    if ($flags[$i]) { return true; };
7  }
8  return false;
9}
10
11function expand_to_with_flags($size, $array, $flags) {
12  // if array have no elements - return immediately
13  if (count($array) == 0) { return $array; };
14
15  // Never decrease exising values
16  if (array_sum($array) > $size) {
17    return $array;
18  }
19
20  // Subtract non-modifiable values from target value
21  for ($i=0; $i < count($array); $i++) {
22    if (!$flags[$i]) { $size -= $array[$i]; };
23  };
24
25  // Check if there's any expandable columns
26  $sum = 0;
27  for ($i=0, $count = count($flags); $i<$count; $i++) {
28    if ($flags[$i]) { $sum += $array[$i]; };
29  }
30
31  if ($sum == 0) {
32    // Note that this function is used in colpans-width calculation routine
33    // If we executing this branch, then we've got a colspan over non-resizable columns
34    // So, we decide to expand the very first column; note that 'Size' in this case
35    // will contain the delta value for the width and we need to _add_ it to the first
36    // column's width
37    $array[0] += $size;
38    return $array;
39  }
40
41  // Calculate scale koeff
42  $koeff = $size / $sum;
43
44  // Apply scale koeff
45  for ($i=0, $count = count($flags); $i < $count; $i++) {
46    if ($flags[$i]) { $array[$i] *= $koeff; };
47  }
48
49  return $array;
50}
51
52function expand_to($size, $array) {
53  // if array have no elements - return immediately
54  if (count($array) == 0) { return $array; };
55
56  // If array contains only zero elements (or no elements at all) do not do anything
57  if (array_sum($array) == 0) { return $array; };
58
59  // Never decrease exising values
60  if (array_sum($array) > $size) {
61    return $array;
62  }
63
64  // Calculate scale koeff
65  $koeff = $size / array_sum($array);
66
67  // Apply scale koeff
68  for ($i=0, $size = count($array); $i<$size; $i++) {
69    $array[$i] *= $koeff;
70  }
71
72  return $array;
73}
74?>