package table; use strict; sub new { my $c=shift; my $t={x=>0,y=>0,rows=>[],attrs=>{} }; bless $t; } sub setWrap { my $t=shift; $t->{wrap}=shift; $t->{wrap}++; $t->{wrapC}=0; } sub addRow{ my $t=shift; push @{$t->{rows}}, []; $t->{y}=$#{$t->{rows}}; $t->{x}=-1; $t; } sub addCol { my $t=shift; my $c=shift; if ($t->{wrap}) { $t->{wrapC}++; if ($t->{wrapC}>=$t->{wrap}) { $t->addRow; $t->{wrapC}=1; } } my $row=$t->{rows}->[$t->{y}]; push @{$row},$c; $t->{x}=$#{$row}; $t->{attrs}->{"$t->{x},$t->{y}"} ={}; $t; } sub setBGColor { my $t=shift; my $c=shift; $t->setCellAttr("bgcolor",$c); } sub setCellAttr { my $t=shift; my $name=shift; my $value=shift; $t->{attrs}->{"$t->{x},$t->{y}"}->{$name}=$value; $t; } sub out { my $t=shift; my $bg=""; my $res=new tag("table"); if ($t->{bgcolor}) { $res->setAttr("bgcolor",$t->{bgcolor}); } my $y=0; for my $r (@{$t->{rows}}) { my $tr=new tag("tr"); my $x=0; for my $c (@{$r}) { $tr->addInline(&tag::p("td",$t->{attrs}->{"$x,$y"},$c)."\n"); $x++; } $y++; $res->addInline($tr->out); } $res->out; } 1;