File Coverage

blib/lib/Lingua/YaTeA/ForbiddenStructureSet.pm
Criterion Covered Total %
statement 57 57 100.0
branch 5 6 83.3
condition 5 6 83.3
subroutine 11 11 100.0
pod 6 6 100.0
total 84 86 97.6


line stmt bran cond sub pod time code
1             package Lingua::YaTeA::ForbiddenStructureSet;
2 5     5   46 use strict;
  5         12  
  5         141  
3 5     5   26 use warnings;
  5         9  
  5         124  
4 5     5   2015 use Lingua::YaTeA::ForbiddenStructureAny;
  5         12  
  5         49  
5 5     5   2167 use Lingua::YaTeA::ForbiddenStructureStartOrEnd;
  5         14  
  5         45  
6 5     5   166 use Lingua::YaTeA::TriggerSet;
  5         11  
  5         18  
7              
8             our $VERSION=$Lingua::YaTeA::VERSION;
9              
10              
11             sub new
12             {
13 4     4 1 20 my ($class,$file_path) = @_;
14 4         13 my $this = {};
15 4         15 bless ($this,$class);
16 4         40 $this->{ANY} = [];
17 4         17 $this->{START} = [];
18 4         12 $this->{END} = [];
19 4         38 $this->{START_TRIGGERS} = Lingua::YaTeA::TriggerSet->new();
20 4         15 $this->{END_TRIGGERS} = Lingua::YaTeA::TriggerSet->new();
21 4         23 $this->loadStructures($file_path);
22 4         26 return $this;
23             }
24              
25              
26             sub loadStructures
27             {
28 4     4 1 14 my ($this,$file_path) = @_;
29              
30 4         11 my @infos;
31 4         31 my $fh = FileHandle->new("<$file_path");
32 4         295 my $line;
33 4         106 while ($line= $fh->getline)
34             {
35 304 100 100     9701 if(($line !~ /^#/)&&($line !~ /^\s*$/))
36             {
37 200         633 @infos = split /\t/, $line;
38 200         582 $this->cleanInfos(\@infos);
39 200 100       477 if($infos[1] eq "ANY")
40             {
41 172         474 my $fs = Lingua::YaTeA::ForbiddenStructureAny->new(\@infos);
42 172         292 push @{$this->{ANY}}, $fs;
  172         3558  
43             }
44             else{
45 28         53 chomp $infos[1];
46 28 50 66     121 if(($infos[1] eq "START") ||($infos[1] eq "END") )
47             {
48 28         90 my $fs = Lingua::YaTeA::ForbiddenStructureStartOrEnd->new(\@infos,$this->getTriggerSet($infos[1]));
49 28         52 push @{$this->{$infos[1]}}, $fs;
  28         671  
50             }
51             }
52             }
53             }
54 4         354 $this->sort($this->getSubset("START"));
55 4         16 $this->sort($this->getSubset("END"));
56            
57             }
58              
59              
60              
61             sub getTriggerSet
62             {
63 276     276 1 585 my ($this,$position) = @_;
64 276         627 my $name = $position . "_TRIGGERS";
65 276         891 return $this->{$name};
66             }
67              
68             sub getSubset
69             {
70 28     28 1 89 my ($this,$name) = @_;
71 28         96 return $this->{$name};
72              
73             }
74              
75             sub cleanInfos
76             {
77 200     200 1 365 my ($this,$infos_a) = @_;
78 200         274 my $info;
79 200         377 foreach $info (@$infos_a)
80             {
81 632         875 chomp $info;
82 632         1243 $info =~ s/\r//g;
83             }
84             }
85              
86             sub sort
87             {
88 8     8 1 19 my ($this,$subset) = @_;
89            
90 8         41 @$subset = sort ({$b->getLength <=> $a->getLength} @$subset);
  32         113  
91              
92             }
93              
94              
95             1;
96              
97             __END__