annotate Calcon.pm @ 9:798ba47e8046 address-book

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