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 = '20200110';
19 jmax_original_line => undef,
24 leading_space_count => undef,
25 outdent_long_lines => undef,
27 is_hanging_side_comment => undef,
29 maximum_line_length => undef,
30 rvertical_tightness_flags => undef,
31 is_terminal_ternary => undef,
32 is_terminal_else => undef,
33 j_terminal_match => undef,
37 # methods to count object population
39 sub get_count { return $_count; }
40 sub _increment_count { return ++$_count }
41 sub _decrement_count { return --$_count }
44 # Constructor may be called as a class method
46 my ( $caller, %arg ) = @_;
47 my $caller_is_obj = ref($caller);
48 my $class = $caller_is_obj || $caller;
50 my $self = bless {}, $class;
52 $self->{_ralignments} = [];
54 foreach my $key ( keys %default_data ) {
55 my $_key = '_' . $key;
57 # Caller keys do not have an underscore
58 if ( exists $arg{$key} ) { $self->{$_key} = $arg{$key} }
59 elsif ($caller_is_obj) { $self->{$_key} = $caller->{$_key} }
60 else { $self->{$_key} = $default_data{$_key} }
63 $self->_increment_count();
69 $self->_decrement_count();
73 sub get_jmax { my $self = shift; return $self->{_jmax} }
75 sub get_jmax_original_line {
77 return $self->{_jmax_original_line};
79 sub get_rtokens { my $self = shift; return $self->{_rtokens} }
80 sub get_rfields { my $self = shift; return $self->{_rfields} }
81 sub get_rpatterns { my $self = shift; return $self->{_rpatterns} }
82 sub get_indentation { my $self = shift; return $self->{_indentation} }
84 sub get_j_terminal_match {
86 return $self->{_j_terminal_match};
89 sub get_is_terminal_else {
91 return $self->{_is_terminal_else};
94 sub get_is_terminal_ternary {
96 return $self->{_is_terminal_ternary};
99 sub get_leading_space_count {
101 return $self->{_leading_space_count};
104 sub get_outdent_long_lines {
106 return $self->{_outdent_long_lines};
108 sub get_list_type { my $self = shift; return $self->{_list_type} }
110 sub get_is_hanging_side_comment {
112 return $self->{_is_hanging_side_comment};
115 sub get_rvertical_tightness_flags {
117 return $self->{_rvertical_tightness_flags};
121 ## FIXME: does caller ever supply $val??
122 my ( $self, $j, $val ) = @_;
123 return $self->{_ralignments}->[$j]->set_column($val);
127 my ( $self, $j ) = @_;
128 return $self->{_ralignments}->[$j];
130 sub get_alignments { my $self = shift; return @{ $self->{_ralignments} } }
133 my ( $self, $j ) = @_;
134 return $self->{_ralignments}->[$j]->get_column();
137 sub get_starting_column {
138 my ( $self, $j ) = @_;
139 return $self->{_ralignments}->[$j]->get_starting_column();
142 sub increment_column {
143 my ( $self, $k, $pad ) = @_;
144 $self->{_ralignments}->[$k]->increment_column($pad);
149 my ( $self, @args ) = @_;
150 @{ $self->{_ralignments} } = @args;
154 sub current_field_width {
155 my ( $self, $j ) = @_;
157 return $self->get_column($j);
160 return $self->get_column($j) - $self->get_column( $j - 1 );
164 sub field_width_growth {
165 my ( $self, $j ) = @_;
166 return $self->get_column($j) - $self->get_starting_column($j);
169 sub starting_field_width {
170 my ( $self, $j ) = @_;
172 return $self->get_starting_column($j);
175 return $self->get_starting_column($j) -
176 $self->get_starting_column( $j - 1 );
180 sub increase_field_width {
182 my ( $self, $j, $pad ) = @_;
183 my $jmax = $self->get_jmax();
184 for my $k ( $j .. $jmax ) {
185 $self->increment_column( $k, $pad );
190 sub get_available_space_on_right {
192 my $jmax = $self->get_jmax();
193 return $self->{_maximum_line_length} - $self->get_column($jmax);
196 sub set_jmax { my ( $self, $val ) = @_; $self->{_jmax} = $val; return }
198 sub set_jmax_original_line {
199 my ( $self, $val ) = @_;
200 $self->{_jmax_original_line} = $val;
205 my ( $self, $val ) = @_;
206 $self->{_rtokens} = $val;
211 my ( $self, $val ) = @_;
212 $self->{_rfields} = $val;
217 my ( $self, $val ) = @_;
218 $self->{_rpatterns} = $val;
222 sub set_indentation {
223 my ( $self, $val ) = @_;
224 $self->{_indentation} = $val;
228 sub set_leading_space_count {
229 my ( $self, $val ) = @_;
230 $self->{_leading_space_count} = $val;
234 sub set_outdent_long_lines {
235 my ( $self, $val ) = @_;
236 $self->{_outdent_long_lines} = $val;
241 my ( $self, $val ) = @_;
242 $self->{_list_type} = $val;
246 sub set_is_hanging_side_comment {
247 my ( $self, $val ) = @_;
248 $self->{_is_hanging_side_comment} = $val;
253 my ( $self, $j, $val ) = @_;
254 $self->{_ralignments}->[$j] = $val;