116 lines
2.3 KiB
Perl
Executable File
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;
|