when_exe 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +333 -212
- data/bin/make_ttl.rb +37 -0
- data/bin/make_ttl.rb.config +9 -0
- data/lib/when_exe.rb +923 -925
- data/lib/when_exe/calendarnote.rb +9 -5
- data/lib/when_exe/coordinates.rb +2437 -2446
- data/lib/when_exe/inspect.rb +1480 -1408
- data/lib/when_exe/linkeddata.rb +574 -0
- data/lib/when_exe/locales/akt.rb +177 -176
- data/lib/when_exe/locales/locale.rb +751 -751
- data/lib/when_exe/mini_application.rb +307 -307
- data/lib/when_exe/parts/resource.rb +1115 -1103
- data/lib/when_exe/region/chinese/epochs.rb +6 -5
- data/lib/when_exe/region/christian.rb +831 -829
- data/lib/when_exe/region/japanese.rb +93 -93
- data/lib/when_exe/region/japanese/notes.rb +1510 -1495
- data/lib/when_exe/region/japanese/residues.rb +13 -13
- data/lib/when_exe/tmposition.rb +2307 -2273
- data/lib/when_exe/tmreference.rb +1744 -1734
- data/lib/when_exe/version.rb +2 -2
- data/link_to_online_documents +1 -1
- data/test/scripts/3.ext.rb +6 -6
- data/test/scripts/3.rb +6 -6
- data/test/test.rb +76 -75
- data/test/test/icalendar.rb +883 -879
- data/test/test/linkeddata.rb +224 -0
- data/test/test/region/m17n.rb +193 -193
- data/when_exe.gemspec +3 -2
- metadata +13 -6
@@ -390,8 +390,8 @@ module When
|
|
390
390
|
],
|
391
391
|
[self,
|
392
392
|
"period:[前燕]",
|
393
|
-
|
394
|
-
["[元璽]1" , "" , "
|
393
|
+
# ["[燕元=]0.11.26", "@F" , "name=[慕容儁];348-11-26^Chinese0239"], # 景昭帝 甲辰 3085-6 (即位記事のみ)
|
394
|
+
["[元璽]1" , "" , "name=[慕容儁];352-11-13^Chinese0239"], # 戊辰 3131-27
|
395
395
|
["[光寿]1" , "" , " 357-02-23"], # 癸丑 3161-3
|
396
396
|
["[建熙]1" , "@A" , "name=[慕容暐];360-01-15", "370-11="] # 幽帝 戊子 3179-1
|
397
397
|
],
|
@@ -578,8 +578,9 @@ module When
|
|
578
578
|
["[河清]1" , "" , " 562-04-06"], # 乙巳
|
579
579
|
["[天統=ja:%%<天統_(北斉)>]1" , "@A" ,"name=[後主=ja:%%<後主_(北斉)>];565-04-24"], # 丙子
|
580
580
|
["[武平=ja:%%<武平_(北斉)>]1" , "" , " 570-01-01"], # 乙酉
|
581
|
-
["[隆化]1" , "" , " 576-12-
|
582
|
-
["[
|
581
|
+
["[隆化]1" , "" , " 576-12-13", "577-01-01"], # 丁巳 5361
|
582
|
+
["[徳昌=ja:%%<徳昌_(北斉)>]1" , "" ,"name=[安徳王=ja:%%<高延宗>];576-12-14", "576-12-17="], # 戊午, 辛酉 5362
|
583
|
+
["[承光=ja:%%<承光_(北斉)>]1" ,"@A", "name=[幼主=ja:%%<幼主_(北斉)>];577-01-01", "577-03="] # 乙亥
|
583
584
|
],
|
584
585
|
[self,
|
585
586
|
"period:[西魏]",
|
@@ -591,7 +592,7 @@ module When
|
|
591
592
|
"period:[北周]",
|
592
593
|
["[<孝閔帝>=ja:%%<孝閔帝>]1.12.30", "@F" , "name=[孝閔帝];556-12-30^Chinese0523"], # 庚子 北周が西魏に代わる
|
593
594
|
["[<明帝>=ja:%%<明帝_(北周)>]1.09.28","@A" ,"name=[明帝=ja:%%<明帝_(北周)>];557-09-28"], # 甲子
|
594
|
-
["[武成=ja:%%<武成_(北周)>]1" , "" , " 559-
|
595
|
+
["[武成=ja:%%<武成_(北周)>]1" , "" , " 559-08-14"], # 乙亥 or 己亥 5190-30
|
595
596
|
["[保定=ja:%%<保定_(北周)>]1" , "@A" ,"name=[武帝=ja:%%<武帝_(北周)>];561-01-01"], # 戊申
|
596
597
|
["[天和=ja:%%<天和_(北周)>]1" , "" , " 566-01-05"], # 癸未 本年から天和暦を使用
|
597
598
|
["[建徳=ja:%%<建徳_(北周)>]1" , "" , " 572-03-15"], # 丁巳
|
@@ -1,829 +1,831 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
Copyright (C) 2011-
|
4
|
-
|
5
|
-
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
|
-
=end
|
7
|
-
|
8
|
-
module When
|
9
|
-
|
10
|
-
class BasicTypes::M17n
|
11
|
-
|
12
|
-
Christian = [self, [
|
13
|
-
"locale:[=en:, ja=ja:, alias]",
|
14
|
-
"names:[Christian=]",
|
15
|
-
"[Julian=en:Julian_calendar, ユリウス暦 ]",
|
16
|
-
"[Gregorian=en:Gregorian_calendar, グレゴリオ暦 ]",
|
17
|
-
"[RevisedJulian=en:Revised_Julian_calendar, 修正ユリウス暦]",
|
18
|
-
"[Swedish=en:Swedish_calendar, スウェーデン暦]",
|
19
|
-
"[Civil in the West=en:Civil_calendar, 西暦, *alias:Civil]"
|
20
|
-
]]
|
21
|
-
end
|
22
|
-
|
23
|
-
class TM::CalendarEra
|
24
|
-
# Anno Mundi Era
|
25
|
-
Byzantine = [self, [
|
26
|
-
"locale:[=en:, ja=ja:, alias]",
|
27
|
-
"period:[Byzantine=en:Byzantine_calendar, ビザンティン暦=ja:%%<世界創造紀元>]",
|
28
|
-
["[AM=en:Anno_Mundi, 世界創造紀元, alias:Anno_Mundi]6497*9.1",
|
29
|
-
'@CE', "989*09-01^Julian?border=0*9-1¬e=Roman", "1453-5-29"]
|
30
|
-
]]
|
31
|
-
end
|
32
|
-
|
33
|
-
module CalendarTypes
|
34
|
-
|
35
|
-
#
|
36
|
-
# Christian Base Calendar
|
37
|
-
#
|
38
|
-
class Christian < When::TM::Calendar
|
39
|
-
|
40
|
-
# デフォルトの改暦日付(ユリウス通日)
|
41
|
-
#
|
42
|
-
# @private
|
43
|
-
DefaultReformDate = 2299161 # 1582-10-15
|
44
|
-
|
45
|
-
# @private
|
46
|
-
#
|
47
|
-
# ::Date オブジェクトに対応する暦法名
|
48
|
-
# (require 'Date' されていることの保証は呼び出し側)
|
49
|
-
#
|
50
|
-
def self._default_start(date)
|
51
|
-
case date.start
|
52
|
-
when ::Date::JULIAN ; 'Julian'
|
53
|
-
when ::Date::GREGORIAN ; 'Gregorian'
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
#
|
61
|
-
#
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
#
|
73
|
-
#
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
m
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
#
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
return (
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
#
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
#
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
#
|
121
|
-
#
|
122
|
-
#
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
#
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
#
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
#
|
150
|
-
|
151
|
-
|
152
|
-
#
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
[
|
164
|
-
[
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
#
|
187
|
-
#
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
#
|
197
|
-
#
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
#
|
206
|
-
#
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
#
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
#
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
#
|
235
|
-
#
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
#
|
243
|
-
#
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
#
|
251
|
-
#
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
return super unless
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
#
|
263
|
-
#
|
264
|
-
# @
|
265
|
-
#
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
#
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
#
|
280
|
-
#
|
281
|
-
# @
|
282
|
-
#
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
#
|
290
|
-
#
|
291
|
-
# @
|
292
|
-
#
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
#
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
#
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
#
|
318
|
-
#
|
319
|
-
# @
|
320
|
-
#
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
#
|
328
|
-
#
|
329
|
-
# @
|
330
|
-
#
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
#
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
#
|
352
|
-
#
|
353
|
-
#
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
#
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
#
|
364
|
-
#
|
365
|
-
#
|
366
|
-
#
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
#
|
376
|
-
#
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
#
|
387
|
-
#
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
date = @
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
date
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
#
|
403
|
-
#
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
#
|
416
|
-
#
|
417
|
-
# @
|
418
|
-
#
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
#
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
#
|
435
|
-
#
|
436
|
-
# @
|
437
|
-
# @
|
438
|
-
# @
|
439
|
-
# @
|
440
|
-
# @
|
441
|
-
#
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
@
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
if @
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
@
|
463
|
-
|
464
|
-
@reform_jdn
|
465
|
-
|
466
|
-
@
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
@
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
#
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
#
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
#
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
#
|
519
|
-
#
|
520
|
-
#
|
521
|
-
# @
|
522
|
-
#
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
#
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
[When::BasicTypes::M17n, "names:[
|
564
|
-
[When::BasicTypes::M17n, "names:[
|
565
|
-
[When::BasicTypes::M17n, "names:[
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
[
|
574
|
-
[ 3,
|
575
|
-
[
|
576
|
-
[
|
577
|
-
[
|
578
|
-
[
|
579
|
-
[
|
580
|
-
[
|
581
|
-
[
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
-
|
607
|
-
-
|
608
|
-
-
|
609
|
-
-
|
610
|
-
-
|
611
|
-
-
|
612
|
-
-
|
613
|
-
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
#
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
#
|
670
|
-
#
|
671
|
-
#
|
672
|
-
# @
|
673
|
-
#
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
#
|
681
|
-
#
|
682
|
-
# @param [
|
683
|
-
#
|
684
|
-
# @
|
685
|
-
#
|
686
|
-
#
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
#
|
696
|
-
#
|
697
|
-
# @param [
|
698
|
-
#
|
699
|
-
# @
|
700
|
-
#
|
701
|
-
#
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
m +=
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
result
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
#
|
733
|
-
#
|
734
|
-
#
|
735
|
-
# @
|
736
|
-
#
|
737
|
-
#
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
#
|
746
|
-
#
|
747
|
-
#
|
748
|
-
# @
|
749
|
-
#
|
750
|
-
#
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
#
|
763
|
-
#
|
764
|
-
#
|
765
|
-
#
|
766
|
-
#
|
767
|
-
#
|
768
|
-
#
|
769
|
-
#
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
@
|
775
|
-
@
|
776
|
-
@
|
777
|
-
@
|
778
|
-
@
|
779
|
-
@
|
780
|
-
@
|
781
|
-
@
|
782
|
-
@
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
#
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
return When::
|
793
|
-
|
794
|
-
When
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
#
|
800
|
-
#
|
801
|
-
#
|
802
|
-
#
|
803
|
-
#
|
804
|
-
#
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
when
|
810
|
-
|
811
|
-
|
812
|
-
options
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
end
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2015 Takashi SUGA
|
4
|
+
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
|
+
=end
|
7
|
+
|
8
|
+
module When
|
9
|
+
|
10
|
+
class BasicTypes::M17n
|
11
|
+
|
12
|
+
Christian = [self, [
|
13
|
+
"locale:[=en:, ja=ja:, alias]",
|
14
|
+
"names:[Christian=]",
|
15
|
+
"[Julian=en:Julian_calendar, ユリウス暦 ]",
|
16
|
+
"[Gregorian=en:Gregorian_calendar, グレゴリオ暦 ]",
|
17
|
+
"[RevisedJulian=en:Revised_Julian_calendar, 修正ユリウス暦]",
|
18
|
+
"[Swedish=en:Swedish_calendar, スウェーデン暦]",
|
19
|
+
"[Civil in the West=en:Civil_calendar, 西暦, *alias:Civil]"
|
20
|
+
]]
|
21
|
+
end
|
22
|
+
|
23
|
+
class TM::CalendarEra
|
24
|
+
# Anno Mundi Era
|
25
|
+
Byzantine = [self, [
|
26
|
+
"locale:[=en:, ja=ja:, alias]",
|
27
|
+
"period:[Byzantine=en:Byzantine_calendar, ビザンティン暦=ja:%%<世界創造紀元>]",
|
28
|
+
["[AM=en:Anno_Mundi, 世界創造紀元, alias:Anno_Mundi]6497*9.1",
|
29
|
+
'@CE', "989*09-01^Julian?border=0*9-1¬e=Roman", "1453-5-29"]
|
30
|
+
]]
|
31
|
+
end
|
32
|
+
|
33
|
+
module CalendarTypes
|
34
|
+
|
35
|
+
#
|
36
|
+
# Christian Base Calendar
|
37
|
+
#
|
38
|
+
class Christian < When::TM::Calendar
|
39
|
+
|
40
|
+
# デフォルトの改暦日付(ユリウス通日)
|
41
|
+
#
|
42
|
+
# @private
|
43
|
+
DefaultReformDate = 2299161 # 1582-10-15
|
44
|
+
|
45
|
+
# @private
|
46
|
+
#
|
47
|
+
# ::Date オブジェクトに対応する暦法名
|
48
|
+
# (require 'Date' されていることの保証は呼び出し側)
|
49
|
+
#
|
50
|
+
def self._default_start(date)
|
51
|
+
case date.start
|
52
|
+
when ::Date::JULIAN ; return 'Julian'
|
53
|
+
when ::Date::GREGORIAN ; return 'Gregorian'
|
54
|
+
end
|
55
|
+
start = date.start
|
56
|
+
start = start.to_i if start == start.to_i
|
57
|
+
"Civil?reform_jdn=#{start}"
|
58
|
+
end
|
59
|
+
|
60
|
+
# 年月日 -> 通日
|
61
|
+
#
|
62
|
+
# @see When::CalendarTypes::TableBased#_coordinates_to_number
|
63
|
+
#
|
64
|
+
def _coordinates_to_number(y,m,d)
|
65
|
+
m = (+m + 10) % 12
|
66
|
+
y = +y + 4716 - m / 10
|
67
|
+
a = (1461*y.to_i ).div(4)
|
68
|
+
b = ( 153*m.to_i + 2).div(5)
|
69
|
+
return a + b + (+d) - 1401
|
70
|
+
end
|
71
|
+
|
72
|
+
# 通日 - > 年月日
|
73
|
+
#
|
74
|
+
# @see When::CalendarTypes::TableBased#_number_to_coordinates
|
75
|
+
#
|
76
|
+
def _number_to_coordinates(jdn)
|
77
|
+
j = jdn.to_i + 1401
|
78
|
+
y, t = (4*j + 3).divmod(1461)
|
79
|
+
t = t.div(4)
|
80
|
+
m, d = (5*t + 2).divmod(153)
|
81
|
+
d = d.div(5)
|
82
|
+
m = (m+2) % 12
|
83
|
+
y = y - 4716 + (13-m) / 12
|
84
|
+
return [y,m,d]
|
85
|
+
end
|
86
|
+
|
87
|
+
# 暦要素数
|
88
|
+
#
|
89
|
+
# @see When::CalendarTypes::TableBased#_length
|
90
|
+
#
|
91
|
+
def _length(date)
|
92
|
+
yy, mm = date
|
93
|
+
return super unless(mm)
|
94
|
+
return ((yy % 4) == 0) ? 29 : 28 if (mm == 1)
|
95
|
+
return (((((mm + 10) % 12) % 5) % 2) == 0) ? 31 : 30
|
96
|
+
end
|
97
|
+
|
98
|
+
# 復活祭の遅延日数
|
99
|
+
#
|
100
|
+
# @private
|
101
|
+
def _easter_delay(year)
|
102
|
+
0
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
def _normalize(args=[], options={})
|
108
|
+
raise TypeError, "#{self.class} is abstract class" unless @label
|
109
|
+
@note = When.CalendarNote(@note || 'Christian')
|
110
|
+
@diff_to_CE ||= 0
|
111
|
+
super
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# Julian Calendar
|
117
|
+
#
|
118
|
+
class Julian < Christian
|
119
|
+
|
120
|
+
# 太陰方程式
|
121
|
+
#
|
122
|
+
# @param [Numeric] year 西暦の年数
|
123
|
+
# @return [Integer] 0 (ユリウス暦では補正なし)
|
124
|
+
#
|
125
|
+
def _lunar_equation(year)
|
126
|
+
0
|
127
|
+
end
|
128
|
+
|
129
|
+
# @private
|
130
|
+
#
|
131
|
+
# 対応する ::Date の start 属性
|
132
|
+
def _default_start
|
133
|
+
::Date::JULIAN
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def _normalize(args=[], options={})
|
139
|
+
@label ||= 'Christian::Julian'
|
140
|
+
super
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
#
|
145
|
+
# Swedish Calendar
|
146
|
+
#
|
147
|
+
class Swedish < Julian
|
148
|
+
|
149
|
+
# デフォルトの改暦日付(ユリウス通日)
|
150
|
+
#
|
151
|
+
# @private
|
152
|
+
DefaultReformDate = 2361390 # 1753-03-01
|
153
|
+
|
154
|
+
# @private
|
155
|
+
# Julian - 17000229 17120229
|
156
|
+
SwedishCalendarRange = 2342042...2346425
|
157
|
+
|
158
|
+
# @private
|
159
|
+
ExtraDate = [1712,1,29]
|
160
|
+
|
161
|
+
# @private
|
162
|
+
Length = {
|
163
|
+
[1700, nil] => 365,
|
164
|
+
[1700, 1] => 28,
|
165
|
+
[1712, nil] => 367,
|
166
|
+
[1712, 1] => 30
|
167
|
+
}
|
168
|
+
|
169
|
+
# Ref: http://www.ortelius.de/kalender/east_en.php
|
170
|
+
# @private
|
171
|
+
EasterDelay = {
|
172
|
+
1741 => -7,
|
173
|
+
1742 => -35,
|
174
|
+
1744 => -7,
|
175
|
+
1745 => -7,
|
176
|
+
1747 => -28,
|
177
|
+
1748 => -7,
|
178
|
+
1750 => -28,
|
179
|
+
1751 => -7,
|
180
|
+
1752 => -7,
|
181
|
+
1802 => +7,
|
182
|
+
1805 => +7,
|
183
|
+
1818 => +7
|
184
|
+
}
|
185
|
+
|
186
|
+
# 年月日 -> 通日
|
187
|
+
#
|
188
|
+
# @see When::CalendarTypes::TableBased#_coordinates_to_number
|
189
|
+
#
|
190
|
+
def _coordinates_to_number(y,m,d)
|
191
|
+
jdn = super
|
192
|
+
return SwedishCalendarRange.last if [+y, m, d] == ExtraDate
|
193
|
+
SwedishCalendarRange.include?(jdn-1) ? jdn-1 : jdn
|
194
|
+
end
|
195
|
+
|
196
|
+
# 通日 - > 年月日
|
197
|
+
#
|
198
|
+
# @see When::CalendarTypes::TableBased#_number_to_coordinates
|
199
|
+
#
|
200
|
+
def _number_to_coordinates(jdn)
|
201
|
+
return ExtraDate.dup if jdn == SwedishCalendarRange.last
|
202
|
+
super(SwedishCalendarRange.include?(jdn) ? jdn+1 : jdn)
|
203
|
+
end
|
204
|
+
|
205
|
+
# 暦要素数
|
206
|
+
#
|
207
|
+
# @see When::CalendarTypes::TableBased#_length
|
208
|
+
#
|
209
|
+
def _length(date)
|
210
|
+
y, m = date
|
211
|
+
Length[[+y,m]] || super
|
212
|
+
end
|
213
|
+
|
214
|
+
# 復活祭の遅延日数
|
215
|
+
#
|
216
|
+
# @private
|
217
|
+
def _easter_delay(year)
|
218
|
+
EasterDelay[year] || 0
|
219
|
+
end
|
220
|
+
|
221
|
+
private
|
222
|
+
|
223
|
+
def _normalize(args=[], options={})
|
224
|
+
@label ||= 'Christian::Swedish'
|
225
|
+
super
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
#
|
230
|
+
# Variation of Christian Calendar
|
231
|
+
#
|
232
|
+
class ReformVariation < Christian
|
233
|
+
|
234
|
+
# 年月日 -> 通日
|
235
|
+
#
|
236
|
+
# @see When::CalendarTypes::TableBased#_coordinates_to_number
|
237
|
+
#
|
238
|
+
def _coordinates_to_number(y,m,d)
|
239
|
+
super - _diff_from_century(((m < 2) ? +y-1 : +y).to_i.div(100))
|
240
|
+
end
|
241
|
+
|
242
|
+
# 通日 - > 年月日
|
243
|
+
#
|
244
|
+
# @see When::CalendarTypes::TableBased#_number_to_coordinates
|
245
|
+
#
|
246
|
+
def _number_to_coordinates(jdn)
|
247
|
+
super(jdn + _diff_from_century(_century_from_jdn(jdn)))
|
248
|
+
end
|
249
|
+
|
250
|
+
# 暦要素数
|
251
|
+
#
|
252
|
+
# @see When::CalendarTypes::TableBased#_length
|
253
|
+
#
|
254
|
+
def _length(date)
|
255
|
+
yy, mm = date
|
256
|
+
return super unless mm == 1 # 2月でなければユリウス暦と同じ
|
257
|
+
cc, yy = yy.divmod(100)
|
258
|
+
return super unless yy == 0 # 100で割り切れない年はユリウス暦と同じ
|
259
|
+
29 - (_diff_from_century(cc) - _diff_from_century(cc-1))
|
260
|
+
end
|
261
|
+
|
262
|
+
# 太陰方程式
|
263
|
+
#
|
264
|
+
# @param [Numeric] year 西暦の年数
|
265
|
+
# @return [Integer] 19年7閏のペースに対する満月の日付の補正量
|
266
|
+
# @note 太陽暦日の補正も、本メソッドで行う
|
267
|
+
#
|
268
|
+
def _lunar_equation(year)
|
269
|
+
h = +year.div(100)
|
270
|
+
(8*(h+11)).div(25) - (_diff_from_century(h) + 5)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
#
|
275
|
+
# Gregorian Calendar
|
276
|
+
#
|
277
|
+
class Gregorian < ReformVariation
|
278
|
+
|
279
|
+
# 百年代 - > ユリウス暦とグレゴリオ暦の差
|
280
|
+
#
|
281
|
+
# @param [Integer] century 百年代
|
282
|
+
#
|
283
|
+
# @return [Integer] ユリウス暦とグレゴリオ暦の差
|
284
|
+
#
|
285
|
+
def _diff_from_century(century)
|
286
|
+
(3*(century-3)).div(4)+1
|
287
|
+
end
|
288
|
+
|
289
|
+
# 通日 - > 百年代
|
290
|
+
#
|
291
|
+
# @param [Integer] jdn 通日
|
292
|
+
#
|
293
|
+
# @return [Integer] 百年代
|
294
|
+
#
|
295
|
+
def _century_from_jdn(jdn)
|
296
|
+
(4 * jdn - 6884477).div(146097)
|
297
|
+
end
|
298
|
+
|
299
|
+
private
|
300
|
+
|
301
|
+
def _normalize(args=[], options={})
|
302
|
+
@label ||= 'Christian::Gregorian'
|
303
|
+
super
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
#
|
308
|
+
# Revised Julian Calendar
|
309
|
+
#
|
310
|
+
class RevisedJulian < ReformVariation
|
311
|
+
|
312
|
+
# デフォルトの改暦日付(ユリウス通日)
|
313
|
+
#
|
314
|
+
# @private
|
315
|
+
DefaultReformDate = 2423707 # 1923-10-14
|
316
|
+
|
317
|
+
# 百年代 - > ユリウス暦と修正ユリウス暦の差
|
318
|
+
#
|
319
|
+
# @param [Integer] century 百年代
|
320
|
+
#
|
321
|
+
# @return [Integer] ユリウス暦と修正ユリウス暦の差
|
322
|
+
#
|
323
|
+
def _diff_from_century(century)
|
324
|
+
(7*(century-1)).div(9)-1
|
325
|
+
end
|
326
|
+
|
327
|
+
# 通日 - > 百年代
|
328
|
+
#
|
329
|
+
# @param [Integer] jdn 通日
|
330
|
+
#
|
331
|
+
# @return [Integer] 百年代
|
332
|
+
#
|
333
|
+
def _century_from_jdn(jdn)
|
334
|
+
(9 * jdn - 15490078).div(328718)
|
335
|
+
end
|
336
|
+
|
337
|
+
private
|
338
|
+
|
339
|
+
def _normalize(args=[], options={})
|
340
|
+
@label ||= 'Christian::RevisedJulian'
|
341
|
+
# @diff ||= [-2, -1, -1, 0, 1, 2, 2, 3, 4, 5] # 1~10世紀の各世紀のユリウス暦と差の日数
|
342
|
+
super
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
#
|
347
|
+
# Civil Calendar
|
348
|
+
#
|
349
|
+
class Civil < Gregorian
|
350
|
+
|
351
|
+
#
|
352
|
+
# 改暦日付
|
353
|
+
#
|
354
|
+
# @return [Integer]
|
355
|
+
#
|
356
|
+
attr_reader :reform_jdn
|
357
|
+
|
358
|
+
# @private
|
359
|
+
#
|
360
|
+
# 対応する ::Date の start 属性
|
361
|
+
alias :_default_start :reform_jdn
|
362
|
+
|
363
|
+
#
|
364
|
+
# 年初の最初の定義の年
|
365
|
+
#
|
366
|
+
# @return [Integer] 年初の最初の定義の年
|
367
|
+
# @return nil
|
368
|
+
#
|
369
|
+
def first_year_of_border
|
370
|
+
return nil unless @border.kind_of?(When::Coordinates::MultiBorder)
|
371
|
+
year = @border.borders[-1][:key]
|
372
|
+
year.kind_of?(Integer) ? year : nil
|
373
|
+
end
|
374
|
+
|
375
|
+
# 年月日 -> 通日
|
376
|
+
#
|
377
|
+
# @see When::CalendarTypes::TableBased#_coordinates_to_number
|
378
|
+
#
|
379
|
+
def _coordinates_to_number(y,m,d)
|
380
|
+
skip, limit = @the_length[[y,m]]
|
381
|
+
d += skip if skip && d >= limit
|
382
|
+
jdn = @new._coordinates_to_number(y,m,d)
|
383
|
+
jdn >= @reform_jdn ? jdn : @old._coordinates_to_number(y + @origin_of_MSC - @old.origin_of_MSC, m, d)
|
384
|
+
end
|
385
|
+
|
386
|
+
# 通日 - > 年月日
|
387
|
+
#
|
388
|
+
# @see When::CalendarTypes::TableBased#_number_to_coordinates
|
389
|
+
#
|
390
|
+
def _number_to_coordinates(jdn)
|
391
|
+
if jdn >= @reform_jdn
|
392
|
+
date = @new._number_to_coordinates(jdn)
|
393
|
+
else
|
394
|
+
date = @old._number_to_coordinates(jdn)
|
395
|
+
date[0] -= @origin_of_MSC - @old.origin_of_MSC
|
396
|
+
end
|
397
|
+
skip, limit = @the_length[date[0..-2]]
|
398
|
+
date[2] -= skip if skip && date[2] >= limit
|
399
|
+
date
|
400
|
+
end
|
401
|
+
|
402
|
+
# 暦要素数
|
403
|
+
#
|
404
|
+
# @see When::CalendarTypes::TableBased#_length
|
405
|
+
#
|
406
|
+
def _length(date)
|
407
|
+
return @the_length[date][2] if @the_length[date]
|
408
|
+
yy, mm = date
|
409
|
+
(yy > @reform_date[0]) ||
|
410
|
+
(yy == @reform_date[0] && (!mm || mm >= @reform_date[1])) ?
|
411
|
+
@new._length(date) :
|
412
|
+
@old._length([yy + @origin_of_MSC - @old.origin_of_MSC, mm])
|
413
|
+
end
|
414
|
+
|
415
|
+
# 太陰方程式
|
416
|
+
#
|
417
|
+
# @param [Numeric] year 西暦の年数
|
418
|
+
# @return [Integer] 19年7閏のペースに対する満月の日付の補正量
|
419
|
+
# @note 太陽暦日の補正も、本メソッドで行う
|
420
|
+
#
|
421
|
+
def _lunar_equation(year)
|
422
|
+
year >= @the_easter ? @new._lunar_equation(year) : @old._lunar_equation(year)
|
423
|
+
end
|
424
|
+
|
425
|
+
# 復活祭の遅延日数
|
426
|
+
#
|
427
|
+
# @private
|
428
|
+
def _easter_delay(year)
|
429
|
+
@old._easter_delay(year)
|
430
|
+
end
|
431
|
+
|
432
|
+
private
|
433
|
+
|
434
|
+
# オブジェクトの正規化
|
435
|
+
#
|
436
|
+
# @old = 改暦前の暦法(デフォルトはユリウス暦)
|
437
|
+
# @new = 改暦後の暦法(デフォルトはグレゴリオ暦)
|
438
|
+
# @reform_date = 改暦日付(月日は 1 オリジンで指定し、0 オリジンに直して保持)
|
439
|
+
# @reform_jdn = 改暦日付のユリウス通日
|
440
|
+
# @reform = reform_date か reform_jdn を内容で判別し、どちらかに反映する
|
441
|
+
# @the_easter = 新暦法の復活祭計算の適用を始める年
|
442
|
+
# @the_length = 通常と異なる日付となる年月の情報({[年,月]=>[スキップした日数, スキップし始める日, 月の日数]})
|
443
|
+
#
|
444
|
+
def _normalize(args=[], options={})
|
445
|
+
@label ||= 'Christian::Civil'
|
446
|
+
|
447
|
+
# 前後の暦法
|
448
|
+
@old = When.Calendar(@old || 'Julian')
|
449
|
+
@new = When.Calendar(@new || 'Gregorian')
|
450
|
+
@indices ||= @old.indices
|
451
|
+
|
452
|
+
# 改暦日付 (0 オリジン)
|
453
|
+
@reform = When::Coordinates::Pair._en_pair_date_time(@reform) if @reform.kind_of?(String)
|
454
|
+
case @reform.length
|
455
|
+
when 0 ;
|
456
|
+
when 1 ; @reform_jdn = @reform[0]
|
457
|
+
else ; @reform_date = @reform
|
458
|
+
end if @reform.kind_of?(Array)
|
459
|
+
|
460
|
+
if @reform_date
|
461
|
+
@reform_date = When::Coordinates::Pair._en_pair_date_time(@reform_date) if @reform_date.kind_of?(String)
|
462
|
+
@reform_date = @reform_date.map {|c| c.to_i}
|
463
|
+
(1..2).each {|i| @reform_date[i] = @reform_date[i] ? @reform_date[i] - 1 : 0 }
|
464
|
+
@reform_jdn = @new._coordinates_to_number(*@reform_date)
|
465
|
+
else
|
466
|
+
@reform_jdn ||= [@old.class::DefaultReformDate, @new.class::DefaultReformDate].max
|
467
|
+
@reform_jdn = @reform_jdn.to_i
|
468
|
+
@reform_date = @new._number_to_coordinates(@reform_jdn)
|
469
|
+
end
|
470
|
+
last_date = @old._number_to_coordinates(@reform_jdn-1)
|
471
|
+
|
472
|
+
# 復活祭との前後関係
|
473
|
+
@the_easter = @reform_jdn > When.CalendarNote('Christian').easter(@reform_date[0], @new) ? @reform_date[0]+1 : @reform_date[0]
|
474
|
+
|
475
|
+
# 月の日数
|
476
|
+
this_month = @reform_date[0..1]
|
477
|
+
new_length = @new._length(this_month)
|
478
|
+
@the_length = {}
|
479
|
+
if @reform_date[1] == last_date[1] # 同一月内に閉じた改暦
|
480
|
+
skipped_length = @reform_date[2] - last_date[2] - 1
|
481
|
+
@the_length[this_month] = [skipped_length, last_date[2]+1, new_length-skipped_length]
|
482
|
+
else
|
483
|
+
last_month = [(@reform_date[1] > last_date[1] ? @reform_date[0] : @reform_date[0]-1), last_date[1]]
|
484
|
+
@the_length[this_month] = [@reform_date[2], 0, new_length - @reform_date[2]]
|
485
|
+
@the_length[last_month] = [false, false, last_date[2]+1]
|
486
|
+
end
|
487
|
+
|
488
|
+
super
|
489
|
+
end
|
490
|
+
|
491
|
+
#
|
492
|
+
# 整数のindex化
|
493
|
+
#
|
494
|
+
def _to_index(date)
|
495
|
+
digit = date[-1] - @base[date.length-1]
|
496
|
+
skip, limit = @the_length[date[0..-2]]
|
497
|
+
skip && digit >= limit ? digit-skip : digit
|
498
|
+
end
|
499
|
+
|
500
|
+
#
|
501
|
+
# indexの整数化
|
502
|
+
#
|
503
|
+
def _from_index(date)
|
504
|
+
digit = date[-1]
|
505
|
+
skip, limit = @the_length[date[0..-2]]
|
506
|
+
(skip && digit >= limit ? digit+skip : digit)+@base[date.length-1]
|
507
|
+
end
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
module Coordinates
|
512
|
+
|
513
|
+
#
|
514
|
+
# 日時要素の境界 - 復活祭
|
515
|
+
#
|
516
|
+
class Easter < Border
|
517
|
+
|
518
|
+
# 境界の取得
|
519
|
+
#
|
520
|
+
# @param [Array<Numeric>] date 境界を計算する年
|
521
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法
|
522
|
+
#
|
523
|
+
# @return [Array<Numeric>] その年の境界
|
524
|
+
#
|
525
|
+
def border(date=[], frame=When::Gregorian)
|
526
|
+
frame._encode(frame._number_to_coordinates(frame.note.easter(date[0], frame)), false)
|
527
|
+
end
|
528
|
+
|
529
|
+
private
|
530
|
+
|
531
|
+
# 要素の正規化
|
532
|
+
def _normalize(args=[], options={})
|
533
|
+
@border = [0,0,0]
|
534
|
+
end
|
535
|
+
end
|
536
|
+
end
|
537
|
+
|
538
|
+
#
|
539
|
+
# キリスト教の暦注(クリスマスと復活祭)
|
540
|
+
#
|
541
|
+
class CalendarNote::Christian < CalendarNote
|
542
|
+
|
543
|
+
Notes = [When::BasicTypes::M17n, [
|
544
|
+
"locale:[=en:, ja=ja:, alias]",
|
545
|
+
"names:[Christian]",
|
546
|
+
|
547
|
+
# 年の暦注 ----------------------------
|
548
|
+
[When::BasicTypes::M17n,
|
549
|
+
"names:[year]"
|
550
|
+
],
|
551
|
+
|
552
|
+
# 月の暦注 ----------------------------
|
553
|
+
[When::BasicTypes::M17n,
|
554
|
+
"names:[month]",
|
555
|
+
[When::BasicTypes::M17n,
|
556
|
+
"names:[Month]"
|
557
|
+
]
|
558
|
+
],
|
559
|
+
|
560
|
+
# 日の暦注 ----------------------------
|
561
|
+
[When::BasicTypes::M17n,
|
562
|
+
"names:[day]",
|
563
|
+
[When::BasicTypes::M17n, "names:[Week, 七曜]" ],
|
564
|
+
[When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
|
565
|
+
[When::BasicTypes::M17n, "names:[Christmas, クリスマス]"],
|
566
|
+
[When::BasicTypes::M17n, "names:[Fixed_feast=, 固定祝日=]" ],
|
567
|
+
[When::BasicTypes::M17n, "names:[Moveable_feast, 移動祝日]" ]
|
568
|
+
]
|
569
|
+
]]
|
570
|
+
|
571
|
+
# 固定祝日
|
572
|
+
Fixed_feasts = {
|
573
|
+
[ 1, 6] => "Epiphany",
|
574
|
+
[ 3, 1] => "St.David's Day",
|
575
|
+
[ 3, 17] => "St.Patrick's Day",
|
576
|
+
[ 3, 25] => "Annunciation-Lady Day",
|
577
|
+
[ 4, 23] => "St.George's Day",
|
578
|
+
[ 6, 24] => "Midsummer Day",
|
579
|
+
[ 9, 14] => "Holy Cross Day",
|
580
|
+
[ 9, 29] => "Michaelmas Day",
|
581
|
+
[11, 30] => "St.Andrew's Day",
|
582
|
+
[12, 13] => "St.Lucia's Day",
|
583
|
+
[12, 21] => "St.Thomas's Day",
|
584
|
+
# [12, 25] => "Christmas Day"
|
585
|
+
}
|
586
|
+
|
587
|
+
# 移動祝日 (日付と曜日による)
|
588
|
+
moveable_feasts = {}
|
589
|
+
[[[ 9, 15, 2], "III Quatember"],
|
590
|
+
[[11, 27, 6], "Advent Sunday"],
|
591
|
+
[[12, 14, 2], "IV Quatember" ]].each do |pair|
|
592
|
+
date, name = pair
|
593
|
+
7.times do
|
594
|
+
moveable_feasts[date.dup] = name
|
595
|
+
date[1] += 1
|
596
|
+
if date[1] > 30
|
597
|
+
date[0] += 1
|
598
|
+
date[1] = 1
|
599
|
+
end
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
603
|
+
# 移動祝日
|
604
|
+
Moveable_feasts = {
|
605
|
+
# 復活祭からの日数による
|
606
|
+
-63 => "Septuagesima Sunday",
|
607
|
+
-56 => "Sexagesima Sunday",
|
608
|
+
-49 => "Quinquagesima Sunday",
|
609
|
+
-46 => "Ash Wednesday",
|
610
|
+
-42 => "Quadragesima Sunday",
|
611
|
+
-40 => "I Quatember",
|
612
|
+
-35 => "Reminizer Sunday",
|
613
|
+
-28 => "Oculi Sunday",
|
614
|
+
-21 => "Laetare Sunday",
|
615
|
+
-14 => "Judica Sunday",
|
616
|
+
-7 => "Palmarum",
|
617
|
+
-2 => "Good Friday",
|
618
|
+
# 0 => "Easter Day",
|
619
|
+
7 => "Low Sunday",
|
620
|
+
35 => "Rogation Sunday",
|
621
|
+
39 => "Ascension Day",
|
622
|
+
49 => "Whitsunday",
|
623
|
+
53 => "II Quatember",
|
624
|
+
56 => "Trinity Sunday",
|
625
|
+
60 => "Corpus Christi",
|
626
|
+
}.update(moveable_feasts)
|
627
|
+
|
628
|
+
#
|
629
|
+
# 暦法によってイベントの動作を変えるか否か
|
630
|
+
#
|
631
|
+
CalendarDepend = true
|
632
|
+
|
633
|
+
# 週日補正フラグ
|
634
|
+
# @return [Integer]
|
635
|
+
attr_reader :w
|
636
|
+
|
637
|
+
# 最も遅い満月の3月0日からの日数
|
638
|
+
# @return [Integer]
|
639
|
+
attr_reader :d
|
640
|
+
|
641
|
+
# クリスマスの3月0日からの日数
|
642
|
+
# @return [Integer]
|
643
|
+
attr_reader :x
|
644
|
+
|
645
|
+
# 平年数
|
646
|
+
# @return [Integer]
|
647
|
+
attr_reader :n
|
648
|
+
|
649
|
+
# 置閏周期
|
650
|
+
# @return [Integer]
|
651
|
+
attr_reader :s
|
652
|
+
|
653
|
+
# 月の位相の補正
|
654
|
+
# @return [Integer]
|
655
|
+
attr_reader :c
|
656
|
+
|
657
|
+
# ガード
|
658
|
+
# @return [Integer]
|
659
|
+
attr_reader :g
|
660
|
+
|
661
|
+
# ベース
|
662
|
+
# @return [Integer]
|
663
|
+
attr_reader :b
|
664
|
+
|
665
|
+
# 満月補正フラグ
|
666
|
+
# @return [Integer]
|
667
|
+
attr_reader :f
|
668
|
+
|
669
|
+
# 七曜
|
670
|
+
#
|
671
|
+
# @param [When::TM::TemporalPosition] date
|
672
|
+
# @param [When::TM::CalDate] base (not used)
|
673
|
+
#
|
674
|
+
# @return [When::Coordinates::Residue] 七曜
|
675
|
+
#
|
676
|
+
def week(date, base=nil)
|
677
|
+
When.Residue('Week')[date.to_i % 7]
|
678
|
+
end
|
679
|
+
|
680
|
+
# クリスマス
|
681
|
+
#
|
682
|
+
# @param [Numeric] date 西暦の年数
|
683
|
+
# @param [When::TM::TemporalPosition] date
|
684
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When::Gregorian)
|
685
|
+
#
|
686
|
+
# @return [Integer] クリスマスのユリウス通日(dateが西暦の年数の場合)
|
687
|
+
# @return [When::TM::CalDate] クリスマスのWhen::TM::CalDate(yearがWhen::TM::TemporalPositionの場合)
|
688
|
+
#
|
689
|
+
def christmas(date, frame=nil)
|
690
|
+
_event(date, 'christmas', frame) do |year, frame|
|
691
|
+
@x - 1 + frame._coordinates_to_number(year, 2, 0)
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
695
|
+
# 復活祭
|
696
|
+
#
|
697
|
+
# @param [Numeric] date 西暦の年数
|
698
|
+
# @param [When::TM::TemporalPosition] date
|
699
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When::Gregorian)
|
700
|
+
#
|
701
|
+
# @return [Integer] 復活祭のユリウス通日(dateが西暦の年数の場合)
|
702
|
+
# @return [When::TM::CalDate] 復活祭のWhen::TM::CalDate(yearがWhen::TM::TemporalPositionの場合)
|
703
|
+
#
|
704
|
+
def easter(date, frame=nil)
|
705
|
+
_event(date, 'easter', frame) do |year, frame|
|
706
|
+
golden = (year+@b) % @s + 1
|
707
|
+
m = (frame._lunar_equation(year) + 11*golden + @c) % 30
|
708
|
+
if @f == 0
|
709
|
+
m += 1 if m==0 || m==1 && golden>=@n
|
710
|
+
else
|
711
|
+
m += (golden-1) / @f
|
712
|
+
m -= 30 if m>=@n
|
713
|
+
end
|
714
|
+
result = frame._coordinates_to_number(year, 2, 0) + @d - 1 - m
|
715
|
+
result += @g - (result-@w) % 7 if @w<7
|
716
|
+
result + frame._easter_delay(year)
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
# イベントの標準的な間隔を返す
|
721
|
+
# @private
|
722
|
+
def _delta(parameter=nil)
|
723
|
+
return When::P1Y
|
724
|
+
end
|
725
|
+
|
726
|
+
# @private
|
727
|
+
alias :christmas_delta :_delta
|
728
|
+
|
729
|
+
# @private
|
730
|
+
alias :easter_delta :_delta
|
731
|
+
|
732
|
+
# 固定祝日
|
733
|
+
#
|
734
|
+
# @param [When::TM::TemporalPosition] date
|
735
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When::Gregorian)
|
736
|
+
#
|
737
|
+
# @return [String] 祝日の名称
|
738
|
+
# @return [nil] 祝日に該当しない
|
739
|
+
#
|
740
|
+
def fixed_feast(date, frame=nil)
|
741
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Christian)
|
742
|
+
Fixed_feasts[date.cal_date[-2..-1]]
|
743
|
+
end
|
744
|
+
|
745
|
+
# 移動祝日
|
746
|
+
#
|
747
|
+
# @param [When::TM::TemporalPosition] date
|
748
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When::Gregorian)
|
749
|
+
#
|
750
|
+
# @return [String] 祝日の名称
|
751
|
+
# @return [nil] 祝日に該当しない
|
752
|
+
#
|
753
|
+
def moveable_feast(date, frame=nil)
|
754
|
+
result = Moveable_feasts[date.to_i - easter(date, frame).to_i]
|
755
|
+
return result if result
|
756
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Christian)
|
757
|
+
Moveable_feasts[date.cal_date[-2..-1] + [date.to_i % 7]]
|
758
|
+
end
|
759
|
+
|
760
|
+
private
|
761
|
+
|
762
|
+
# オブジェクトの正規化
|
763
|
+
# w - 週日補正フラグ(デフォルト 6)
|
764
|
+
# d - 最も遅い満月 (デフォルト 3月0日から 50日)
|
765
|
+
# x - クリスマス (デフォルト 3月0日から300日)
|
766
|
+
# n - 平年数 (デフォルト 12)
|
767
|
+
# s - 置閏周期 (デフォルト 19)
|
768
|
+
# c - 月の位相の補正(デフォルト 3)
|
769
|
+
# g - ガード (デフォルト 7)
|
770
|
+
# b - ベース (デフォルト 0)
|
771
|
+
# f - 満月補正フラグ(デフォルト 0)
|
772
|
+
def _normalize(args=[], options={})
|
773
|
+
w, d, x, n, s, c, g, b, f = args
|
774
|
+
@w = (w || @w || 6).to_i
|
775
|
+
@d = (d || @d || 50).to_i
|
776
|
+
@x = (x || @x || 300).to_i
|
777
|
+
@n = (n || @n || 12).to_i
|
778
|
+
@s = (s || @s || 19).to_i
|
779
|
+
@c = (c || @c || 3).to_i
|
780
|
+
@g = (g || @g || 7).to_i
|
781
|
+
@b = (b || @b || 0).to_i
|
782
|
+
@f = (f || @f || 0).to_i
|
783
|
+
@event = 'easter'
|
784
|
+
@prime ||= [['Month'], ['Week']]
|
785
|
+
super
|
786
|
+
end
|
787
|
+
|
788
|
+
#
|
789
|
+
# 任意の暦をグレゴリオorユリウス暦日に変換
|
790
|
+
#
|
791
|
+
def _to_date_for_note(date)
|
792
|
+
return When.Calendar(When::CalendarTypes::Christian._default_start(date)) ^ date if ::Object.const_defined?(:Date) &&
|
793
|
+
::Date.method_defined?(:+) && date.kind_of?(::Date)
|
794
|
+
return When::Gregorian ^ date if date.kind_of?(::Time)
|
795
|
+
return date if date.frame.kind_of?(When::CalendarTypes::Christian)
|
796
|
+
When.Calendar(date.frame.iri =~ /Coptic/ || date.to_i < 2299161 ? 'Julian' : 'Gregorian') ^ date
|
797
|
+
end
|
798
|
+
|
799
|
+
# 当該年のイベントの日付
|
800
|
+
# date : 西暦の年数 or When::TM::(Temporal)Position
|
801
|
+
# event : イベント名 (String)
|
802
|
+
# frame : 暦法(デフォルトは When:Gregorian)
|
803
|
+
#
|
804
|
+
# @return [Integer] イベントのユリウス通日(dateが西暦の年数の場合)
|
805
|
+
# @return [When::TM::CalDate] イベントのWhen::TM::CalDate(yearがWhen::TM::(Temporal)Positionの場合)
|
806
|
+
#
|
807
|
+
def _event(date, event, frame=nil)
|
808
|
+
case date
|
809
|
+
when Numeric
|
810
|
+
year = date * 1
|
811
|
+
when When::TimeValue
|
812
|
+
options = date._attr
|
813
|
+
options[:precision] = When::DAY
|
814
|
+
options[:events] = [event]
|
815
|
+
if frame
|
816
|
+
frame = When.Calendar(frame)
|
817
|
+
date = frame.jul_trans(date, options)
|
818
|
+
else
|
819
|
+
frame = date.frame
|
820
|
+
end
|
821
|
+
year = date.most_significant_coordinate * 1
|
822
|
+
else
|
823
|
+
raise TypeError, "Irregal date type: #{date.class}"
|
824
|
+
end
|
825
|
+
frame ||= When::Gregorian
|
826
|
+
result = yield(year, frame)
|
827
|
+
return result if date.kind_of?(Numeric)
|
828
|
+
return frame.jul_trans(result, options)
|
829
|
+
end
|
830
|
+
end
|
831
|
+
end
|