our
$VERSION
=
'0.024'
;
sub
init {
my
$self
=
shift
;
$self
->{+CELLS} ||= [];
}
sub
add_cell {
my
$self
=
shift
;
push
@{
$self
->{+CELLS}} =>
@_
;
}
sub
add_cells {
my
$self
=
shift
;
push
@{
$self
->{+CELLS}} =>
@_
;
}
sub
sanitize {
my
$self
=
shift
;
$_
->sanitize(
@_
)
for
@{
$self
->{+CELLS}};
}
sub
mark_tail {
my
$self
=
shift
;
$_
->mark_tail(
@_
)
for
@{
$self
->{+CELLS}};
}
my
@proxy
=
qw{
border_left border_right border_color value_color reset_color
border_left_width border_right_width
}
;
for
my
$meth
(
@proxy
) {
no
strict
'refs'
;
*$meth
=
sub
{
my
$self
=
shift
;
$self
->{+CELLS}->[
$self
->{+IDX}]->
$meth
;
};
}
for
my
$meth
(
qw{value_width width}
) {
no
strict
'refs'
;
*$meth
=
sub
{
my
$self
=
shift
;
return
max(
map
{
$_
->
$meth
} @{
$self
->{+CELLS}});
};
}
sub
next
{
my
$self
=
shift
;
my
(
$cw
) =
@_
;
while
(
$self
->{+IDX} < @{
$self
->{+CELLS}}) {
my
$cell
=
$self
->{+CELLS}->[
$self
->{+IDX}];
my
$lw
=
$cell
->border_left_width;
my
$rw
=
$cell
->border_right_width;
my
$vw
=
$cw
-
$lw
-
$rw
;
my
$it
=
$cell
->break->
next
(
$vw
);
return
(
$it
,
$vw
)
if
$it
;
$self
->{+IDX}++;
}
return
;
}
sub
break {
$_
[0] }
sub
reset
{
my
$self
=
shift
;
$self
->{+IDX} = 0;
$_
->
reset
for
@{
$self
->{+CELLS}};
}
1;