File indexing completed on 2024-04-14 03:50:34

0001 #!/usr/bin/perl
0002 
0003 # Written 2005 Reinhold Kainhofer <reinhold@kainhofer.com>
0004 # This file is put into the public domain, I claim no copyright on that code
0005 #
0006 # This little (really dumb) script can be used to split a large calendar file 
0007 # up into several small files each containing one event/journal/todo/freebusy.
0008 # All lines before the first VEVENT/VTODO/VJOURNAL/VFREEBUSY will be copied to 
0009 # every file, so timezones should be fine.
0010 # 
0011 # Usage:
0012 #   createtestcases.pl InputFile.ics OutputBaseFileName [ext]
0013 #
0014 # InputFile.ics .. The large calendar file containing multiple incidences
0015 # OutputBaseFileName .. The base name of the output files. They will be
0016 #                       numbered sequentially, i.e. OutputBaseFileName1.ext,
0017 #                       OutputBaseFileName2.ext, etc.
0018 # [ext].. optional file name extension for the output files. If none is given,
0019 #         ics is used.
0020 #
0021 # Disclaimer: This script exists merely for development purposes to help us 
0022 # KDE developer generate atomic test cases for libkcalcore's test suite.
0023 
0024 
0025 use Cwd;
0026 
0027 my $infile=shift @ARGV;
0028 my $filebase=shift @ARGV;
0029 my $ext=shift @ARGV;
0030 if ( !$ext ) {
0031     $ext = "ics";
0032 }
0033 my $filenr=0;
0034 my $filename="$filebase$filenr.$ext";
0035 
0036 print "Infile: $infile\n";
0037 print "filebase: $filebase\n";
0038 print "filenr: $filenr\n";
0039 print "filename: $filename\n";
0040 
0041 my $pre = 1;
0042 my $inevent = 0;
0043 my $pretext = "";
0044 my $opened = 0;
0045 
0046 
0047 open(INFILE, $infile);
0048 while (<INFILE>) {
0049   my $line = $_;
0050     
0051     if ( !$inevent && ($line =~ m/BEGIN:V(EVENT|TODO|FREEBUSY|JOURNAL)/) ) {
0052       if ( !$opened ) {
0053             $opened = 1;
0054         $filenr=$filenr+1;
0055         $filename="$filebase$filenr.$ext";
0056           open fh, "> $filename";
0057         if ( $pretext ) {
0058             print fh $pretext;
0059             } else {
0060                 # TODO: close file, open new file
0061                 print fh "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//K Desktop Environment (KDE)//LibKCal test cases 1.0//EN\n\n";
0062             }
0063             
0064         }
0065         $pre = 0;
0066         $inevent = 1;
0067         print fh $line;
0068     } elsif ( $inevent && ($line =~ m/END:V(EVENT|TODO|FREEBUSY|JOURNAL)/) ) {
0069         $inevent = 0;
0070         print fh $line;
0071         print fh "END:VCALENDAR\n";
0072         close fh;
0073         $opened = 0;
0074     } elsif ( $inevent ) {
0075         print fh $line;
0076     } elsif ( $pre ) {
0077         $pretext="$pretext$line";   
0078 print "PRE: $pretext";
0079     } 
0080     
0081 }
0082