aboutsummaryrefslogtreecommitdiffstats
path: root/libical/scripts/mkderivedproperties.pl
diff options
context:
space:
mode:
authorSeth Alves <alves@src.gnome.org>2000-02-18 02:02:37 +0800
committerSeth Alves <alves@src.gnome.org>2000-02-18 02:02:37 +0800
commit788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b (patch)
treef5f14715c1c0aede7eb872eda7166cd3ddcd7e3b /libical/scripts/mkderivedproperties.pl
parentb39cda14b7678b925a6e3e645b60fb9858fdfaf6 (diff)
downloadgsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar.gz
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar.bz2
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar.lz
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar.xz
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.tar.zst
gsoc2013-evolution-788bcf6373185aa29f8e2f83ad48cb10bf6e8a9b.zip
Initial revision
svn path=/trunk/; revision=1823
Diffstat (limited to 'libical/scripts/mkderivedproperties.pl')
-rwxr-xr-xlibical/scripts/mkderivedproperties.pl286
1 files changed, 286 insertions, 0 deletions
diff --git a/libical/scripts/mkderivedproperties.pl b/libical/scripts/mkderivedproperties.pl
new file mode 100755
index 0000000000..f3c94f2cfd
--- /dev/null
+++ b/libical/scripts/mkderivedproperties.pl
@@ -0,0 +1,286 @@
+#!/usr/local/bin/perl
+
+use Getopt::Std;
+getopts('chsypmi:');
+
+# ARG 0 is prop-to-value
+open(PV,"$ARGV[0]") || die "Can't open prop to value file $ARGV[0]:$!";
+
+
+while (<PV>){
+
+ chop;
+ my @v = split(/\s+/,$_);
+
+ my $prop = shift @v;
+ my $value = shift @v;
+ my $comment = join(" ",@v);
+
+ $propmap{$prop} = $value;
+}
+
+close PV;
+
+# ARG 1 is value-c-types.txt
+open(F,"$ARGV[1]") || die "Can't open C parameter types file $ARGV[1 ]:$!";
+
+while (<F>){
+
+ chop;
+ my @v = split(/\t+/,$_);
+
+ my $value = shift @v;
+ my $type = shift @v;
+ my $comment = join(" ",@v);
+
+ $valuemap{$value} = $type;
+
+}
+
+close F;
+
+# 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";
+
+}
+
+
+if ( ($opt_h or $opt_s) and !$opt_i ){
+
+print <<EOM;
+/* -*- Mode: C -*-
+ ======================================================================
+ FILE: icalderivedproperties.{c,h}
+ CREATOR: eric 09 May 1999
+
+ \044Id:\044
+
+ (C) COPYRIGHT 1999 Eric Busboom
+ http://www.softwarestudio.org
+
+ The contents of this file are subject to the Mozilla Public License
+ Version 1.0 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and
+ limitations under the License.
+
+
+ ======================================================================*/
+
+/*
+ * THIS FILE IS MACHINE GENERATED. DO NOT EDIT
+ */
+
+
+EOM
+
+}
+
+
+if ($opt_p and !$opt_i){
+
+print <<EOM;
+
+EOM
+
+}
+
+foreach $prop (keys %propmap) {
+
+ next if !$prop;
+
+ my $value = $propmap{$prop};
+
+ 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};
+
+ 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;
+}
+
+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);
+
+}
+
+$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<<EOM;
+
+/* $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);
+EOM
+
+} elsif ($opt_s) { # Generate case in a switch statement
+
+print <<EOM;
+case ICAL_${uc}_PROPERTY:
+EOM
+
+
+} elsif ($opt_p) { # Generate perl code
+
+print <<EOM;
+
+package Net::ICal::Property::${ucf};
+use Net::ICal::Property;
+\@ISA=qw(Net::ICal::Property);
+sub new
+{
+ my \$package = shift;
+
+ my \$p = Net::ICal::icalproperty_new(\$Net::ICal::ICAL_${uc}_PROPERTY);
+ my \$self = Net::ICal::Property::new_from_ref(\$p);
+
+ \$self->_add_elements(\\\@_);
+
+ return bless \$self, \$package;
+}
+
+sub set_value
+{
+ my \$self = shift;
+ my \$v = shift;
+
+ my \$impl = \$self->_impl();
+
+
+ if ( ref \$v && Net::ICal::icalvalue_isa_value(\$v->_impl())){
+ Net::ICal::icalproperty_set_value(\$impl,\$v->_impl);
+ } else {
+ my \$value = Net::ICal::icalvalue_new_from_string(\$Net::ICal::ICAL_${ucvalue}_VALUE,\$v);
+ die if !\$impl;
+ Net::ICal::icalproperty_set_value(\$impl,\$value) unless !\$value;
+ }
+
+}
+
+sub get_value
+{
+ my \$self = shift;
+ my \$impl = \$self->_impl();
+
+ if (defined \$impl){
+ my \$value = Net::ICal::icalproperty_get_value(\$impl);
+ return "" if !\$value;
+ return Net::ICal::icalvalue_as_ical_string(\$value);
+ } else {
+ return "";
+ }
+}
+
+EOM
+
+} elsif ($opt_m) { # Generate a map
+
+print "\'${uc}\' => \'Net::ICal::Property::${ucf},\'\n";
+
+}
+
+} # This brace terminates the main loop
+
+
+
+# Add things to the end of the output.
+
+if ($opt_p)
+{
+ print "1;\n";
+}
+
+if ($opt_h){
+
+print <<EOM;
+#endif ICALPROPERTY_H
+EOM
+}
+