package Zot::Table; use warnings; use strict; use Carp; sub new { my $class = shift; my $self = bless {}, $class; $self->initialize(@_); return $self; } sub initialize { my $self = shift; my $name = shift; $self->name($name); return $self; } sub name { my $self = shift; my $name = shift; if (defined $name) { $self->{'NAME'} = $name; } return $self->{'NAME'}; } sub pkey { my $self = shift; my $pkey = shift; if (defined $pkey) { $self->{'PKEY'} = $pkey; } return $self->{'PKEY'}; } sub parent { my $self = shift; my $parent = shift; if (defined $parent) { $self->{'PARENT'} = $parent; } return $self->{'PARENT'}; } sub styles { my $self = shift; return keys %{ $self->{'STYLES'} || {} }; } sub has_style { my $self = shift; my $style = shift; my @styles = keys %{ $self->{'STYLES'} || {} }; return grep $_ eq $style, @styles; } sub add_style { my $self = shift; my $style = shift; $self->{'STYLES'}->{$style}++; return $self; } sub remove_style { my $self = shift; my $style = shift; return delete $self->{'STYLES'}->{$style}; } sub rels { return keys %{ $_[0]->{'RELS'} } } sub rel { my $self = shift; my $rel = shift; my $target = shift; if (defined $target) { $self->{'RELS'}->{$rel} = $target; } return $self->{'RELS'}->{$rel}; } sub attrs { return keys %{ $_[0]->{'ATTRS'} } } sub attr { my $self = shift; my $attr = shift; my $datatype = shift; if (defined $datatype) { $self->{'ATTRS'}->{$attr} = $datatype; } return $self->{'ATTRS'}->{$attr}; } 'Zot::Table!';