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;
 |