summaryrefslogtreecommitdiff
path: root/calendar/libical/scripts/mkrestrictiontable.pl
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/libical/scripts/mkrestrictiontable.pl')
-rw-r--r--calendar/libical/scripts/mkrestrictiontable.pl102
1 files changed, 102 insertions, 0 deletions
diff --git a/calendar/libical/scripts/mkrestrictiontable.pl b/calendar/libical/scripts/mkrestrictiontable.pl
new file mode 100644
index 000000000..101e8b7ce
--- /dev/null
+++ b/calendar/libical/scripts/mkrestrictiontable.pl
@@ -0,0 +1,102 @@
+#!/usr/bin/env perl
+
+use Getopt::Std;
+getopts('i:');
+
+# the argument should be the path to the restriction datafile, usually
+# design-data/restrictions.csv
+open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!";
+
+# 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 (/<insert_code_here>/){
+ insert_code();
+ }
+
+ if (/Do not edit/){
+ last;
+ }
+
+ print;
+
+ }
+
+ close IN;
+}
+
+sub insert_code {
+# First build the property restriction table
+print "static const icalrestriction_property_record icalrestriction_property_records[] = {\n";
+
+while(<F>)
+{
+
+ chop;
+
+ s/\#.*$//;
+
+ my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_);
+
+ next if !$method;
+
+ if(!$sub) {
+ $sub = "0";
+ } else {
+ $sub = "icalrestriction_".$sub;
+ }
+
+ if($prop ne "NONE"){
+ print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub},\n");
+ }
+
+}
+
+
+# Print the terminating line
+print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE}\n";
+
+print "};\n";
+
+print "static const icalrestriction_component_record icalrestriction_component_records[] = {\n";
+
+
+# Go back through the entire file and build the component restriction table
+close(F);
+open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!";
+
+while(<F>)
+{
+
+ chop;
+
+ s/\#.*$//;
+
+ my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_);
+
+ next if !$method;
+
+ if(!$sub) {
+ $sub = "0";
+ } else {
+ $sub = "icalrestriction_".$sub;
+ }
+
+
+ if($subcomp ne "NONE"){
+ print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr},$sub\},\n");
+ }
+
+}
+
+# print the terminating line
+print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}\n";
+print "};\n";
+}
+