D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
cpanel
/
perl5
/
536
/
site_lib
/
Perl
/
Tidy
/
Filename :
IndentationItem.pm
back
Copy
##################################################################### # # The Perl::Tidy::IndentationItem class supplies items which contain # how much whitespace should be used at the start of a line # ##################################################################### package Perl::Tidy::IndentationItem; use strict; use warnings; our $VERSION = '20230912'; BEGIN { # Array index names # Do not combine with other BEGIN blocks (c101). my $i = 0; use constant { _spaces_ => $i++, _level_ => $i++, _ci_level_ => $i++, _available_spaces_ => $i++, _closed_ => $i++, _comma_count_ => $i++, _lp_item_index_ => $i++, _have_child_ => $i++, _recoverable_spaces_ => $i++, _align_seqno_ => $i++, _marked_ => $i++, _stack_depth_ => $i++, _K_begin_line_ => $i++, _arrow_count_ => $i++, _standard_spaces_ => $i++, _K_extra_space_ => $i++, }; } ## end BEGIN sub AUTOLOAD { # Catch any undefined sub calls so that we are sure to get # some diagnostic information. This sub should never be called # except for a programming error. our $AUTOLOAD; return if ( $AUTOLOAD =~ /\bDESTROY$/ ); my ( $pkg, $fname, $lno ) = caller(); my $my_package = __PACKAGE__; print {*STDERR} <<EOM; ====================================================================== Error detected in package '$my_package', version $VERSION Received unexpected AUTOLOAD call for sub '$AUTOLOAD' Called from package: '$pkg' Called from File '$fname' at line '$lno' This error is probably due to a recent programming change ====================================================================== EOM exit 1; } ## end sub AUTOLOAD sub DESTROY { # required to avoid call to AUTOLOAD in some versions of perl } sub new { # Create an 'indentation_item' which describes one level of leading # whitespace when the '-lp' indentation is used. my ( $class, %input_hash ) = @_; # DEFINITIONS: # spaces => # total leading white spaces # level => # the indentation 'level' # ci_level => # the 'continuation level' # available_spaces => # how many left spaces available # # for this level # closed => # index where we saw closing '}' # comma_count => # how many commas at this level? # lp_item_index => # index in output batch list # have_child => # any dependents? # recoverable_spaces => # how many spaces to the right # # we would like to move to get # # alignment (negative if left) # align_seqno => # if we are aligning with an opening structure, # # this is its seqno # marked => # if visited by corrector logic # K_begin_line => # first token index K of this level # arrow_count => # how many =>'s my $self = []; $self->[_spaces_] = $input_hash{spaces}; $self->[_level_] = $input_hash{level}; $self->[_ci_level_] = $input_hash{ci_level}; $self->[_available_spaces_] = $input_hash{available_spaces}; $self->[_closed_] = -1; $self->[_comma_count_] = 0; $self->[_lp_item_index_] = $input_hash{lp_item_index}; $self->[_have_child_] = 0; $self->[_recoverable_spaces_] = 0; $self->[_align_seqno_] = $input_hash{align_seqno}; $self->[_marked_] = 0; $self->[_K_begin_line_] = $input_hash{K_begin_line}; $self->[_arrow_count_] = 0; $self->[_standard_spaces_] = $input_hash{standard_spaces}; $self->[_K_extra_space_] = $input_hash{K_extra_space}; bless $self, $class; return $self; } ## end sub new sub permanently_decrease_available_spaces { # make a permanent reduction in the available indentation spaces # at one indentation item. NOTE: if there are child nodes, their # total SPACES must be reduced by the caller. my ( $item, $spaces_needed ) = @_; my $available_spaces = $item->get_available_spaces(); my $deleted_spaces = ( $available_spaces > $spaces_needed ) ? $spaces_needed : $available_spaces; # Fixed for c085; a zero value must remain unchanged unless the closed # flag has been set. my $closed = $item->get_closed(); $item->decrease_available_spaces($deleted_spaces) if ( $available_spaces != 0 || $closed >= 0 ); $item->decrease_SPACES($deleted_spaces); $item->set_recoverable_spaces(0); return $deleted_spaces; } ## end sub permanently_decrease_available_spaces sub tentatively_decrease_available_spaces { # We are asked to tentatively delete $spaces_needed of indentation # for an indentation item. We may want to undo this later. NOTE: if # there are child nodes, their total SPACES must be reduced by the # caller. my ( $item, $spaces_needed ) = @_; my $available_spaces = $item->get_available_spaces(); my $deleted_spaces = ( $available_spaces > $spaces_needed ) ? $spaces_needed : $available_spaces; $item->decrease_available_spaces($deleted_spaces); $item->decrease_SPACES($deleted_spaces); $item->increase_recoverable_spaces($deleted_spaces); return $deleted_spaces; } ## end sub tentatively_decrease_available_spaces sub get_spaces { return $_[0]->[_spaces_]; } sub get_standard_spaces { return $_[0]->[_standard_spaces_]; } sub get_marked { return $_[0]->[_marked_]; } sub set_marked { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_marked_] = $value; } return $self->[_marked_]; } ## end sub set_marked sub get_available_spaces { return $_[0]->[_available_spaces_]; } sub decrease_SPACES { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_spaces_] -= $value; } return $self->[_spaces_]; } ## end sub decrease_SPACES sub decrease_available_spaces { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_available_spaces_] -= $value; } return $self->[_available_spaces_]; } ## end sub decrease_available_spaces sub get_align_seqno { return $_[0]->[_align_seqno_]; } sub get_recoverable_spaces { return $_[0]->[_recoverable_spaces_]; } sub set_recoverable_spaces { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_recoverable_spaces_] = $value; } return $self->[_recoverable_spaces_]; } ## end sub set_recoverable_spaces sub increase_recoverable_spaces { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_recoverable_spaces_] += $value; } return $self->[_recoverable_spaces_]; } ## end sub increase_recoverable_spaces sub get_ci_level { return $_[0]->[_ci_level_]; } sub get_level { return $_[0]->[_level_]; } sub get_spaces_level_ci { my $self = shift; return [ $self->[_spaces_], $self->[_level_], $self->[_ci_level_] ]; } sub get_lp_item_index { return $_[0]->[_lp_item_index_]; } sub get_K_begin_line { return $_[0]->[_K_begin_line_]; } sub get_K_extra_space { return $_[0]->[_K_extra_space_]; } sub set_have_child { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_have_child_] = $value; } return $self->[_have_child_]; } ## end sub set_have_child sub get_have_child { return $_[0]->[_have_child_]; } sub set_arrow_count { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_arrow_count_] = $value; } return $self->[_arrow_count_]; } ## end sub set_arrow_count sub get_arrow_count { return $_[0]->[_arrow_count_]; } sub set_comma_count { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_comma_count_] = $value; } return $self->[_comma_count_]; } ## end sub set_comma_count sub get_comma_count { return $_[0]->[_comma_count_]; } sub set_closed { my ( $self, $value ) = @_; if ( defined($value) ) { $self->[_closed_] = $value; } return $self->[_closed_]; } ## end sub set_closed sub get_closed { return $_[0]->[_closed_]; } 1;