]> git.donarmstrong.com Git - perltidy.git/blobdiff - lib/Perl/Tidy/IndentationItem.pm
New upstream version 20190601
[perltidy.git] / lib / Perl / Tidy / IndentationItem.pm
diff --git a/lib/Perl/Tidy/IndentationItem.pm b/lib/Perl/Tidy/IndentationItem.pm
new file mode 100644 (file)
index 0000000..b0edd0a
--- /dev/null
@@ -0,0 +1,254 @@
+#####################################################################
+#
+# 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 = '20190601';
+
+sub new {
+
+    # Create an 'indentation_item' which describes one level of leading
+    # whitespace when the '-lp' indentation is used.
+    my (
+        $class,               $spaces,           $level,
+        $ci_level,            $available_spaces, $index,
+        $gnu_sequence_number, $align_paren,      $stack_depth,
+        $starting_index,
+    ) = @_;
+
+    my $closed            = -1;
+    my $arrow_count       = 0;
+    my $comma_count       = 0;
+    my $have_child        = 0;
+    my $want_right_spaces = 0;
+    my $marked            = 0;
+
+    # 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?
+    # sequence_number    =>  # output batch number
+    # 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_paren        =>  # do we want to try to align
+    #                        # with an opening structure?
+    # marked             =>  # if visited by corrector logic
+    # stack_depth        =>  # indentation nesting depth
+    # starting_index     =>  # first token index of this level
+    # arrow_count        =>  # how many =>'s
+
+    return bless {
+        _spaces             => $spaces,
+        _level              => $level,
+        _ci_level           => $ci_level,
+        _available_spaces   => $available_spaces,
+        _closed             => $closed,
+        _comma_count        => $comma_count,
+        _sequence_number    => $gnu_sequence_number,
+        _index              => $index,
+        _have_child         => $have_child,
+        _recoverable_spaces => $want_right_spaces,
+        _align_paren        => $align_paren,
+        _marked             => $marked,
+        _stack_depth        => $stack_depth,
+        _starting_index     => $starting_index,
+        _arrow_count        => $arrow_count,
+    }, $class;
+}
+
+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;
+    $item->decrease_available_spaces($deleted_spaces);
+    $item->decrease_SPACES($deleted_spaces);
+    $item->set_recoverable_spaces(0);
+
+    return $deleted_spaces;
+}
+
+sub tentatively_decrease_available_spaces {
+
+    # We are asked to tentatively delete $spaces_needed of indentation
+    # for a 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;
+}
+
+sub get_stack_depth {
+    my $self = shift;
+    return $self->{_stack_depth};
+}
+
+sub get_spaces {
+    my $self = shift;
+    return $self->{_spaces};
+}
+
+sub get_marked {
+    my $self = shift;
+    return $self->{_marked};
+}
+
+sub set_marked {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_marked} = $value;
+    }
+    return $self->{_marked};
+}
+
+sub get_available_spaces {
+    my $self = shift;
+    return $self->{_available_spaces};
+}
+
+sub decrease_SPACES {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_spaces} -= $value;
+    }
+    return $self->{_spaces};
+}
+
+sub decrease_available_spaces {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_available_spaces} -= $value;
+    }
+    return $self->{_available_spaces};
+}
+
+sub get_align_paren {
+    my $self = shift;
+    return $self->{_align_paren};
+}
+
+sub get_recoverable_spaces {
+    my $self = shift;
+    return $self->{_recoverable_spaces};
+}
+
+sub set_recoverable_spaces {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_recoverable_spaces} = $value;
+    }
+    return $self->{_recoverable_spaces};
+}
+
+sub increase_recoverable_spaces {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_recoverable_spaces} += $value;
+    }
+    return $self->{_recoverable_spaces};
+}
+
+sub get_ci_level {
+    my $self = shift;
+    return $self->{_ci_level};
+}
+
+sub get_level {
+    my $self = shift;
+    return $self->{_level};
+}
+
+sub get_sequence_number {
+    my $self = shift;
+    return $self->{_sequence_number};
+}
+
+sub get_index {
+    my $self = shift;
+    return $self->{_index};
+}
+
+sub get_starting_index {
+    my $self = shift;
+    return $self->{_starting_index};
+}
+
+sub set_have_child {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_have_child} = $value;
+    }
+    return $self->{_have_child};
+}
+
+sub get_have_child {
+    my $self = shift;
+    return $self->{_have_child};
+}
+
+sub set_arrow_count {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_arrow_count} = $value;
+    }
+    return $self->{_arrow_count};
+}
+
+sub get_arrow_count {
+    my $self = shift;
+    return $self->{_arrow_count};
+}
+
+sub set_comma_count {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_comma_count} = $value;
+    }
+    return $self->{_comma_count};
+}
+
+sub get_comma_count {
+    my $self = shift;
+    return $self->{_comma_count};
+}
+
+sub set_closed {
+    my ( $self, $value ) = @_;
+    if ( defined($value) ) {
+        $self->{_closed} = $value;
+    }
+    return $self->{_closed};
+}
+
+sub get_closed {
+    my $self = shift;
+    return $self->{_closed};
+}
+1;