1 #####################################################################
3 # the Perl::Tidy::VerticalAligner::Line class supplies an object to
4 # contain a single output line
6 #####################################################################
8 package Perl::Tidy::VerticalAligner::Line;
11 our $VERSION = '20220613';
15 # Indexes for variables in $self.
16 # Do not combine with other BEGIN blocks (c101).
22 _rfield_lengths_ => $i++,
24 _indentation_ => $i++,
25 _leading_space_count_ => $i++,
26 _outdent_long_lines_ => $i++,
29 _is_hanging_side_comment_ => $i++,
30 _ralignments_ => $i++,
31 _maximum_line_length_ => $i++,
32 _rvertical_tightness_flags_ => $i++,
33 _is_terminal_ternary_ => $i++,
34 _j_terminal_match_ => $i++,
46 # Catch any undefined sub calls so that we are sure to get
47 # some diagnostic information. This sub should never be called
48 # except for a programming error.
50 return if ( $AUTOLOAD =~ /\bDESTROY$/ );
51 my ( $pkg, $fname, $lno ) = caller();
52 my $my_package = __PACKAGE__;
54 ======================================================================
55 Error detected in package '$my_package', version $VERSION
56 Received unexpected AUTOLOAD call for sub '$AUTOLOAD'
57 Called from package: '$pkg'
58 Called from File '$fname' at line '$lno'
59 This error is probably due to a recent programming change
60 ======================================================================
69 # Constructor may be called as a class method
71 my ( $class, $ri ) = @_;
72 my $self = bless [], $class;
74 $self->[_jmax_] = $ri->{jmax};
75 $self->[_rtokens_] = $ri->{rtokens};
76 $self->[_rfields_] = $ri->{rfields};
77 $self->[_rfield_lengths_] = $ri->{rfield_lengths};
78 $self->[_rpatterns_] = $ri->{rpatterns};
79 $self->[_indentation_] = $ri->{indentation};
80 $self->[_leading_space_count_] = $ri->{leading_space_count};
81 $self->[_outdent_long_lines_] = $ri->{outdent_long_lines};
82 $self->[_list_type_] = $ri->{list_type};
83 $self->[_list_seqno_] = $ri->{list_seqno};
84 $self->[_is_hanging_side_comment_] = $ri->{is_hanging_side_comment};
85 $self->[_maximum_line_length_] = $ri->{maximum_line_length};
86 $self->[_rvertical_tightness_flags_] = $ri->{rvertical_tightness_flags};
87 $self->[_is_terminal_ternary_] = $ri->{is_terminal_ternary};
88 $self->[_j_terminal_match_] = $ri->{j_terminal_match};
89 $self->[_end_group_] = $ri->{end_group};
90 $self->[_Kend_] = $ri->{Kend};
91 $self->[_ci_level_] = $ri->{ci_level};
92 $self->[_level_] = $ri->{level};
93 $self->[_level_end_] = $ri->{level_end};
94 $self->[_imax_pair_] = $ri->{imax_pair};
96 $self->[_ralignments_] = [];
101 sub get_jmax { return $_[0]->[_jmax_] }
103 sub get_rtokens { return $_[0]->[_rtokens_] }
104 sub get_rfields { return $_[0]->[_rfields_] }
105 sub get_rfield_lengths { return $_[0]->[_rfield_lengths_] }
106 sub get_rpatterns { return $_[0]->[_rpatterns_] }
107 sub get_indentation { return $_[0]->[_indentation_] }
108 sub get_Kend { return $_[0]->[_Kend_] }
109 sub get_ci_level { return $_[0]->[_ci_level_] }
110 sub get_level { return $_[0]->[_level_] }
111 sub get_level_end { return $_[0]->[_level_end_] }
112 sub get_list_seqno { return $_[0]->[_list_seqno_] }
114 sub get_imax_pair { return $_[0]->[_imax_pair_] }
117 my ( $self, $val ) = @_;
118 $self->[_imax_pair_] = $val;
122 sub get_j_terminal_match {
123 return $_[0]->[_j_terminal_match_];
126 sub set_j_terminal_match {
127 my ( $self, $val ) = @_;
128 $self->[_j_terminal_match_] = $val;
132 sub get_is_terminal_ternary {
133 return $_[0]->[_is_terminal_ternary_];
136 sub get_leading_space_count {
137 return $_[0]->[_leading_space_count_];
140 sub get_outdent_long_lines {
141 return $_[0]->[_outdent_long_lines_];
143 sub get_list_type { return $_[0]->[_list_type_] }
145 sub get_is_hanging_side_comment {
146 return $_[0]->[_is_hanging_side_comment_];
149 sub get_maximum_line_length {
150 return $_[0]->[_maximum_line_length_];
153 sub get_rvertical_tightness_flags {
154 return $_[0]->[_rvertical_tightness_flags_];
158 my ( $self, $j ) = @_;
159 return $self->[_ralignments_]->[$j];
161 sub get_alignments { return @{ $_[0]->[_ralignments_] } }
164 ##my ( $self, $j ) = @_;
165 my $alignment = $_[0]->[_ralignments_]->[ $_[1] ];
166 return unless defined($alignment);
167 return $alignment->get_column();
171 my ( $self, @args ) = @_;
172 @{ $self->[_ralignments_] } = @args;
176 sub current_field_width {
177 my ( $self, $j ) = @_;
181 my $alignment_j = $self->[_ralignments_]->[$j];
182 $col_j = $alignment_j->get_column() if defined($alignment_j);
185 my $alignment_jm = $self->[_ralignments_]->[ $j - 1 ];
186 $col_jm = $alignment_jm->get_column() if defined($alignment_jm);
188 return $col_j - $col_jm;
191 sub increase_field_width {
193 my ( $self, $j, $pad ) = @_;
194 my $jmax = $self->[_jmax_];
195 foreach ( $j .. $jmax ) {
196 my $alignment = $self->[_ralignments_]->[$_];
197 if ( defined($alignment) ) {
198 $alignment->increment_column($pad);
204 sub get_available_space_on_right {
205 my $jmax = $_[0]->[_jmax_];
206 return $_[0]->[_maximum_line_length_] - $_[0]->get_column($jmax);
209 sub set_jmax { my ( $self, $val ) = @_; $self->[_jmax_] = $val; return }
212 my ( $self, $val ) = @_;
213 $self->[_rtokens_] = $val;
218 my ( $self, $val ) = @_;
219 $self->[_rfields_] = $val;
223 sub set_rfield_lengths {
224 my ( $self, $val ) = @_;
225 $self->[_rfield_lengths_] = $val;
230 my ( $self, $val ) = @_;
231 $self->[_rpatterns_] = $val;
236 my ( $self, $val ) = @_;
237 $self->[_list_type_] = $val;
241 sub set_is_hanging_side_comment {
242 my ( $self, $val ) = @_;
243 $self->[_is_hanging_side_comment_] = $val;
248 my ( $self, $j, $val ) = @_;
249 $self->[_ralignments_]->[$j] = $val;
253 sub get_end_group { return $_[0]->[_end_group_] }
256 my ( $self, $val ) = @_;
257 $self->[_end_group_] = $val;