File indexing completed on 2024-04-28 09:37:05

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" );