Warning, file /sdk/kde-dev-scripts/kf5/convert-kmimetype.pl was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #!/usr/bin/perl -w 0002 0003 # David Faure <faure@kde.org> 0004 # KMimeType -> QMimeType 0005 # find -iname "*.cpp"|xargs kde-dev-scripts/kf5/convert-kmimetype.pl 0006 0007 use strict; 0008 use File::Basename; 0009 use lib dirname($0); 0010 use functionUtilkde; 0011 0012 foreach my $file (@ARGV) { 0013 0014 my $modified; 0015 my %varname = (); 0016 my $qmimedatabaseAdded; 0017 0018 open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n"; 0019 my @l = map { 0020 my $orig = $_; 0021 0022 # see https://community.kde.org/Frameworks/Porting_Notes#KDECore_Changes 0023 if (/KMimeType::Ptr\s+(\w+)/) { 0024 my $var = $1; 0025 $varname{$var} = 1; 0026 s/KMimeType::Ptr/QMimeType/g; 0027 } 0028 if (/(\w+)\->is\s*\(/) { 0029 my $var = $1; 0030 if (defined $varname{$var}) { 0031 s/(\w+)\->is/$var\.inherits/; 0032 } 0033 } 0034 if (/if\s+\(\s*(\w+)\s*\)/) { 0035 my $var = $1; 0036 if (defined $varname{$var}) { 0037 s/if\s+\(\s*$var\s*\)/if \($var\.isValid\(\)\)/; 0038 } 0039 0040 } 0041 if (/if\s*\(\s*(\w+).isNull\s*\(\s*\)/) { 0042 my $var = $1; 0043 0044 if (defined $varname{$var}) { 0045 s/if\s*\(\s*$var.isNull\s*\(\s*\)/if \(!$var\.isValid\(\)/; 0046 } 0047 } 0048 if (/if\s*\(\s*!(\w+).isNull\s*\(\s*\)/) { 0049 my $var = $1; 0050 0051 if (defined $varname{$var}) { 0052 s/if\s*\(\s*!$var.isNull\s*\(\s*\)/if \($var\.isValid\(\)/; 0053 } 0054 } 0055 0056 if (/(\w+)\->isDefault\s*\(/) { 0057 my $var = $1; 0058 if (defined $varname{$var}) { 0059 s/(\w+)\->isDefault/$var\.isDefault/; 0060 } 0061 } 0062 0063 0064 my $regexpMimeTypeForName = qr/ 0065 ^(\s*) # (1) Indentation 0066 (.*) # (2) before 0067 KMimeType::mimeType\s*\( 0068 (.*)$ # (3) afterreg 0069 /x; # /x Enables extended whitespace mode 0070 if (my ($indent, $before, $afterreg) = $_ =~ $regexpMimeTypeForName) { 0071 $_ = $indent . "QMimeDatabase db;\n"; 0072 $afterreg =~ s/,\s*KMimeType::ResolveAliases//; 0073 $_ .= $indent . $before . "db.mimeTypeForName(" . $afterreg . "\n"; 0074 $qmimedatabaseAdded = 1; 0075 } 0076 if (/(\w+)\->iconName\s*\(/) { 0077 my $var = $1; 0078 if (defined $varname{$var}) { 0079 s/(\w+)\->iconName/$var\.iconName/; 0080 } 0081 } 0082 if (/(\w+)\->comment\s*\(/) { 0083 my $var = $1; 0084 if (defined $varname{$var}) { 0085 s/(\w+)\->comment/$var\.comment/; 0086 } 0087 } 0088 if (/(\w+)\->patterns\s*\(/) { 0089 my $var = $1; 0090 if (defined $varname{$var}) { 0091 s/(\w+)\->patterns/$var\.globPatterns/; 0092 } 0093 } 0094 0095 0096 0097 s/, KMimeType::DontResolveAlias//; 0098 my $regexFindByUrlArgs = qr/ 0099 ^(\s*) # (1) Indentation 0100 (.*) # (2) before 0101 KMimeType::findByUrl\s*\((.*),\s*0\s*,\s*true\s*\) # (3) argument 0102 (.*)$ # (3) afterreg 0103 /x; # /x Enables extended whitespace mode 0104 if (my ($indent, $before, $args, $afterreg) = $_ =~ $regexFindByUrlArgs) { 0105 my $addDataBase = ""; 0106 if (not defined $qmimedatabaseAdded) { 0107 $addDataBase = $indent . "QMimeDatabase db;\n"; 0108 } 0109 $_ = $addDataBase . $indent . "db.mimeTypeForFile($args.path(), QMimeDatabase::MatchExtension)" . "$afterreg" . "\n"; 0110 } 0111 0112 0113 0114 if (/KMimeType::findByUrl\s*\(/) { 0115 if (not defined $qmimedatabaseAdded) { 0116 $_ = "QMimeDatabase db;\n" . $_; 0117 } 0118 s/KMimeType::findByUrl\s*\(/db.mimeTypeForUrl(/; 0119 } 0120 #KMimeType::Ptr mime = KMimeType::findByContent( body ); 0121 my $regexFindByContent = qr/ 0122 ^(\s*) # (1) Indentation 0123 (.*)\s+ # (2) before 0124 (\w+)\s*=\s* # (3) variable 0125 KMimeType::findByContent\s*\( 0126 (.*)$ # (4) afterreg 0127 /x; # /x Enables extended whitespace mode 0128 if (my ($indent, $before, $variable, $afterreg) = $_ =~ $regexFindByContent) { 0129 $varname{$variable} = 1; 0130 warn "variable $variable before :$before $_\n"; 0131 my $addDataBase; 0132 if (not defined $qmimedatabaseAdded) { 0133 $addDataBase = $indent . "QMimeDatabase db;\n"; 0134 } 0135 if (defined $addDataBase ) { 0136 $_ = $addDataBase . $_; 0137 } 0138 s/KMimeType::findByContent\s*\(/db.mimeTypeForData(/; 0139 } 0140 0141 s/KMimeType::findByPath\s*\((.*),\s*0\s*,\s*true\s*\)/db.mimeTypeForFile($1, QMimeDatabase::MatchExtension)/; 0142 s/KMimeType::findByPath\s*\(/db.mimeTypeForFile(/; 0143 s/KMimeType::findByNameAndContent\s*\(/db.mimeTypeForFileNameAndData(/; 0144 s/KMimeType::findByFileContent\s*\(\s*(\w+)\s*\)/db.mimeTypeForFile($1, QMimeDatabase::MatchContent)/; 0145 s/(\w+)->name() == KMimeType::defaultMimeType/$1.isDefault/; 0146 s/allParentMimeTypes/allAncestors/; 0147 s/->name/\.name/ if (/\.mimeTypeFor/); 0148 s/KMimeType::extractKnownExtension/db.suffixForFileName/; 0149 s/KMimeType::allMimeTypes/db.allMimeTypes/; 0150 if (/(\w+)->name\s*\(\)/) { 0151 my $var = $1; 0152 if (defined $varname{$var}) { 0153 s/(\w+)\->name/$var\.name/; 0154 } 0155 } 0156 0157 $modified ||= $orig ne $_; 0158 $_; 0159 } <$FILE>; 0160 0161 if ($modified) { 0162 open (my $OUT, ">", $file); 0163 print $OUT @l; 0164 close ($OUT); 0165 functionUtilkde::removeIncludeInFile($file, "KMimeType"); 0166 functionUtilkde::removeIncludeInFile($file, "kmimetype.h"); 0167 0168 functionUtilkde::addIncludeInFile($file, "QMimeDatabase"); 0169 functionUtilkde::addIncludeInFile($file, "QMimeType"); 0170 } 0171 } 0172 0173 functionUtilkde::diffFile( "@ARGV" );