1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#!/usr/bin/perl -w
# Laurent Montel <montel@kde.org> (2014)
# KTempDir->QTemporaryDir
# find -iname "*.cpp" -o -iname "*.h" |xargs kde-dev-scripts/kf5/convert-ktempdir.pl
# TODO need to improve it.
use strict;
use File::Basename;
use lib dirname($0);
use functionUtilkde;
foreach my $file (@ARGV) {
my $modified;
open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
my %varname = ();
my %finalized_called = ();
my @l = map {
my $orig = $_;
my $regexpKTempDirLocal = qr/
^(\s*) # (1) Indentation
KTempDir\s+
(\w+) # (2) variable name
/x; # /x Enables extended whitespace mode
if (my ($left, $var) = $_ =~ $regexpKTempDirLocal) {
$varname{$var} = 1;
s/\bKTempDir\b/QTemporaryDir/;
warn "Be sure that you create temporary dir. if you don't use default constructor\n";
}
my $regexp = qr/
^(\s*) # (1) Indentation, possibly "Classname *" (the ? means non-greedy)
(.*?) # (2) Possibly "Classname *" (the ? means non-greedy)
(\w+) # (3) variable name
\s*=\s* # assignment
new\s+KTempDir\s*\((.*)\) # (4) new KTempDir(...,...,...,...);
(.*)$ # (5) afterreg
/x; # /x Enables extended whitespace mode
if (my ($indent, $left, $var, $argument, $afterreg) = $_ =~ $regexp) {
warn "KTempDir found \'$var\' \'$argument\'\n";
$varname{$var} = 1;
s/\bKTempDir\b/QTemporaryDir/;
warn "Be sure that you create temporary dir. if you don't use default constructor\n";
}
my $regexpKTempDirFunction = qr/
(.*?)
KTempDir\s*\*
(\w+) # (2) variable name
/x; # /x Enables extended whitespace mode
if (my ($left, $var) = $_ =~ $regexpKTempDirFunction) {
warn "Found KTempDir in function!!!! $var\n";
$varname{$var} = 1;
s/\bKTempDir\b/QTemporaryDir/;
warn "Be sure that you create temporary dir. if you don't use default constructor\n";
}
if (/(\w+)\.name\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
s/$var\.name/$var\.path/;
}
}
if (/(\w+)\->name\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
s/$var\->name/$var\->path/;
}
}
if (/(\w+)\.unlink\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
s/$var\.unlink/$var\.remove/;
}
}
if (/(\w+)\.exists\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
warn "$file: replace exists by QTemporaryDir::isValid() + QDir::exists(path) if necessary\n";
s/$var\.exists/$var\.isValid/;
}
}
if (/(\w+)\->exists\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
warn "$file: replace exists by QTemporaryDir::isValid() + QDir::exists(path) if necessary\n";
s/$var\->exists/$var\->isValid/;
}
}
if (/(\w+)\->unlink\(/) {
my $var = $1;
if ( defined $varname{$var} ) {
s/$var\->unlink/$var\->remove/;
}
}
my $regexpRemoveDir = qr/
^(\s*) # (1) Indentation, possibly "Classname *" (the ? means non-greedy)
(.*?) # (2) before KTempDir::removeDir
KTempDir::removeDir
${functionUtilkde::paren_begin}3${functionUtilkde::paren_end} # (3) (args)
(.*)$ # (4) afterreg
/x; # /x Enables extended whitespace mode
if ( my ($indent, $before, $argument, $after) = $_ =~ $regexpRemoveDir) {
$_ = $indent . $before . "QDir($argument).removeRecursively()" . $after . "\n";
}
s/\bKTempDir\b/QTemporaryDir/g;
s/\<KTempDir\b\>/\<QTemporaryDir>/ if (/#include/);
s/\<ktempdir.h\>/\<QTemporaryDir>/ if (/#include/);
$modified ||= $orig ne $_;
$_;
} <$FILE>;
if ($modified) {
open (my $OUT, ">", $file);
print $OUT @l;
close ($OUT);
}
}
functionUtilkde::diffFile( "@ARGV" );
|