File Coverage

blib/lib/App/Asciio/Actions.pm
Criterion Covered Total %
statement 3 66 4.5
branch 0 50 0.0
condition 0 21 0.0
subroutine 1 5 20.0
pod 0 4 0.0
total 4 146 2.7


line stmt bran cond sub pod time code
1              
2             package App::Asciio ;
3 4     4   35 use Encode ;
  4         8  
  4         6299  
4              
5             #------------------------------------------------------------------------------------------------------
6              
7             $|++ ;
8              
9             #------------------------------------------------------------------------------------------------------
10              
11             sub use_action_group
12             {
13 0     0 0   my ($self, $action) = @_ ; ;
14              
15 0           $self->{CURRENT_ACTIONS} = $self->{ACTIONS} ;
16 0           $self->run_actions($action) ;
17 0           $self->{CROSS_ACTION_GROUP}++ ;
18             }
19              
20             #------------------------------------------------------------------------------------------------------
21              
22             sub run_actions
23             {
24 0     0 0   my ($self, @actions) = @_ ;
25              
26 0           my @results ;
27              
28 0           for my $action (@actions)
29             {
30 0           my @arguments ;
31            
32 0 0         if('ARRAY' eq ref $action)
33             {
34 0           ($action, @arguments) = @{ $action } ;
  0            
35             }
36            
37 0           my ($modifiers, $action_key) = $action =~ /(...-)?(.*)/ ;
38            
39 0 0 0       next if $action_key eq 'Shift_R' || $action_key eq 'Shift_L' || $action_key eq 'Alt_R' || $action_key eq 'Alt_L' ;
      0        
      0        
40             # C00-Shift_R
41             # C00-Shift_L
42             # C00-Alt_L
43             # C00-Alt_L
44             # CA0-Shift_R
45             # C00-Shift_L
46             # C0S-Shift_R
47             # 0A0-Shift_R
48             # 0A0-Shift_L
49            
50 0           my $action = encode('utf8', $action) ;
51            
52 0 0         if(exists $self->{CURRENT_ACTIONS}{$action})
53             {
54 0           my $is_group = $self->{CURRENT_ACTIONS}{$action}{IS_GROUP} ;
55 0           my $in_capture = defined $self->{CURRENT_ACTIONS}{ESCAPE_KEY} ;
56            
57             my $group_tag = $is_group ? defined $self->{CURRENT_ACTIONS}{$action}{ESCAPE_KEY}
58 0 0         ? "[c] "
    0          
59             : "[g] "
60             : '' ;
61            
62 0 0         my $capture_tag = $in_capture ? "[$self->{CURRENT_ACTIONS}{NAME}] " : '' ;
63            
64             $self->{ACTION_VERBOSE}->
65             (
66             sprintf
67             (
68             "%-30s %-30s [%s]",
69             "${modifiers}$action_key $group_tag$capture_tag",
70             $self->{CURRENT_ACTIONS}{$action}{NAME},
71             $self->{CURRENT_ACTIONS}{$action}{ORIGIN}
72             )
73 0 0 0       ) if $self->{ACTION_VERBOSE} && $self->{CURRENT_ACTIONS}{$action}{NAME} ne 'Mouse motion' ;
74            
75 0 0         if(defined $self->{CURRENT_ACTIONS}{$action}{ARGUMENTS})
76             {
77             push @results,
78             [
79             $self->{CURRENT_ACTIONS}{$action}{CODE}->
80             (
81             $self,
82             $self->{CURRENT_ACTIONS}{$action}{ARGUMENTS},
83 0           @arguments,
84             )
85             ] ;
86             }
87             else
88             {
89             push @results,
90             [
91 0           $self->{CURRENT_ACTIONS}{$action}{CODE}->($self, @arguments)
92             ] ;
93             }
94            
95 0 0 0       $self->{CURRENT_ACTIONS} = $self->{ACTIONS} unless $is_group || $in_capture || $self->{CROSS_ACTION_GROUP} ;
      0        
96 0           delete $self->{CROSS_ACTION_GROUP} ;
97            
98 0 0 0       if($is_group && defined $self->{CURRENT_ACTIONS}{ENTER_GROUP})
99             {
100 0           $self->{CURRENT_ACTIONS}{ENTER_GROUP}->($self) ;
101             }
102            
103 0 0         if(defined $self->{CURRENT_ACTIONS}{ESCAPE_KEY})
104             {
105 0           my $escape_key = "escape key: $self->{CURRENT_ACTIONS}{ESCAPE_KEY}" ;
106            
107 0 0         if($action eq $self->{CURRENT_ACTIONS}{ESCAPE_KEY})
108             {
109 0 0         $self->{ACTION_VERBOSE}->("\e[33m[$self->{CURRENT_ACTIONS}{NAME}] leaving\e[m") if $self->{ACTION_VERBOSE} ;
110 0           $self->{CURRENT_ACTIONS} = $self->{ACTIONS} ;
111             }
112             }
113             }
114             else
115             {
116 0 0         if(defined $self->{CURRENT_ACTIONS}{ESCAPE_KEY})
117             {
118 0           my $escape_key = "escape key: $self->{CURRENT_ACTIONS}{ESCAPE_KEY}" ;
119            
120 0 0         if($action eq $self->{CURRENT_ACTIONS}{ESCAPE_KEY})
121             {
122 0 0         $self->{ACTION_VERBOSE}->("\e[33m[$self->{CURRENT_ACTIONS}{NAME}] leaving\e[m") if $self->{ACTION_VERBOSE} ;
123 0           $self->{CURRENT_ACTIONS} = $self->{ACTIONS} ;
124             }
125             else
126             {
127 0 0         $self->{ACTION_VERBOSE}->("\e[31m$action, [$self->{CURRENT_ACTIONS}{NAME}], $escape_key\e[m") if $self->{ACTION_VERBOSE} ;
128             }
129             }
130             else
131             {
132 0 0         $self->{ACTION_VERBOSE}->(sprintf "\e[31m%-30s\e[m", "$action") if $self->{ACTION_VERBOSE} ;
133 0           $self->{CURRENT_ACTIONS} = $self->{ACTIONS} ;
134             }
135            
136 0           $self->update_display() ;
137             }
138             }
139            
140 0           return @results ;
141             }
142              
143             #------------------------------------------------------------------------------------------------------
144              
145             sub run_actions_by_name
146             {
147 0     0 0   my ($self, @actions) = @_ ;
148 0           my @results ;
149              
150 0           my $current_actions_by_name = $self->{ACTIONS_BY_NAME} ;
151              
152 0           for my $action (@actions)
153             {
154 0           my @arguments ;
155            
156 0 0         if('ARRAY' eq ref $action)
157             {
158 0           ($action, @arguments) = @{ $action } ;
  0            
159             }
160            
161 0 0         if(exists $current_actions_by_name->{$action})
162             {
163 0 0         if('HASH' eq ref $self->{CURRENT_ACTIONS}{$action})
164             {
165 0 0         $self->{ACTION_VERBOSE}->(sprintf '%30s %s', '', "\e[32m$action [group]\e[0m") if $self->{ACTION_VERBOSE} ;
166 0           $current_actions_by_name = $self->{CURRENT_ACTIONS}{$action} ;
167             }
168             else
169             {
170 0 0         $self->{ACTION_VERBOSE}->(sprintf '%30s %s', '', "\e[32m$action\e[0m") if $self->{ACTION_VERBOSE} ;
171            
172 0 0         if(defined $current_actions_by_name->{$action}{ARGUMENTS})
173             {
174             push @results,
175             [
176             $current_actions_by_name->{$action}{CODE}->
177             (
178             $self,
179             $self->{CURRENT_ACTIONS}{$action}{ARGUMENTS},
180             @arguments
181 0           )
182             ] ;
183             }
184             else
185             {
186             push @results,
187             [
188 0           $current_actions_by_name->{$action}{CODE}->($self, @arguments)
189             ] ;
190             }
191             }
192             }
193             else
194             {
195 0 0         $self->{ACTION_VERBOSE}->(sprintf '%30s %s', '', "\e[31m$action\e[0m") if $self->{ACTION_VERBOSE} ;
196 0           last ;
197             }
198             }
199              
200 0           return @results ;
201             }
202              
203             #------------------------------------------------------------------------------------------------------
204              
205             sub exists_action
206             {
207 0     0 0   my ($self, $action) = @_ ;
208              
209 0           return exists $self->{CURRENT_ACTIONS}{$action} ;
210             }
211              
212             #------------------------------------------------------------------------------------------------------
213              
214             1 ;