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 = '20181120';
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
34 # methods to count object population
36 sub get_count { return $_count; }
37 sub _increment_count { return ++$_count }
38 sub _decrement_count { return --$_count }
41 # Constructor may be called as a class method
43 my ( $caller, %arg ) = @_;
44 my $caller_is_obj = ref($caller);
45 my $class = $caller_is_obj || $caller;
47 my $self = bless {}, $class;
49 $self->{_ralignments} = [];
51 foreach my $key ( keys %default_data ) {
52 my $_key = '_' . $key;
54 # Caller keys do not have an underscore
55 if ( exists $arg{$key} ) { $self->{$_key} = $arg{$key} }
56 elsif ($caller_is_obj) { $self->{$_key} = $caller->{$_key} }
57 else { $self->{$_key} = $default_data{$_key} }
60 $self->_increment_count();
66 $self->_decrement_count();
70 sub get_jmax { my $self = shift; return $self->{_jmax} }
72 sub get_jmax_original_line {
74 return $self->{_jmax_original_line};
76 sub get_rtokens { my $self = shift; return $self->{_rtokens} }
77 sub get_rfields { my $self = shift; return $self->{_rfields} }
78 sub get_rpatterns { my $self = shift; return $self->{_rpatterns} }
79 sub get_indentation { my $self = shift; return $self->{_indentation} }
81 sub get_leading_space_count {
83 return $self->{_leading_space_count};
86 sub get_outdent_long_lines {
88 return $self->{_outdent_long_lines};
90 sub get_list_type { my $self = shift; return $self->{_list_type} }
92 sub get_is_hanging_side_comment {
94 return $self->{_is_hanging_side_comment};
97 sub get_rvertical_tightness_flags {
99 return $self->{_rvertical_tightness_flags};
103 ## FIXME: does caller ever supply $val??
104 my ( $self, $j, $val ) = @_;
105 return $self->{_ralignments}->[$j]->set_column($val);
109 my ( $self, $j ) = @_;
110 return $self->{_ralignments}->[$j];
112 sub get_alignments { my $self = shift; return @{ $self->{_ralignments} } }
115 my ( $self, $j ) = @_;
116 return $self->{_ralignments}->[$j]->get_column();
119 sub get_starting_column {
120 my ( $self, $j ) = @_;
121 return $self->{_ralignments}->[$j]->get_starting_column();
124 sub increment_column {
125 my ( $self, $k, $pad ) = @_;
126 $self->{_ralignments}->[$k]->increment_column($pad);
131 my ( $self, @args ) = @_;
132 @{ $self->{_ralignments} } = @args;
136 sub current_field_width {
137 my ( $self, $j ) = @_;
139 return $self->get_column($j);
142 return $self->get_column($j) - $self->get_column( $j - 1 );
146 sub field_width_growth {
147 my ( $self, $j ) = @_;
148 return $self->get_column($j) - $self->get_starting_column($j);
151 sub starting_field_width {
152 my ( $self, $j ) = @_;
154 return $self->get_starting_column($j);
157 return $self->get_starting_column($j) -
158 $self->get_starting_column( $j - 1 );
162 sub increase_field_width {
164 my ( $self, $j, $pad ) = @_;
165 my $jmax = $self->get_jmax();
166 for my $k ( $j .. $jmax ) {
167 $self->increment_column( $k, $pad );
172 sub get_available_space_on_right {
174 my $jmax = $self->get_jmax();
175 return $self->{_maximum_line_length} - $self->get_column($jmax);
178 sub set_jmax { my ( $self, $val ) = @_; $self->{_jmax} = $val; return }
180 sub set_jmax_original_line {
181 my ( $self, $val ) = @_;
182 $self->{_jmax_original_line} = $val;
187 my ( $self, $val ) = @_;
188 $self->{_rtokens} = $val;
193 my ( $self, $val ) = @_;
194 $self->{_rfields} = $val;
199 my ( $self, $val ) = @_;
200 $self->{_rpatterns} = $val;
204 sub set_indentation {
205 my ( $self, $val ) = @_;
206 $self->{_indentation} = $val;
210 sub set_leading_space_count {
211 my ( $self, $val ) = @_;
212 $self->{_leading_space_count} = $val;
216 sub set_outdent_long_lines {
217 my ( $self, $val ) = @_;
218 $self->{_outdent_long_lines} = $val;
223 my ( $self, $val ) = @_;
224 $self->{_list_type} = $val;
228 sub set_is_hanging_side_comment {
229 my ( $self, $val ) = @_;
230 $self->{_is_hanging_side_comment} = $val;
235 my ( $self, $j, $val ) = @_;
236 $self->{_ralignments}->[$j] = $val;