annotate Calcon.pm @ 4:d3e2e1d1a16c

fix various warinings ( mostly uninitialized value)
author kono
date Sat, 25 Jan 2003 14:19:32 +0900
parents cb79baed256e
children 99bbcf06aac0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1 package Calcon;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3 ## $Id$
144819f5d2f6 Initial revision
kono
parents:
diff changeset
4
144819f5d2f6 Initial revision
kono
parents:
diff changeset
5 use 5.008;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
6 use strict;
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
7 # use warnings; we have -w, so why we need this?
3
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
8
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
9 #require Exporter;
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
10
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
11 #our @ISA = qw(Exporter);
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
12
144819f5d2f6 Initial revision
kono
parents:
diff changeset
13 # Items to export into callers namespace by default. Note: do not export
144819f5d2f6 Initial revision
kono
parents:
diff changeset
14 # names by default without a very good reason. Use EXPORT_OK instead.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
15 # Do not simply export all your public functions/methods/constants.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
16
144819f5d2f6 Initial revision
kono
parents:
diff changeset
17 # This allows declaration use Calcon ':all';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
18 # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
144819f5d2f6 Initial revision
kono
parents:
diff changeset
19 # will save memory.
3
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
20 #our %EXPORT_TAGS = ( 'all' => [ qw(
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
21 #
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
22 #) ] );
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
23
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
24 #our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
25
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
26 #our @EXPORT = qw(
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
27
cb79baed256e remove Exporter to avoid "can't locate object method nw". Why this can
kono
parents: 1
diff changeset
28 #);
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
29
144819f5d2f6 Initial revision
kono
parents:
diff changeset
30 our $VERSION = '0.01';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
31
144819f5d2f6 Initial revision
kono
parents:
diff changeset
32
144819f5d2f6 Initial revision
kono
parents:
diff changeset
33 # Preloaded methods go here.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
34
144819f5d2f6 Initial revision
kono
parents:
diff changeset
35 # if you don't have NKF
144819f5d2f6 Initial revision
kono
parents:
diff changeset
36 # package Calcon::NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
37 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
38 # コード変換しなくても動くことは動くけど、いくつか問題がある。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
39 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
40 # sub nkf {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
41 # return shift(@_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
42 # }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
43
144819f5d2f6 Initial revision
kono
parents:
diff changeset
44 # デバッグ中に本当にこのパッケージを見ているかどうかの確認用。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
45 # print STDERR "new versoin!!\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
46
144819f5d2f6 Initial revision
kono
parents:
diff changeset
47 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
48
144819f5d2f6 Initial revision
kono
parents:
diff changeset
49 package Calcon::Basic ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
50 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
51 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
52 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
53 @ISA = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
54
144819f5d2f6 Initial revision
kono
parents:
diff changeset
55 # このパッケージ用の汎用ライブラリ。Date や Record などの
144819f5d2f6 Initial revision
kono
parents:
diff changeset
56 # ファクトリーもここにある。Read/Write の両方から参照される。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
57 # Date/Record の実装を変えたいときは、ここを変更する。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
58
144819f5d2f6 Initial revision
kono
parents:
diff changeset
59 my $date_class = 'Calcon::Date';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
60 my $record_class = 'Calcon::Record';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
61
144819f5d2f6 Initial revision
kono
parents:
diff changeset
62 sub new {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
63 my ($this,$opts,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
64 # ClassName->new で呼び出される時のためにこれがある。Perl の決り文句。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
65 my $class = ref($this) || $this;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
66 my $self = {};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
67 bless $self, $class;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
68 # 入出力ファイル名
144819f5d2f6 Initial revision
kono
parents:
diff changeset
69 $self->{'-file'} = $file if ($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
70 # $self->initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
71 $self->option($opts);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
72 return $self;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
73 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
74
144819f5d2f6 Initial revision
kono
parents:
diff changeset
75 # 下位クラスから呼び出される初期化。ここでは何もしない。しかし、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
76 # 呼び出されるのだから用意しておく必要がある。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
77
144819f5d2f6 Initial revision
kono
parents:
diff changeset
78 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
79 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
80 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
81
144819f5d2f6 Initial revision
kono
parents:
diff changeset
82 # option 関係。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
83
144819f5d2f6 Initial revision
kono
parents:
diff changeset
84 sub set_debug {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
85 my ($self,$flag) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
86 $self->{'-debug'} = $flag;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
87 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
88
144819f5d2f6 Initial revision
kono
parents:
diff changeset
89 sub option {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
90 my ($self,$option) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
91
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
92 return if (! defined($option));
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
93 foreach my $opt ( $option =~ /./g ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
94 if ($opt eq '-') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
95 } elsif ($opt eq 'n') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
96 $self->{'-file-out'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
97 } elsif ($opt eq 'd') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
98 $self->set_debug(1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
99 } elsif ($opt eq 'a') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
100 $self->{'-address-only'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
101 } elsif ($opt eq 'c') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
102 $self->{'-calendar-only'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
103 } elsif ($opt eq 'F') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
104 $self->{'-future-only'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
105 } elsif ($opt eq 't') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
106 $self->{'-tomorrow'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
107 } elsif ($opt eq 'C') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
108 $self->{'-count'} = 5;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
109 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
110 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
111 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
112
144819f5d2f6 Initial revision
kono
parents:
diff changeset
113 # デバッグ用レコード表示ルーチン。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
114
144819f5d2f6 Initial revision
kono
parents:
diff changeset
115 sub show {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
116 my ($self,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
117 $record->show();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
118 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
119
144819f5d2f6 Initial revision
kono
parents:
diff changeset
120 # 時間関係のライブラリ
144819f5d2f6 Initial revision
kono
parents:
diff changeset
121
144819f5d2f6 Initial revision
kono
parents:
diff changeset
122 sub localtime {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
123 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
124 return $date->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
125 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
126
144819f5d2f6 Initial revision
kono
parents:
diff changeset
127 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
128 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
129 return $date->date();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
130 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
131
144819f5d2f6 Initial revision
kono
parents:
diff changeset
132 sub today {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
133 $date_class->today;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
134 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
135
144819f5d2f6 Initial revision
kono
parents:
diff changeset
136 sub unix_time {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
137 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
138 return $date->unix_time();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
139 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
140
144819f5d2f6 Initial revision
kono
parents:
diff changeset
141 # Factory Pattern
144819f5d2f6 Initial revision
kono
parents:
diff changeset
142
144819f5d2f6 Initial revision
kono
parents:
diff changeset
143 sub make_date_unix {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
144 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
145 return $date_class->make_date_unix($date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
146 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
147
144819f5d2f6 Initial revision
kono
parents:
diff changeset
148 sub make_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
149 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
150 return $date_class->make_date($date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
151 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
152
144819f5d2f6 Initial revision
kono
parents:
diff changeset
153 sub make_record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
154 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
155 my %record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
156 my $record = \%record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
157 bless $record,$record_class;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
158 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
159
144819f5d2f6 Initial revision
kono
parents:
diff changeset
160 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
161
144819f5d2f6 Initial revision
kono
parents:
diff changeset
162 package Calcon::Record ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
163 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
164 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
165 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
166 use Time::Local;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
167 @ISA = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
168
144819f5d2f6 Initial revision
kono
parents:
diff changeset
169 # 変換に用いる中間データ形式。オブジェクトにすると、デバッグの
144819f5d2f6 Initial revision
kono
parents:
diff changeset
170 # 時に便利。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
171
144819f5d2f6 Initial revision
kono
parents:
diff changeset
172 sub show {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
173 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
174 foreach my $key (keys %$self) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
175 my $value = $self->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
176 if (ref $value) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
177 $value = $value->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
178 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
179 print "$key: $value\n" if (defined($value) && $value ne '');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
180 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
181 print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
182 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
183
144819f5d2f6 Initial revision
kono
parents:
diff changeset
184 # 中身を文字列で返す。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
185
144819f5d2f6 Initial revision
kono
parents:
diff changeset
186 sub value {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
187 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
188 my $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
189 foreach my $key (keys %$self) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
190 my $value = $self->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
191 if (ref $value) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
192 $value = $value->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
193 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
194 $data .= "$key: $value\n" if (defined($value) && $value ne '');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
195 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
196 $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
197 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
198
144819f5d2f6 Initial revision
kono
parents:
diff changeset
199 # 等しいかどうか
144819f5d2f6 Initial revision
kono
parents:
diff changeset
200
144819f5d2f6 Initial revision
kono
parents:
diff changeset
201 sub equal {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
202 my ($self,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
203
144819f5d2f6 Initial revision
kono
parents:
diff changeset
204 foreach my $key (keys %{$self}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
205 next if (!defined $self->{$key} && !defined $record->{$key});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
206 if(ref $self->{$key} && ref $record->{$key}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
207 return 0 if (! $self->{$key}->equal($record->{$key}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
208 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
209 return 0 if ($self->{$key} ne $record->{$key});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
210 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
211 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
212 return 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
213 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
214
144819f5d2f6 Initial revision
kono
parents:
diff changeset
215 # 与えられたレコードリストに含まれる情報しか持っていないかどうか
144819f5d2f6 Initial revision
kono
parents:
diff changeset
216
144819f5d2f6 Initial revision
kono
parents:
diff changeset
217 sub information_in_list {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
218 my ($self,$records) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
219
144819f5d2f6 Initial revision
kono
parents:
diff changeset
220 my $lines;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
221 foreach my $record (@$records) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
222 foreach my $key (keys %{$record}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
223 my $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
224 if (ref $record->{$key}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
225 $value = $record->{$key}->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
226 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
227 $value = $record->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
228 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
229 foreach my $line (split(/\n/,$value)) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
230 $line =~ s/\s+/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
231 next if (! $line);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
232 $lines->{$line} = $key;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
233 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
234 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
235 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
236 return $lines;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
237 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
238
144819f5d2f6 Initial revision
kono
parents:
diff changeset
239 # 与えられたレコードリストに対して相対的に新しい情報だけのレコードを作る。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
240
144819f5d2f6 Initial revision
kono
parents:
diff changeset
241 sub new_information {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
242 my ($self,$records) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
243 my $lines = $self->information_in_list($records);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
244
144819f5d2f6 Initial revision
kono
parents:
diff changeset
245 my $info;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
246 foreach my $key (keys %{$self}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
247 my $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
248 if (ref $self->{$key}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
249 $value = $self->{$key}->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
250 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
251 $value = $self->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
252 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
253 foreach my $line (split(/\n/,$value)) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
254 $line =~ s/\s+/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
255 next if (! $line);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
256 next if (defined $lines->{$line}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
257 if (defined $info->{$key}) { $info->{$key} .= "\n$line";}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
258 else { $info->{$key} .= $line; }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
259 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
260 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
261 if(defined $info) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
262 bless $info ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
263
144819f5d2f6 Initial revision
kono
parents:
diff changeset
264 # 必要なキーを残す
144819f5d2f6 Initial revision
kono
parents:
diff changeset
265
144819f5d2f6 Initial revision
kono
parents:
diff changeset
266 $info->{'-date'} = $records->[0]->{'-date'}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
267 if (defined ($records->[0]->{'-date'})) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
268 $info->{'-name'} = $records->[0]->{'-name'}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
269 if (defined ($records->[0]->{'-name'})) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
270 # else error だけど、まぁ、良い。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
271 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
272 $info;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
273 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
274
144819f5d2f6 Initial revision
kono
parents:
diff changeset
275 # 与えられたリストにおなじ値を持つレコードが含まれているかどうか
144819f5d2f6 Initial revision
kono
parents:
diff changeset
276
144819f5d2f6 Initial revision
kono
parents:
diff changeset
277 sub is_included {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
278 my ($self,$records) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
279 my $lines = $self->information_in_list($records);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
280
144819f5d2f6 Initial revision
kono
parents:
diff changeset
281 foreach my $key (keys %{$self}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
282 my $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
283 if (ref $self->{$key}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
284 $value = $self->{$key}->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
285 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
286 $value = $self->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
287 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
288 foreach my $line (split(/\n/,$value)) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
289 $line =~ s/\s+/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
290 next if (! $line);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
291 return 0 if (! defined $lines->{$line}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
292 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
293 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
294 return 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
295 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
296
144819f5d2f6 Initial revision
kono
parents:
diff changeset
297 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
298
144819f5d2f6 Initial revision
kono
parents:
diff changeset
299 package Calcon::Date ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
300 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
301 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
302 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
303 use Time::Local;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
304 @ISA = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
305
144819f5d2f6 Initial revision
kono
parents:
diff changeset
306 # 日付に関するオブジェクト
144819f5d2f6 Initial revision
kono
parents:
diff changeset
307 # Perl に標準なものがあるんだろうけど。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
308 # record とおなじインタフェースを持つべき
144819f5d2f6 Initial revision
kono
parents:
diff changeset
309
144819f5d2f6 Initial revision
kono
parents:
diff changeset
310 my @monthname = ( 'Jan','Feb', 'Mar', 'Apr', 'May', 'Jun',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
311 'Jul','Aug','Sep','Oct','Nov', 'Dec');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
312 my %monthname;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
313 my $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
314 foreach my $name (@monthname) { $monthname{$name} = $i++; }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
315
144819f5d2f6 Initial revision
kono
parents:
diff changeset
316 # use unix time scalar as an object
144819f5d2f6 Initial revision
kono
parents:
diff changeset
317 # < 1902/1/1-12/31 date in every year
144819f5d2f6 Initial revision
kono
parents:
diff changeset
318 # 1903/1/1 00:00-23:59 time in evey day
144819f5d2f6 Initial revision
kono
parents:
diff changeset
319 # 1903/1/1-7 every weekday
144819f5d2f6 Initial revision
kono
parents:
diff changeset
320 # It is better to use [$date,$tags] array for this class.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
321 # あんまり良い実装じゃないね。せこすぎ。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
322
144819f5d2f6 Initial revision
kono
parents:
diff changeset
323 my $every_day_min = timelocal(0,0,0,1,0,1902);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
324 my $every_day_max = timelocal(0,0,0,1,0,1903);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
325 my $every_time_min = timelocal(0,0,0,1,0,1903);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
326 my $every_time_max = timelocal(59,59,23,1,0,1903);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
327 my $every_weekday_min = timelocal(0,0,0,4,0,1903); # Sunday
144819f5d2f6 Initial revision
kono
parents:
diff changeset
328 my $every_weekday_max = timelocal(0,0,0,11,0,1903);# Sunday
144819f5d2f6 Initial revision
kono
parents:
diff changeset
329
144819f5d2f6 Initial revision
kono
parents:
diff changeset
330 my $today = time - 24*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
331
144819f5d2f6 Initial revision
kono
parents:
diff changeset
332 my %week = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
333 'Sun'=> timelocal(0,0,0,4,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
334 'Mon'=> timelocal(0,0,0,5,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
335 'Tue'=> timelocal(0,0,0,6,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
336 'Wed'=> timelocal(0,0,0,7,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
337 'Thu'=> timelocal(0,0,0,8,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
338 'Fri'=> timelocal(0,0,0,9,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
339 'Sat'=> timelocal(0,0,0,10,0,1903),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
340 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
341 my @week_name = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
342 'Sun',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
343 'Mon',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
344 'Tue',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
345 'Wed',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
346 'Thu',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
347 'Fri',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
348 'Sat',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
349 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
350
144819f5d2f6 Initial revision
kono
parents:
diff changeset
351 sub is_allday {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
352 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
353 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
354 localtime($$self);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
355 return ($sec==0 && $min==0 && $hour==0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
356 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
357
144819f5d2f6 Initial revision
kono
parents:
diff changeset
358 sub is_day {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
359 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
360 return ( $every_day_min <= $$self && $$self < $every_day_max );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
361 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
362
144819f5d2f6 Initial revision
kono
parents:
diff changeset
363 sub is_time {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
364 my ($date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
365 return ( $every_time_min <= $$date && $$date < $every_time_max );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
366 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
367
144819f5d2f6 Initial revision
kono
parents:
diff changeset
368 sub future {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
369 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
370 return ( $$self >= $today );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
371 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
372
144819f5d2f6 Initial revision
kono
parents:
diff changeset
373 sub tomorrow {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
374 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
375 return ( $today+24*3600*2 >= $$self && $$self >= $today-24*3600/2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
376 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
377
144819f5d2f6 Initial revision
kono
parents:
diff changeset
378 sub is_weekday {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
379 my ($date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
380 return ( $every_weekday_min <= $$date && $$date < $every_weekday_max );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
381 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
382
144819f5d2f6 Initial revision
kono
parents:
diff changeset
383 sub localtime {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
384 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
385 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
386 localtime($$self);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
387 return ($year+1900,$mon+1,$mday,$hour,$min);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
388 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
389
144819f5d2f6 Initial revision
kono
parents:
diff changeset
390 sub make_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
391 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
392 my ($year,$month,$day,$hour);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
393 my ($sec,$min);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
394
144819f5d2f6 Initial revision
kono
parents:
diff changeset
395 $hour = $min = $sec = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
396
144819f5d2f6 Initial revision
kono
parents:
diff changeset
397 if ($date =~ m-(\d+)/(\d+)/(\d+)-) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
398 # $year = $1 - 1900; this is no longer good for timelocal
144819f5d2f6 Initial revision
kono
parents:
diff changeset
399 $year = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
400 $month = $2-1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
401 $day = $3;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
402 } elsif ($date =~ m-(\d+)/(\d+)-) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
403 $year = 1902;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
404 $month = $1-1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
405 $day = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
406 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
407 if ($week{$date}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
408 my $weekday = $week{$date};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
409 bless $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
410 return $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
411 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
412 if ($date =~ m-(\d+):(\d+)-) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
413 $hour = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
414 $min = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
415 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
416 $year = 1903; $month = 0; $day = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
417 return &make_date1($year,$month,$day,$hour,$min,$sec);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
418 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
419 if ($date =~ m-(\d+):(\d+)-) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
420 $hour = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
421 $min = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
422 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
423 return &make_date1($year,$month,$day,$hour,$min,$sec);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
424 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
425
144819f5d2f6 Initial revision
kono
parents:
diff changeset
426 sub make_date1 {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
427 my ($year,$month,$day,$hour,$min,$sec) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
428 my ($date,$self);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
429
144819f5d2f6 Initial revision
kono
parents:
diff changeset
430 if ( eval '$date = timelocal($sec,$min,$hour,$day,$month,$year)' ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
431 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
432 $date = timelocal(0,0,0,1,0,70);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
433 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
434 $self = \$date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
435 bless $self;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
436 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
437
144819f5d2f6 Initial revision
kono
parents:
diff changeset
438 sub make_date_unix {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
439 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
440 $self = \$date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
441 bless $self;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
442 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
443
144819f5d2f6 Initial revision
kono
parents:
diff changeset
444 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
445 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
446 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
447 CORE::localtime($$self);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
448 my $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
449 if ($self->is_day()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
450 $date = ($mon+1)."/$mday";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
451 } elsif ($self->is_weekday()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
452 return $week_name[$wday];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
453 } elsif ($self->is_time()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
454 $date = sprintf(" %02d:%02d",$hour,$min) if ($hour || $min);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
455 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
456 $date = ($year+1900)."/".($mon+1)."/$mday";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
457 $date .= sprintf(" %02d:%02d",$hour,$min) if ($hour || $min);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
458 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
459 return $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
460 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
461
144819f5d2f6 Initial revision
kono
parents:
diff changeset
462 sub unix_time {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
463 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
464 $$self;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
465 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
466
144819f5d2f6 Initial revision
kono
parents:
diff changeset
467 sub add {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
468 my ($self,$add) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
469 my ($result);
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
470 return $self if (!defined($add));
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
471 $result = $$self + $add;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
472 bless \$result;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
473 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
474
144819f5d2f6 Initial revision
kono
parents:
diff changeset
475 sub date_after {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
476 my ($self,$day2) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
477 return $$self<$$day2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
478 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
479
144819f5d2f6 Initial revision
kono
parents:
diff changeset
480 sub today {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
481 my $today = time;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
482 bless \$today;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
483 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
484
144819f5d2f6 Initial revision
kono
parents:
diff changeset
485 # record のインタフェース
144819f5d2f6 Initial revision
kono
parents:
diff changeset
486
144819f5d2f6 Initial revision
kono
parents:
diff changeset
487 sub show {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
488 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
489 print $self->date();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
490 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
491
144819f5d2f6 Initial revision
kono
parents:
diff changeset
492 sub value {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
493 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
494 $self->date();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
495 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
496
144819f5d2f6 Initial revision
kono
parents:
diff changeset
497 sub equal {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
498 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
499 return ($self->unix_time() != $date->unix_time());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
500 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
501
144819f5d2f6 Initial revision
kono
parents:
diff changeset
502 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
503
144819f5d2f6 Initial revision
kono
parents:
diff changeset
504 package Calcon::Reader ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
505 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
506 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
507 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
508 @ISA = ( 'Calcon::Basic' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
509
144819f5d2f6 Initial revision
kono
parents:
diff changeset
510 # Reader の基底クラス
144819f5d2f6 Initial revision
kono
parents:
diff changeset
511
144819f5d2f6 Initial revision
kono
parents:
diff changeset
512 # Reader は decode method を持つ必要がある。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
513
144819f5d2f6 Initial revision
kono
parents:
diff changeset
514 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
515 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
516 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
517
144819f5d2f6 Initial revision
kono
parents:
diff changeset
518 sub set_output{
144819f5d2f6 Initial revision
kono
parents:
diff changeset
519 my ($self,$out) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
520 $self->{'-output'} = $out;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
521 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
522
144819f5d2f6 Initial revision
kono
parents:
diff changeset
523 # date_normalize は Date クラスに変換するので、Reader は必ず
144819f5d2f6 Initial revision
kono
parents:
diff changeset
524 # 呼ぶ必要がある。少し汎用すぎるか?
144819f5d2f6 Initial revision
kono
parents:
diff changeset
525
144819f5d2f6 Initial revision
kono
parents:
diff changeset
526 sub date_normalize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
527 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
528 my ($sday,$stime,$eday,$etime);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
529
144819f5d2f6 Initial revision
kono
parents:
diff changeset
530 if ($record->{'birth'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
531 $record->{'birth'} = $self->make_date($record->{'birth'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
532 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
533 if ($record->{'modify-date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
534 $record->{'modify-date'} = $self->make_date($record->{'modify-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
535 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
536 return if (! $record->{'date'}); # internal error
144819f5d2f6 Initial revision
kono
parents:
diff changeset
537 # print ">**$record->{'date'}***\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
538 # print ">**$record->{'end-date'}***\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
539 # print ">**$record->{'time'}***\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
540 # print ">**$record->{'end-time'}***\n";
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
541 # warning killer
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
542 if (! defined($record->{'date'})) { $record->{'date'} = '';}
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
543 if (! defined($record->{'time'})) { $record->{'time'} = '';}
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
544 if (! defined($record->{'end-time'})) { $record->{'end-time'} = '';}
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
545 if (! defined($record->{'end-date'})) { $record->{'end-date'} = '';}
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
546 $sday = $eday = $stime = $etime = '';
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
547
144819f5d2f6 Initial revision
kono
parents:
diff changeset
548 if ($record->{'time'} =~ /(\d+:\d+)\s*-\s*(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
549 $stime = $1; $etime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
550 } elsif ($record->{'time'} =~ /(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
551 $stime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
552 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
553 if ($record->{'date'} =~ /(\d+\/\d+\/\d+).*\s+(\d+:\d+)\s*-(\d+\/\d+\/\d+).*\s*(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
554 $sday = $1; $stime = $2; $eday = $3; $etime = $4;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
555 } elsif ($record->{'date'} =~ /(\d+\/\d+\/\d+).*\s+(\d+:\d+)\s*-\s*(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
556 $sday = $1; $stime = $2; $etime = $3;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
557 } elsif ($record->{'date'} =~ /(\d+\/\d+\/\d+).*\s+(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
558 $sday = $1; $stime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
559 } elsif ($record->{'date'} =~ /(\d+\/\d+\/\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
560 $sday = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
561 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
562
144819f5d2f6 Initial revision
kono
parents:
diff changeset
563 # これらのチェックで end-time などが作られてしまうみたい。本来は、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
564 # defined で避けるべきなんだろうが...
144819f5d2f6 Initial revision
kono
parents:
diff changeset
565
144819f5d2f6 Initial revision
kono
parents:
diff changeset
566 if ($record->{'end-time'} =~ /(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
567 $etime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
568 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
569 if ($record->{'end-date'} =~ /(\d+\/\d+\/\d+).*\s+(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
570 $eday = $1; $etime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
571 } elsif ($record->{'end-date'} =~ /(\d+\/\d+\/\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
572 $eday = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
573 } elsif ( $etime ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
574 $eday = $sday;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
575 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
576
144819f5d2f6 Initial revision
kono
parents:
diff changeset
577 $sday = $self->make_date("$sday $stime");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
578 if ($eday) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
579 $eday = $self->make_date("$eday $etime");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
580 if ($eday->date_after($sday)) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
581 undef $eday;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
582 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
583 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
584
144819f5d2f6 Initial revision
kono
parents:
diff changeset
585 # いったん消しておいて、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
586 foreach my $key ('end-date','date', 'time','end-time') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
587 undef $record->{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
588 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
589 @$keys = grep(!/^end-date|^date|^time|^end-time/,@$keys);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
590
144819f5d2f6 Initial revision
kono
parents:
diff changeset
591 # もう一回作る。まったくね。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
592
144819f5d2f6 Initial revision
kono
parents:
diff changeset
593 # print "@$keys\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
594 if ($eday) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
595 $record->{'end-date'} = $eday;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
596 unshift(@$keys,'end-date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
597 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
598 $record->{'date'} = $sday;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
599 unshift(@$keys,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
600
144819f5d2f6 Initial revision
kono
parents:
diff changeset
601 # print "@$keys\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
602 # print "***$record->{'date'}***\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
603 # print "***$record->{'end-date'}***\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
604 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
605
144819f5d2f6 Initial revision
kono
parents:
diff changeset
606 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
607
144819f5d2f6 Initial revision
kono
parents:
diff changeset
608 package Calcon::Writer ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
609 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
610 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
611 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
612 @ISA = ( 'Calcon::Basic' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
613 use Carp;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
614
144819f5d2f6 Initial revision
kono
parents:
diff changeset
615 # Writer の基底クラス
144819f5d2f6 Initial revision
kono
parents:
diff changeset
616
144819f5d2f6 Initial revision
kono
parents:
diff changeset
617 # Why this class is necessary?
144819f5d2f6 Initial revision
kono
parents:
diff changeset
618 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
619 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
620
144819f5d2f6 Initial revision
kono
parents:
diff changeset
621 # 書き出しファイルの切替え
144819f5d2f6 Initial revision
kono
parents:
diff changeset
622 # directory などに出力する場合は、-file を undef する。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
623 if (defined $self->{'-file'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
624 open(OUT,">".$self->{'-file'}) or
144819f5d2f6 Initial revision
kono
parents:
diff changeset
625 croak("Can't open $self->{'-file'}:$!\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
626 select OUT;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
627 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
628 # いらないのは知っているが、拡張するかも知れないので。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
629 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
630 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
631
144819f5d2f6 Initial revision
kono
parents:
diff changeset
632 # Writer の基本インタフェース (必ず上書きされる)
144819f5d2f6 Initial revision
kono
parents:
diff changeset
633 # Perl にもインタフェースが欲しいよね。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
634
144819f5d2f6 Initial revision
kono
parents:
diff changeset
635 sub start_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
636 my ($self,$type) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
637 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
638
144819f5d2f6 Initial revision
kono
parents:
diff changeset
639 sub end_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
640 my ($self,$type) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
641 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
642
144819f5d2f6 Initial revision
kono
parents:
diff changeset
643 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
644 my ($self,$record,$key) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
645 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
646
144819f5d2f6 Initial revision
kono
parents:
diff changeset
647
144819f5d2f6 Initial revision
kono
parents:
diff changeset
648 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
649
144819f5d2f6 Initial revision
kono
parents:
diff changeset
650 package Calcon::File_write ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
651
144819f5d2f6 Initial revision
kono
parents:
diff changeset
652 # ファイル形式への書き出し
144819f5d2f6 Initial revision
kono
parents:
diff changeset
653 # key: データ
144819f5d2f6 Initial revision
kono
parents:
diff changeset
654 # レコードのセパレータは "\n\n"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
655
144819f5d2f6 Initial revision
kono
parents:
diff changeset
656 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
657 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
658 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
659 @ISA = ('Calcon::Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
660
144819f5d2f6 Initial revision
kono
parents:
diff changeset
661 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
662 my ($self,$keys,$items) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
663 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
664 my %items = %$items;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
665 # should be override
144819f5d2f6 Initial revision
kono
parents:
diff changeset
666 if ($items->{'date'}) { return if ($self->{'-future-only'} && ! $items->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
667 foreach my $key (@keys) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
668 my $value = $items{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
669 if (ref $value) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
670 $value = $value->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
671 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
672 print "$key: $value\n" if (defined($value) && $value ne '');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
673 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
674 print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
675 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
676
144819f5d2f6 Initial revision
kono
parents:
diff changeset
677 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
678
144819f5d2f6 Initial revision
kono
parents:
diff changeset
679 package Calcon::Print_write ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
680
144819f5d2f6 Initial revision
kono
parents:
diff changeset
681 # 印刷形式。login時に表示するコンパクトな形式。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
682
144819f5d2f6 Initial revision
kono
parents:
diff changeset
683 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
684 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
685 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
686 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
687 @ISA = ('Calcon::Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
688
144819f5d2f6 Initial revision
kono
parents:
diff changeset
689 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
690 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
691 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
692 if ($self->{'-tomorrow'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
693 $self->{'-count'} = 5;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
694 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
695 $self->{'-count'} = -1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
696 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
697 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
698
144819f5d2f6 Initial revision
kono
parents:
diff changeset
699 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
700 my ($self,$keys,$items) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
701 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
702 my %items = %$items;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
703 # should be override
144819f5d2f6 Initial revision
kono
parents:
diff changeset
704 if (defined $items->{'date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
705 my $date = $items->{'date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
706 return if ($self->{'-future-only'} && ! $date->future());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
707 return if ($self->{'-tomorrow'} && ! $date->tomorrow());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
708 return if ($self->{'-count'} == 0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
709 $self->{'-count'} --;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
710 $date = $date->date();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
711 my $memo = $items->{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
712 $memo =~ s/\n+$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
713 if ($self->{'-tomorrow'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
714 print nkf('-e',"$date:\t$memo\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
715 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
716 $memo =~ s/^/$date:\t/mg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
717 print nkf('-e',"$memo\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
718 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
719 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
720 foreach my $key (@keys) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
721 my $value = $items{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
722 if (ref $value) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
723 $value = $value->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
724 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
725 print nkf('-e',"$key: $value\n") if (defined($value) && $value ne '');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
726 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
727 print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
728 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
729 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
730
144819f5d2f6 Initial revision
kono
parents:
diff changeset
731 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
732
144819f5d2f6 Initial revision
kono
parents:
diff changeset
733 package Calcon::Zaurus;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
734 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
735 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
736 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
737 @ISA = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
738
144819f5d2f6 Initial revision
kono
parents:
diff changeset
739 # ザウルス関連の基底クラス
144819f5d2f6 Initial revision
kono
parents:
diff changeset
740 # フレーバとして使うので new がない。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
741 # 使用するクラスはZaurus_initialize を呼び出す必要がある。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
742
144819f5d2f6 Initial revision
kono
parents:
diff changeset
743 my %item_type = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
744 'ADR1'=>'s', 'ADR2'=>'s', 'ALRM'=>'d', 'ANN1'=>'d', 'ANN2'=>'d', 'ATSC'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
745 'ATTM'=>'u', 'ATTR'=>'u', 'BRTH'=>'d', 'CFIP'=>'s', 'CHK1'=>'b', 'CHK2'=>'b',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
746 'CHK3'=>'b', 'CHK4'=>'b', 'CLAS'=>'s', 'CLSC'=>'u', 'CNTC'=>'u', 'COLR'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
747 'CPS1'=>'s', 'CTGR'=>'u', 'DB01'=>'u', 'DB02'=>'u', 'DB03'=>'u', 'DB04'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
748 'DB05'=>'u', 'DB06'=>'u', 'DB07'=>'u', 'DB08'=>'u', 'DB09'=>'u', 'DB10'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
749 'DB11'=>'u', 'DB12'=>'u', 'DB13'=>'u', 'DB14'=>'u', 'DB15'=>'u', 'DB16'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
750 'DB17'=>'u', 'DB18'=>'u', 'DB19'=>'u', 'DB20'=>'u', 'DB21'=>'u', 'DB22'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
751 'DB23'=>'u', 'DB24'=>'u', 'DB25'=>'u', 'DB26'=>'u', 'DB27'=>'u', 'DB28'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
752 'DBFN'=>'u', 'DBID'=>'u', 'DBIT'=>'u', 'DBSI'=>'u', 'DBST'=>'u', 'DNS1'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
753 'DNS2'=>'s', 'ECDT'=>'u', 'EDDY'=>'d', 'EDTM'=>'d', 'ETDY'=>'d', 'FAX1'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
754 'FAX2'=>'s', 'FINF'=>'b', 'FNDY'=>'d', 'HOL1'=>'d', 'HTXT'=>'h', 'IMG1'=>'i',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
755 'IMGF'=>'g', 'IMJG'=>'j', 'IORR'=>'b', 'LKDT'=>'d', 'LKIF'=>'u', 'LTDY'=>'d',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
756 'MAL1'=>'s', 'MARK'=>'u', 'MEM1'=>'s', 'MLAD'=>'s', 'MLCC'=>'s', 'MLFM'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
757 'MLID'=>'u', 'MLRP'=>'s', 'MLTO'=>'u', 'MPFB'=>'s', 'NAME'=>'s', 'NAPR'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
758 'NMSK'=>'s', 'OFCE'=>'s', 'OFPR'=>'s', 'OPT1'=>'u', 'OPT2'=>'u', 'PGR1'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
759 'POPA'=>'s', 'POPP'=>'s', 'PRBD'=>'u', 'PRF1'=>'u', 'PRTY'=>'u', 'PSTN'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
760 'PSWD'=>'s', 'RCCK'=>'b', 'RDCK'=>'b', 'RMRK'=>'s', 'RVTM'=>'u', 'SBJT'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
761 'SCCP'=>'s', 'SCTG'=>'u', 'SCTN'=>'s', 'SDDT'=>'d', 'SDTM'=>'u', 'SPKS'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
762 'STDY'=>'d', 'SVAD'=>'s', 'TCPS'=>'u', 'TEL1'=>'s', 'TEL2'=>'s', 'TIM1'=>'d',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
763 'TIM2'=>'d', 'TITL'=>'s', 'TMNL'=>'u', 'USID'=>'s', 'XLIF'=>'u', 'ZCCP'=>'s',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
764 'ZIP2'=>'s', 'ZIPC'=>'s', 'ZPKS'=>'s', 'ZRTF'=>'u', 'ZXLS'=>'u', 'mDTM'=>'d',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
765 'mISC'=>'u', 'tPID'=>'u',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
766 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
767
144819f5d2f6 Initial revision
kono
parents:
diff changeset
768 my %item_name = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
769 'FNDY'=>'finish-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
770 'ETDY'=>'start-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
771 'LTDY'=>'deadline',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
772 'STDY'=>'start-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
773 'ADR1'=>'home-address',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
774 'ADR2'=>'address',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
775 'ANN1'=>'anniversary',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
776 'BRTH'=>'birth',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
777 'CLAS'=>'class',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
778 'CPS1'=>'mobile-tel',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
779 'DNS1'=>'DNS 1',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
780 'DNS2'=>'DNS 2',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
781 'EDTM'=>'edit-time',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
782 'FAX1'=>'home-fax',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
783 'FAX2'=>'fax',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
784 'HTXT'=>'hand-text',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
785 'IMG1'=>'image',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
786 'IMGF'=>'gif',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
787 'IMJG'=>'jpg',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
788 'LKDT'=>'link-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
789 'MAL1'=>'mail',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
790 'MEM1'=>'memo',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
791 'MLAD'=>'mail-adderess',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
792 'MLTO'=>'mail-to',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
793 'NAME'=>'name',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
794 'NAPR'=>'name-yomi',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
795 'NMSK'=>'mask',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
796 'OFCE'=>'office',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
797 'OFPR'=>'office-yomi',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
798 'POPA'=>'pop 1',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
799 'POPP'=>'pop p',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
800 'PSTN'=>'position',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
801 'PSWD'=>'password',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
802 'RMRK'=>'remark',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
803 'SCCP'=>'sccp',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
804 'SCTN'=>'section',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
805 'SDTM'=>'sdtm',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
806 'SPKS'=>'spks',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
807 'SVAD'=>'cvad',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
808 'TEL1'=>'home-tel',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
809 'TEL2'=>'tel',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
810 'TIM1'=>'date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
811 'TIM2'=>'end-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
812 'TITL'=>'title',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
813 'USID'=>'user id',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
814 'ZCCP'=>'zccp',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
815 'ZIP2'=>'home-zip',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
816 'ZIPC'=>'zip',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
817 'ZPKS'=>'packats',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
818 'mDTM'=>'modify-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
819 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
820
144819f5d2f6 Initial revision
kono
parents:
diff changeset
821
144819f5d2f6 Initial revision
kono
parents:
diff changeset
822 sub Zaurus_initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
823 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
824 $self->{'-item_type'} = \%item_type;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
825 $self->{'-item_name'} = \%item_name;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
826 $self->{'-offset'} = 8;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
827 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
828
144819f5d2f6 Initial revision
kono
parents:
diff changeset
829 # ザウルスのBOX形式に格納されている属性名リストの取出
144819f5d2f6 Initial revision
kono
parents:
diff changeset
830
144819f5d2f6 Initial revision
kono
parents:
diff changeset
831 sub item_list {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
832 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
833 my ($value,@index);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
834 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
835
144819f5d2f6 Initial revision
kono
parents:
diff changeset
836 my $title_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
837 my $title_len = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
838 my $field_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
839
144819f5d2f6 Initial revision
kono
parents:
diff changeset
840 my $version = unpack("n",substr($data,2,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
841 $self->{'-zaurus-version'} = $version;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
842 # $title_offset += ($version < 0x1030)?2:0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
843
144819f5d2f6 Initial revision
kono
parents:
diff changeset
844 if ($version <= 0x1002 ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
845 $title_offset = 0x15;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
846 $self->{'-title-begin'} = $title_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
847 $field_offset = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
848 } elsif ($version < 0x1030 ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
849 $title_offset = unpack("V",substr($data,0x8,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
850 $self->{'-title-begin'} = $title_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
851 $title_offset += 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
852 $field_offset = 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
853 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
854 $title_offset = unpack("V",substr($data,0x8,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
855 $self->{'-title-begin'} = $title_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
856 $field_offset = 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
857 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
858
144819f5d2f6 Initial revision
kono
parents:
diff changeset
859 my $title_count = ord(substr($data,$title_offset,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
860 my $ptr = $title_offset+1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
861 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
862 print "\n\nfile:",$self->{'-file'},"\n\n"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
863 if ($debug && defined ($self->{'-file'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
864 while($title_count-->0) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
865 my $item_len = ord(substr($data,$ptr,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
866 $ptr += 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
867 # print "item: ",unpack("H*",substr($data,$ptr,$item_len)) if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
868 my $id = $self->{'-item_id'}->[$i] = substr($data,$ptr+$field_offset,4);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
869 my $name = $self->{'-item_name1'}->[$i] =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
870 substr($data,$ptr+5,$item_len-5);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
871 print "list:\t$i:$id:$item_len:$name\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
872 $ptr += $item_len;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
873 $i++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
874 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
875 print "title-len: $version $title_len ",$ptr - $title_offset,"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
876 $self->{'-item_name_count'} = $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
877 $self->{'-title-length'} = $ptr-$title_offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
878 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
879
144819f5d2f6 Initial revision
kono
parents:
diff changeset
880
144819f5d2f6 Initial revision
kono
parents:
diff changeset
881 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
882
144819f5d2f6 Initial revision
kono
parents:
diff changeset
883 package Calcon::Zaurus_read ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
884
144819f5d2f6 Initial revision
kono
parents:
diff changeset
885 # BOX 形式からの読み込み
144819f5d2f6 Initial revision
kono
parents:
diff changeset
886
144819f5d2f6 Initial revision
kono
parents:
diff changeset
887 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
888 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
889 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
890 @ISA = ('Calcon::Zaurus', 'Calcon::Reader');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
891
144819f5d2f6 Initial revision
kono
parents:
diff changeset
892 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
893 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
894 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
895 $self->Zaurus_initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
896
144819f5d2f6 Initial revision
kono
parents:
diff changeset
897 $self->{'-debug'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
898 $self->{'-offset'} = 8;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
899 $self->{'-all'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
900 $self->{'-item_list'} = ''; # '' or 'original' or 'id'
144819f5d2f6 Initial revision
kono
parents:
diff changeset
901 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
902
144819f5d2f6 Initial revision
kono
parents:
diff changeset
903 sub read {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
904 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
905
144819f5d2f6 Initial revision
kono
parents:
diff changeset
906 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
907 open(F,"<".$file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
908
144819f5d2f6 Initial revision
kono
parents:
diff changeset
909 local($/) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
910 undef $/;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
911 my $data = <F>;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
912 $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
913 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
914
144819f5d2f6 Initial revision
kono
parents:
diff changeset
915 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
916 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
917 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
918 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
919
144819f5d2f6 Initial revision
kono
parents:
diff changeset
920 my $data = $self -> read($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
921 $self -> item_list($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
922 $out->start_file($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
923 print "Zaurus version: $self->{'-zaurus-version'}\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
924 if ($self->{'-zaurus-version'} <= 0x1002) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
925 $self->decode_old_data($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
926 } elsif ($self->{'-zaurus-version'} == 0x1030) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
927 $self->{'-offset'} = 10;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
928 $self->decode_data($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
929 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
930 $self->decode_data($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
931 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
932 $out->end_file($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
933 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
934
144819f5d2f6 Initial revision
kono
parents:
diff changeset
935 # 複雑なIndexの処理
144819f5d2f6 Initial revision
kono
parents:
diff changeset
936
144819f5d2f6 Initial revision
kono
parents:
diff changeset
937 sub decode_index {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
938 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
939 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
940
144819f5d2f6 Initial revision
kono
parents:
diff changeset
941 my ($length) = unpack("V",substr($data,0x10,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
942 if ($self->{'-zaurus-version'} eq 0x1030) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
943 $length = unpack("V",substr($data,0x8,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
944 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
945 my $offset = 0x50;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
946 my ($value,@index);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
947 my $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
948 my $flag;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
949
144819f5d2f6 Initial revision
kono
parents:
diff changeset
950 do {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
951 for($i=$offset;$i<$length;$i+=4) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
952 $value = unpack("V",substr($data,$i,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
953 next if ($value == 0xffffffff);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
954 push(@index,$value) if ($value);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
955 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
956 $offset = $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
957 $flag = unpack("v",substr($data,$offset,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
958
144819f5d2f6 Initial revision
kono
parents:
diff changeset
959 printf "next index %0x: %0x\n",$offset,"" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
960 printf "flag: %0x\n",$flag if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
961
144819f5d2f6 Initial revision
kono
parents:
diff changeset
962 if ($self->{'-zaurus-version'} eq 0x1030) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
963 $length = unpack("V",substr($data,$offset+2,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
964 $offset = $offset+6;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
965 $length += $offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
966 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
967 $length = unpack("v",substr($data,$offset+2,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
968 $offset = $offset+5;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
969 $length += $offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
970 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
971 printf "next index length %0x\n",$length if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
972
144819f5d2f6 Initial revision
kono
parents:
diff changeset
973 } while ($flag == 0xfff0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
974
144819f5d2f6 Initial revision
kono
parents:
diff changeset
975 return @index;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
976 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
977
144819f5d2f6 Initial revision
kono
parents:
diff changeset
978 # BOX形式の中のレコードの処理
144819f5d2f6 Initial revision
kono
parents:
diff changeset
979
144819f5d2f6 Initial revision
kono
parents:
diff changeset
980 sub decode_data {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
981 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
982 my ($offset) = $self->{'-offset'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
983 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
984
144819f5d2f6 Initial revision
kono
parents:
diff changeset
985 my(@index) = $self->decode_index($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
986
144819f5d2f6 Initial revision
kono
parents:
diff changeset
987 foreach my $index (@index) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
988 printf "index %0x: %s\n",$index,"" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
989
144819f5d2f6 Initial revision
kono
parents:
diff changeset
990 last if (length(substr($data,$index,2))<2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
991 next if (substr($data,$index,2) eq "\xf0\xff");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
992
144819f5d2f6 Initial revision
kono
parents:
diff changeset
993 my $record_number=ord(substr($data,$index,1)) +
144819f5d2f6 Initial revision
kono
parents:
diff changeset
994 ord(substr($data,$index+1,1))*256;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
995 my $record_len=ord(substr($data,$index+2,1)) +
144819f5d2f6 Initial revision
kono
parents:
diff changeset
996 ord(substr($data,$index+3,1))*256;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
997
144819f5d2f6 Initial revision
kono
parents:
diff changeset
998 my $item_count=ord(substr($data,$index+6,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
999 my $item_dummy=ord(substr($data,$index+10,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1000
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1001 my @len = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1002 my $ptr = $index + $offset;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1003 my $total_len = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1004 my $k = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1005 for(my $j=$self->{'-item_name_count'}; $j>0; $j--) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1006 my $i=ord(substr($data,$ptr,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1007 if ($i>=0x80) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1008 $ptr++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1009 $i = ord(substr($data,$ptr,1))+($i-0x80)*256;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1010 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1011 print "len:$k: $i\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1012 $k++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1013 push(@len,$i);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1014 $total_len += $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1015 $ptr++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1016 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1017 printf "offset: %x\n",$ptr-$index if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1018
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1019 # $ptr = $index+40+$item_dummy; should be this kind of method...
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1020 # $ptr = $index+$record_len-$total_len+5;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1021 # $ptr = $index+8+$item_count;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1022
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1023
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1024 print "head: ",unpack("H*",substr($data,$index,50)),"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1025 print "body: ",unpack("H*",substr($data,$ptr,50)),"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1026
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1027 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1028 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1029 my @key_list = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1030 foreach my $len (@len) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1031 my ($key,$item,$type) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1032 $self->decode_item($i,substr($data,$ptr,$len));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1033 if ($item) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1034 if ($type eq 's' || $type eq 'd') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1035 push(@key_list,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1036 $record->{$key} = $item;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1037 } elsif ($self->{'-all'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1038 push(@key_list,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1039 $record->{$key} = $type.":".unpack("H*",$item);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1040 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1041 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1042 $i++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1043 $ptr += $len;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1044 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1045 $self->date_normalize(\@key_list,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1046 $self->{'-output'}->record(\@key_list,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1047 print "\n" if ($debug);;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1048 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1049 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1050
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1051 # たぶん、PI-7000以前の形式
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1052
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1053 sub decode_old_data {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1054 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1055 my $debug = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1056 my @len = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1057 my $ptr = $self->{'-title-begin'} + $self->{'-title-length'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1058
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1059 my $old_number = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1060 while(1) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1061 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1062 my @key_list = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1063
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1064 # my $record_number = ord(substr($data,$ptr++,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1065 my $record_number = unpack("v",substr($data,$ptr,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1066 my $optr = $ptr;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1067 while ($record_number != $old_number+1) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1068 # $record_number = ord(substr($data,$ptr++,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1069 $ptr += 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1070 $record_number = unpack("v",substr($data,$ptr,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1071 return if ($ptr>length($data));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1072 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1073 print "offset: ",$ptr-$optr,"\n" if ($debug && $optr<$ptr);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1074 $ptr += 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1075 my $record_length = unpack("v",substr($data,$ptr,2));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1076 $ptr += 2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1077 print "record_number: $record_number\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1078 print "record_length: $record_length\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1079 $old_number = $record_number;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1080 # last if ($record_length == 0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1081 my $record_end = $optr + $record_length+4; # - 3;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1082 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1083 $ptr+=2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1084 for(my $j=$self->{'-item_name_count'}; $j>0; $j--) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1085 # while($ptr < $record_end) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1086 my $len=ord(substr($data,$ptr++,1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1087 if ($len>=0x80) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1088 $len = ord(substr($data,$ptr,1))+($len-0x80)*256;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1089 $ptr++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1090 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1091 print "len: $len\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1092 print "data: ",substr($data,$ptr,$len),"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1093 my ($key,$item,$type) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1094 $self->decode_item($i,substr($data,$ptr,$len));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1095 if ($item) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1096 if ($type eq 's' || $type eq 'd') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1097 push(@key_list,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1098 $record->{$key} = $item;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1099 } elsif ($self->{'-all'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1100 push(@key_list,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1101 $record->{$key} = $type.":".unpack("H*",$item);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1102 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1103 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1104 $i++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1105 $ptr += $len;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1106 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1107 if ($debug && $ptr != $record_end) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1108 print "record_end: $ptr $record_end\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1109 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1110 $ptr = $record_end;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1111 print "\n" if ($debug);;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1112 $self->date_normalize(\@key_list,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1113 $self->{'-output'}->record(\@key_list,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1114 # }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1115 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1116 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1117
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1118 sub decode_time {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1119 my ($self,$t) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1120
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1121 return '' if (! $t);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1122 # print unpack("H*",substr($t,1,4)),"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1123
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1124 $t = hex(unpack("H*",substr($t,1,4)));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1125 my $year = ($t&0x0000000f)*16 ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1126 $year += (($t&0x0000f000)>>12) + 1900;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1127 my $month = ($t&0x00000f00)>>8;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1128 my $day = ($t&0x00f80000)>>19;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1129 my $min = ($t&0x3f000000)>>24;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1130 my $hour =((($t&0xc0000000)>>30)&0x3)<<0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1131 $hour += (($t&0x00070000)>>16)<<2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1132 if ($year == 2155) { # unspecified case
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1133 $t = sprintf("%d/%d",$month,$day);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1134 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1135 $t = sprintf("%04d/%d/%d",$year,$month,$day);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1136 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1137 if($min!=63) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1138 $t .= sprintf(" %02d:%02d",$hour,$min);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1139 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1140 $t;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1141 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1142
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1143 # Zaurus レコード中の可変長データを属性名とともに変換する。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1144
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1145 sub decode_item {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1146 my ($self,$i,$item) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1147 my $all = $self->{'-all'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1148 my $debug = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1149
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1150 return if (! $item);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1151 # print $self->{'-item_id'}->[$i],": ",unpack("H*",$item),"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1152 my $id_name = $self->{'-item_id'}->[$i];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1153 my $id_type = $self->{'-item_type'}->{$id_name};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1154
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1155 if ($self->{'-item_list'} eq 'original') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1156 $id_name = $self->{'-item_name1'}->[$i];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1157 } elsif ($self->{'-item_list'} eq 'id') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1158 } elsif (defined $self->{'-item_name'}->{$id_name}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1159 $id_name = $self->{'-item_name'}->{$id_name};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1160 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1161
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1162 if ( $id_type eq 'd' ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1163 $item = $self->decode_time($item);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1164 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1165 return ($id_name,$item,$id_type);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1166 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1167
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1168 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1169
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1170 package Calcon::Pool;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1171
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1172 # 差分などを取るための中間的なレコードバッファ
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1173 # Unix の pipe みたいに使う
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1174 # Writer/Reader を両方継承すべきかも知れない。けど、今のところ、Reader
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1175 # を継承する利点は無い。decode ではなく、output を呼ぶ。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1176
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1177 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1178 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1179 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1180 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1181 @ISA = ('Calcon::Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1182 # This also has Reader interface.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1183
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1184 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1185 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1186
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1187 if(defined($record->{'name'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1188 $self->address($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1189 } elsif(defined($record->{'date'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1190 if ($record->{'date'}) { return if ($self->{'-future-only'} && ! $record->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1191 $self->calendar($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1192 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1193 # I don't know.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1194 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1195 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1196
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1197 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1198 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1199 push(@{$self->{'-address-index'}->{$record->{'name'}}},$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1200 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1201
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1202 sub calendar {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1203 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1204 push(@{$self->{'-date-index'}->{$record->{'date'}->unix_time()}},$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1205 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1206
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1207 sub set_contents {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1208 my ($self,$address,$calendar) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1209 $self->{'-date-index'} = $calendar;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1210 $self->{'-address-index'} = $address;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1211 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1212
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1213 sub contents {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1214 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1215 return ( $self->{'-date-index'}, $self->{'-address-index'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1216 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1217
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1218 # Reader インターフェースの部分
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1219
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1220 sub set_output {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1221 my ($self,$out) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1222 $self->{'-output'} = $out;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1223 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1224
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1225 sub output {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1226 my ($self,$out) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1227
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1228 $self->{'-output'} = $out;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1229 $self->{'-output'}->start_file();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1230 $self->write_datebook();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1231 $self->write_addressbook();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1232 $self->{'-output'}->end_file();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1233 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1234
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1235 sub write_datebook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1236 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1237 for my $date ( sort {$a<=>$b} keys %{$self->{'-date-index'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1238 for my $record ( @{$self->{'-date-index'}->{$date}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1239 my @keys = keys %{$record};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1240 $self->{'-output'}->record(\@keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1241 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1242 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1243 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1244
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1245 sub write_addressbook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1246 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1247 for my $adr ( keys %{$self->{'-address-index'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1248 for my $record ( @{$self->{'-address-index'}->{$adr}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1249 my @keys = keys %{$record};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1250 $self->{'-output'}->record(\@keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1251 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1252 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1253 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1254
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1255 # 自分自身のクラスを切替えることで動作モードを切替える
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1256
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1257 sub delete_mode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1258 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1259 bless $self,'Calcon::Pool::delete';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1260 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1261
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1262 sub merge_mode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1263 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1264 bless $self,'Calcon::Pool::merge';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1265 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1266
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1267 sub input_mode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1268 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1269 bless $self,'Calcon::Pool';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1270 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1271
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1272 # 以下のルーチンは、たぶん、Record クラスにあるべき
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1273
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1274 sub same_record_in_list {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1275 my ($self,$list,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1276 # print "\nCampare: ";$record->value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1277 record:
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1278 for (my $i = 0; $i<=$#{$list}; $i++) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1279 my $r = $list->[$i];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1280 # print "\nList: ";$r->value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1281 next if (! $record->equal($r));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1282 # print "\nResult: $i\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1283 return $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1284 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1285 # print "\nResult: -1\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1286 return -1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1287 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1288
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1289 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1290
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1291 package Calcon::Pool::delete;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1292
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1293 # 自分のPoolから、与えれたレコードを削除する。差分計算。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1294
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1295 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1296 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1297 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1298 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1299 @ISA = ('Calcon::Pool');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1300
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1301 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1302 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1303 my $name = $record->{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1304 if (my $list = $self->{'-address-index'}->{$name}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1305 my $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1306 if (($i = $self->same_record_in_list($list,$record)) >= 0 ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1307 splice(@{$list},$i,1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1308 if (! @$list) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1309 delete $self->{'-address-index'}->{$name};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1310 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1311 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1312 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1313 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1314
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1315 sub calendar {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1316 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1317 my $date = $record->{'date'}->unix_time();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1318 if (my $list = $self->{'-date-index'}->{$date}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1319 my $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1320 if (($i = $self->same_record_in_list($list,$record)) >= 0 ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1321 splice(@{$list},$i,1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1322 if (! @$list) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1323 delete $self->{'-date-index'}->{$date};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1324 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1325 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1326 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1327 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1328
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1329 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1330
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1331 package Calcon::Pool::merge;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1332
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1333 # Pool にないレコードだったら、そのレコードを付け加える。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1334 # 中身を見て、必要な情報のみを付け加える方が良い。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1335
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1336 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1337 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1338 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1339 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1340 @ISA = ('Calcon::Pool');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1341
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1342 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1343 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1344 my $name = $record->{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1345 if (my $list = $self->{'-address-index'}->{$name}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1346 my $i;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1347 if (($i = $self->same_record_in_list($list,$record)) >= 0 ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1348 return;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1349 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1350 push(@$list,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1351 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1352 push(@{$self->{'-address-index'}->{$name}},$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1353 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1354 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1355
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1356 sub calendar {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1357 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1358 my $date = $record->{'date'}->unix_time();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1359 my $list = $self->{'-date-index'}->{$date};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1360 if ($list) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1361 my $r;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1362 return unless ($r = $self->new_info($list,$record));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1363 push(@$list,$r);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1364 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1365 push(@{$self->{'-date-index'}->{$date}},$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1366 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1367 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1368
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1369
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1370 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1371
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1372 package Calcon::Buffered_Writer;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1373
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1374 # 変換前にすべてを読み込む必要がある形式のために使うクラス。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1375 # データの先頭に総レコード数を持つ形式とか。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1376
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1377 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1378 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1379 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1380 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1381 @ISA = ('Calcon::Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1382
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1383 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1384 # Some format requires whole record before write, because of
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1385 # record count or sorted order. This plugin class perform
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1386 # reading and queueing.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1387 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1388 # write_datebook or write_address_book should be overwrited.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1389 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1390
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1391 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1392 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1393
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1394 if(defined($record->{'name'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1395 $self->{'-adr-max'}++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1396 $self->address($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1397 } elsif(defined($record->{'date'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1398 if ($record->{'date'}) { return if ($self->{'-future-only'} && ! $record->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1399 $self->{'-date-max'}++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1400 $self->calendar($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1401 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1402 # I don't know.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1403 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1404 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1405
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1406 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1407 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1408 push(@{$self->{'-address-records'}}, $record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1409 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1410
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1411 sub calendar {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1412 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1413 push(@{$self->{'-date-records'}}, $record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1414 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1415
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1416 sub end_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1417 my ($self) = @_;
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
1418 $self->write_datebook() if ( defined($self->{'-date-max'}));
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
1419 $self->write_addressbook() if ( defined($self->{'-adr-max'}));
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1420 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1421
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1422 sub write_datebook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1423 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1424 my $count = $self->{'-date-max'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1425 for my $dates ( @{$self->{'-date-records'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1426 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1427 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1428
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1429 sub write_addressbook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1430 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1431 my $count = $self->{'-adr-max'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1432 for my $adr ( @{$self->{'-address-records'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1433 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1434 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1435
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1436
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1437 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1438
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1439 package Calcon::Zaurus_backup_read ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1440
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1441 # ザウルスのバックアップ形式
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1442
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1443 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1444 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1445 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1446 @ISA = ( 'Calcon::Zaurus_read' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1447
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1448 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1449 my ($self,$backup) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1450 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1451
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1452 my $data = $self->backup_read($backup);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1453
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1454 foreach my $file ( $self->backup_files($data) ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1455 next if ($file !~ /BOX$/);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1456 $self->SUPER::decode($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1457 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1458 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1459
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1460 sub backup_files {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1461 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1462 if ($data =~ /^\032*PABAK/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1463 return $self->text_backup($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1464 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1465 return $self->ztar($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1466 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1467 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1468
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1469 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1470 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1471 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1472
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1473 # alphabet encoding
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1474 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1475 # 0-5 "0".."5"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1476 # 6-0x1f "A".."Z"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1477 # 0x20-0x25 "6"..";"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1478 # 0x26-0x3f "a".."z"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1479 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1480 # make character replacement code
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1481 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1482 my $ya = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1483 my $yb = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1484 for(my $i=0;$i<0x40;$i++) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1485 if( $i <= 0x05 ) { $ya .= pack("C",($i + 0x30));}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1486 elsif( $i <= 0x1f ) { $ya .= pack("C",($i + 0x3b));}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1487 elsif( $i <= 0x25 ) { $ya .= pack("C",($i + 0x16));}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1488 else { $ya .= pack("C",($i + 0x3b)); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1489 # since . never matches \n, 0x40 is added
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1490 $yb .= sprintf("\\%03o",$i+0x40);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1491 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1492 eval "sub a_decode \{ y\/" . $ya . "/" . $yb . "/;}\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1493 eval "sub a_encode \{ y\/" . $yb . "/" . $ya . "/;}\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1494
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1495 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1496
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1497 sub read {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1498 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1499 return $self->{'-files'}->{$file};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1500 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1501
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1502 ##########################################################
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1503 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1504 # Zaurus Binary Encoding
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1505 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1506 ##########################################################
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1507
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1508 # bit encoding
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1509 # s/..../&decode($&)/eg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1510 # 76543210765432107654321076543210
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1511 # 00 11 22 001122
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1512 # 33221100332211003322110033221100
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1513 # 00 11 22 001122
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1514
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1515 sub bit_decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1516 my $bit = substr($_[0],0,3);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1517 vec($bit, 3,2) = vec($_[0],14,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1518 vec($bit, 7,2) = vec($_[0],13,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1519 vec($bit,11,2) = vec($_[0],12,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1520 return $bit;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1521 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1522
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1523 sub bit_encode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1524 my $bit = $_[0];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1525 vec($bit,14,2) = vec($bit, 3,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1526 vec($bit,13,2) = vec($bit, 7,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1527 vec($bit,12,2) = vec($bit,11,2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1528 # since . never matches \n, 0x40 is added
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1529 vec($bit,11,2) = vec($bit,7,2) = vec($bit,3,2) = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1530 return $bit;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1531 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1532
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1533 sub z_encode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1534 my ($i);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1535 $i = (length()%3);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1536 $_ .= "\0" x (3-$i) if($i);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1537 s/.../&bit_encode($&)/eg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1538 &a_encode;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1539 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1540
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1541 sub z_decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1542 my ($i);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1543 s/\s//g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1544 &a_decode;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1545 $i = (length()%4);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1546 $_ .= "\0" x (4-$i) if($i);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1547 s/..../&bit_decode($&)/eg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1548 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1549
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1550 sub text_backup {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1551 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1552 my $debug = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1553 my (@names,@size);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1554
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1555 print("\nBackup Directory\n") if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1556
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1557 $data =~ s/^\032*PABAK.*\n([^\032]*\032)//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1558 $_ = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1559 &z_decode;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1560 my @title = (); my @attr = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1561 my $len = length($_) - 20; my $j = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1562 for(my $i=6;$i<$len;$i+=20) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1563 $title[$j] = substr($_,$i,12);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1564 $attr[$j] = unpack("H*",substr($_,$i+12,5));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1565 $size[$j] = (ord(substr($_,$i+17,1))
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1566 +ord(substr($_,$i+18,1))*0x100
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1567 +ord(substr($_,$i+19,1))*0x10000);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1568 print($title[$j]."\t") if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1569 print($attr[$j]."\t") if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1570 print($size[$j]."\n") if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1571 $j++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1572 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1573 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1574 foreach (split(/\032/,$data)) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1575 s/^PABAK.*\n//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1576 &z_decode;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1577 $self->{'-files'}->{$title[$i++]} = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1578 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1579 return @title;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1580 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1581
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1582 sub ztar {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1583 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1584 my $debug = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1585 my (@names,@size);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1586 my $ptr = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1587
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1588 $_ = substr($data,0,16);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1589 $ptr += 16;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1590 my $count = unpack("V",substr($_,4,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1591
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1592 print unpack("H*",substr($_,0,8)),"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1593 for ( my $i = 0; $i<$count ; $i++ ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1594 $_ = substr($data,$ptr,24); $ptr+=24;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1595 last if (substr($_,0,1) eq "\xff");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1596 my $name = substr($_,0,12); $name =~ s/\0.*//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1597 print "name: $name\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1598 push(@names,$name);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1599 my $size = unpack("V",substr($_,12,4));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1600 print "size: $size\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1601 push(@size,$size);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1602 print unpack("H*",substr($_,12)),"\n" if ($debug);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1603 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1604
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1605 for ( my $i = 0; $i<$count ; $i++ ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1606 $_ = substr($data,$ptr,$size[$i]); $ptr+=$size[$i];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1607 my $name = $names[$i];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1608 $self->{'-files'}->{$name} = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1609 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1610 return @names;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1611 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1612
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1613 sub backup_read {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1614 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1615
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1616 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1617 open(F,"<".$file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1618 local($/) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1619 undef $/;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1620 my $data = <F>;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1621 $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1622 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1623
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1624
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1625
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1626 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1627
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1628 package Calcon::iApp_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1629
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1630 # iCal/AddressBook からAppleScript 経由で読み込む。なので、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1631 # Mac::AppleScript が必要。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1632
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1633 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1634 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1635 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1636 use Mac::AppleScript qw(RunAppleScript);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1637 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1638 @ISA = ( 'Calcon::File_read' ) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1639
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1640 # We use Applescript, but it is very slow.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1641
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1642 my $tell;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1643
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1644 my %record_keys = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1645 "phone電話"=>"tel",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1646 "phoneファックス"=>"fax",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1647 "emailメール"=>"mail",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1648 "address住所"=>"address",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1649 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1650
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1651 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1652 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1653 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1654 $self->{'-labels'} = \%record_keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1655 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1656
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1657 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1658 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1659 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1660 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1661 my $record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1662 my $keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1663
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1664 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1665 $self->get_all_event() if (! $self->{'-address-only'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1666 $self->get_all_contact() if (! $self->{'-calendar-only'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1667 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1668
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1669 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1670
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1671 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1672 my ($self,$date)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1673 my @date = ($date =~ /(\d+)/g);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1674 if ($date =~ /PM$/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1675 if ($date[3]==12) { $date[3]=0;}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1676 $date[3]+=12;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1677 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1678 return $self->make_date("$date[0]/$date[1]/$date[2] $date[3]:$date[4]");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1679 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1680
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1681
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1682 sub property {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1683 my ($self,$contact,$id,$property,$record,$key) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1684 my $result;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1685 $result = RunAppleScript("${tell}${property} of ${contact} $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1686 # it looks like apple event returns some garbage
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1687 $result =~ s/^\"//; $result =~ s/\"$//; $result =~ s/\001.*$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1688 if (defined($record) && $result ne '') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1689 if ($key =~ /date/ || $key =~ /birth/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1690 $record->{$key} = $self->date($result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1691 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1692 $record->{$key} = nkf('-eS',$result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1693 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1694 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1695 nkf('-eS',$result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1696 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1697 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1698
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1699 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1700 my($self,$id,$vid,$phone,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1701
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1702 my ($street , $zip , $state , $country , $city);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1703 my $address = RunAppleScript("${tell}properties of ${phone} $vid of person $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1704
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1705 # {zip:missing value, label:"住所", state:missing value, street:"那覇市久茂地3-21-1", country code:missing value, country:missing value, id:"AFBD61FE-FB17-11D6-A84E-0003936AC938", city:missing value, class:address}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1706
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1707 $address =~ s/^\"//; $address =~ s/\"$//; $address =~ s/\001.*$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1708 $address = nkf('-eS',$address);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1709
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1710 # my ($street , $zip , $state , $country , $city);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1711 $address =~ /street:"([^"]*)"/ && ($street = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1712 $zip =~ /zip:"([^"]*)"/ && ($zip = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1713 $state =~ /state:"([^"]*)"/ && ($state = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1714 $city =~ /city:"([^"]*)"/ && ($city = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1715 $country =~ /country:"([^"]*)"/ && ($country = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1716
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1717 my ($label) = ($address =~ /label:"(.*?)"/);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1718 if (! defined($self->{'-labels'}->{$phone.$label})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1719 print "## $phone$label not defined\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1720 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1721 $record->{$self->{'-labels'}->{$phone.$label}} = "$state $city $street $country"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1722 if ($state||$city||$street||$country);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1723 if ($zip && $self->{'-labels'}->{$phone.$label} =~ /home/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1724 $record->{'home-zip'} = $zip;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1725 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1726 $record->{'zip'} = $zip if ($zip);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1727 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1728 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1729
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1730 sub value {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1731 my($self,$id,$vid,$phone,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1732 my $result = RunAppleScript("${tell}properties of ${phone} $vid of person $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1733 $result =~ s/^\"//; $result =~ s/\"$//; $result =~ s/\001.*$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1734 $result = nkf('-eS',$result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1735 my ($value,$label) = ($result =~ /value:"(.*?)".*label:"(.*?)"/);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1736 if (! defined($self->{'-labels'}->{$phone.$label})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1737 print "## $phone$label not defined\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1738 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1739 $record->{$self->{'-labels'}->{$phone.$label}} = $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1740 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1741
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1742
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1743 sub get_all_contact {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1744 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1745 $tell = "tell application \"Address Book\"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1746
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1747 my $count = RunAppleScript("${tell}count of person\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1748 foreach my $id ( 1..$count ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1749 $self->person($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1750 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1751 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1752
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1753 sub person {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1754 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1755 my $record = {};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1756
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1757 my $phone_count = RunAppleScript("${tell}count of phone of person $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1758 foreach my $phone_id ( 1..$phone_count ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1759 $self->value($id,$phone_id,'phone',$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1760 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1761
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1762 my $email_count = RunAppleScript("${tell}count of email of person $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1763 foreach my $email_id ( 1..$email_count ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1764 $self->value($id,$email_id,'email',$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1765 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1766
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1767 my $address_count = RunAppleScript("${tell}count of address of person $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1768 foreach my $address_id ( 1..$address_count ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1769 $self->address($id,$address_id,'address',$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1770 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1771
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1772 my $name = $self->property('person',$id,'last name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1773 my $first_name = $self->property('person',$id,'first name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1774 $record->{'name'} = ($name && $first_name)?"$name $first_name":
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1775 ($name)?$name:$first_name;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1776
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1777 my $name_p = $self->property('person',$id,'phonetic last name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1778 my $first_name_p = $self->property('person',$id,'phonetic first name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1779 $record->{'name-yomi'} = ($name_p && $first_name_p)?"$name_p $first_name_p":
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1780 ($name_p)?$name_p:$first_name_p;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1781
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1782 $self->property('person',$id,'job title',$record,'section');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1783 $self->property('person',$id,'title',$record,'title');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1784
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1785 # $self->property('person',$id,'birth date',$record,'birth');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1786 $self->property('person',$id,'organization',$record,'office');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1787 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1788 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1789
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1790 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1791 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1792 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1793
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1794
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1795 sub get_all_event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1796 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1797
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1798 $tell = "tell application \"iCal\"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1799 if ($self->{'-future-only'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1800 my $today = $self->today();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1801 my ($year,$mon,$mday,$hour,$min) = $today->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1802 my $count = RunAppleScript("${tell}uid of every event of last calendar whose start date > date \"$year/$mon/$mday\"\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1803 for my $id ($count =~ /("[^"]*")/g) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1804 $self->uid_event($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1805 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1806 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1807 my $count = RunAppleScript("${tell}count of event of last calendar\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1808 for(my $id=1; $id <= $count ;$id++) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1809 $self->event($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1810 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1811 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1812 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1813
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1814 sub uid_event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1815 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1816 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1817
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1818 # $self->property('event',$id,'all day event',$record,'all-day');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1819 $self->property('some event of last calendar whose uid is',$id,'start date',$record,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1820 $self->property('some event of last calendar whose uid is',$id,'end date',$record,'end-date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1821 $self->property('some event of last calendar whose uid is',$id,'summary',$record,'summary');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1822 $self->property('some event of last calendar whose uid is',$id,'description',$record,'memo');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1823 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1824 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1825
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1826 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1827 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1828 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1829
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1830 sub event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1831 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1832 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1833
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1834 # $self->property('event',$id,'all day event',$record,'all-day');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1835 $self->property('event',$id." of last calendar",'start date',$record,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1836 $self->property('event',$id." of last calendar",'end date',$record,'end-date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1837 $self->property('event',$id." of last calendar",'summary',$record,'summary');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1838 $self->property('event',$id." of last calendar",'description',$record,'memo');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1839 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1840 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1841
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1842 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1843 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1844 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1845
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1846
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1847
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1848 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1849
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1850 package Calcon::iApp_write ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1851
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1852 # AppleScript 経由で iCal/AddressBook に書き出す。この実装では、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1853 # Mac::AppleScript はいらない
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1854
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1855 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1856 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1857 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1858 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1859 use Carp;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1860
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1861 @ISA = ( 'Calcon::Writer' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1862
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1863 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1864 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1865
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1866 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1867 if (defined $self->{'-file'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1868 $self->{'-file-out'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1869 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1870 if (defined $self->{'-file-out'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1871 $self->{'-file'} = "script-out";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1872 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1873 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1874
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1875 $self->{'-fake-allday'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1876 $self->{'-time-for-allday'} = 12*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1877 $self->{'-add-time-for-allday'} = 2*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1878
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1879 $self->{'-check-script'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1880 $self->{'-check-group'} = 20;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1881 $self->{'-do-grouping'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1882
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1883 # | perl -pe 's/[\177-\377]/sprintf "\\%03o",ord($&)/eg;'
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1884 # | perl -pe 's/\\(\d\d\d)/sprintf "%c",oct($&)/eg;'
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1885
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1886 $self->{"-phone-labels"} = {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1887 "tel"=>"電話",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1888 "tel-home"=>"自宅電話",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1889 "mobile-tel"=>"携帯",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1890 "home-fax"=>"自宅ファックス",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1891 "fax"=>"ファックス",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1892
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1893 };
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1894 $self->{"-mail-labels"} = {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1895 "mail"=>"メール",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1896 "mail-to"=>"メール2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1897 "mail-address"=>"メール3",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1898
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1899 };
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1900 $self->{"-address-labels"} = {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1901 "address"=>"住所",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1902 "home-address"=>"自宅住所",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1903 };
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1904 $self->{"-zip-labels"} = {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1905 "zip"=>"郵便番号",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1906 "home-zip"=>"自宅郵便番号",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1907 };
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1908 $self->{'-groups'} = {};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1909 $self->{'-init-file'} = "s000000";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1910 $self->{'-check-script-count'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1911 $self->{'-script-name'} = $self->{'-init-file'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1912
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1913 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1914
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1915 sub start_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1916 my ($self,$type) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1917 undef $self->{'-application'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1918 if ($self->{'-file-out'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1919 mkdir $self->{'-file'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1920 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1921 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1922
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1923 sub end_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1924 my ($self,$type) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1925 $self->close();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1926 $self->{'-telling'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1927 if ($self->{'-file-out'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1928 $self->make_group();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1929 while(<script-out/*.script>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1930 my $out = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1931 $out =~ s/\.script$/.compile/;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1932 print STDERR "osacompile -o $out $_\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1933 # system "osacompile -o $out $_";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1934 # system "osascript $out";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1935 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1936 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1937 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1938
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1939 sub start_record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1940 my ($self,$type) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1941
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1942 if ($self->{'-check-script'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1943 my $i = $self->{'-check-script-count'}++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1944 if ($i % $self->{'-check-group'}==0) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1945 my $d = $self->{'-script-name'}++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1946 $self->close() if ( $self->{'-telling'} );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1947 $self->{'-telling'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1948 if ($self->{'-file-out'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1949 open OUT,"> script-out/$d.script" or croak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1950 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1951 print STDERR "doing $i\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1952 open OUT,"| osascript " or cloak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1953 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1954 select OUT;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1955 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1956 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1957 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1958
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1959 sub print {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1960 my ($self,@data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1961 foreach (@data) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1962 my $data = nkf('-s -Z',$_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1963 $data =~ s/\354\276/\203_/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1964 $data =~ s/\356\276/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1965 $data =~ s/\356\277/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1966 $data =~ s/([^\200-\377])\\/$1\200/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1967 # $data =~ s/\201/\/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1968 print $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1969 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1970 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1971
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1972 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1973 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1974 my ($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1975
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1976 $self->start_record('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1977
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1978 # check proper application
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1979 if (defined $record->{'name'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1980 $application = 'Address Book';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1981 $self->set_application($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1982 $self->address_book($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1983 $self->print("end tell\n") if (! $self->{'-check-script'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1984 } elsif (defined $record->{'date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1985 if ($record->{'date'}) { return if ($self->{'-future-only'} && ! $record->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1986 $application = 'iCal';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1987 $self->set_application($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1988 $self->ical($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1989 $self->print("end tell\n") if (! $self->{'-check-script'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1990 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1991 # nothing to do
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1992 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1993 $self->print("\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1994 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1995
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1996 sub close {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1997 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1998 my $application = $self->{'-application'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
1999 if ($self->{'-check-script'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2000 if ($application eq "Address Book") {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2001 $self->print("--close address\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2002 $self->print("--close group\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2003 # $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2004 $self->print("save addressbook\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2005 # $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2006 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2007 $self->print("quit saving yes\n")
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2008 if (0 && $self->{'-check-script-count'} % 5 == 4);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2009 $self->print("end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2010 undef $self->{'-application'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2011 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2012 $self->{'-telling'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2013 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2014
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2015 sub set_application {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2016 my ($self,$application) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2017
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2018 if ($application ne $self->{'-application'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2019 $self->print("end tell\n") if ($self->{'-telling'} );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2020 $self->{'-application'} = $application;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2021 $self->print("\ntell Application \"$application\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2022 $self->{'-telling'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2023 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2024 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2025
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2026 sub address_book {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2027 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2028 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2029 my %record = %$record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2030 my ($tab) = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2031
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2032
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2033 return if(! defined $record{'name'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2034 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2035
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2036 $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2037 if(defined $record{'office'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2038 my $group = $record{'office'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2039 $self->print($tab,"if not exists some group whose name is ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2040 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2041 $self->print("\"$group\" then \n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2042 $self->print($tab,"make new group with properties ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2043 $self->print("{name:\"$group\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2044 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2045 $self->print($tab,"end\n\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2046 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2047 $self->print($tab,"set aPerson to make new person with properties {");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2048 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2049
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2050 my @names;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2051 my $data = $record{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2052 @names = split(/ +/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2053
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2054 $self->print("last name: \"",shift(@names),"\",");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2055 $self->print("first name: \"@names\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2056
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2057 $self->print($tab,"tell aPerson\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2058 if(defined $record{'name-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2059 if($record{'name-yomi'} =~ /\201H/) { # ?
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2060 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2061 my $data = $record{'name-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2062 if ($data =~ /,/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2063 @names = split(/,/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2064 $data = $names[1].' '.$names[0];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2065 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2066 $data = nkf('-sIZ --hiragana',$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2067 $data = $self->check_2byte($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2068 @names = split(/ +/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2069 # put one space to prevent a problem of incomplete Shift JIS
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2070 $self->print($tab,"set phonetic last name to \"",shift(@names)," \"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2071 $self->print($tab,"set phonetic first name to \"@names \"\n")
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2072 if (@names);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2073 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2074 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2075
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2076 if(defined $record{'section'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2077 $self->print($tab,"set job title to \"$record{'section'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2078 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2079 if(defined $record{'title'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2080 $self->print($tab,"set title to \"$record{'title'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2081 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2082 foreach my $address ('','home-') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2083 my @data = ();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2084 if(defined $record{$address."address"}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2085 my $adr = nkf('-s -Z',$record{$address."address"});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2086 if($adr=~ s/\201\247\s*(\d+)//) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2087 $record{$address.'zip'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2088 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2089 if($record{$address.'zip'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2090 push(@data,",zip:\"$self->{'-zip-labels'}->{$record{$address.'zip'}}\"");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2091 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2092 $self->add_address($tab,$adr,$address."address",\@data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2093 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2094 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2095 foreach my $phone ('tel','tel-home','mobile-tel','home-fax','fax') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2096 if(defined $record{$phone}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2097 $self->add_phone($tab,$record{$phone},$phone);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2098 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2099 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2100 foreach my $mail ('mail','mail-to','mail-address') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2101 if(defined $record{$mail}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2102 $self->add_mail($tab,$record{$mail},$mail);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2103 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2104 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2105
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2106 if(defined $record{'birth'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2107 # it looks like Address Book's apple script has trouble with birth date
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2108 # $self->print($tab,"set birth date to ",$self->date($record{'birth'}),"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2109 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2110 if(defined $record{'office'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2111 $self->print($tab,"set organization to \"$record{'office'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2112 if ($self->{'-do-grouping'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2113 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2114 $self->print($tab,"end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2115 $self->print($tab,"try\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2116 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2117 $self->print($tab,"add aPerson to some group whose name is \"");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2118 $self->print($record{'office'},"\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2119 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2120 $self->print($tab,"end\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2121 $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2122 $self->{'-groups'}->{$record{'office'}} = 1;;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2123 return;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2124 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2125 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2126 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2127 $self->print($tab,"end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2128 $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2129 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2130
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2131 sub check_2byte {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2132 my ($self,$data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2133 my $new = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2134 my $tmp;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2135
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2136 while($data) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2137 if ($data =~ s/^([\000-\177]*)([\200-\377])//) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2138 $new .= $1; $tmp = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2139 if (! $data ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2140 } elsif ($data =~ /^[!-\376]/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2141 $data =~ s/^.//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2142 $new .= $tmp . $&
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2143 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2144 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2145 $new .= $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2146 last;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2147 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2148 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2149 $new;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2150 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2151
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2152
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2153 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2154 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2155 my ($year,$month,$day,$hour,$min) = $date->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2156
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2157 $date = "date \"${year}N $month $day j";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2158 if ($hour) { $date .= " $hour:$min";}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2159 $date .= "\"";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2160 return $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2161 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2162
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2163 sub add_address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2164 my ($self,$tab,$data,$label,$option) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2165
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2166 $label = nkf('-s',$self->{'-address-labels'}->{$label});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2167 $self->print($tab,"make new address at end of address of aPerson ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2168 $self->print("with properties {street:\"$data\", label:\"$label\"@$option}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2169 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2170
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2171 sub add_phone {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2172 my ($self,$tab,$data,$label) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2173
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2174 $label = nkf('-s',$self->{'-phone-labels'}->{$label});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2175 $self->print($tab,"make new phone at end of phone of aPerson with properties {value:\"$data\", label:\"$label\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2176 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2177
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2178 sub add_mail {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2179 my ($self,$tab,$data,$label) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2180
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2181 $label = nkf('-s',$self->{'-mail-labels'}->{$label});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2182 $self->print($tab,"make new email at end of email of aPerson with properties {value:\"$data\", label:\"$label\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2183 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2184
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2185 sub make_group {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2186 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2187 my (%groups) = %{$self->{'-groups'}};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2188 my $tab = ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2189
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2190 return if (! %groups);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2191 open OUT,"> script-out/group.script" or cloak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2192 select OUT;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2193 $self->print("tell application \"Address Book\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2194 foreach my $group (keys %groups) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2195 $self->print($tab,"if not exists some group whose name is ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2196 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2197 $self->print("\"$group\" then \n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2198 $self->print($tab,"make new group with properties ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2199 $self->print("{name:\"$group\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2200 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2201 $self->print($tab,"end\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2202 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2203 $self->print("close group\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2204 $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2205 $self->print("save addressbook\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2206 $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2207 $self->print("quit saving yes\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2208 $self->print("end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2209 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2210
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2211 sub ical {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2212 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2213 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2214 my %record = %$record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2215 my ($tab) = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2216
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2217 # $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2218 # $self->print($tab,"set aDay to ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2219 $self->print("make new event at end of event of last calendar with properties {");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2220 if ($record{'date'}->is_allday() && $self->{'-fake-allday'} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2221 $record{'date'} = $record{'date'}->add($self->{'-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2222 $record{'end-date'} =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2223 $record{'date'}->add($self->{'-add-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2224 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2225 $self->print($tab,"start date:",$self->date($record{'date'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2226 if (defined $record{'end-date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2227 if ($record{'date'}->value() == $record{'end-date'}->value()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2228 $record{'end-date'} =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2229 $record{'date'}->add($self->{'-add-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2230 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2231 $self->print($tab,",end date:",$self->date($record{'end-date'}))
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2232 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2233 $self->print($tab,",stamp date:",$self->date($record{'modify-date'}))
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2234 if (defined $record{'modify-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2235 if (defined($record{'memo'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2236 my ($summary,$memo);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2237 if (defined($record{'summary'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2238 $summary = $record{'summary'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2239 $memo = $record{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2240 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2241 $summary = $record{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2242 # if this contains double quote we have a problem. But
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2243 # I cannot fix it without decoding shift JIS and backslash/0x80
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2244 # conversion.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2245 $summary =~ s/"//g; # oops
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2246 $summary =~ s/[\r\n].*$//; $memo = $&;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2247 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2248
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2249 $self->print($tab,",summary:\"",$summary,"\"") if ($summary);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2250 $self->print($tab,",description:\"",$memo,"\"") if ($memo);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2251 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2252 $self->print($tab,"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2253
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2254 # $self->print($tab,"tell aDay\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2255 # $self->print($tab,"if start date = end date then\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2256 # $self->print($tab," set end date to start date + ".
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2257 # int($self->{'-add-time-for-allday'}/60)." * minutes\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2258 # $self->print($tab,"end if\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2259 # $self->print($tab,"end\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2260 # $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2261 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2262
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2263 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2264
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2265 package Calcon::Entourage_write ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2266
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2267 # Mac のEntrourage に AppleScript 経由で書き出す。ここでも Mac::AppleScript
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2268 # は使わない。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2269
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2270 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2271 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2272 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2273 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2274 @ISA = ( 'Calcon::iApp_write' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2275
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2276 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2277 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2278 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2279
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2280 $self->{'-fake-allday'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2281 $self->{'-time-for-allday'} = 12*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2282 $self->{'-add-time-for-allday'} = 2*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2283
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2284 $self->{'-check-script'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2285 $self->{'-check-group'} = 20;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2286
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2287 $self->{'-init-file'} = "s000000";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2288 $self->{'-check-script-count'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2289 $self->{'-japanese-format'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2290 $self->{'-script-name'} = $self->{'-init-file'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2291
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2292 $self->{"-phone-labels"} = {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2293 "tel"=>"business phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2294 "tel-home"=>"home phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2295 "mobile-tel"=>"mobile phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2296 "home-fax"=>"home fax phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2297 "fax"=>"business fax phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2298
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2299 };
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2300 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2301
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2302 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2303 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2304
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2305 $self->start_record('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2306
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2307 # check proper application
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2308 if (defined $record->{'name'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2309 my $application = 'Microsoft Entourage';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2310 $self->set_application($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2311 $self->contact($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2312 $self->print("end tell\n") if (! $self->{'-check-script'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2313 } elsif (defined $record->{'date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2314 if ($record->{'date'}) { return if ($self->{'-future-only'} && ! $record->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2315 my $application = 'Microsoft Entourage';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2316 $self->set_application($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2317 $self->event($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2318 $self->print("end tell\n") if (! $self->{'-check-script'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2319 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2320 # nothing to do
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2321 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2322 $self->print("\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2323 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2324
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2325 sub close {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2326 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2327 my $application = $self->{'-application'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2328 if ($self->{'-check-script'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2329 $self->print("quit saving yes\n")
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2330 if (0 && $self->{'-check-script-count'} % 5 == 4);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2331 $self->print("end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2332 undef $self->{'-application'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2333 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2334 $self->{'-telling'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2335 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2336
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2337 sub make_group {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2338 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2339
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2340 sub contact {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2341 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2342 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2343 my %record = %$record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2344 my ($tab) = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2345 my @names;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2346 my $data = $record{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2347 @names = split(/ +/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2348
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2349 $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2350 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2351
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2352
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2353 # $self->print("${tab}try\n${tab}set aPerson to some contact whose last name is \"$names[0]\" and first name is \"$names[1]\"\n${tab}on error\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2354
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2355 $self->print($tab,"set aPerson to make new contact with properties {");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2356
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2357 $tab .= ' ';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2358
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2359 $self->print($tab,"last name: \"",shift(@names),"\",");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2360 $self->print($tab,"first name: \"@names\"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2361 $tab =~ s/ //;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2362 # $self->print($tab,"end\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2363
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2364
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2365 $self->print($tab,"tell aPerson\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2366 if(defined $record{'name-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2367 if($record{'name-yomi'} =~ /\201H/) { # ?
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2368 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2369 my $data = $record{'name-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2370 if ($data =~ /,/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2371 @names = split(/,/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2372 $data = $names[1].' '.$names[0];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2373 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2374 $data = nkf('-sIZ --hiragana',$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2375 $data = $self->check_2byte($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2376 @names = split(/ +/,$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2377 # put one space to prevent a problem of incomplete Shift JIS
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2378 $self->print($tab,"set last name furigana to \"",shift(@names)," \"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2379 $self->print($tab,"set first name furigana to \"@names \"\n")
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2380 if (@names);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2381 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2382 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2383
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2384 $self->print($tab,"set japanese format to true\n") if ($self->{'-japanese-format'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2385 if(defined $record{'section'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2386 $self->print($tab,"set department to \"$record{'section'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2387 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2388 if(defined $record{'title'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2389 $self->print($tab,"set job title to \"$record{'title'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2390 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2391 if(defined $record{'address'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2392 $self->print($tab,"set business address to {",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2393 "zip:\"$record{'zip'}\",",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2394 "street address:\"$record{'address'}\"",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2395 "}\n"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2396 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2397 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2398 if(defined $record{'home-address'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2399 $self->print($tab,"set home address to {",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2400 "zip:\"$record{'home-zip'}\",",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2401 "street address:\"$record{'home-address'}\"",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2402 "}\n"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2403 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2404 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2405
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2406 foreach my $phone ('tel','tel-home','mobile-tel','home-fax','fax') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2407 if(defined $record{$phone}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2408 $self->print($tab,"set ",$self->{'-phone-labels'}->{$phone},
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2409 " to \"",$record{$phone},"\"\n"
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2410 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2411 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2412 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2413
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2414 # $self->print($tab,"delete every email address of aPerson\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2415 foreach my $mail ('mail','mail-to','mail-address') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2416 if(defined $record{$mail}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2417 foreach my $m (split(/,/,$record{$mail})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2418 $self->print($tab,"make new email address of aPerson with data \"$m\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2419 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2420 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2421 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2422
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2423 if(defined $record{'birth'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2424 $self->print($tab,"set birthday to \"",$self->birth_date($record{'birth'}),"\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2425 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2426 if(defined $record{'office'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2427 $self->print($tab,"set company to \"$record{'office'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2428 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2429 if(defined $record{'office-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2430 $self->print($tab,"set company furigana to \"$record{'office-yomi'}\"\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2431 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2432 $tab =~ s/ $//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2433 $self->print($tab,"end tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2434 $self->print("end transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2435 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2436
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2437 sub birth_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2438 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2439 my ($year,$month,$day,$hour,$min) = $date->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2440
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2441 if (!$year) { $year = '';} else { $year = "$year/"; }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2442 $date = "$year$month/$day";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2443 if ($hour) { $date .= " $hour:$min";}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2444 return $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2445 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2446
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2447
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2448 sub event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2449 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2450 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2451 my %record = %$record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2452 my ($tab) = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2453
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2454 # $self->print("with transaction\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2455 # $self->print($tab,"set aDay to ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2456 $self->print("make new event with properties {");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2457
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2458 # make new event with properties {subject:"", location:"", content:
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2459 # "", start time:date "2002N 11 13 j 0:00:00 PM", end time:date
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2460 # "2002N 11 13 j 0:30:00 PM", all day event:false, recurring:false,
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2461 # category:{}, links:{}, remind time:1440, recurrence:""}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2462
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2463 if ( $record{'date'}->is_allday()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2464 $self->print($tab,"all day event: true,");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2465 $self->print($tab,"start time:",$self->date($record{'date'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2466 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2467 $self->print($tab,"all day event: false,");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2468 $self->print($tab,"start time:",$self->date($record{'date'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2469 if (defined $record{'end-date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2470 $self->print($tab,",end time:",$self->date($record{'end-date'}))
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2471 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2472 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2473 # $self->print($tab,",stamp date:",$self->date($record{'modify-date'}))
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2474 # if (defined $record{'modify-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2475 if (defined($record{'memo'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2476 my ($summary,$memo);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2477 if (defined($record{'summary'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2478 $summary = $record{'summary'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2479 $memo = $record{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2480 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2481 $summary = $record{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2482 # if this contains double quote we have a problem. But
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2483 # I cannot fix it without decoding shift JIS and backslash/0x80
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2484 # conversion.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2485 $summary =~ s/"//g; # oops
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2486 $summary =~ s/[\r\n].*$//; $memo = $&;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2487 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2488
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2489 $self->print($tab,",subject:\"",$summary,"\"") if ($summary);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2490 $self->print($tab,",content:\"",$memo,"\"") if ($memo);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2491 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2492 $self->print($tab,"}\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2493
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2494 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2495
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2496
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2497 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2498
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2499 package Calcon::Sla300_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2500
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2501 # Linux Zaurus SLA300 の XML形式
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2502 # でもなんか新しくなって、これではなくなったらしい。しくしく。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2503
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2504 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2505 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2506 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2507 @ISA = ( 'Calcon::Reader') ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2508
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2509 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2510 use Time::Local;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2511
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2512 my %keys = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2513 'birthday'=>'birth',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2514 'businessfax'=>'fax',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2515 'businessmobile'=>'keitai',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2516 'businessphone'=>'tel',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2517 'businessstate'=>'state',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2518 'businessstreet'=>'address',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2519 'businesszip'=>'zip',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2520 'categories'=>'categories',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2521 'company'=>'office',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2522 'companypronunciation'=>'office-yomi',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2523 'department'=>'section',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2524 'description'=>'memo',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2525 'emails'=>'email',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2526 'end'=>'end-date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2527 'firstname'=>'first-name',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2528 'firstnamepronunciation'=>'first-name-yomi',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2529 'homefax'=>'home-fax',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2530 'homemobile'=>'home-keitai',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2531 'homephone'=>'home-tel',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2532 'homestate'=>'home_state',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2533 'homestreet'=>'home-address',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2534 'homezip'=>'home-zip',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2535 'jobtitle'=>'title',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2536 'lastname'=>'name',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2537 'lastnamepronunciation'=>'name-yomi',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2538 'notes'=>'memo',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2539 'rid'=>'rid',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2540 'rinfo'=>'rinfo',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2541 'start'=>'date',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2542 'uid'=>'uid',
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2543 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2544
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2545 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2546 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2547 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2548 $self->{'-keywords'} = \%keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2549 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2550
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2551 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2552 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2553 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2554
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2555 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2556 open(F,"<".$file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2557
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2558 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2559
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2560 local($/) = ">";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2561 while(<F>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2562 $self->xml_decode($_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2563 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2564 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2565 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2566
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2567 sub xml_decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2568 my($self,$xml) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2569 my($out) = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2570 my($convert) = $self->{'-keywords'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2571
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2572 $xml =~ s/^\s*<([^ ]*) // or return;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2573 my $type = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2574 $xml =~ s=/>\s*$== or return;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2575 $type =~ tr/A-Z/a-z/;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2576 return if ($type ne 'contact' && $type ne 'event');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2577 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2578 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2579 $_ = $xml;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2580 while($_) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2581 if (s/^\s*([^\s]*)\s*\=\s*\"(.*?)\"\s*//) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2582 my $key = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2583 my $data = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2584 $key =~ tr/A-Z/a-z/;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2585 $key = $convert->{$key} if ( $convert->{$key} );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2586 if ($key =~ /birth$/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2587 my (@data) = ($data =~ /(\d+)/g);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2588 $data = $self->make_date(join("/",@data));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2589 } elsif ($key =~ /date$/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2590 $data = $self->make_date_unix($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2591 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2592 $data = nkf('-eZ -W',$data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2593 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2594 $record->{$key} = $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2595 push(@$keys,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2596 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2597 s/^[^\s]*\s*//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2598 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2599 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2600 if ($record->{'type'} =~ /Allday/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2601 undef $record->{'end-date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2602 @$keys = grep(!/^end-date/,@$keys);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2603 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2604 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2605 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2606
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2607
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2608 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2609
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2610 package Calcon::Sla300_write;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2611
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2612 # Linux Zaurus SLA300 の XML形式
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2613 # でもなんか新しくなって、これではなくなったらしい。しくしく。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2614
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2615 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2616 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2617 use Time::Local;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2618 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2619 use Carp;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2620
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2621 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2622 @ISA = ('Calcon::Buffered_Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2623
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2624 # Mac OS X 10.2 's Address Book requires utf-16
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2625 # | nkf -Z -e|iconv -c -f EUC-JP -t UTF-16
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2626 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2627
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2628 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2629 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2630 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2631 $self->{'-fake-allday'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2632 $self->{'-time-for-allday'} = 12*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2633 $self->{'-add-time-for-allday'} = 2*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2634 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2635
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2636 sub write_datebook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2637 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2638 my $count = $self->{'-date-max'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2639
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2640 # open(CAL,"|nkf --utf8 >datebook.xml") or croak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2641 open(CAL,">datebook.xml") or croak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2642 $self->print ( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2643 $self->print ( "<!DOCTYPE DATEBOOK><DATEBOOK>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2644 $self->print ( "<RIDMax>$count</RIDMax>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2645 my $uid = -1032244274;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2646 my $rid = 11;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2647
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2648 for my $dates ( @{$self->{'-date-records'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2649
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2650 my $end_date = $dates->{'end-date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2651 if (! $end_date) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2652 if ($dates->{'date'}->is_allday()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2653 if ($self->{'-fake-allday'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2654 $dates->{'date'}=
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2655 $dates->{'date'}->add($self->{'-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2656 $dates->{'end-date'} =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2657 $dates->{'date'}->add($self->{'-add-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2658 $dates->{'date'} = $self->unix_time($dates->{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2659 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2660 $end_date = $dates->{'date'}->add(23*3600+59*60);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2661 $dates->{'type'} = "AllDay";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2662 $dates->{'date'} = $self->unix_time($dates->{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2663 $dates->{'end-date'} = $self->unix_time($end_date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2664 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2665 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2666 $end_date =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2667 $dates->{'date'}->add($self->{'-add-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2668 $dates->{'date'} = $self->unix_time($dates->{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2669 $dates->{'end-date'} = $self->unix_time($end_date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2670 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2671 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2672 $dates->{'date'} = $self->unix_time($dates->{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2673 $dates->{'end-date'} = $self->unix_time($dates->{'end-date'})
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2674 }
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
2675 # warning killer
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
2676 if (! defined($dates->{'summary'})) { $dates->{'summary'} = '';};
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
2677 if (! defined($dates->{'memo'})) { $dates->{'memo'} = '';};
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2678 $dates->{'memo'} = nkf('-w -Z3',$dates->{'summary'}.$dates->{'memo'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2679
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2680 my $memo = $dates->{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2681 my $start_time = $dates->{'date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2682 my $end_time = $dates->{'end-date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2683 $self->print("<event description=\"$memo\" categories=\"\" uid=\"$uid\" rid=\"$rid\" rinfo=\"1\" start=\"$start_time\"");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2684 if ($dates->{'end-date'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2685 $self->print(" end=\"$end_time\"");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2686 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2687 if ($dates->{'type'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2688 $self->print(" type=\"$dates->{'type'}\"");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2689 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2690 $self->print("/>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2691 $uid++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2692 $rid++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2693 $count--;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2694 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2695 $self->print("<events>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2696 $self->print("</events>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2697 $self->print("</DATEBOOK>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2698 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2699
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2700 sub write_addressbook {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2701 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2702 my $count = $self->{'-adr-max'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2703
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2704 open(CAL,">addressbook.xml") or croak($!);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2705
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2706 $self->print ( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2707 $self->print ( "<!DOCTYPE Addressbook ><AddressBook>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2708 $self->print ( "<RIDMax>$count</RIDMax>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2709 $self->print ( "<Groups></Groups>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2710 for my $adr ( @{$self->{'-address-records'}} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2711
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2712 if (defined $adr->{'birth'}){
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
2713 $adr->{'birth'} = $self->birth_date($adr->{'birth'}) ;
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2714 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2715
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2716 my ($address) = $adr->{'address'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2717 my ($birth) = $adr->{'birth'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2718 my ($company) = $adr->{'office'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2719 my ($email) = $adr->{'email'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2720 my ($fax) = $adr->{'fax'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2721 my ($first_name) = $adr->{'first-name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2722 my ($first_name_yomi) = $adr->{'first-name-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2723 my ($home_address) = $adr->{'home-address'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2724 my ($home_fax) = $adr->{'home-fax'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2725 my ($home_keitai) = $adr->{'home-keitai'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2726 my ($home_state) = $adr->{'home_state'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2727 my ($home_tel) = $adr->{'home-tel'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2728 my ($home_zip) = $adr->{'home-zip'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2729 my ($keitai) = $adr->{'keitai'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2730 my ($last_name) = $adr->{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2731 my ($memo) = $adr->{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2732 my ($name_yomi) = $adr->{'name-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2733 my ($name) = $adr->{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2734 my ($office_yomi) = $adr->{'office-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2735 my ($section) = $adr->{'section'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2736 my ($state) = $adr->{'state'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2737 my ($tel) = $adr->{'tel'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2738 my ($title) = $adr->{'title'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2739 my ($zip) = $adr->{'zip'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2740
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2741 $self->print ( "<Contact ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2742 $self->print ( "LastName=\"$last_name\" " ) if ($last_name);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2743 $self->print ( "FirstName=\"$first_name\" " ) if ($first_name);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2744 $self->print ( "JobTitle=\"$title\" " ) if ($title);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2745 $self->print ( "Department=\"$section\" " ) if ($section);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2746 $self->print ( "Company=\"$company\" " ) if ($company);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2747 $self->print ( "Birthday=\"$birth\" " ) if ($birth);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2748 $self->print ( "BusinessPhone=\"$tel\" " ) if ($tel);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2749 $self->print ( "BusinessFax=\"$fax\" " ) if ($fax);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2750 $self->print ( "BusinessStreet=\"$address\" " ) if ($address);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2751 $self->print ( "BusinessState=\"$state\" " ) if ($state);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2752 $self->print ( "BusinessZip=\"$zip\" " ) if ($zip);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2753 $self->print ( "BusinessMobile=\"$keitai\" " ) if ($keitai);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2754 $self->print ( "HomePhone=\"$home_tel\" " ) if ($home_tel);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2755 $self->print ( "HomeMobile=\"$home_keitai\" " ) if ($home_keitai);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2756 $self->print ( "HomeFax=\"$home_fax\" " ) if ($home_fax);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2757 $self->print ( "HomeStreet=\"$home_address\" " ) if ($home_address);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2758 $self->print ( "HomeState=\"$home_state\" " ) if ($home_state);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2759 $self->print ( "HomeZip=\"$home_zip\" " ) if ($home_zip);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2760 $self->print ( "Emails=\"$email\" " ) if ($email);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2761 $self->print ( "Notes=\"$memo\" " ) if ($memo);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2762 $self->print ( "rid=\"$count\" ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2763 $self->print ( "rinfo=\"1\" ");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2764 $self->print ( "LastNamePronunciation=\"$name_yomi\" " ) if ($name_yomi);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2765 $self->print ( "FirstNamePronunciation=\"$first_name_yomi\" " ) if ($first_name_yomi);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2766 $self->print ( "CompanyPronunciation=\"$office_yomi\" " ) if ($office_yomi);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2767 $self->print ( "/>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2768
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2769 $count--;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2770 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2771 $self->print ( "</Contact>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2772 $self->print ( "</AddressBook>\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2773 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2774
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2775 sub birth_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2776 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2777 my ($year,$month,$day,$hour,$min) = $date->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2778
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2779 if ($date->is_day()) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2780 return "$month/$day";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2781 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2782 return "$year/$month/$day";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2783 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2784
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2785 sub print {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2786 my ($self,@data) = @_;
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
2787 print CAL nkf("--utf8 -Z3",@data);
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2788 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2789
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2790 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2791
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2792 package Calcon::Vcard_write;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2793 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2794 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2795 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2796
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2797 # VCARD 形式
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2798
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2799 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2800 @ISA = ( 'Calcon::Writer' );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2801
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2802 # Mac OS X 10.2 's Address Book requires utf-16
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2803 # | nkf -Z -e|iconv -c -f EUC-JP -t UTF-16
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2804 #
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2805
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2806 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2807 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2808 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2809 $self->{'-fake-allday'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2810 $self->{'-time-for-allday'} = 12*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2811 $self->{'-add-time-for-allday'} = 2*3600;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2812 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2813
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2814 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2815 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2816 my ($application);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2817
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2818 if(defined($record->{'name'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2819 $self->vcard($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2820 } elsif(defined($record->{'date'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2821 if ($record->{'date'}) { return if ($self->{'-future-only'} && ! $record->{'date'}->future()); }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2822 $self->vcal($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2823 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2824 # I don't know.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2825 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2826 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2827
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2828 sub end_file {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2829 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2830 if ($self->{'-vcal-opening'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2831 print "END:VCALENDAR\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2832 $self->{'-vcal-opening'} = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2833 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2834 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2835
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2836 sub print {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2837 my ($self,@data) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2838 foreach (@data) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2839 my $data = nkf('-s -Z',$_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2840 $data =~ s/\354\276/\203_/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2841 $data =~ s/\356\276/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2842 $data =~ s/\356\277/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2843 $data =~ s/([^\200-\377])\\/$1\200/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2844 # $data =~ s/\201/\/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2845 $data = nkf('-w',$_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2846 $data =~ s/\000/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2847 print $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2848 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2849 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2850
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2851 sub vcal {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2852 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2853 my (%record) = %{$record};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2854 my $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2855
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2856 my $timezone = "Asia/Tokyo";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2857
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2858 if (! $self->{'-vcal-opening'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2859 print(<<"EOFEOF");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2860 BEGIN:VCALENDAR
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2861 CALSCALE:GREGORIAN
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2862 X-WR-TIMEZONE;VALUE=TEXT:Asia/Tokyo
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2863 METHOD:PUBLISH
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2864 VERSION:2.0
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2865 EOFEOF
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2866 $self->{'-vcal-opening'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2867 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2868
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2869 if ($record{'date'}->is_allday() && $self->{'-fake-allday'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2870 $record{'date'}=$record{'date'}->add($self->{'-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2871 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2872 my $dtstart = "\nDTSTART;TZID=$timezone:".$self->date($record{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2873 my ($dtend,$dtstamp);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2874
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2875 if (! defined( $record{'end-date'}) || $record{'end-date'} == $record{'date'} ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2876 # $dtend = "\nDURATION:PT2H"; this is useless for iCal
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2877 $record{'end-date'} = $record{'date'}->add(
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2878 $self->{'-add-time-for-allday'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2879 $dtend = "\nDTEND;TZID=$timezone:".$self->date($record{'end-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2880 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2881 $dtend = "\nDTEND;TZID=$timezone:".$self->date($record{'end-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2882 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2883 if (defined( $record{'modify-date'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2884 $dtstamp = "\nDTSTAMP;TZID=$timezone:".$self->date($record{'modify-date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2885 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2886
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2887 my $summary;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2888 my $description;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2889 if (defined($record{'memo'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2890 $summary = $record{'memo'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2891 $summary =~ s/[\r\n].*$//; $description = $&;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2892
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2893 $description =~ s/[\n\r]/\n /mg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2894 $description =~ s/\s*$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2895 $summary =~ s/[\n\r]/ /mg;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2896 $summary =~ s/\s*$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2897 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2898
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2899 if ($description eq $summary) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2900 $description = "";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2901 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2902 if ($description) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2903 $description = "\nDESCRIPTION: $description";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2904 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2905 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2906 return if (! $description && ! $summary );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2907
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2908 # DURATION:PT1H = "DURATION:PT1H";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2909 # X-WR-CALNAME;VALUE=TEXT:ホーム
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2910 # X-WR-TIMEZONE;VALUE=TEXT:Asia/Tokyo
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2911 # SEQUENCE:$i
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2912
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2913 $self->print(<<"EOFEOF");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2914 BEGIN:VEVENT
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2915 SUMMARY:$summary$dtstart$dtend$description$dtstamp
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2916 END:VEVENT
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2917 EOFEOF
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2918 # print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2919 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2920
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2921 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2922 my ($self,$date) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2923 my ($year,$month,$day,$hour,$min,$sec) = $self->localtime($date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2924
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2925 $date = sprintf("%04d%02d%02dT%02d%02d%02d",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2926 $year,$month,$day,$hour,$min,$sec);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2927 return $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2928 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2929
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2930 sub vcard {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2931 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2932 my (%record) = %{$record};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2933 my $data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2934
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2935 if(defined($record{'office'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2936 $record{'office'} = 'etc' if(! $record{'office'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2937 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2938 if(defined($record{'name-yomi'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2939 $record{'name-yomi'} =~ s/^ *//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2940 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2941 if(defined($record{'office-yomi'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2942 $record{'office-yomi'} =~ s/^ *//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2943 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2944 $record{'secret'} = ' ' if(! $record{'secret'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2945 $record{'alarm'} = ' ' if(! $record{'alarm'}) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2946 $record{'class'} = ' ' if(! defined($record{'class'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2947 $record{'print-format'} = '2220' if(! defined($record{'print-format'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2948 $record{'mark'} = '00' if(! defined($record{'mark'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2949 $record{'priority'} = '01' if(! defined($record{'priority'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2950 if ($record{'time'} =~ /(.*)-(.*)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2951 $record{'time'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2952 $record{'end-time'} = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2953 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2954
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2955 print "begin:vcard\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2956 print "version:3.0\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2957 if(defined $record{'name'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2958 $data = $record{'name'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2959 print "FN:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2960 if(0 && defined $record{'name-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2961 $data = join(";",split(/ /,$record{'name-yomi'}));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2962 print "N:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2963 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2964 $data = join(";",split(/ /,$data));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2965 print "N:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2966 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2967 if(defined $record{'name-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2968 my ($last , $first , $last_yomi , $first_yomi );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2969 $last = $first = $last_yomi = $first_yomi = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2970 ($last,$first) = split(/ /,$record{'name'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2971 ($last_yomi,$first_yomi) = split(/ /,$record{'name-yomi'}),
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2972 print YOMI $last,"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2973 print YOMI $last_yomi,"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2974 print YOMI $first,"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2975 print YOMI $first_yomi,"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2976 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2977
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2978 # print "fn:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2979 # if(defined $record{'office'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2980 # $data = $data.";".$record{'office'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2981 # }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2982 # print "n:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2983 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2984 if(defined $record{'office'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2985 $data = "$record{'office'}";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2986 if(defined $record{'section'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2987 $data .= ";".$record{'section'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2988 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2989 print "org:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2990 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2991 if(defined $record{'title'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2992 $data = "$record{'title'}";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2993 print "title:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2994 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2995 if(defined $record{'address'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2996 my ($adr1 , $adr2 , $adr_state , $adr_zip , $adr_country );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2997 $adr1 = $adr2 = $adr_state = $adr_zip = $adr_country = '';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2998 $data = $record{'address'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
2999 $adr1 = $record{'address'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3000 # ADD:番地;;町村;沖縄;903-0213;日本
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3001 if(defined $record{'zip'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3002 $adr_zip = $record{'zip'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3003 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3004 # print "adr;type=work;type=pref:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3005 print "adr;type=work;type=pref:;;$adr1;$adr2;$adr_state;$adr_zip;$adr_country\n" if ($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3006 print "label;type=work;type=pref:$adr_zip $data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3007 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3008 if(defined $record{'tel'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3009 $data = $record{'tel'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3010 print "tel;type=work:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3011 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3012 if(defined $record{'tel2'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3013 $data = $record{'tel2'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3014 print "tel;type=cell:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3015 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3016 if(defined $record{'fax'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3017 $data = $record{'fax'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3018 print "tel;type=fax:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3019 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3020 if(defined $record{'mail'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3021 $data = $record{'mail'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3022 print "email;internet:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3023 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3024 if(defined $record{'birth'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3025 $data = $record{'birth'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3026 print "bday:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3027 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3028 if(defined $record{'name-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3029 $data = $record{'name-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3030 print "x-custom1:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3031 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3032 if(defined $record{'office-yomi'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3033 $data = $record{'office-yomi'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3034 print "x-custom2:$data\n" if($data);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3035 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3036 print "end:vcard\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3037 print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3038 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3039
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3040 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3041
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3042 package Calcon::File_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3043 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3044 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3045 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3046 @ISA = ( 'Calcon::Reader') ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3047
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3048 # File 形式の読み込み。かなりいいかげんなものでも読み込むが...
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3049
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3050 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3051
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3052 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3053 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3054 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3055 $self->{'-email-extract'} = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3056 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3057
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3058 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3059 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3060 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3061
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3062 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3063 open(F,"<".$file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3064
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3065 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3066
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3067 local($/) = "\n\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3068 while(<F>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3069 $self->buffer_decode($_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3070 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3071 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3072 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3073
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3074 # いいかげんなものでも読み込むためのルーチン
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3075
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3076 sub buffer_decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3077 my ($self,$buf,%initial) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3078 my @data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3079 my $key;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3080 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3081 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3082 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3083
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3084 # $_ =~ s/\n\s+/ /g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3085 # s/\n[ \t]/\037/g;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3086
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3087 $buf =~ s/^\s*//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3088 @data = split(/\n/,$buf);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3089 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3090 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3091
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3092 foreach my $key (keys %initial) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3093 $record->{$key} = $initial{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3094 push(@$keys,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3095 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3096 foreach $_ (@data) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3097 if (s/^([A-Za-z][-A-Za-z0-9_]*):\s*//) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3098 $key = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3099 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3100 $key = 'memo';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3101 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3102 if ($key eq 'Subject') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3103 $key = 'memo';
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3104 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3105 s/^(\201\100)*//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3106 $_ = nkf('-sZ',$_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3107 if($key eq 'time' || $key eq 'end-time') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3108 $record->{$key} = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3109 next;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3110 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3111 if(!($key eq 'date' || $key eq 'end-date')) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3112 my $save = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3113 my $savekey = $key;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3114
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3115 my $stime;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3116 my $etime;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3117 # use extra . to avoid regex bug
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3118 if (/(\d+:\d+).*[-~].*?(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3119 $stime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3120 $etime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3121 # print "*0** $stime $etime\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3122 } elsif (/(\d+:\d+).*\201\140.*?(\d+:\d+)/) { # 〜
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3123 $stime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3124 $etime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3125 # print "*1** $stime $etime\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3126 } elsif (/(\d+:\d+).*\201\250.*?(\d+:\d+)/) { # →
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3127 $stime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3128 $etime = $2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3129 # print "*2** $stime $etime\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3130 } elsif (/(\d+:\d+)/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3131 $stime = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3132 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3133 if ($stime) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3134 my $date = $record->{'date'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3135 if ($date) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3136 if ($record->{'memo'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3137
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3138 $self->date_normalize($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3139 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3140
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3141 $record = $self->make_record; $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3142 foreach my $key (keys %initial) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3143 $record->{$key} = $initial{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3144 push(@$keys,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3145 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3146 $record->{'date'} = $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3147 push(@$keys,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3148 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3149 if (! $record->{'time'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3150 $record->{'time'} = $stime;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3151 push(@$keys,'time');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3152 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3153 if (! $record->{'end-time'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3154 $record->{'end-time'} = $etime;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3155 push(@$keys,'end-time');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3156 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3157 $_ = $save;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3158 $key = $savekey;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3159 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3160 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3161 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3162 # don't append time field
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3163 push(@$keys,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3164 $record->{$key} = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3165 next;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3166 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3167 if ($self->{'-email-extract'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3168 if(s/[-a-zA-Z0-9.]+@[-a-zA-Z0-9.]+//) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3169 if (defined($record->{'mail'})) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3170 $record->{'mail'} .= ",".$&;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3171 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3172 $record->{'mail'} = $&;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3173 push(@$keys,'mail');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3174 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3175 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3176 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3177 next if (! $_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3178 if(defined $record->{$key}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3179 $record->{$key} .= "\n" . $_; # append for duplicated field
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3180 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3181 push(@$keys,$key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3182 $record->{$key} = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3183 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3184 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3185 $self->date_normalize($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3186 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3187 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3188
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3189 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3190
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3191 package Calcon::Xcalendar_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3192
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3193 # XCalendar 形式の読み込み。かなりいいかげんなものでも読み込むが...
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3194
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3195 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3196 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3197 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3198 use Time::Local;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3199 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3200
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3201 @ISA = ( 'Calcon::File_read' ) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3202
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3203 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3204 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3205 my @data;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3206 my $key;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3207 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3208 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3209 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3210
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3211 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3212 my $calendar = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3213
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3214 # my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3215 my $found = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3216 my $today = time;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3217 my $daytime = 60*60*24*2;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3218
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3219 my $all = 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3220 my $tomorrow = $self->{'-tomorrow'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3221
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3222 my %xcal;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3223
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3224 while(<$calendar/xc*>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3225 my $file = $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3226 my $date = $self->make_xcalendar_date($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3227 next if (! defined $date->unix_time);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3228 next if ($self->{'-tomorrow'} && ! $date->tomorrow());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3229 next if ($self->{'-future-only'} && ! $date->future());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3230 $xcal{$date->unix_time()} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3231 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3232
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3233 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3234
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3235 $i= $all ? -1 : 4;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3236 foreach my $key ( sort {$a <=> $b;} keys(%xcal) ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3237 $found = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3238 open(XCAL,$xcal{$key}) || next;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3239 my ($sec,$min,$hour,$day,$month,$year,$wday,$date_,$isdst) =
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3240 localtime($key);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3241 my $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3242 $date = ($year+1900)."/".($month+1)."/$day";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3243 local($/) = "\n\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3244 while(<XCAL>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3245 $self->buffer_decode($_,'date'=>$date);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3246 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3247 last if($i-- == 0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3248 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3249 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3250 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3251
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3252 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3253
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3254 # 別に Xcalendar class のメソッドでもいいんだけど。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3255
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3256 package Calcon::Date ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3257
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3258 use vars qw(%monthname);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3259
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3260 sub make_xcalendar_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3261 my ($self,$name) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3262
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3263 my $date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3264 if ($name =~ m^xc([0-9]+)([A-Za-z]+)([0-9]+)$^) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3265 my $day = $1 ;my $month = $monthname{$2}; my $year = $3;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3266 # if($year > 1900) { $year -= 1900; }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3267 $date = &timelocal(0,0,0,$day,$month,$year,0,0,0);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3268 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3269 bless \$date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3270 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3271
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3272 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3273
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3274 package Calcon::Basic ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3275
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3276 sub make_xcalendar_date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3277 my ($self,$name) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3278 $date_class->make_xcalendar_date($name);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3279 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3280
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3281 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3282
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3283 package Calcon::Xcalendar_write ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3284
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3285 # Xcalendar 形式の書き出し
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3286
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3287 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3288 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3289 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3290 @ISA = ('Calcon::Writer');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3291 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3292
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3293 sub initialize {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3294 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3295 if (defined $self->{'-file'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3296 $self->{'-directory'} = defined $self->{'-file'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3297 undef $self->{'-file'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3298 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3299 $self->{'-directory'} = "$ENV{'HOME'}/Calendar.new";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3300 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3301 $self->SUPER::initialize();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3302 mkdir $self->{'-directory'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3303 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3304
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3305 sub record {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3306 my ($self,$keys,$record) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3307 my @keys = @$keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3308 my %record = %$record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3309 # should be override
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3310 return if (! $record->{'date'} );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3311 return if ($self->{'-future-only'} && ! $record->{'date'}->future());
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3312 $self->open($record->{'date'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3313 foreach my $key (@keys) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3314 my $value = $record{$key};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3315 if (ref $value) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3316 $value = $value->value();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3317 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3318 print nkf('-e',"$key: $value\n") if ($value);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3319 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3320 print "\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3321 $self->close();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3322 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3323
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3324 sub open {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3325 my ($self,$date) = @_;
4
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
3326 my $name = $date->xcalendar_file_name;
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
3327 if (defined($self->{'-directory'})) {
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
3328 $name = $self->{'-directory'}."/".$name;
d3e2e1d1a16c fix various warinings ( mostly uninitialized value)
kono
parents: 3
diff changeset
3329 }
1
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3330 open(OUT,">>".$name);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3331 select OUT;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3332 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3333
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3334 sub close {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3335 close OUT;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3336 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3337
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3338 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3339
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3340 package Calcon::Date;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3341
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3342 sub xcalendar_file_name {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3343 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3344 my ($year,$month,$day,$hour,$min) = $self->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3345 sprintf("xc%02d%s%04d",$day,$monthname[$month-1],$year);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3346 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3347
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3348 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3349
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3350 package Calcon::Entourage_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3351
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3352 # Mac のEntourage から AppleScript 経由で読み込む
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3353 # ファイルからでも読み込み可能
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3354 # Zaurus のCSVも読めた方が良いね
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3355 # 日本語専用
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3356
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3357 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3358 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3359 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3360 use Mac::AppleScript qw(RunAppleScript);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3361 use NKF;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3362 use Carp;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3363 @ISA = ( 'Calcon::File_read' ) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3364
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3365 # We use Applescript, but it is very slow.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3366 # get_all_event is slightly faster.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3367 # To convert contact, it is better to use export address in Entourage Menu.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3368 # If it has a file name other than '/dev/stdin', it assumes export file.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3369
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3370 my %item_keys = (
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3371 "名"=>"first name",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3372 "姓"=>"last name",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3373 "敬称"=>"sir name",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3374 "Suffix"=>"suffix",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3375 "ニックネーム"=>"nick name",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3376 "会社名"=>"company",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3377 "役職"=>"title",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3378 "部署"=>"department",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3379 "番地 (勤務先)"=>"business address street address",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3380 "市区町村 (勤務先)"=>"business address city",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3381 "都道府県 (勤務先)"=>"business address state",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3382 "郵便番号 (勤務先)"=>"business address zip",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3383 "国/地域 (勤務先)"=>"business address country",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3384 "Web ページ (勤務先)"=>"www",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3385 "番地 (自宅)"=>"home address street address",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3386 "市区町村 (自宅)"=>"home address city",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3387 "都道府県 (自宅)"=>"home address state",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3388 "郵便番号 (自宅)"=>"home address zip",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3389 "国/地域 (自宅)"=>"home address country",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3390 "Web ページ (自宅)"=>"home www",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3391 "電話 1 (自宅)"=>"home phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3392 "電話 2 (自宅)"=>"home tel2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3393 "FAX (自宅)"=>"home fax number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3394 "電話 1 (勤務先)"=>"business phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3395 "電話 2 (勤務先)"=>"tel2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3396 "FAX (勤務先)"=>"business fax number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3397 "ポケットベル"=>"pager",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3398 "携帯電話"=>"mobile phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3399 "電話 (メイン)"=>"main phone number",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3400 "電話 (アシスタント)"=>"sub tel",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3401 "電話 (ユーザー設定 1)"=>"tel 1",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3402 "電話 (ユーザー設定 2)"=>"tel 2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3403 "電話 (ユーザー設定 3)"=>"tel 3",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3404 "電話 (ユーザー設定 4)"=>"tel 4",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3405 "電子メール アドレス 1"=>"mail-address",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3406 "電子メール アドレス 2"=>"business mail",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3407 "電子メール アドレス 3"=>"mail",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3408 "電子メール アドレス 4"=>"mail-to",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3409 "電子メール アドレス 5"=>"mail 5",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3410 "電子メール アドレス 6"=>"mail 6",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3411 "電子メール アドレス 7"=>"mail 7",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3412 "電子メール アドレス 8"=>"mail 8",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3413 "電子メール アドレス 9"=>"mail 9",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3414 "電子メール アドレス 10"=>"mail 10",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3415 "電子メール アドレス 11"=>"mail 11",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3416 "電子メール アドレス 12"=>"mail 12",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3417 "電子メール アドレス 13"=>"mail 13",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3418 "メモ 1"=>"memo",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3419 "メモ 2"=>"memo 2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3420 "メモ 3"=>"memo 3",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3421 "メモ 4"=>"memo 4",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3422 "メモ 5"=>"memo 5",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3423 "メモ 6"=>"memo 6",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3424 "メモ 7"=>"memo 7",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3425 "メモ 8"=>"memo 8",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3426 "日付 1 :"=>"date",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3427 "日付 2 :"=>"date 2",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3428 "配偶者"=>"spouse",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3429 "誕生日"=>"birthday",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3430 "記念日"=>"aniversary",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3431 "備考"=>"note",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3432 "年齢"=>"age",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3433 "星座"=>"astology sign",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3434 "血液型"=>"blood type",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3435 "会社名 (ふりがな)"=>"company furigana",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3436 "名 (ふりがな)"=>"first name furigana",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3437 "姓 (ふりがな)"=>"last name furigana",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3438 "配偶者名 (ふりがな)"=>"spouse furigana",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3439 "趣味"=>"play",
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3440 );
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3441
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3442 $| = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3443 # my $tell = "tell application \"Microsoft Entourage\"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3444 $tell = "tell application \"Microsoft Entourage\"\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3445
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3446 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3447 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3448 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3449 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3450 if (! $file || $file ne '/dev/stdin') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3451 $self->read_export($file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3452 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3453
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3454 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3455 $self->get_all_event() if (! $self->{'-address-only'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3456 $self->get_all_contact() if (! $self->{'-calendar-only'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3457 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3458
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3459 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3460
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3461 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3462 my ($self,$date)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3463 my @date = ($date =~ /(\d+)/g);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3464 if ($date =~ /PM$/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3465 if ($date[3]==12) { $date[3]=0;}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3466 $date[3]+=12;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3467 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3468 return $self->make_date("$date[0]/$date[1]/$date[2] $date[3]:$date[4]");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3469 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3470
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3471 sub read_export {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3472 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3473
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3474 open(IN,"<$file") or cloak("$@");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3475 local($/) = "\r";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3476
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3477 my $title = <IN>;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3478 chop($title);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3479
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3480 return if (eof(IN));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3481
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3482 my @keys = split(/\t/,nkf('-eS',$title));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3483 my $i = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3484 my %keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3485 foreach my $key (@keys) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3486 $keys{$item_keys{$key}} = $i++;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3487 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3488 # foreach my $key (@keys) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3489 # print "$key:$item_keys{$key}:$keys{$item_keys{$key}}\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3490 # }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3491
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3492 $self->{'-input-keys'} = \%keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3493 my $i0 = 0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3494 while(<IN>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3495 my @items;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3496 chop;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3497 @items = split(/\t/,$_);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3498 $self->{'-input'}->[$i0++] = \@items;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3499 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3500 $self->{'-input-count'} = $i0;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3501 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3502
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3503 sub property {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3504 my ($self,$contact,$id,$property,$record,$key) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3505 my $result;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3506 if ($self->{'-input-count'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3507 $result = $self->{'-input'}->[$id]->[$self->{'-input-keys'}->{$property}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3508 if (! defined($self->{'-input-keys'}->{$property}) ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3509 print "$property not found\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3510 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3511 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3512 $result = RunAppleScript("${tell}${property} of ${contact} $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3513 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3514 $result =~ s/^\"//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3515 $result =~ s/\"$//;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3516 if (defined($record) && $result ne '') {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3517 if ($key =~ /date/ || $key =~ /birth/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3518 $record->{$key} = $self->date($result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3519 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3520 $record->{$key} = nkf('-eS',$result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3521 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3522 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3523 nkf('-eS',$result);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3524 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3525 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3526
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3527 sub address {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3528 my ($self,$id,$property,$record,$key) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3529 my $address;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3530 my ($street , $zip , $state , $country , $city);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3531
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3532 if ($self->{'-input-count'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3533 my $l = $self->{'-input'}->[$id];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3534 my $k = $self->{'-input-keys'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3535 $address = $l->[$k->{"$property street address"}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3536 $zip = $l->[$k->{"$property zip"}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3537 $state = $l->[$k->{"$property state"}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3538 $city = $l->[$k->{"$property city"}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3539 $country = $l->[$k->{"$property country"}];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3540 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3541 $address = RunAppleScript("${tell}${property} of contact $id\nend tell\n");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3542 $address =~ /street address:"([^"]*)"/ && ($street = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3543 $zip =~ /zip:"([^"]*)"/ && ($zip = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3544 $state =~ /state:"([^"]*)"/ && ($state = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3545 $city =~ /city:"([^"]*)"/ && ($city = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3546 $country =~ /country:"([^"]*)"/ && ($country = $1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3547 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3548
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3549
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3550 $record->{$key} = nkf('-eS',"$state $city $street $country")
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3551 if ($state||$city||$street||$country);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3552 if ($zip && $key =~ /home/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3553 $record->{'home-zip'} = $zip;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3554 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3555 $record->{'zip'} = $zip if ($zip);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3556 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3557 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3558
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3559 sub get_all_contact {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3560 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3561 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3562 my $count;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3563 if ($self->{'-input-count'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3564 $count = $self->{'-input-count'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3565 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3566 $count = RunAppleScript("${tell}count of contact\nend tell\n") or croak("$@");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3567 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3568
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3569 foreach my $id ( 1..$count ) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3570 $self->contact($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3571 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3572 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3573
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3574 sub contact {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3575 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3576 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3577
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3578 $self->property('contact',$id,'business phone number',$record,'tel');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3579 $self->property('contact',$id,'home phone number',$record,'tel-home');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3580 $self->property('contact',$id,'mobile phone number',$record,'mobile-tel');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3581 $self->property('contact',$id,'main phone number',$record,'tel');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3582 $self->property('contact',$id,'home fax number',$record,'home-fax');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3583 $self->property('contact',$id,'business fax number',$record,'fax');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3584
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3585 my $name = $self->property('contact',$id,'last name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3586 my $first_name = $self->property('contact',$id,'first name');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3587 $record->{'name'} = ($name && $first_name)?"$name $first_name":
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3588 ($name)?$name:$first_name;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3589
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3590 my $name_p = $self->property('contact',$id,'last name furigana');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3591 my $first_name_p = $self->property('contact',$id,'first name furigana');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3592 $record->{'name-yomi'} = ($name_p && $first_name_p)?"$name_p $first_name_p":
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3593 ($name_p)?$name_p:$first_name_p;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3594
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3595 $self->property('contact',$id,'department',$record,'section');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3596 $self->property('contact',$id,'title',$record,'title');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3597
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3598 $self->address($id,'business address',$record,'address');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3599 $self->address($id,'home address',$record,'home-address');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3600
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3601 my $mail = $self->property('contact',$id,'mail');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3602 my $mail1 = $self->property('contact',$id,'mail-to');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3603 if ($mail) { $mail .= ",".$mail1 ;} else { $mail = $mail1;}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3604 my $mail2 = $self->property('contact',$id,'mail-address');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3605 if ($mail) { $mail .= ",".$mail1 ;} else { $mail = $mail2;}
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3606
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3607 $self->property('contact',$id,'birthday',$record,'birth');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3608 $self->property('contact',$id,'company',$record,'office');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3609 $self->property('contact',$id,'company furigana',$record,'office-yomi');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3610
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3611 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3612 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3613
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3614 # $self->date_normalize($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3615 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3616 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3617 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3618
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3619 sub get_all_event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3620 my ($self) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3621 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3622 my $count ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3623 if ($self->{'-input-count'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3624 for(my $id=1; $id <= $count ;$id++) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3625 $self->event($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3626 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3627 return;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3628 } elsif ($self->{'-future-only'}) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3629 my $today = $self->today();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3630 my ($year,$mon,$mday,$hour,$min) = $today->localtime();
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3631
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3632 $_ = "${tell}id of every event whose start time > date \"$year/$mon/$mday\"\nend tell\n";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3633 $count = RunAppleScript($_) or cloak("$@ $_");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3634 for my $id ($count =~ /(\d+)/g) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3635 $self->event_id($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3636 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3637 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3638 $count = RunAppleScript("${tell}count of event\nend tell\n") or croak("$@");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3639 for(my $id=1; $id <= $count ;$id++) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3640 $self->event($id);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3641 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3642 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3643 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3644
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3645 sub event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3646 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3647 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3648
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3649 $self->property('event',$id,'all day event',$record,'all-day');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3650 $self->property('event',$id,'start time',$record,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3651
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3652 if ($record->{'all-day'} ne "true") {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3653 $self->property('event',$id,'end time',$record,'end-date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3654 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3655 $self->property('event',$id,'subject',$record,'summary');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3656 $self->property('event',$id,'content',$record,'memo');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3657
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3658 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3659 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3660
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3661 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3662 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3663 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3664
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3665 sub event_id {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3666 my ($self,$id) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3667 my $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3668
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3669 $self->property('event id',$id,'all day event',$record,'all-day');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3670 $self->property('event id',$id,'start time',$record,'date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3671
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3672 if ($record->{'all-day'} ne "true") {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3673 $self->property('event id',$id,'end time',$record,'end-date');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3674 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3675 $self->property('event id',$id,'subject',$record,'summary');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3676 $self->property('event id',$id,'content',$record,'memo');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3677
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3678 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3679 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3680
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3681 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3682 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3683 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3684
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3685
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3686 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3687
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3688 package Calcon::Vcard_read;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3689
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3690 # Vcard / Vcal 形式を読み込む
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3691 # Vcard に読みがないのが日本語向きじゃないね
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3692
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3693 use strict;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3694 # use warnings;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3695 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3696
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3697 @ISA = ( 'Calcon::File_read' ) ;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3698
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3699 sub decode {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3700 my ($self,$file) = @_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3701 my ($debug) = $self->{'-debug'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3702 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3703 my $record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3704 my $keys;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3705
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3706 $self->{'-file'} = $file;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3707 open(F,"<".$file);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3708
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3709 $out->start_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3710
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3711 while(<F>) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3712 if (/^begin:\s*vcalendar/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3713 } elsif (/^adr(.*):\s*(.*)/i) { $self->items($record,'address',$1,$2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3714 } elsif (/^bday:\s*(.*)/i) { $record->{'birth'} = $self->make_date($1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3715 } elsif (/^begin:\s*vcard/i) { $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3716 } elsif (/^begin:\s*vevent/i) { $record = $self->make_record;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3717 } elsif (/^calscale:\s*(.*)/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3718 } elsif (/^uid:\s*(.*)/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3719 } elsif (/^description:\s*/i) { $record->{'memo'} .= $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3720 } elsif (/^dtend(.*):\s*(.*)/i) { $record->{'end-date'} = $self->date($2,$1?$1:$record->{'timezone'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3721 } elsif (/^dtstamp(.*):\s*(.*)/i) { $record->{'modify-date'} = $self->date($2,$1?$1:$record->{'timezone'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3722 } elsif (/^dtstart(.*):\s*(.*)/i) { $record->{'date'} = $self->date($2,$1?$1:$record->{'timezone'});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3723 } elsif (/^duration:\s*(.*)/i) { $self->duration($record,$1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3724 } elsif (/^email(.*):\s*(.*)/i) { $self->items($record,'email',$1,$2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3725 } elsif (/^end:\s*vcard/i) { $self->vcard($record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3726 } elsif (/^end:\s*vevent/i) { $self->event($record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3727 } elsif (/^fn:\s*(.*)/i) { $self->name($record,$1);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3728 } elsif (/^label(.*):\s*(.*)/i) { $self->items($record,'address',$1,$2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3729 } elsif (/^method:\s*(.*)/i) { $record->{'publish'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3730 } elsif (/^n:\s*(.*)/i) { $self->name($record,split(/;/,$1));
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3731 } elsif (/^org:\s*(.*)/i) { $record->{'office'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3732 } elsif (/^sequence:\s*(.*)/i) { $record->{'sequence'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3733 } elsif (/^summary:\s*(.*)/i) { $record->{'summary'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3734 } elsif (/^tel(.*):\s*(.*)/i) { $self->items($record,'tel',$1,$2);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3735 } elsif (/^title:\s*/i) { $record->{'title'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3736 } elsif (/^version:\s*(.*)/i) { $record->{'version'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3737 } elsif (/^x-custom1:\s*(.*)/i) { $record->{'name-yomi'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3738 } elsif (/^x-custom2:\s*(.*)/i) { $record->{'office-yomi'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3739 } elsif (/^x-wr-calname.*:\s*(.*)/i) { $record->{'calendar'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3740 } elsif (/^x-wr-timezone.*:\s*(.*)/i) { $record->{'timezone'} = $1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3741 } else { $record->{'extra'} .= $_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3742 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3743 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3744 $out->end_file('');
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3745 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3746
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3747 sub duration {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3748 my ($self,$record,$duration)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3749 if ($duration =~ /pt(\d+)h/) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3750 $record->{'duration'} = "$1:00";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3751 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3752 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3753
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3754 sub date {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3755 my ($self,$date,$timezone)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3756 if ($date =~ /(\d\d\d\d)(\d\d)(\d\d)t(\d\d)(\d\d)(\d\d)/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3757 return $self->make_date("$1/$2/$3 $4:$5");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3758 } elsif ($date =~ /(\d\d\d\d)(\d\d)(\d\d)/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3759 return $self->make_date("$1/$2/$3");
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3760 } else {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3761 return "";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3762 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3763 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3764
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3765 sub event {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3766 my ($self,$record)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3767 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3768 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3769 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3770 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3771 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3772
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3773 sub vcard {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3774 my ($self,$record)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3775 my $out = $self->{'-output'};
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3776 my $keys = [];
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3777 push(@$keys,keys %{$record});
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3778 $out->record($keys,$record);
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3779 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3780
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3781 sub items {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3782 my ($self,$record,$label,$type,$value)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3783 # $record->{''} = $1;;type=work;type=pref;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3784 # $adr1;$adr2;$adr_state;$adr_zip;$adr_country
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3785 if ($type =~ /home/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3786 $label = "home-".$label;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3787 } elsif ($type =~ /voice/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3788 } elsif ($type =~ /internet/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3789 } elsif ($type =~ /fax/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3790 $label = "fax";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3791 } elsif ($type =~ /work/i) {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3792 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3793 $record->{$label} = $value;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3794 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3795
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3796 sub name {
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3797 my ($self,$record,@names)=@_;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3798 $record->{'name'} = "@names";
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3799 }
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3800
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3801 1;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3802
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3803 __END__
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3804
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3805 =cut
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3806
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3807 =head1 NAME
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3808
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3809 Calcon.pm -- Convert Various Calendar/Address data format
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3810
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3811 =head1 SYNOPSIS
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3812
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3813 use Calcon;
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3814
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3815 =head1 ABSTRACT
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3816
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3817 =head1 DESCRIPTION
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3818
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3819 =head2 EXPORT
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3820
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3821 =head1 SEE ALSO
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3822
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3823 =head1 AUTHOR
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3824
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3825 Shinji KONO, E<lt>kono@ie.u-ryukyu.ac.jpE<gt>
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3826
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3827 =head1 COPYRIGHT AND LICENSE
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3828
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3829 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3830 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3831 ## Calendar/Address Format Converter
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3832 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3833 ## Copyright (C) 2002 Shinji Kono
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3834 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3835 ## このソースのいかなる複写,改変,修正も許諾します。ただし、
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3836 ## その際には、誰が貢献したを示すこの部分を残すこと。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3837 ## 再配布や雑誌の付録などの問い合わせも必要ありません。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3838 ## 営利利用も上記に反しない範囲で許可します。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3839 ## バイナリの配布の際にはversion messageを保存することを条件とします。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3840 ## このプログラムについては特に何の保証もしない、悪しからず。
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3841 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3842 ## Everyone is permitted to do anything on this program
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3843 ## including copying, modifying, improving,
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3844 ## as long as you don't try to pretend that you wrote it.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3845 ## i.e., the above copyright notice has to appear in all copies.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3846 ## Binary distribution requires original version messages.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3847 ## You don't have to ask before copying, redistribution or publishing.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3848 ## THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3849 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3850 ##
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3851 ## $Id$
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3852 #######################################################################/
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3853
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3854
144819f5d2f6 Initial revision
kono
parents:
diff changeset
3855 =cut