when_exe 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. data/bin/irb.rc +1 -0
  2. data/bin/locales.rb +8 -6
  3. data/bin/when.rb +1 -1
  4. data/lib/when_exe.rb +231 -146
  5. data/lib/when_exe/basictypes.rb +108 -18
  6. data/lib/when_exe/calendarnote.rb +263 -116
  7. data/lib/when_exe/calendartypes.rb +413 -22
  8. data/lib/when_exe/coordinates.rb +58 -36
  9. data/lib/when_exe/core/compatibility.rb +8 -6
  10. data/lib/when_exe/core/extension.rb +40 -15
  11. data/lib/when_exe/ephemeris.rb +20 -19
  12. data/lib/when_exe/{region → ephemeris}/moon.rb +4 -4
  13. data/lib/when_exe/{region/ephemeric_notes.rb → ephemeris/notes.rb} +25 -6
  14. data/lib/when_exe/{region → ephemeris}/planets.rb +0 -0
  15. data/lib/when_exe/{region → ephemeris}/sun.rb +7 -3
  16. data/lib/when_exe/{region → ephemeris}/v50.rb +0 -0
  17. data/lib/when_exe/googlecalendar.rb +2 -2
  18. data/lib/when_exe/icalendar.rb +3 -3
  19. data/lib/when_exe/inspect.rb +130 -70
  20. data/lib/when_exe/locales/af.rb +2 -2
  21. data/lib/when_exe/locales/akt.rb +176 -0
  22. data/lib/when_exe/locales/ar.rb +2 -2
  23. data/lib/when_exe/locales/{locales.rb → autoload.rb} +6 -2
  24. data/lib/when_exe/locales/az.rb +2 -2
  25. data/lib/when_exe/locales/bg.rb +2 -2
  26. data/lib/when_exe/locales/bn.rb +2 -2
  27. data/lib/when_exe/locales/bs.rb +2 -2
  28. data/lib/when_exe/locales/ca.rb +2 -2
  29. data/lib/when_exe/locales/cs.rb +2 -2
  30. data/lib/when_exe/locales/cy.rb +2 -2
  31. data/lib/when_exe/locales/da.rb +2 -2
  32. data/lib/when_exe/locales/de.rb +2 -2
  33. data/lib/when_exe/locales/de_AT.rb +2 -2
  34. data/lib/when_exe/locales/de_CH.rb +2 -2
  35. data/lib/when_exe/locales/el.rb +2 -2
  36. data/lib/when_exe/locales/en.rb +2 -2
  37. data/lib/when_exe/locales/en_AU.rb +2 -2
  38. data/lib/when_exe/locales/en_CA.rb +2 -2
  39. data/lib/when_exe/locales/en_GB.rb +2 -2
  40. data/lib/when_exe/locales/en_IE.rb +2 -2
  41. data/lib/when_exe/locales/en_IN.rb +3 -3
  42. data/lib/when_exe/locales/en_NZ.rb +2 -2
  43. data/lib/when_exe/locales/en_US.rb +2 -2
  44. data/lib/when_exe/locales/en_ZA.rb +88 -0
  45. data/lib/when_exe/locales/encoding_conversion.rb +126 -0
  46. data/lib/when_exe/locales/eo.rb +2 -2
  47. data/lib/when_exe/locales/es.rb +2 -2
  48. data/lib/when_exe/locales/es_419.rb +2 -2
  49. data/lib/when_exe/locales/es_AR.rb +2 -2
  50. data/lib/when_exe/locales/es_CL.rb +2 -2
  51. data/lib/when_exe/locales/es_CO.rb +2 -2
  52. data/lib/when_exe/locales/es_CR.rb +2 -2
  53. data/lib/when_exe/locales/es_EC.rb +2 -2
  54. data/lib/when_exe/locales/es_MX.rb +2 -2
  55. data/lib/when_exe/locales/es_PA.rb +2 -2
  56. data/lib/when_exe/locales/es_PE.rb +2 -2
  57. data/lib/when_exe/locales/es_US.rb +84 -0
  58. data/lib/when_exe/locales/es_VE.rb +2 -2
  59. data/lib/when_exe/locales/et.rb +2 -2
  60. data/lib/when_exe/locales/eu.rb +2 -2
  61. data/lib/when_exe/locales/fa.rb +2 -2
  62. data/lib/when_exe/locales/fi.rb +3 -3
  63. data/lib/when_exe/locales/fr.rb +2 -2
  64. data/lib/when_exe/locales/fr_CA.rb +2 -2
  65. data/lib/when_exe/locales/fr_CH.rb +2 -2
  66. data/lib/when_exe/locales/gl.rb +2 -2
  67. data/lib/when_exe/locales/he.rb +3 -3
  68. data/lib/when_exe/locales/hi.rb +2 -2
  69. data/lib/when_exe/locales/hi_IN.rb +2 -2
  70. data/lib/when_exe/locales/hr.rb +2 -2
  71. data/lib/when_exe/locales/hu.rb +6 -5
  72. data/lib/when_exe/locales/iast.rb +90 -0
  73. data/lib/when_exe/locales/id.rb +2 -2
  74. data/lib/when_exe/locales/is.rb +2 -2
  75. data/lib/when_exe/locales/it.rb +2 -2
  76. data/lib/when_exe/locales/it_CH.rb +2 -2
  77. data/lib/when_exe/locales/ja.rb +2 -2
  78. data/lib/when_exe/locales/kn.rb +2 -2
  79. data/lib/when_exe/locales/ko.rb +2 -2
  80. data/lib/when_exe/locales/links.rb +3 -3
  81. data/lib/when_exe/locales/lo.rb +2 -2
  82. data/lib/when_exe/{parts → locales}/locale.rb +77 -49
  83. data/lib/when_exe/locales/lt.rb +6 -2
  84. data/lib/when_exe/locales/lv.rb +2 -2
  85. data/lib/when_exe/locales/mk.rb +2 -2
  86. data/lib/when_exe/locales/mn.rb +2 -2
  87. data/lib/when_exe/locales/ms.rb +2 -2
  88. data/lib/when_exe/locales/nb.rb +2 -2
  89. data/lib/when_exe/locales/ne.rb +2 -2
  90. data/lib/when_exe/locales/nl.rb +2 -2
  91. data/lib/when_exe/locales/nn.rb +2 -2
  92. data/lib/when_exe/locales/or.rb +2 -2
  93. data/lib/when_exe/locales/pl.rb +2 -2
  94. data/lib/when_exe/locales/pt.rb +2 -2
  95. data/lib/when_exe/locales/pt_BR.rb +2 -2
  96. data/lib/when_exe/locales/rm.rb +2 -2
  97. data/lib/when_exe/locales/ro.rb +2 -2
  98. data/lib/when_exe/locales/ru.rb +2 -2
  99. data/lib/when_exe/locales/sk.rb +2 -2
  100. data/lib/when_exe/locales/sl.rb +2 -2
  101. data/lib/when_exe/locales/sr.rb +2 -2
  102. data/lib/when_exe/locales/sv.rb +2 -2
  103. data/lib/when_exe/locales/sw.rb +2 -2
  104. data/lib/when_exe/locales/ta.rb +95 -0
  105. data/lib/when_exe/locales/th.rb +2 -2
  106. data/lib/when_exe/locales/tl.rb +3 -3
  107. data/lib/when_exe/locales/tr.rb +2 -2
  108. data/lib/when_exe/locales/transliteration_table.rb +62 -0
  109. data/lib/when_exe/locales/uk.rb +15 -15
  110. data/lib/when_exe/locales/ur.rb +2 -2
  111. data/lib/when_exe/locales/uz.rb +2 -2
  112. data/lib/when_exe/locales/vi.rb +2 -2
  113. data/lib/when_exe/locales/wo.rb +2 -2
  114. data/lib/when_exe/locales/zh_CN.rb +2 -2
  115. data/lib/when_exe/locales/zh_HK.rb +15 -15
  116. data/lib/when_exe/locales/zh_TW.rb +2 -2
  117. data/lib/when_exe/locales/zh_YUE.rb +77 -0
  118. data/lib/when_exe/mini_application.rb +22 -12
  119. data/lib/when_exe/parts/geometric_complex.rb +16 -1
  120. data/lib/when_exe/parts/method_cash.rb +184 -238
  121. data/lib/when_exe/parts/resource.rb +65 -16
  122. data/lib/when_exe/region/armenian.rb +56 -0
  123. data/lib/when_exe/region/bahai.rb +13 -13
  124. data/lib/when_exe/region/balinese.rb +33 -35
  125. data/lib/when_exe/region/chinese.rb +82 -78
  126. data/lib/when_exe/region/{chinese_calendar.rb → chinese/calendars.rb} +59 -40
  127. data/lib/when_exe/region/{chinese_epoch.rb → chinese/epochs.rb} +3 -4
  128. data/lib/when_exe/region/{chinese_twin.rb → chinese/twins.rb} +48 -51
  129. data/lib/when_exe/region/christian.rb +236 -127
  130. data/lib/when_exe/region/coptic.rb +9 -10
  131. data/lib/when_exe/region/dee.rb +48 -0
  132. data/lib/when_exe/region/discordian.rb +225 -0
  133. data/lib/when_exe/region/far_east.rb +2 -6
  134. data/lib/when_exe/region/french.rb +7 -17
  135. data/lib/when_exe/region/geologicalage.rb +0 -1
  136. data/lib/when_exe/region/goddess.rb +58 -0
  137. data/lib/when_exe/region/indian.rb +323 -231
  138. data/lib/when_exe/region/iranian.rb +159 -22
  139. data/lib/when_exe/region/islamic.rb +7 -9
  140. data/lib/when_exe/region/japanese.rb +14 -803
  141. data/lib/when_exe/region/japanese/calendars.rb +397 -0
  142. data/lib/when_exe/region/japanese/epochs.rb +426 -0
  143. data/lib/when_exe/region/{nihon_shoki.rb → japanese/nihon_shoki.rb} +0 -2
  144. data/lib/when_exe/region/{japanese_notes.rb → japanese/notes.rb} +179 -150
  145. data/lib/when_exe/region/japanese/residues.rb +1306 -0
  146. data/lib/when_exe/region/{japanese_twin.rb → japanese/twins.rb} +12 -15
  147. data/lib/when_exe/region/javanese.rb +16 -14
  148. data/lib/when_exe/region/jewish.rb +8 -9
  149. data/lib/when_exe/region/korean.rb +146 -35
  150. data/lib/when_exe/region/m17n.rb +8 -10
  151. data/lib/when_exe/region/martian.rb +44 -16
  152. data/lib/when_exe/region/mayan.rb +12 -10
  153. data/lib/when_exe/region/pope.rb +0 -1
  154. data/lib/when_exe/region/residue.rb +4 -5
  155. data/lib/when_exe/region/roman.rb +20 -24
  156. data/lib/when_exe/region/ryukyu.rb +3 -4
  157. data/lib/when_exe/region/shire.rb +97 -94
  158. data/lib/when_exe/region/symmetry.rb +50 -0
  159. data/lib/when_exe/region/thai.rb +164 -56
  160. data/lib/when_exe/region/tibetan.rb +86 -86
  161. data/lib/when_exe/region/vietnamese.rb +9 -12
  162. data/lib/when_exe/region/weekdate.rb +80 -0
  163. data/lib/when_exe/region/world.rb +65 -70
  164. data/lib/when_exe/region/yerm.rb +98 -0
  165. data/lib/when_exe/region/zoroastrian.rb +203 -0
  166. data/lib/when_exe/timestandard.rb +4 -4
  167. data/lib/when_exe/tmobjects.rb +1 -3
  168. data/lib/when_exe/tmposition.rb +13 -12
  169. data/lib/when_exe/tmreference.rb +11 -10
  170. data/lib/when_exe/version.rb +1 -1
  171. data/link_to_online_documents +3 -3
  172. data/test/examples/Residue.m17n +1 -1
  173. data/test/examples/Terms.m17n +1 -1
  174. data/test/test.rb +2 -1
  175. data/test/test/basictypes.rb +18 -2
  176. data/test/test/calendarnote.rb +1 -1
  177. data/test/test/calendartypes.rb +1 -1
  178. data/test/test/coordinates.rb +7 -7
  179. data/test/test/{region → ephemeris}/moon.rb +0 -0
  180. data/test/test/{region → ephemeris}/planets.rb +0 -0
  181. data/test/test/{region → ephemeris}/sun.rb +0 -0
  182. data/test/test/parts.rb +8 -13
  183. data/test/test/region/christian.rb +245 -0
  184. data/test/test/region/french.rb +16 -16
  185. data/test/test/region/iran.rb +34 -34
  186. data/test/test/region/japanese.rb +6 -4
  187. data/test/test/region/m17n.rb +8 -7
  188. data/test/test/region/mayan.rb +12 -12
  189. data/test/test/region/residue.rb +20 -4
  190. data/test/test/region/thai.rb +25 -3
  191. data/test/test/region/yerm.rb +146 -0
  192. metadata +39 -20
  193. data/lib/when_exe/region/japanese_residues.rb +0 -1212
  194. data/test/test/region/civil.rb +0 -124
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2014 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
+ Symmetry = [self, [
13
+ "locale:[=en:, ja]",
14
+ "names:[Symmetry=]",
15
+ "[Sym454=en:Symmetry454, 対称454暦=]",
16
+ "[Sym010=http://individual.utoronto.ca/kalendis/classic.htm, 対称010暦=]"
17
+ ]]
18
+ end
19
+
20
+ module CalendarTypes
21
+
22
+ _pattern = (0...293).to_a.map {|year| (52 * year + 146) % 293 < 52 ? 371 : 364}
23
+
24
+ #
25
+ # Symmetry 454 Calendar
26
+ #
27
+ Sym454 = [CyclicTableBased, {
28
+ 'label' => 'Symmetry::Sym454',
29
+ 'origin_of_LSC' => 1721062,
30
+ 'rule_table' => {
31
+ 'T' => {'Rule' =>_pattern},
32
+ 364 => {'Length'=>[28,35,28] * 4},
33
+ 371 => {'Length'=>[28,35,28] * 3 + [28,35,35]}
34
+ }
35
+ }]
36
+
37
+ #
38
+ # Symmetry 010 Calendar
39
+ #
40
+ Sym010 = [CyclicTableBased, {
41
+ 'label' => 'Symmetry::Sym010',
42
+ 'origin_of_LSC' => 1721062,
43
+ 'rule_table' => {
44
+ 'T' => {'Rule' =>_pattern},
45
+ 364 => {'Length'=>[30,31,30] * 4},
46
+ 371 => {'Length'=>[30,31,30] * 3 + [30,31,37]}
47
+ }
48
+ }]
49
+ end
50
+ end
@@ -8,23 +8,43 @@
8
8
  module When
