annotate Calcon.pm @ 3:cb79baed256e

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