File Coverage

blib/lib/App/Asciio/Ascii.pm
Criterion Covered Total %
statement 62 82 75.6
branch 10 20 50.0
condition 1 3 33.3
subroutine 9 12 75.0
pod 0 6 0.0
total 82 123 66.6


line stmt bran cond sub pod time code
1              
2             package App::Asciio;
3              
4             $|++ ;
5              
6 4     4   29 use strict; use warnings;
  4     4   9  
  4         212  
  4         23  
  4         8  
  4         288  
7              
8 4     4   2724 use App::Asciio::Cross ;
  4         22  
  4         288  
9 4     4   36 use App::Asciio::String ;
  4         8  
  4         280  
10 4     4   26 use App::Asciio::Markup ;
  4         6  
  4         456  
11              
12 4     4   28 use Readonly ;
  4         8  
  4         5690  
13             Readonly my $EXPORT_PLAIN_TEXT => 0 ;
14             Readonly my $EXPORT_MARKUP => 1 ;
15              
16             #-----------------------------------------------------------------------------
17              
18             sub transform_elements_to_ascii_buffer
19             {
20 0     0 0 0 my ($self, @elements) = @_ ;
21              
22 0         0 my $text = join("\n", $self->transform_elements_to_ascii_array(@elements)) . "\n" ;
23 0         0 $text =~ s/^\n+|\n\K\n+$//g ;
24              
25 0         0 return($text) ;
26             }
27              
28             #-----------------------------------------------------------------------------
29              
30             sub transform_elements_to_markup_buffer
31             {
32 0     0 0 0 my ($self, @elements) = @_ ;
33              
34 0         0 my $text = join("\n", $self->transform_elements_to_markup(@elements)) . "\n" ;
35 0         0 $text =~ s/^\n+|\n\K\n+$//g ;
36              
37 0         0 return($text) ;
38             }
39              
40             #-----------------------------------------------------------------------------
41              
42             sub transform_elements_to_characters_array
43             {
44 169     169 0 327 my ($self, $format, @elements) = @_ ;
45              
46 169 50       427 @elements = @{$self->{ELEMENTS}} unless @elements ;
  169         391  
47              
48 169         228 my @lines ;
49 169         238 my (%markup_coordinate, %sub_markup_coordinate) ;
50              
51 169         307 for my $element (@elements)
52             {
53 169         255 for my $strip (@{$element->get_stripes()})
  169         670  
54             {
55 917         1137 my $line_index = 0 ;
56            
57 917         2265 for my $sub_strip (split("\n", $strip->{TEXT}))
58             {
59 1141         1528 my $origin_strip = $sub_strip ;
60 1141         1847 my $y = $element->{Y} + $strip->{Y_OFFSET} + $line_index ;
61            
62 1141         2686 $sub_strip = $USE_MARKUP_CLASS->delete_markup_characters($sub_strip) ;
63            
64 1141 50       2987 if($format != $EXPORT_PLAIN_TEXT)
65             {
66 0         0 %sub_markup_coordinate = $USE_MARKUP_CLASS->get_markup_coordinates($element->{X}, $origin_strip, $strip->{X_OFFSET}, $y) ;
67 0         0 while (my ($key, $value) = each %sub_markup_coordinate)
68             {
69 0         0 $markup_coordinate{$key} = ${value} ;
70             }
71             }
72            
73 1141         5675 my $character_index = 0 ;
74            
75 1141         2216 for my $character (split '', $sub_strip)
76             {
77 1430         2258 my $x = $element->{X} + $strip->{X_OFFSET} + $character_index ;
78            
79 1430 50 33     4241 if($x >= 0 && $y >= 0)
80             {
81 1430 50       2775 if($character =~ /\p{gc:Mn}/)
82             {
83 0         0 push @{$lines[$y][$x-1]}, $character ;
  0         0  
84             }
85             else
86             {
87 1430         4186 $lines[$y][$x] = [$character] ;
88             }
89             }
90            
91 1430         3110 my $character_length = unicode_length($character) ;
92 1430         13349 $character_index += $character_length ;
93             }
94            
95 1141         2317 $line_index++ ;
96             }
97             }
98             }
99              
100             # If there is cross overlay, the characters of the cross need to be exported
101 169 50       459 if($self->{USE_CROSS_MODE})
102             {
103 0         0 for(App::Asciio::Cross::get_cross_mode_overlays($self))
104             {
105 0 0       0 $lines[$_->[1]][$_->[0]] = [$_->[2]] if defined $lines[$_->[1]][$_->[0]] ;
106             }
107             }
108 169 50       404 if($format != $EXPORT_PLAIN_TEXT)
109             {
110 0         0 return $USE_MARKUP_CLASS->get_markup_characters_array(\%markup_coordinate, @lines) ;
111             }
112 169         1416 return @lines ;
113              
114             }
115              
116             #-----------------------------------------------------------------------------
117              
118             sub transform_elements_to_array
119             {
120 169     169 0 1191 my ($self, $format, @elements) = @_ ;
121              
122 169         1385 my @lines = $self->transform_elements_to_characters_array($format, @elements) ;
123              
124 169         269 my @ascii ;
125              
126 169         342 for my $line (@lines)
127             {
128 1605 100       1976 my $ascii_line = join('', map {defined $_ ? join('', @{$_}) : ' '} @{$line}) ;
  6736         11345  
  1230         3561  
  1605         4579  
129 1605 50       3041 if(defined $ascii_line)
130             {
131 1605         2600 my ($write_line, $char_len) = ('', 1) ;
132            
133 1605         3726 for my $character (split '', $ascii_line)
134             {
135 6736 50       9261 if($char_len > 1)
136             {
137 0         0 $char_len -= 1;
138             }
139             else
140             {
141             # single char
142 6736         10154 $char_len = unicode_length($character) ;
143 6736         53710 $write_line .= $character;
144             }
145             }
146            
147 1605         3784 push @ascii, $write_line;
148             }
149             else
150             {
151 0         0 push @ascii, $ascii_line ;
152             }
153             }
154              
155 169         5630 return(@ascii) ;
156             }
157              
158             #-----------------------------------------------------------------------------
159              
160             sub transform_elements_to_ascii_array
161             {
162 169     169 0 1108 my ($self, @elements) = @_ ;
163              
164 169         483 return($self->transform_elements_to_array($EXPORT_PLAIN_TEXT, @elements));
165             }
166              
167             #-----------------------------------------------------------------------------
168              
169             sub transform_elements_to_markup
170             {
171 0     0 0   my ($self, @elements) = @_ ;
172              
173 0           return($self->transform_elements_to_array($EXPORT_MARKUP, @elements));
174             }
175             #-----------------------------------------------------------------------------
176              
177             1 ;