ljr/wcmtools/s2/S2/Layer.pm

116 lines
2.3 KiB
Perl
Executable File

#!/usr/bin/perl
#
package S2::Layer;
use S2::NodeUnnecessary;
use S2::NodeLayerInfo;
use S2::NodeProperty;
use S2::NodePropGroup;
use S2::NodeSet;
use S2::NodeFunction;
use S2::NodeClass;
sub new
{
my ($class, $toker, $type) = @_;
my $this = {
'type' => $type,
'declaredType' => undef,
'nodes' => [],
'layerinfo' => {},
};
my $nodes = $this->{'nodes'};
while (my $t = $toker->peek()) {
if (S2::NodeUnnecessary->canStart($toker)) {
push @$nodes, S2::NodeUnnecessary->parse($toker);
next;
}
if (S2::NodeLayerInfo->canStart($toker)) {
my $nli = S2::NodeLayerInfo->parse($toker);
push @$nodes, $nli;
if ($nli->getKey() eq "type") {
$this->{'declaredType'} = $nli->getValue();
}
next;
}
if (S2::NodeProperty->canStart($toker)) {
push @$nodes, S2::NodeProperty->parse($toker);
next;
}
if (S2::NodePropGroup->canStart($toker)) {
push @$nodes, S2::NodePropGroup->parse($toker);
next;
}
if (S2::NodeSet->canStart($toker)) {
push @$nodes, S2::NodeSet->parse($toker);
next;
}
if (S2::NodeFunction->canStart($toker)) {
push @$nodes, S2::NodeFunction->parse($toker);
next;
}
if (S2::NodeClass->canStart($toker)) {
push @$nodes, S2::NodeClass->parse($toker);
next;
}
S2::error($t, "Unknown token encountered while parsing layer: " .
$t->toString());
}
bless $this, $class;
}
sub setLayerInfo {
my ($this, $key, $val) = @_;
$this->{'layerinfo'}->{$key} = $val;
}
sub getLayerInfo {
my ($this, $key) = @_;
$this->{'layerinfo'}->{$key};
}
sub getLayerInfoKeys {
my ($this) = @_;
return [ keys %{$this->{'layerinfo'}} ];
}
sub getType {
shift->{'type'};
}
sub getDeclaredType {
shift->{'declaredType'};
}
sub setType {
shift->{'type'} = shift;
}
sub toString {
shift->{'type'};
}
sub getNodes {
return shift->{'nodes'};
}
sub isCoreOrLayout {
my $this = shift;
return $this->{'type'} eq "core" ||
$this->{'type'} eq "layout";
}
1;