3 require "readvaluesfile.pl";
8 %no_xname = (RELATED=>1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1);
10 %params = read_parameters_file($ARGV[0]);
13 # Write the file inline by copying everything before a demarcation
14 # line, and putting the generated data after the demarcation
18 open(IN,$opt_i) || die "Can't open input file $opt_i";
31 print "# Everything below this line is machine generated. Do not edit. \n";
33 print "/* Everything below this line is machine generated. Do not edit. */\n";
39 # Write parameter string map
43 # Write parameter enumerations and datatypes
46 print "typedef enum icalparameter_kind {\n ICAL_ANY_PARAMETER = 0,\n";
47 foreach $param (sort keys %params) {
51 next if $param eq 'NO' or $param eq 'ANY';
53 my $uc = join("",map {uc($_);} split(/-/,$param));
55 my @enums = @{$params{$param}->{'enums'}};
57 print " ICAL_${uc}_PARAMETER, \n";
60 print " ICAL_NO_PARAMETER\n} icalparameter_kind;\n\n";
62 # Now create enumerations for parameter values
65 print "#define ICALPARAMETER_FIRST_ENUM $idx\n\n";
67 foreach $param (sort keys %params) {
71 next if $param eq 'NO' or $prop eq 'ANY';
73 my $type = $params{$param}->{"C"};
74 my $ucv = join("",map {uc(lc($_));} split(/-/,$param));
75 my @enums = @{$params{$param}->{'enums'}};
79 print "typedef enum $type {\n";
93 my $uce = join("",map {uc(lc($_));} split(/-/,$e));
95 print " ICAL_${ucv}_${uce} = $idx";
101 print "\n} $type;\n\n";
105 print "#define ICALPARAMETER_LAST_ENUM $idx\n\n";
111 # Create the icalparameter_value to icalvalue_kind conversion table
112 print "static struct icalparameter_value_kind_map value_kind_map[] = {\n";
114 foreach $enum (@{$params{'VALUE'}->{'enums'}}){
115 next if $enum eq 'NO' or $enum eq 'ERROR';
116 $uc = join("",map {uc(lc($_));} split(/-/,$enum));
117 print " {ICAL_VALUE_${uc},ICAL_${uc}_VALUE},\n";
120 print " {ICAL_VALUE_X,ICAL_X_VALUE},\n";
121 print " {ICAL_VALUE_NONE,ICAL_NO_VALUE}\n};\n\n";
123 #Create the parameter Name map
124 print "static struct icalparameter_kind_map parameter_map[] = { \n";
126 foreach $param (sort keys %params) {
130 next if $param eq 'NO' or $prop eq 'ANY';
132 my $lc = join("",map {lc($_);} split(/-/,$param));
133 my $uc = join("",map {uc(lc($_));} split(/-/,$param));
136 print " {ICAL_${uc}_PARAMETER,\"$param\"},\n";
140 print " { ICAL_NO_PARAMETER, \"\"}\n};\n\n";
142 # Create the parameter value map
144 print "static struct icalparameter_map icalparameter_map[] = {\n";
145 print "{ICAL_ANY_PARAMETER,0,\"\"},\n";
147 foreach $param (sort keys %params) {
151 next if $param eq 'NO' or $prop eq 'ANY';
153 my $type = $params{$param}->{"C"};
154 my $uc = join("",map {uc(lc($_));} split(/-/,$param));
155 my @enums = @{$params{$param}->{'enums'}};
160 my $uce = join("",map {uc(lc($_));} split(/-/,$e));
162 print " {ICAL_${uc}_PARAMETER,ICAL_${uc}_${uce},\"$e\"},\n";
168 print " {ICAL_NO_PARAMETER,0,\"\"}};\n\n";
172 foreach $param (keys %params){
174 my $type = $params{$param}->{'C'};
176 my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param));
187 if ($type=~/char/ ) {
189 $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return ($type)((struct icalparameter_impl*)param)->string;";
191 $set_code = "((struct icalparameter_impl*)param)->string = icalmemory_strdup(v);";
193 $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");";
194 $pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");";
198 $xrange =" if ( ((struct icalparameter_impl*)param)->string != 0){\n return ICAL_${uc}_X;\n }\n" if !exists $no_xname{$uc};
200 $charorenum= "icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn ($type)((struct icalparameter_impl*)param)->data;";
202 $pointer_check = "icalerror_check_arg_rz(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rz(v < ICAL_${uc}_NONE,\"v\");";
204 $pointer_check_v = "icalerror_check_arg_rv(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rv(v < ICAL_${uc}_NONE,\"v\");";
206 $set_code = "((struct icalparameter_impl*)param)->data = (int)v;";
216 icalparameter* icalparameter_new_${lc}($type v)
218 struct icalparameter_impl *impl;
219 icalerror_clear_errno();
221 impl = icalparameter_new_impl(ICAL_${uc}_PARAMETER);
226 icalparameter_set_${lc}((icalparameter*) impl,v);
227 if (icalerrno != ICAL_NO_ERROR) {
228 icalparameter_free((icalparameter*) impl);
232 return (icalparameter*) impl;
235 ${type} icalparameter_get_${lc}(icalparameter* param)
237 icalerror_clear_errno();
241 void icalparameter_set_${lc}(icalparameter* param, ${type} v)
244 icalerror_check_arg_rv( (param!=0), "param");
245 icalerror_clear_errno();
256 icalparameter* icalparameter_new_${lc}($type v);
257 ${type} icalparameter_get_${lc}(icalparameter* value);
258 void icalparameter_set_${lc}(icalparameter* value, ${type} v);
270 package Net::ICal::Parameter::${ucf};
271 \@ISA=qw(Net::ICal::Parameter);
276 my \$package = shift;
279 bless \$self, \$package;
284 \$p = Net::ICal::icalparameter_new_from_string(\$Net::ICal::ICAL_${uc}_PARAMETER,\$value);
286 \$p = Net::ICal::icalparameter_new(\$Net::ICal::ICAL_${uc}_PARAMETER);
297 my \$impl = \$self->_impl();
299 return Net::ICal::icalparameter_as_ical_string(\$impl);
305 # This is hard to implement, so I've punted for now.
306 die "Set is not implemented";
318 #endif /*ICALPARAMETER_H*/