D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
cpanel
/
perl5
/
536
/
site_lib
/
Perl
/
Tidy
/
Filename :
Debugger.pm
back
Copy
##################################################################### # # The Perl::Tidy::Debugger class shows line tokenization # ##################################################################### package Perl::Tidy::Debugger; use strict; use warnings; use English qw( -no_match_vars ); our $VERSION = '20230912'; use constant EMPTY_STRING => q{}; use constant SPACE => q{ }; sub new { my ( $class, $filename, $is_encoded_data ) = @_; return bless { _debug_file => $filename, _debug_file_opened => 0, _fh => undef, _is_encoded_data => $is_encoded_data, }, $class; } ## end sub new sub really_open_debug_file { my $self = shift; my $debug_file = $self->{_debug_file}; my $is_encoded_data = $self->{_is_encoded_data}; my ( $fh, $filename ) = Perl::Tidy::streamhandle( $debug_file, 'w', $is_encoded_data ); if ( !$fh ) { Perl::Tidy::Warn("can't open $debug_file: $OS_ERROR\n"); } $self->{_debug_file_opened} = 1; $self->{_fh} = $fh; $fh->print( "Use -dump-token-types (-dtt) to get a list of token type codes\n"); return; } ## end sub really_open_debug_file sub close_debug_file { my $self = shift; if ( $self->{_debug_file_opened} ) { my $fh = $self->{_fh}; my $debug_file = $self->{_debug_file}; if ( $fh && $fh->can('close') && $debug_file ne '-' && !ref($debug_file) ) { $fh->close() or Perl::Tidy::Warn( "can't close DEBUG file '$debug_file': $OS_ERROR\n"); } } return; } ## end sub close_debug_file sub write_debug_entry { # This is a debug dump routine which may be modified as necessary # to dump tokens on a line-by-line basis. The output will be written # to the .DEBUG file when the -D flag is entered. my ( $self, $line_of_tokens ) = @_; my $input_line = $line_of_tokens->{_line_text}; my $rtoken_type = $line_of_tokens->{_rtoken_type}; my $rtokens = $line_of_tokens->{_rtokens}; my $rlevels = $line_of_tokens->{_rlevels}; my $input_line_number = $line_of_tokens->{_line_number}; my $line_type = $line_of_tokens->{_line_type}; my ( $j, $num ); my $token_str = "$input_line_number: "; my $reconstructed_original = "$input_line_number: "; my $pattern = EMPTY_STRING; my @next_char = ( '"', '"' ); my $i_next = 0; if ( !$self->{_debug_file_opened} ) { $self->really_open_debug_file(); } my $fh = $self->{_fh}; foreach my $j ( 0 .. @{$rtoken_type} - 1 ) { # testing patterns if ( $rtoken_type->[$j] eq 'k' ) { $pattern .= $rtokens->[$j]; } else { $pattern .= $rtoken_type->[$j]; } $reconstructed_original .= $rtokens->[$j]; $num = length( $rtokens->[$j] ); my $type_str = $rtoken_type->[$j]; # be sure there are no blank tokens (shouldn't happen) # This can only happen if a programming error has been made # because all valid tokens are non-blank if ( $type_str eq SPACE ) { $fh->print("BLANK TOKEN on the next line\n"); $type_str = $next_char[$i_next]; $i_next = 1 - $i_next; } if ( length($type_str) == 1 ) { $type_str = $type_str x $num; } $token_str .= $type_str; } # Write what you want here ... # $fh->print "$input_line\n"; # $fh->print "$pattern\n"; $fh->print("$reconstructed_original\n"); $fh->print("$token_str\n"); return; } ## end sub write_debug_entry 1;