# INITIALIZER: sub check_options
$code_skipping_pattern_begin,
$code_skipping_pattern_end,
+ $format_skipping_pattern_begin,
+ $format_skipping_pattern_end,
$rOpts_code_skipping,
$rOpts_code_skipping_begin,
+ $rOpts_format_skipping,
+ $rOpts_format_skipping_begin,
+ $rOpts_format_skipping_end,
$rOpts_starting_indentation_level,
$rOpts_indent_columns,
$rOpts_look_for_hash_bang,
_warning_count_ => $i++,
_html_tag_count_ => $i++,
_in_pod_ => $i++,
- _in_skipped_ => $i++,
+ _in_code_skipping_ => $i++,
+ _in_format_skipping_ => $i++,
_in_attribute_list_ => $i++,
_in_quote_ => $i++,
_quote_target_ => $i++,
_rclosing_brace_indentation_hash_ => $i++,
_show_indentation_table_ => $i++,
_rnon_indenting_brace_stack_ => $i++,
- _in_format_skipping_ => $i++,
};
} ## end BEGIN
$rOpts_maximum_unexpected_errors = $rOpts->{'maximum-unexpected-errors'};
$rOpts_code_skipping = $rOpts->{'code-skipping'};
$rOpts_code_skipping_begin = $rOpts->{'code-skipping-begin'};
+ $rOpts_format_skipping = $rOpts->{'format-skipping'};
+ $rOpts_format_skipping_begin = $rOpts->{'format-skipping-begin'};
+ $rOpts_format_skipping_end = $rOpts->{'format-skipping-end'};
$rOpts_indent_closing_brace = $rOpts->{'indent-closing-brace'};
$rOpts_non_indenting_braces = $rOpts->{'non-indenting-braces'};
$rOpts_non_indenting_brace_prefix = $rOpts->{'non-indenting-brace-prefix'};
$code_skipping_pattern_end =
make_skipping_pattern( $rOpts, 'code-skipping-end', '#>>V' );
+ $format_skipping_pattern_begin =
+ make_skipping_pattern( $rOpts, 'format-skipping-begin', '#<<<' );
+ $format_skipping_pattern_end =
+ make_skipping_pattern( $rOpts, 'format-skipping-end', '#>>>' );
+
return;
} ## end sub check_options
# _line_start_quote_ line where we started looking for a long quote
# _in_here_doc_ flag indicating if we are in a here-doc
# _in_pod_ flag set if we are in pod documentation
- # _in_skipped_ flag set if we are in a skipped section
+ # _in_code_skipping_ flag set if we are in a code skipping section
+ # _in_format_skipping_ flag set if we are in a format skipping section
# _in_error_ flag set if we saw severe error (binary in script)
# _in_trouble_ set if we saw a troublesome lexical like 'my sub s'
# _warning_count_ number of calls to logger sub warning
$self->[_warning_count_] = 0;
$self->[_html_tag_count_] = 0;
$self->[_in_pod_] = 0;
- $self->[_in_skipped_] = 0;
+ $self->[_in_code_skipping_] = 0;
+ $self->[_in_format_skipping_] = 0;
$self->[_in_attribute_list_] = 0;
$self->[_in_quote_] = 0;
$self->[_quote_target_] = EMPTY_STRING;
$self->[_true_brace_error_count_] = 0;
$self->[_rnon_indenting_brace_stack_] = [];
$self->[_show_indentation_table_] = 0;
- $self->[_in_format_skipping_] = 0;
$self->[_rclosing_brace_indentation_hash_] = {
valid => undef,
$self->warning("hit EOF while in format description\n");
}
- if ( $self->[_in_skipped_] ) {
+ if ( $self->[_in_code_skipping_] ) {
$self->write_logfile_entry(
"hit EOF while in lines skipped with --code-skipping\n");
}
my @output_lines;
push @output_lines, <<EOM;
-Here is a table of level differences based on closing brace indentation.
+Table of nesting level differences at closing braces.
This might help localize brace errors if the file was previously formatted.
line: (brace level) - (level expected from old indentation)
EOM
EOM
}
}
+ push @output_lines, "\n";
my $output_str = join EMPTY_STRING, @output_lines;
$self->interrupt_logfile();
}
# print line unchanged if in skipped section
- elsif ( $self->[_in_skipped_] ) {
+ elsif ( $self->[_in_code_skipping_] ) {
$line_of_tokens->{_line_type} = 'SKIP';
if ( $input_line =~ /$code_skipping_pattern_end/ ) {
$line_of_tokens->{_line_type} = 'SKIP_END';
$self->log_numbered_msg("Exiting code-skipping section\n");
- $self->[_in_skipped_] = 0;
+ $self->[_in_code_skipping_] = 0;
}
elsif ( $input_line =~ /$code_skipping_pattern_begin/ ) {
# warn of duplicate starting comment lines, git #118
- my $lno = $self->[_in_skipped_];
+ my $lno = $self->[_in_code_skipping_];
$self->warning(
"Already in code-skipping section which started at line $lno\n"
);
# _in_end_
# _in_format_
# _in_error_
- # _in_skipped_
+ # _in_code_skipping_
+ # _in_format_skipping_
# _in_pod_
# _in_quote_
}
# handle start of skipped section
- if ( $self->[_in_skipped_] ) {
+ if ( $self->[_in_code_skipping_] ) {
$line_of_tokens->{_line_type} = 'SKIP';
$self->log_numbered_msg("Entering code-skipping section\n");
&& $line =~ /$code_skipping_pattern_begin/ )
{
$in_code_skipping = 1;
+ next;
}
}
else {
if ( $line =~ /$code_skipping_pattern_end/ ) {
$in_code_skipping = 0;
}
+ next;
}
+
+ # Note that we could also ignore format-skipping lines here
+ # but it isn't clear if that would be best.
+ # See c326 for example code.
+
next;
}
next if ($in_code_skipping);
&& $input_line . "\n" =~ /$code_skipping_pattern_begin/
)
{
- $self->[_in_skipped_] = $self->[_last_line_number_];
+ $self->[_in_code_skipping_] = $self->[_last_line_number_];
return;
}
+ if ( !$self->[_in_format_skipping_] ) {
+ if (
+ (
+ substr( $input_line, 0, 4 ) eq '#<<<'
+ || $rOpts_format_skipping_begin
+ )
+ && $rOpts_format_skipping
+
+ # note that the code_skipping_patterns require a newline
+ && $input_line . "\n" =~ /$format_skipping_pattern_begin/
+ )
+ {
+ $self->[_in_format_skipping_] = $self->[_last_line_number_];
+ }
+ }
+ else {
+ if (
+ (
+ substr( $input_line, 0, 4 ) eq '#>>>'
+ || $rOpts_format_skipping_end
+ )
+
+ # note that the code_skipping_patterns require a newline
+ && $input_line . "\n" =~ /$format_skipping_pattern_end/
+ )
+ {
+ $self->[_in_format_skipping_] = 0;
+ }
+ }
+
# Optional fast processing of a block comment
$line_of_tokens->{_line_type} = 'CODE';
$line_of_tokens->{_rtokens} = [$input_line];