51 lines
1.8 KiB
Perl
51 lines
1.8 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
# updates enum comments; see 0e66b34d481b5ba4db6142c83754ef659ed73c8c how the diff looks like
|
||
|
|
||
|
use Encode qw(encode decode);
|
||
|
use FindBin;
|
||
|
use Mojo::File 'path';
|
||
|
|
||
|
use warnings;
|
||
|
use strict;
|
||
|
use utf8;
|
||
|
|
||
|
my $verbose = 0;
|
||
|
my $dry_run = 0;
|
||
|
|
||
|
sub format_enum_entry {
|
||
|
my ($full_match, $enum_name, $enum_value, $existing_comment) = @_;
|
||
|
|
||
|
# convert the enum value to a human readable representation
|
||
|
my $as_text = decode('iso-8859-1', pack('N', hex $enum_value)); # interpret hex number as latin-1
|
||
|
$as_text =~ s/[^[:print:]]/?/g; # remove any non-printable characters
|
||
|
|
||
|
# preserve existing comment
|
||
|
my $additional_comment = '';
|
||
|
if (defined $existing_comment) {
|
||
|
$existing_comment =~ s/^.*:\s*//;
|
||
|
$existing_comment =~ s/^\s+|\s+$//g;
|
||
|
$additional_comment = ": $existing_comment" if $existing_comment ne $as_text;
|
||
|
}
|
||
|
|
||
|
# format the enum entry
|
||
|
return "$enum_name = $enum_value, /**< $as_text$additional_comment */";
|
||
|
}
|
||
|
|
||
|
my $src_files = path($FindBin::Bin, '..')->realpath->list_tree;
|
||
|
for my $src_file (@$src_files) {
|
||
|
# process only files containing IDs
|
||
|
next unless $src_file =~ qr/.*ids.h$/;
|
||
|
print("processing $src_file\n") if $verbose;
|
||
|
|
||
|
# replace all enum value definitions to have a comment
|
||
|
my $file_contents = decode('UTF-8', $src_file->slurp, Encode::FB_CROAK);
|
||
|
next unless $file_contents =~ s/(([a-zA-Z][a-zA-Z0-9]*) *= *(0x[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]+) *,? *((\/\/|\/\*\*\<) *([^\*\n]*) *(\*\/)?)?)/format_enum_entry($1, $2, $3, $6)/eg;
|
||
|
|
||
|
# write the amended file contents back to the file
|
||
|
my $output = encode('UTF-8', $file_contents, Encode::FB_CROAK);
|
||
|
print("writing $src_file\n") if $verbose;
|
||
|
print($output) if $dry_run;
|
||
|
$src_file->spurt($output) unless $dry_run;
|
||
|
}
|