You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kabc/scripts/makeaddressee

216 lines
7.3 KiB

#!/usr/bin/perl
my $srcdir;
$srcdir = `dirname $0` || die "Can't determine \$srcdir.";
chomp $srcdir;
if (!open( ENTRIES, "$srcdir/entrylist" ) ) {
print "Can't open $srcdir/entrylist\n";
exit 1;
}
while(<ENTRIES>) {
if (/^#/) { next; }
chop;
@entries = split /,/;
if (!/^.+,(\w+),(\w+)/) { next; }
push @entryCtrl, @entries[0];
push @entryRealNames, @entries[1];
push @entryComments, @entries[2];
push @entryTypes, @entries[3];
push @entryNames, @entries[4];
push @entryCategory, @entries[5];
push @entryDebug, @entries[6];
}
close ENTRIES;
if (!open( H_IN, "$srcdir/addressee.src.h" ) ) {
print "Can't open $srcdir/addressee.src.h\n";
exit 1;
}
if (!open( H_OUT, ">../addressee.h" ) ) {
print "Can't open addressee.h\n";
exit 1;
}
print H_OUT "/*** Warning! This file has been generated by the script makeaddressee ***/\n";
while( <H_IN> ) {
if (/--DECLARATIONS--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] =~ /A/ ) {
print H_OUT " /**\n";
print H_OUT " Set $entryRealNames[$i].\n";
print H_OUT " */\n";
print H_OUT " void set" . ucfirst($entryNames[$i]);
print H_OUT "( const $entryTypes[$i] &$entryNames[$i] );\n";
print H_OUT " /**\n";
print H_OUT " Return $entryRealNames[$i].\n";
print H_OUT " */\n";
print H_OUT " $entryTypes[$i] $entryNames[$i]() const;\n";
}
if ( $entryCtrl[$i] !~ /L/ ) { next; }
print H_OUT " /**\n";
print H_OUT " Return translated label for $entryNames[$i] field.\n";
print H_OUT " */\n";
print H_OUT " static TQString $entryNames[$i]Label();\n\n";
}
} else {
print H_OUT;
}
}
close H_OUT;
close H_IN;
if (!open( CPP_IN, "$srcdir/addressee.src.cpp" ) ) {
print "Can't open $srcdir/addressee.src.cpp\n";
exit 1;
}
if (!open( CPP_OUT, ">../addressee.cpp" ) ) {
print "Can't open addressee.cpp\n";
exit 1;
}
print CPP_OUT "/*** Warning! This file has been generated by the script makeaddressee ***/\n";
while( <CPP_IN> ) {
if (/--VARIABLES--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /A/ ) { next; }
print CPP_OUT " $entryTypes[$i] $entryNames[$i];\n";
}
} elsif (/--DEFINITIONS--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] =~ /A/ ) {
print CPP_OUT "void Addressee::set" . ucfirst($entryNames[$i]);
print CPP_OUT "( const $entryTypes[$i] &$entryNames[$i] )\n{\n";
print CPP_OUT " if ( $entryNames[$i] == mData->$entryNames[$i] ) return;\n";
print CPP_OUT " detach();\n mData->empty = false;\n";
print CPP_OUT " mData->$entryNames[$i] = $entryNames[$i];\n}\n\n";
print CPP_OUT "$entryTypes[$i] Addressee::$entryNames[$i]() const\n{\n";
print CPP_OUT " return mData->$entryNames[$i];\n}\n\n";
}
if ( $entryCtrl[$i] !~ /L/ ) { next; }
@labelwords = split ' ', $entryRealNames[$i];
for( $j=0; $j < @labelwords; ++$j ) {
$labelwords[$j] = ucfirst $labelwords[$j];
}
$label = join ' ', @labelwords;
print CPP_OUT "TQString Addressee::$entryNames[$i]Label()\n{\n";
if ( $entryComments[$i] ) {
print CPP_OUT " return i18n(\"$entryComments[$i]\",\"$label\");\n";
} else {
print CPP_OUT " return i18n(\"$label\");\n";
}
print CPP_OUT "}\n\n\n";
}
} elsif (/--EQUALSTEST--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] =~ /E/ ) {
if ( $entryNames[$i] !~ "revision" ) {
if ( $entryTypes[$i] =~ "TQString" ) {
print CPP_OUT " if ( mData->$entryNames[$i] != a.mData->$entryNames[$i] &&\n";
print CPP_OUT " !( mData->$entryNames[$i].isEmpty() && a.mData->$entryNames[$i].isEmpty() ) ) {\n";
print CPP_OUT " kdDebug(5700) << \"$entryNames[$i] differs\" << endl;\n";
print CPP_OUT " return false;\n";
print CPP_OUT " }\n";
} else {
print CPP_OUT " if ( mData->$entryNames[$i] != a.mData->$entryNames[$i] ) {\n";
print CPP_OUT " kdDebug(5700) << \"$entryNames[$i] differs\" << endl;\n";
print CPP_OUT " return false;\n";
print CPP_OUT " }\n";
}
}
}
}
} elsif (/--STREAMOUT--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] =~ /A/ ) {
print CPP_OUT " s << a.mData->$entryNames[$i];\n";
}
}
} elsif (/--STREAMIN--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] =~ /A/ ) {
print CPP_OUT " s >> a.mData->$entryNames[$i];\n";
}
}
} elsif (/--DEBUG--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /A/ ) { next; }
print CPP_OUT " kdDebug(5700) << \" " . ucfirst($entryNames[$i]);
print CPP_OUT ": '\" << $entryNames[$i]()$entryDebug[$i] << \"'\" << endl;\n";
}
} else {
print CPP_OUT;
}
}
close CPP_OUT;
close CPP_IN;
if (!open( CPP_IN, "$srcdir/field.src.cpp" ) ) {
print "Can't open $srcdir/field.src.cpp\n";
exit 1;
}
if (!open( CPP_OUT, ">../field.cpp" ) ) {
print "Can't open field.cpp\n";
exit 1;
}
print CPP_OUT "/*** Warning! This file has been generated by the script makeaddressee ***/\n";
while( <CPP_IN> ) {
if (/--ENUMS--/) {
$first = 1;
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /F/ ) { next; }
if ( $first ) { $first = 0; }
else { print CPP_OUT ",\n"; }
print CPP_OUT " " . ucfirst($entryNames[$i]);
}
print CPP_OUT "\n";
} elsif (/--CASELABEL--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /F/ ) { next; }
if ( $entryCtrl[$i] !~ /L/ ) { next; }
print CPP_OUT " case FieldImpl::" . ucfirst($entryNames[$i]) . ":\n";
print CPP_OUT " return Addressee::$entryNames[$i]Label();\n";
}
} elsif (/--CASEVALUE--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /A/ ) { next; }
if ( $entryCtrl[$i] !~ /F/ ) { next; }
if ( $entryTypes[$i] ne "TQString" ) { next; }
print CPP_OUT " case FieldImpl::" . ucfirst($entryNames[$i]) . ":\n";
print CPP_OUT " return a.$entryNames[$i]();\n";
}
} elsif (/--CASESETVALUE--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /A/ ) { next; }
if ( $entryCtrl[$i] !~ /F/ ) { next; }
if ( $entryTypes[$i] ne "TQString" ) { next; }
print CPP_OUT " case FieldImpl::" . ucfirst($entryNames[$i]) . ":\n";
print CPP_OUT " a.set" . ucfirst($entryNames[$i]) . "( value );\n";
print CPP_OUT " return true;\n";
}
} elsif (/--CREATEFIELDS--/) {
for( $i=0; $i<@entryNames; ++$i ) {
if ( $entryCtrl[$i] !~ /F/ ) { next; }
print CPP_OUT " createField( FieldImpl::" . ucfirst($entryNames[$i]);
if ( $entryCategory[$i] ) {
print CPP_OUT ", $entryCategory[$i]";
}
print CPP_OUT " );\n";
}
} else {
print CPP_OUT;
}
}
close CPP_OUT;
close CPP_IN;