mirror of
https://github.com/pragma-/pbot.git
synced 2025-05-03 21:27:31 +02:00
Improve indentation for pretty-pasting; remove newline replacement code
This commit is contained in:
parent
1b342af3a4
commit
137a29cd3c
@ -85,7 +85,8 @@ sub pretty_format {
|
|||||||
print $fh $code;
|
print $fh $code;
|
||||||
close $fh;
|
close $fh;
|
||||||
|
|
||||||
system("astyle", "-UHfenq", $self->{sourcefile});
|
system("indent", "-kr", $self->{sourcefile});
|
||||||
|
system("astyle", "-A3 -UHpnfq", $self->{sourcefile});
|
||||||
|
|
||||||
open $fh, "<$self->{sourcefile}" or die "Couldn't read $self->{sourcefile}: $!";
|
open $fh, "<$self->{sourcefile}" or die "Couldn't read $self->{sourcefile}: $!";
|
||||||
$result = join '', <$fh>;
|
$result = join '', <$fh>;
|
||||||
@ -104,71 +105,12 @@ sub preprocess_code {
|
|||||||
|
|
||||||
print "code before: [$self->{code}]\n" if $self->{debug};
|
print "code before: [$self->{code}]\n" if $self->{debug};
|
||||||
|
|
||||||
# replace \n outside of quotes with literal newline
|
|
||||||
my $new_code = "";
|
|
||||||
|
|
||||||
use constant {
|
|
||||||
NORMAL => 0,
|
|
||||||
DOUBLE_QUOTED => 1,
|
|
||||||
SINGLE_QUOTED => 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
my $state = NORMAL;
|
|
||||||
my $escaped = 0;
|
|
||||||
|
|
||||||
while($self->{code} =~ m/(.)/gs) {
|
|
||||||
my $ch = $1;
|
|
||||||
|
|
||||||
given ($ch) {
|
|
||||||
when ('\\') {
|
|
||||||
if($escaped == 0) {
|
|
||||||
$escaped = 1;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($state == NORMAL) {
|
|
||||||
when ($_ eq '"' and not $escaped) {
|
|
||||||
$state = DOUBLE_QUOTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
when ($_ eq "'" and not $escaped) {
|
|
||||||
$state = SINGLE_QUOTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
when ($_ eq 'n' and $escaped == 1) {
|
|
||||||
$ch = "\n";
|
|
||||||
$escaped = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($state == DOUBLE_QUOTED) {
|
|
||||||
when ($_ eq '"' and not $escaped) {
|
|
||||||
$state = NORMAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($state == SINGLE_QUOTED) {
|
|
||||||
when ($_ eq "'" and not $escaped) {
|
|
||||||
$state = NORMAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$new_code .= '\\' and $escaped = 0 if $escaped;
|
|
||||||
$new_code .= $ch;
|
|
||||||
}
|
|
||||||
|
|
||||||
$self->{code} = $new_code;
|
|
||||||
|
|
||||||
print "code after \\n replacement: [$self->{code}]\n" if $self->{debug};
|
|
||||||
|
|
||||||
# add newlines to ends of statements and #includes
|
# add newlines to ends of statements and #includes
|
||||||
my $single_quote = 0;
|
my $single_quote = 0;
|
||||||
my $double_quote = 0;
|
my $double_quote = 0;
|
||||||
my $parens = 0;
|
my $parens = 0;
|
||||||
my $cpp = 0; # preprocessor
|
my $cpp = 0; # preprocessor
|
||||||
$escaped = 0;
|
my $escaped = 0;
|
||||||
|
|
||||||
while($self->{code} =~ m/(.)/msg) {
|
while($self->{code} =~ m/(.)/msg) {
|
||||||
my $ch = $1;
|
my $ch = $1;
|
||||||
@ -294,7 +236,7 @@ sub preprocess_code {
|
|||||||
|
|
||||||
print "looking for functions, has main: $has_main\n" if $self->{debug} >= 2;
|
print "looking for functions, has main: $has_main\n" if $self->{debug} >= 2;
|
||||||
|
|
||||||
my $func_regex = qr/^([ *\w]+)\s+([ ()*\w]+)\s*\(([^;{]*)\s*\)\s*({.*|<%.*|\?\?<.*)/ims;
|
my $func_regex = qr/^([ *\w]+)\s+([ ()*\w:]+)\s*\(([^;{]*)\s*\)\s*({.*|<%.*|\?\?<.*)/ims;
|
||||||
|
|
||||||
# look for potential functions to extract
|
# look for potential functions to extract
|
||||||
while($preprecode =~ /$func_regex/ms) {
|
while($preprecode =~ /$func_regex/ms) {
|
||||||
@ -470,13 +412,18 @@ sub postprocess_output {
|
|||||||
$output =~ s/cc1: all warnings being treated as; errors//g;
|
$output =~ s/cc1: all warnings being treated as; errors//g;
|
||||||
$output =~ s/, note: this is the location of the previous definition//g;
|
$output =~ s/, note: this is the location of the previous definition//g;
|
||||||
$output =~ s/ called by gdb \(\) at statement: void gdb\(\) { __asm__\(""\); }//g;
|
$output =~ s/ called by gdb \(\) at statement: void gdb\(\) { __asm__\(""\); }//g;
|
||||||
|
$output =~ s/called by \?\? \(\) //g;
|
||||||
|
$output =~ s/\s0x[a-z0-9]+: note: pointer points here.*?\^//gms;
|
||||||
|
|
||||||
my $removed_warning = 0;
|
my $removed_warning = 0;
|
||||||
|
|
||||||
$removed_warning++ if $output =~ s/warning: ISO C forbids nested functions \[-pedantic\]\s*//g;
|
$removed_warning++ if $output =~ s/\s*warning: ISO C forbids nested functions \[-pedantic\]\s*/ /g;
|
||||||
|
$removed_warning++ if $output =~ s/\s*warning: too many arguments in call to 'gdb'\s+note: expanded from macro '.*?'\s*/ /msg;
|
||||||
|
|
||||||
if($removed_warning) {
|
if($removed_warning) {
|
||||||
$output =~ s/^\[\]\s*//;
|
$output =~ s/^\[\s*\]\s//;
|
||||||
|
$output =~ s/^\[\s+/[/m;
|
||||||
|
$output =~ s/\s+\]$/]/m;
|
||||||
}
|
}
|
||||||
|
|
||||||
$output =~ s/^\[\s+(warning:|info:)/[$1/; # remove leading spaces in first warning/info
|
$output =~ s/^\[\s+(warning:|info:)/[$1/; # remove leading spaces in first warning/info
|
||||||
|
Loading…
x
Reference in New Issue
Block a user