diff options
Diffstat (limited to 'libical/scripts/mkderivedproperties.pl')
-rwxr-xr-x | libical/scripts/mkderivedproperties.pl | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/libical/scripts/mkderivedproperties.pl b/libical/scripts/mkderivedproperties.pl deleted file mode 100755 index 8bd808e7f5..0000000000 --- a/libical/scripts/mkderivedproperties.pl +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/local/bin/perl - -require "readvaluesfile.pl"; - -use Getopt::Std; -getopts('chspmi:'); - -# ARG 0 is properties.csv -%propmap = read_properties_file($ARGV[0]); - -# ARG 1 is value-types.txt -%valuemap = read_values_file($ARGV[1]); - - -# Write the file inline by copying everything before a demarcation -# line, and putting the generated data after the demarcation - -if ($opt_i) { - - open(IN,$opt_i) || die "Can't open input file $opt_i"; - - while(<IN>){ - - if (/Do not edit/){ - last; - } - - print; - - } - - print "/* Everything below this line is machine generated. Do not edit. */\n"; - - -} - -sub fudge_data { - my $prop = shift; - - my $value = $propmap{$prop}->{'lic_value'}; - - if (!$value){ - die "Can't find value for property \"$prop\"\n"; - } - my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$prop)); - my $lc = lc($ucf); - my $uc = uc($lc); - - my $ucfvalue = join("",map {ucfirst(lc($_));} split(/-/,$value)); - my $lcvalue = lc($ucfvalue); - my $ucvalue = uc($lcvalue); - - my $type = $valuemap{$value}->{C}->[1]; - - return ($uc,$lc,$lcvalue,$ucvalue,$type); - -} - -# Create the property map data -if($opt_c){ - - print "static struct icalproperty_map property_map[] = {\n"; - - foreach $prop (sort keys %propmap) { - - next if !$prop; - - next if $prop eq 'NO'; - - my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); - - print "{ICAL_${uc}_PROPERTY,\"$prop\",ICAL_${ucvalue}_VALUE},\n"; - - } - - $prop = "NO"; - - my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); - - print "{ICAL_${uc}_PROPERTY,\"\",ICAL_NO_VALUE}};\n\n"; - - - print "static struct icalproperty_enum_map enum_map[] = {\n"; - - $idx = 10000; - - foreach $value (sort keys %valuemap) { - - next if !$value; - next if $value eq 'NO' or $prop eq 'ANY'; - - my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); - my @enums = @{$valuemap{$value}->{'enums'}}; - - if(@enums){ - - my ($c_autogen,$c_type) = @{$valuemap{$value}->{'C'}}; - - unshift(@enums,"X"); - push(@enums,"NONE"); - - foreach $e (@enums) { - - my $uce = join("",map {uc(lc($_));} split(/-/,$e)); - - if($e ne "X" and $e ne "NONE"){ - $str = $e; - } else { - $str = ""; - } - - print " {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_${uce},\"$str\" }, /*$idx*/\n"; - - $idx++; - } - - } - } - print " {ICAL_NO_PROPERTY,0,\"\"}\n};\n\n"; - - -} - - -if($opt_h){ - - # Create the property enumerations list - print "typedef enum icalproperty_kind {\n ICAL_ANY_PROPERTY = 0,\n"; - foreach $prop (sort keys %propmap) { - - next if !$prop; - - next if $prop eq 'NO' or $prop eq 'ANY'; - - my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); - - print " ICAL_${uc}_PROPERTY, \n"; - - } - print " ICAL_NO_PROPERTY\n} icalproperty_kind;\n\n"; - - -} - - -foreach $prop (sort keys %propmap) { - - next if !$prop; - - next if $prop eq 'NO' or $prop eq 'ANY'; - - my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); - - - my $pointer_check; - if ($type =~ /\*/){ - $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; - } elsif ( $type eq "void" ){ - $pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; - - } - - my $set_pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; - - if($opt_c) { # Generate C source - print<<EOM; -/* $prop */ -icalproperty* icalproperty_new_${lc}($type v) { - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check - icalproperty_set_${lc}((icalproperty*)impl,v); - return (icalproperty*)impl; -} -icalproperty* icalproperty_vanew_${lc}($type v, ...){ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY); $pointer_check - icalproperty_set_${lc}((icalproperty*)impl,v); - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - return (icalproperty*)impl; -} -EOM - - # Allow DTSTART, DTEND, DUE, EXDATE and RECURRENCE-ID to take DATE values. - if ($lc eq "dtstart" || $lc eq "dtend" || $lc eq "due" || $lc eq "exdate" - || $lc eq "recurrenceid") { - print<<EOM; -void icalproperty_set_${lc}(icalproperty* prop, $type v){ - icalvalue *value; - $set_pointer_check - icalerror_check_arg_rv( (prop!=0),"prop"); - if (v.is_date) - value = icalvalue_new_date(v); - else - value = icalvalue_new_datetime(v); - icalproperty_set_value(prop,value); -} -EOM - } else { - print<<EOM; -void icalproperty_set_${lc}(icalproperty* prop, $type v){ - icalvalue *value; - $set_pointer_check - icalerror_check_arg_rv( (prop!=0),"prop"); - value = icalvalue_new_${lcvalue}(v); - icalproperty_set_value(prop,value); -} -EOM - } - - print<<EOM; -$type icalproperty_get_${lc}(icalproperty* prop){ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - value = icalproperty_get_value(prop); - return icalvalue_get_${lcvalue}(value); -} -EOM - - - } elsif ($opt_h) { # Generate C Header file - print "\ -/* $prop */\ -icalproperty* icalproperty_new_${lc}($type v);\ -icalproperty* icalproperty_vanew_${lc}($type v, ...);\ -void icalproperty_set_${lc}(icalproperty* prop, $type v);\ -$type icalproperty_get_${lc}(icalproperty* prop);"; - -} - - -} # This brace terminates the main loop - - - -if ($opt_h){ - -print "\n\n#endif /*ICALPROPERTY_H*/\n" -} - |