9
9
  class BasicTypes::M17n
10
10
 
11
- ThaiTerms = [self, [
12
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
11
+ Thai = [self, [
13
12
  "locale:[=en:, ja=ja:, alias]",
14
- "names:[ThaiTerms=]",
15
- "[ThaiLuniSolar=en:Thai_lunar_calendar, タイ太陰太陽暦=ja:%%<チャントラカティ>]"
13
+ "names:[Thai=]",
14
+ "[ThaiLuniSolar=en:Thai_lunar_calendar, タイ太陰太陽暦=ja:%%<チャントラカティ>]",
15
+
16
+ [self,
17
+ "names:[IntercalaryMonth=en:Intercalation, 閏月]",
18
+ "[%s Śuklapakṣa=, %s 白分=, _IAST_]",
19
+ "[%s Kṛṣṇapakṣa=, %s 黒分=, _IAST_]",
20
+ "[adhika %s Śuklapakṣa=, 閏%s 白分=, _IAST_]",
21
+ "[adhika %s Kṛṣṇapakṣa=, 閏%s 黒分=, _IAST_]"
22
+ ],
23
+
24
+ [self,
25
+ "names:[LunarMonth=, 太陰月=ja:%%<月_(暦)>]",
26
+ "[Mārgaśīra=en:Margashirsha, マールガシールシャ=, _IAST_]",
27
+ "[Pauṣa=en:Pausha, パウシャ=, _IAST_]",
28
+ "[Māgha=en:Maagha, マーガ=, _IAST_]",
29
+ "[Phālguna=en:Phalguna, パールグナ=, _IAST_]",
30
+ "[Caitra=en:Chaitra, チャイトラ=, _IAST_]",
31
+ "[Vaiśākha=en:Vaisakha, ヴァイシャーカ=, _IAST_]",
32
+ "[Jyaiṣṭha=en:Jyeshta, ジャイシュタ=, _IAST_]",
33
+ "[Āṣāḍha=en:Aashaadha, アーシャーダ=, _IAST_]",
34
+ "[Śrāvaṇa=en:Shraavana, シュラーヴァナ=, _IAST_]",
35
+ "[Bhādrapada=en:Bhadrapada, バードラパダ=, _IAST_]",
36
+ "[Āśvina=en:Ashwin, アーシュヴィナ=, _IAST_]",
37
+ "[Kārttika=en:Kartika_(month), カールッティカ=, _IAST_]"
38
+ ]
16
39
  ]]
17
40
  end
18
41
 
19
42
  module CalendarTypes
20
43
 
21
44
  #
22
- # The Calendar of Thai people in China
45
+ # ソンクラーンとタイ暦の暦定数
23
46
  #
24
- class ThaiC < TableBased
25
-
26
- NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
27
- LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9&,9*,9,9<,10,10<,11,11<,12,12<'
47
+ module Songkran
28
48
 
29
49
  # ソンクラーン - 太陽の白羊宮入り
30
50
  #
@@ -37,14 +57,56 @@ module When
37
57
  return @origin_of_LSC - 1 + e['H'][0]
38
58
  end
39
59
 
60
+ # y で指定した年の暦定数を返します。
61
+ #
62
+ # @param [Integer] y 年
63
+ #
64
+ # @return [Hash]
65
+ #
66
+ def _eph(y) # C
67
+ h = (y+4).divmod(9)[0] # y
68
+ h = (y-h).divmod(3)[0] # z
69
+ h = (y+1-h).divmod(2)[0] # r (2 => h?)
70
+ h = (36525876*y+149049-h).divmod(100000) # s
71
+ a = (h[0]*11+633-((h[0]+7368).divmod(8878))[0]).divmod(692)
72
+ m = (h[0]+a[0]+0).divmod(30)
73
+ return {'H'=>h, 'A'=>a, 'M'=>m}
74
+ end
75
+ end
76
+
77
+ #
78
+ # The Calendar of Thai (Prototype)
79
+ #
80
+ class ThaiP < TableBased
81
+
82
+ include Lunar
83
+ include Songkran
84
+
85
+ # 月番号
86
+ _intercalary_month = When.Resource('_m:Thai::IntercalaryMonth::*')
87
+ Indices = [
88
+ When.Index('Thai::LunarMonth', {:branch=>{0 => _intercalary_month[0],
89
+ 0.5 => _intercalary_month[1],
90
+ -1.5 => _intercalary_month[2],
91
+ -1 => _intercalary_month[3]}}),
92
+ When::Coordinates::DefaultDayIndex
93
+ ]
94
+
95
+ # 月の大小と閏
96
+ _NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
97
+ _LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9&,9*,9,9<,10,10<,11,11<,12,12<'
98
+ RuleTable = {
99
+ 354 => {'Length'=>[15,15,15,14]*6, 'IDs' => _NormalIDs},
100
+ 355 => {'Length'=>[15,15,15,14]*3 + [15]*4 + [15,15,15,14]*2, 'IDs' => _NormalIDs},
101
+ 384 => {'Length'=>[15,15,15,14]*4 + [15]*2 + [15,15,15,14]*2, 'IDs' => _LeapIDs}
102
+ }
103
+
40
104
  private
41
105
 
42
- # ThaiC+オブジェクトの性質定義を初期設定します。
43
- #
44
106
  # オブジェクトの正規化
45
107
  # @private
46
108
  def _normalize(args=[], options={})
47
- @label ||= When.Resource('_m:ThaiTerms::ThaiLuniSolar')
109
+ @label ||= 'Thai::ThaiLuniSolar'
48
110
 
49
111
  Rational
50
112
  @mean_month ||= 29 + Rational( 373, 703)
@@ -54,24 +116,8 @@ module When
54
116
  @origin_of_LSC ||= 1954168
55
117
  @origin_of_MSC = @origin_of_MSC.to_i
56
118
  @origin_of_LSC = @origin_of_LSC.to_i
57
-
58
- intercalary_month = When.Resource('_m:IndianTerms::IntercalaryMonth::*')
59
- @indices ||= [
60
- Coordinates::Index.new({:branch=>{0 => intercalary_month[0],
61
- 0.5 => intercalary_month[1],
62
- -1.5 => intercalary_month[2],
63
- -1 => intercalary_month[3]},
64
- :trunk =>When.Resource('_m:IndianTerms::LunarMonth::*')}),
65
- Coordinates::DefaultDayIndex
66
- ]
67
- @rule_table ||= {
68
- 354 => {'Length'=>[15,15,15,14]*6, 'IDs' => NormalIDs},
69
- 355 => {'Length'=>[15,15,15,14]*3 + [15]*4 + [15,15,15,14]*2, 'IDs' => NormalIDs},
70
- 356 => {'Length'=>[15,15,15,14]*3 + [15]*7 + [14] + [15]*4, 'IDs' => NormalIDs},
71
- 383 => {'Length'=>[15,14,15,15]*6 + [15,14], 'IDs' => LeapIDs},
72
- 384 => {'Length'=>[15,15,15,14]*4 + [15]*2 + [15,15,15,14]*2, 'IDs' => LeapIDs}
73
- }
74
-
119
+ @indices ||= Indices
120
+ @rule_table ||= RuleTable
75
121
  super
76
122
  end
77
123
 
@@ -85,26 +131,13 @@ module When
85
131
  y = +date[0]
86
132
  e0 = _thai(y, 0)[0]
87
133
  e1 = _thai(y+1,0)[0]
88
- e0['T'] -= 1 if (e1['T']-e0['T'] == 353)
134
+ case e1['T']-e0['T']
135
+ when 353,383 ; e0['T'] -= 1
136
+ when 385 ; e0['T'] += 1
137
+ end
89
138
  return @origin_of_LSC - 1 + e0['T'] - 30*3 - 29*2
90
139
  end
91
140
 
92
- # y で指定した年の暦定数を返します。
93
- #
94
- # @param [Integer] y 年
95
- #
96
- # @return [Hash]
97
- #
98
- def _eph(y) # C
99
- h = (y+4).divmod(9)[0] # y
100
- h = (y-h).divmod(3)[0] # z
101
- h = (y+1-h).divmod(2)[0] # r (2 => h?)
102
- h = (36525876*y+149049-h).divmod(100000) # s
103
- a = (h[0]*11+633-((h[0]+7368).divmod(8878))[0]).divmod(692)
104
- m = (h[0]+a[0]+0).divmod(30)
105
- return {'H'=>h, 'A'=>a, 'M'=>m}
106
- end
107
-
108
141
  # y で指定した年の平閏、8月の大小を判定します。
109
142
  #
110
143
  # @param [Integer] y 年
@@ -137,27 +170,102 @@ module When
137
170
  end
138
171
  end
139
172
 
173
+ #
174
+ # The Calendar of Thai people in China (Calculation)
175
+ #
176
+ class ThaiC < ThaiP
177
+
178
+ # オブジェクトの正規化
179
+ # @private
180
+ def _normalize(args=[], options={})
181
+ super
182
+ @thoreshold = (@mean_month * 13) % 1
183
+ @eoch_new_moon = (@origin_of_LSC - 18.90409 + 12 * @mean_month / 19)
184
+ end
185
+
186
+ # 年初の通日
187
+ #
188
+ # @param [Array<Numeric>] date ( 年 )
189
+ #
190
+ # @return [Integer] 年初の通日
191
+ #
192
+ def _sdn_(date)
193
+ year = +date[0]
194
+ prev = _meton(year-1)
195
+ this = _meton(year)
196
+ this += 1 if this.floor - prev.floor > 360 && this % 1 > @thoreshold
197
+ this.floor
198
+ end
199
+
200
+ private
201
+
202
+ def _meton(year)
203
+ (((year + 9) * 235 / 19) - 111) * @mean_month + @eoch_new_moon
204
+ end
205
+ end
206
+
207
+ #
208
+ # The Calendar of Thai people in China (Table based)
209
+ #
210
+ class ThaiT < CyclicTableBased
211
+
212
+ include Lunar
213
+ include Songkran
214
+
215
+ Pattern = %w(
216
+ B A C A C B A C A B C A A C B C A A C B A C A C B A C A A C
217
+ B A C A C A B C A A C B C A A C B A C A C B A C A B C A A C
218
+ B C A A C B A C A C B A C A B C A A C A C B A C A B C A A C
219
+ A C B B C A A C A C A A C B A C A B C A C A B C A A C B C A
220
+ A C B A C A A C B C A A C B A C A C B A C A A C B A C A C B
221
+ A C A B C A C A B C A A C A B C A C A B C A A C B C A A C B
222
+ A C A A C B C A A C B A C A C B A C A A C B A C A C B A C A)
223
+
224
+ # オブジェクトの正規化
225
+ # @private
226
+ def _normalize(args=[], options={})
227
+ @origin_of_LSC = 2393198
228
+ @origin_of_MSC = 1202
229
+ @epoch_in_CE = 1840
230
+ @indices = ThaiP::Indices
231
+ pattern = Pattern.dup
232
+ if @patch
233
+ @patch.scan(/\d+[ABC]/i) do |patch|
234
+ pattern[patch[0..-2].to_i-@epoch_in_CE] = patch[-1..-1].upcase
235
+ end
236
+ end
237
+ @rule_table = {
238
+ 'T' => {'Rule' => pattern},
239
+ 'A' => {'Rule' => [354]},
240
+ 'B' => {'Rule' => [355]},
241
+ 'C' => {'Rule' => [384]}}.merge(ThaiP::RuleTable)
242
+ super
243
+ end
244
+ end
245
+
140
246
  #
141
247
  # The Calendar of central Thailand
142
248
  #
143
- class ThaiB < ThaiC
249
+ class Thai < ThaiP
144
250
 
251
+ # 年の朔閏パターン
145
252
  YEAR_TYPE = {'A'=>354, 'B'=>355, 'C'=>384, 'D'=>384, 'E'=>384}
146
253
 
147
- NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
148
- LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8&,8*,8,8<,9,9<,10,10<,11,11<,12,12<'
254
+ # 月の大小と閏
255
+ _NormalIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8,8<,9,9<,10,10<,11,11<,12,12<'
256
+ _LeapIDs = '1,1<,2,2<,3,3<,4,4<,5,5<,6,6<,7,7<,8&,8*,8,8<,9,9<,10,10<,11,11<,12,12<'
257
+ RuleTable = {
258
+ 354 => {'Length'=>[15,14,15,15]*6, 'IDs' => _NormalIDs},
259
+ 355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => _NormalIDs},
260
+ 384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => _LeapIDs }
261
+ }
149
262
 
