package Xot::Table; use strict; use Xot::Field; sub new { my $class = shift; my $self = bless {}, $class; $self->init(@_); return $self; } sub init { my $self = shift; my $table = shift; die "must call init with a table" unless defined $table; $self->table($table->att("name")); my ($fields, $styles) = $table->children; $self->add_field($_) foreach ($fields->children); if ($styles) { $self->add_style($_) foreach ($styles->children); } } sub table { my $self = shift; my $table = shift; $self->{NAME} = $table if defined $table; return $self->{NAME}; } sub add_field { my $self = shift; my $twig = shift; my $name = $twig->att("name"); my $field = Xot::Field->new($twig); $self->field($name => $field); } sub fields { my $self = shift; return keys %{ $self->{FIELDS} || {} }; } sub field { my $self = shift; my $name = shift; my $field = shift; $self->{FIELDS}->{$name} = $field if defined $field; return $self->{FIELDS}->{$name}; } sub add_style { my $self = shift; my $twig = shift; my $name = $twig->att("name"); push @{$self->{STYLES}}, $name; } sub styles { my $self = shift; return @{$self->{STYLES}}; } 1;