150
263
  private
151
264
 
152
265
  # オブジェクトの正規化
153
266
  #
154
267
  def _normalize(args=[], options={})
155
- @rule_table ||= {
156
- 354 => {'Length'=>[15,14,15,15]*6, 'IDs' => NormalIDs},
157
- 355 => {'Length'=>[15,14,15,15]*3 + [15]*4 + [15,14,15,15]*2, 'IDs' => NormalIDs},
158
- 384 => {'Length'=>[15,14,15,15]*4 + [15]*2 + [15,14,15,15]*2, 'IDs' => LeapIDs }
159
- }
160
-
268
+ @rule_table ||= RuleTable
161
269
  super
162
270
  end
163
271
 
@@ -8,10 +8,9 @@
8
8
  module When
9
9
  class BasicTypes::M17n
10
10
 
11
- TibetanTerms = [self, [
12
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
11
+ Tibetan = [self, [
13
12
  "locale:[=en:, ja=ja:, alias]",
14
- "names:[TibetanTerms=]",
13
+ "names:[Tibetan=]",
15
14
  "[Tibetan=en:Tibetan_calendar, 時輪暦=ja:%%<チベット暦>]",
16
15
 
17
16
  [self,
@@ -44,79 +43,82 @@ module When
44
43
  ]]
45
44
  end
46
45
 
47
- module When::Coordinates
48
-
49
- # 六十干支
50
- Tibetan = [When::BasicTypes::M17n, [
51
- "namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
52
- "locale:[=en:, ja=ja:, alias]",
53
- "names:[Tibetan]",
46
+ module Coordinates
47
+
48
+ # 六十干支
49
+ Tibetan = [When::BasicTypes::M17n, [
50
+ "locale:[=en:, ja=ja:, alias]",
51
+ "names:[Tibetan]",
52
+
53
+ [StemBranch,
54
+ "label:[Stem-Branch, *干支]", "divisor:60", "day:11", "year:4",
55
+ [StemBranch, "label:[Wood-Rat=, *木男鼠=]", "remainder: 0"],
56
+ [StemBranch, "label:[Wood-Ox=, *木女牛=]", "remainder: 1"],
57
+ [StemBranch, "label:[Fire-Tiger=, *火男虎=]", "remainder: 2"],
58
+ [StemBranch, "label:[Fire-Rabbit=, *火女兎=]", "remainder: 3"],
59
+ [StemBranch, "label:[Earth-Dragon=, *土男龍=]", "remainder: 4"],
60
+ [StemBranch, "label:[Earth-Snake=, *土女蛇=]", "remainder: 5"],
61
+ [StemBranch, "label:[Iron-Horse=, *金男馬=]", "remainder: 6"],
62
+ [StemBranch, "label:[Iron-Goat=, *金女羊=]", "remainder: 7"],
63
+ [StemBranch, "label:[Water-Monkey=, *水男猴=]", "remainder: 8"],
64
+ [StemBranch, "label:[Water-Rooster=, *水女鷄=]", "remainder: 9"],
65
+ [StemBranch, "label:[Wood-Dog=, *木男狗=]", "remainder:10"],
66
+ [StemBranch, "label:[Wood-Pig=, *木女猪=]", "remainder:11"],
67
+ [StemBranch, "label:[Fire-Rat=, *火男鼠=]", "remainder:12"],
68
+ [StemBranch, "label:[Fire-Ox=, *火女牛=]", "remainder:13"],
69
+ [StemBranch, "label:[Earth-Tiger=, *土男虎=]", "remainder:14"],
70
+ [StemBranch, "label:[Earth-Rabbit=, *土女兎=]", "remainder:15"],
71
+ [StemBranch, "label:[Iron-Dragon=, *金男龍=]", "remainder:16"],
72
+ [StemBranch, "label:[Iron-Snake=, *金女蛇=]", "remainder:17"],
73
+ [StemBranch, "label:[Water-Horse=, *水男馬=]", "remainder:18"],
74
+ [StemBranch, "label:[Water-Goat=, *水女羊=]", "remainder:19"],
75
+ [StemBranch, "label:[Wood-Monkey=, *木男猴=]", "remainder:20"],
76
+ [StemBranch, "label:[Wood-Rooster=, *木女鷄=]", "remainder:21"],
77
+ [StemBranch, "label:[Fire-Dog=, *火男狗=]", "remainder:22"],
78
+ [StemBranch, "label:[Fire-Pig=, *火女猪=]", "remainder:23"],
79
+ [StemBranch, "label:[Earth-Rat=, *土男鼠=]", "remainder:24"],
80
+ [StemBranch, "label:[Earth-Ox=, *土女牛=]", "remainder:25"],
81
+ [StemBranch, "label:[Iron-Tiger=, *金男虎=]", "remainder:26"],
82
+ [StemBranch, "label:[Iron-Rabbit=, *金女兎=]", "remainder:27"],
83
+ [StemBranch, "label:[Water-Dragon=, *水男龍=]", "remainder:28"],
84
+ [StemBranch, "label:[Water-Snake=, *水女蛇=]", "remainder:29"],
85
+ [StemBranch, "label:[Wood-Horse=, *木男馬=]", "remainder:30"],
86
+ [StemBranch, "label:[Wood-Goat=, *木女羊=]", "remainder:31"],
87
+ [StemBranch, "label:[Fire-Monkey=, *火男猴=]", "remainder:32"],
88
+ [StemBranch, "label:[Fire-Rooster=, *火女鷄=]", "remainder:33"],
89
+ [StemBranch, "label:[Earth-Dog=, *土男狗=]", "remainder:34"],
90
+ [StemBranch, "label:[Earth-Pig=, *土女猪=]", "remainder:35"],
91
+ [StemBranch, "label:[Iron-Rat=, *金男鼠=]", "remainder:36"],
92
+ [StemBranch, "label:[Iron-Ox=, *金女牛=]", "remainder:37"],
93
+ [StemBranch, "label:[Water-Tiger=, *水男虎=]", "remainder:38"],
94
+ [StemBranch, "label:[Water-Rabbit=, *水女兎=]", "remainder:39"],
95
+ [StemBranch, "label:[Wood-Dragon=, *木男龍=]", "remainder:40"],
96
+ [StemBranch, "label:[Wood-Snake=, *木女蛇=]", "remainder:41"],
97
+ [StemBranch, "label:[Fire-Horse=, *火男馬=]", "remainder:42"],
98
+ [StemBranch, "label:[Fire-Goat=, *火女羊=]", "remainder:43"],
99
+ [StemBranch, "label:[Earth-Monkey=, *土男猴=]", "remainder:44"],
100
+ [StemBranch, "label:[Earth-Rooster=, *土女鷄=]", "remainder:45"],
101
+ [StemBranch, "label:[Iron-Dog=, *金男狗=]", "remainder:46"],
102
+ [StemBranch, "label:[Iron-Pig=, *金女猪=]", "remainder:47"],
103
+ [StemBranch, "label:[Water-Rat=, *水男鼠=]", "remainder:48"],
104
+ [StemBranch, "label:[Water-Ox=, *水女牛=]", "remainder:49"],
105
+ [StemBranch, "label:[Wood-Tiger=, *木男虎=]", "remainder:50"],
106
+ [StemBranch, "label:[Wood-Rabbit=, *木女兎=]", "remainder:51"],
107
+ [StemBranch, "label:[Fire-Dragon=, *火男龍=]", "remainder:52"],
108
+ [StemBranch, "label:[Fire-Snake=, *火女蛇=]", "remainder:53"],
109
+ [StemBranch, "label:[Earth-Horse=, *土男馬=]", "remainder:54"],
110
+ [StemBranch, "label:[Earth-Goat=, *土女羊=]", "remainder:55"],
111
+ [StemBranch, "label:[Iron-Monkey=, *金男猴=]", "remainder:56"],
112
+ [StemBranch, "label:[Iron-Rooster=, *金女鷄=]", "remainder:57"],
113
+ [StemBranch, "label:[Water-Dog=, *水男狗=]", "remainder:58"],
114
+ [StemBranch, "label:[Water-Pig=, *水女猪=]", "remainder:59"]
115
+ ]
116
+ ]]
117
+ end
54
118
 
55
- [StemBranch,
56
- "label:[Stem-Branch, *干支]", "divisor:60", "day:11", "year:4",
57
- [StemBranch, "label:[Wood-Rat=, *木男鼠=]", "remainder: 0"],
58
- [StemBranch, "label:[Wood-Ox=, *木女牛=]", "remainder: 1"],
59
- [StemBranch, "label:[Fire-Tiger=, *火男虎=]", "remainder: 2"],
60
- [StemBranch, "label:[Fire-Rabbit=, *火女兎=]", "remainder: 3"],
61
- [StemBranch, "label:[Earth-Dragon=, *土男龍=]", "remainder: 4"],
62
- [StemBranch, "label:[Earth-Snake=, *土女蛇=]", "remainder: 5"],
63
- [StemBranch, "label:[Iron-Horse=, *金男馬=]", "remainder: 6"],
64
- [StemBranch, "label:[Iron-Goat=, *金女羊=]", "remainder: 7"],
65
- [StemBranch, "label:[Water-Monkey=, *水男猴=]", "remainder: 8"],
66
- [StemBranch, "label:[Water-Rooster=, *水女鷄=]", "remainder: 9"],
67
- [StemBranch, "label:[Wood-Dog=, *木男狗=]", "remainder:10"],
68
- [StemBranch, "label:[Wood-Pig=, *木女猪=]", "remainder:11"],
69
- [StemBranch, "label:[Fire-Rat=, *火男鼠=]", "remainder:12"],
70
- [StemBranch, "label:[Fire-Ox=, *火女牛=]", "remainder:13"],
71
- [StemBranch, "label:[Earth-Tiger=, *土男虎=]", "remainder:14"],
72
- [StemBranch, "label:[Earth-Rabbit=, *土女兎=]", "remainder:15"],
73
- [StemBranch, "label:[Iron-Dragon=, *金男龍=]", "remainder:16"],
74
- [StemBranch, "label:[Iron-Snake=, *金女蛇=]", "remainder:17"],
75
- [StemBranch, "label:[Water-Horse=, *水男馬=]", "remainder:18"],
76
- [StemBranch, "label:[Water-Goat=, *水女羊=]", "remainder:19"],
77
- [StemBranch, "label:[Wood-Monkey=, *木男猴=]", "remainder:20"],
78
- [StemBranch, "label:[Wood-Rooster=, *木女鷄=]", "remainder:21"],
79
- [StemBranch, "label:[Fire-Dog=, *火男狗=]", "remainder:22"],
80
- [StemBranch, "label:[Fire-Pig=, *火女猪=]", "remainder:23"],
81
- [StemBranch, "label:[Earth-Rat=, *土男鼠=]", "remainder:24"],
82
- [StemBranch, "label:[Earth-Ox=, *土女牛=]", "remainder:25"],
83
- [StemBranch, "label:[Iron-Tiger=, *金男虎=]", "remainder:26"],
84
- [StemBranch, "label:[Iron-Rabbit=, *金女兎=]", "remainder:27"],
85
- [StemBranch, "label:[Water-Dragon=, *水男龍=]", "remainder:28"],
86
- [StemBranch, "label:[Water-Snake=, *水女蛇=]", "remainder:29"],
87
- [StemBranch, "label:[Wood-Horse=, *木男馬=]", "remainder:30"],
88
- [StemBranch, "label:[Wood-Goat=, *木女羊=]", "remainder:31"],
89
- [StemBranch, "label:[Fire-Monkey=, *火男猴=]", "remainder:32"],
90
- [StemBranch, "label:[Fire-Rooster=, *火女鷄=]", "remainder:33"],
91
- [StemBranch, "label:[Earth-Dog=, *土男狗=]", "remainder:34"],
92
- [StemBranch, "label:[Earth-Pig=, *土女猪=]", "remainder:35"],
93
- [StemBranch, "label:[Iron-Rat=, *金男鼠=]", "remainder:36"],
94
- [StemBranch, "label:[Iron-Ox=, *金女牛=]", "remainder:37"],
95
- [StemBranch, "label:[Water-Tiger=, *水男虎=]", "remainder:38"],
96
- [StemBranch, "label:[Water-Rabbit=, *水女兎=]", "remainder:39"],
97
- [StemBranch, "label:[Wood-Dragon=, *木男龍=]", "remainder:40"],
98
- [StemBranch, "label:[Wood-Snake=, *木女蛇=]", "remainder:41"],
99
- [StemBranch, "label:[Fire-Horse=, *火男馬=]", "remainder:42"],
100
- [StemBranch, "label:[Fire-Goat=, *火女羊=]", "remainder:43"],
101
- [StemBranch, "label:[Earth-Monkey=, *土男猴=]", "remainder:44"],
102
- [StemBranch, "label:[Earth-Rooster=, *土女鷄=]", "remainder:45"],
103
- [StemBranch, "label:[Iron-Dog=, *金男狗=]", "remainder:46"],
104
- [StemBranch, "label:[Iron-Pig=, *金女猪=]", "remainder:47"],
105
- [StemBranch, "label:[Water-Rat=, *水男鼠=]", "remainder:48"],
106
- [StemBranch, "label:[Water-Ox=, *水女牛=]", "remainder:49"],
107
- [StemBranch, "label:[Wood-Tiger=, *木男虎=]", "remainder:50"],
108
- [StemBranch, "label:[Wood-Rabbit=, *木女兎=]", "remainder:51"],
109
- [StemBranch, "label:[Fire-Dragon=, *火男龍=]", "remainder:52"],
110
- [StemBranch, "label:[Fire-Snake=, *火女蛇=]", "remainder:53"],
111
- [StemBranch, "label:[Earth-Horse=, *土男馬=]", "remainder:54"],
112
- [StemBranch, "label:[Earth-Goat=, *土女羊=]", "remainder:55"],
113
- [StemBranch, "label:[Iron-Monkey=, *金男猴=]", "remainder:56"],
114
- [StemBranch, "label:[Iron-Rooster=, *金女鷄=]", "remainder:57"],
115
- [StemBranch, "label:[Water-Dog=, *水男狗=]", "remainder:58"],
116
- [StemBranch, "label:[Water-Pig=, *水女猪=]", "remainder:59"]
117
- ]
118
- ]]
119
- end
119
+ class CalendarNote
120
+ Tibetan = [['Tibetan::干支'], ['_m:Calendar::Month'], ['Common::Week']]
121
+ end
120
122
 
121
123
  module CalendarTypes
122
124
 
@@ -155,21 +157,19 @@ end
155
157
  # @parameter = 太陽と月の位相計算用のテーブル
156
158
  #
157
159
  def _normalize(args=[], options={})
158
- intercalary_month = When.Resource('_m:TibetanTerms::IntercalaryMonth::*')
159
- intercalary_day = When.Resource('_m:TibetanTerms::IntercalaryDay::*')
160
+ intercalary_month = When.Resource('_m:Tibetan::IntercalaryMonth::*')
161
+ intercalary_day = When.Resource('_m:Tibetan::IntercalaryDay::*')
160
162
  @indices ||= @index_of_MSC && @index_of_MSC.to_i == 1 ?
161
163
  [
162
- Coordinates::Index.new({:unit=>60}),
163
- Coordinates::Index.new({:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]},
164
- :trunk=>When.Resource('_m:TibetanTerms::Month::*'), :shift=>2}),
165
- Coordinates::Index.new({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
164
+ When.Index({:unit=>60}),
165
+ When.Index('Tibetan::Month', {:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]}, :shift=>2}),
166
+ When.Index({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
166
167
  ] :
167
168
  [
168
- Coordinates::Index.new({:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]},
169
- :trunk=>When.Resource('_m:TibetanTerms::Month::*'), :shift=>2}),
170
- Coordinates::Index.new({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
169
+ When.Index('Tibetan::Month', {:branch=>{0=>intercalary_month[0], 1=>intercalary_month[1]}, :shift=>2}),
170
+ When.Index({:branch=>{-2=>intercalary_day[0], -1=>intercalary_day[1]}})
171
171
  ]
172
- @label ||= When.Resource('_m:TibetanTerms::Tibetan')
172
+ @label ||= 'Tibetan::Tibetan'
173
173
  @epoch_in_CE ||= 0
174
174
  @type ||= 1
175
175
  @parameter = case @type.to_i
@@ -194,7 +194,7 @@ end
194
194
  'A0'=>(22.0+28.0/126)
195
195
  }
196
196
  end
197
- @note = 'TibetanNotes'
197
+ @note = 'Tibetan'
198
198
  super
199
199
  end
200
200