when_exe 0.3.4 → 0.3.5

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 (168) hide show
  1. data/bin/locales.rb +2 -2
  2. data/bin/when.rb +2 -2
  3. data/lib/when_exe.rb +161 -55
  4. data/lib/when_exe/basictypes.rb +34 -26
  5. data/lib/when_exe/calendarnote.rb +654 -0
  6. data/lib/when_exe/calendartypes.rb +49 -474
  7. data/lib/when_exe/coordinates.rb +141 -34
  8. data/lib/when_exe/core/compatibility.rb +22 -2
  9. data/lib/when_exe/core/extension.rb +47 -3
  10. data/lib/when_exe/ephemeris.rb +82 -109
  11. data/lib/when_exe/googlecalendar.rb +1 -1
  12. data/lib/when_exe/icalendar.rb +26 -14
  13. data/lib/when_exe/inspect.rb +82 -68
  14. data/lib/when_exe/locales/af.rb +1 -1
  15. data/lib/when_exe/locales/ar.rb +1 -1
  16. data/lib/when_exe/locales/az.rb +1 -1
  17. data/lib/when_exe/locales/bg.rb +1 -1
  18. data/lib/when_exe/locales/bn.rb +1 -1
  19. data/lib/when_exe/locales/bs.rb +1 -1
  20. data/lib/when_exe/locales/ca.rb +1 -1
  21. data/lib/when_exe/locales/cs.rb +1 -1
  22. data/lib/when_exe/locales/cy.rb +1 -1
  23. data/lib/when_exe/locales/da.rb +1 -1
  24. data/lib/when_exe/locales/de.rb +1 -1
  25. data/lib/when_exe/locales/de_AT.rb +1 -1
  26. data/lib/when_exe/locales/de_CH.rb +1 -1
  27. data/lib/when_exe/locales/el.rb +1 -1
  28. data/lib/when_exe/locales/en.rb +1 -1
  29. data/lib/when_exe/locales/en_AU.rb +1 -1
  30. data/lib/when_exe/locales/en_CA.rb +1 -1
  31. data/lib/when_exe/locales/en_GB.rb +1 -1
  32. data/lib/when_exe/locales/en_IE.rb +1 -1
  33. data/lib/when_exe/locales/en_IN.rb +1 -1
  34. data/lib/when_exe/locales/en_NZ.rb +1 -1
  35. data/lib/when_exe/locales/en_US.rb +1 -1
  36. data/lib/when_exe/locales/eo.rb +1 -1
  37. data/lib/when_exe/locales/es.rb +1 -1
  38. data/lib/when_exe/locales/es_419.rb +1 -1
  39. data/lib/when_exe/locales/es_AR.rb +1 -1
  40. data/lib/when_exe/locales/es_CL.rb +1 -1
  41. data/lib/when_exe/locales/es_CO.rb +1 -1
  42. data/lib/when_exe/locales/es_CR.rb +1 -1
  43. data/lib/when_exe/locales/es_EC.rb +1 -1
  44. data/lib/when_exe/locales/es_MX.rb +1 -1
  45. data/lib/when_exe/locales/es_PA.rb +1 -1
  46. data/lib/when_exe/locales/es_PE.rb +1 -1
  47. data/lib/when_exe/locales/es_VE.rb +1 -1
  48. data/lib/when_exe/locales/et.rb +1 -1
  49. data/lib/when_exe/locales/eu.rb +1 -1
  50. data/lib/when_exe/locales/fa.rb +1 -1
  51. data/lib/when_exe/locales/fi.rb +1 -1
  52. data/lib/when_exe/locales/fr.rb +1 -1
  53. data/lib/when_exe/locales/fr_CA.rb +1 -1
  54. data/lib/when_exe/locales/fr_CH.rb +1 -1
  55. data/lib/when_exe/locales/gl.rb +1 -1
  56. data/lib/when_exe/locales/he.rb +1 -1
  57. data/lib/when_exe/locales/hi.rb +1 -1
  58. data/lib/when_exe/locales/hi_IN.rb +1 -1
  59. data/lib/when_exe/locales/hr.rb +1 -1
  60. data/lib/when_exe/locales/hu.rb +1 -1
  61. data/lib/when_exe/locales/id.rb +1 -1
  62. data/lib/when_exe/locales/is.rb +1 -1
  63. data/lib/when_exe/locales/it.rb +1 -1
  64. data/lib/when_exe/locales/it_CH.rb +1 -1
  65. data/lib/when_exe/locales/ja.rb +1 -1
  66. data/lib/when_exe/locales/kn.rb +1 -1
  67. data/lib/when_exe/locales/ko.rb +1 -1
  68. data/lib/when_exe/locales/lo.rb +1 -1
  69. data/lib/when_exe/locales/locales.rb +1 -1
  70. data/lib/when_exe/locales/lt.rb +1 -1
  71. data/lib/when_exe/locales/lv.rb +1 -1
  72. data/lib/when_exe/locales/mk.rb +1 -1
  73. data/lib/when_exe/locales/mn.rb +1 -1
  74. data/lib/when_exe/locales/ms.rb +1 -1
  75. data/lib/when_exe/locales/nb.rb +1 -1
  76. data/lib/when_exe/locales/ne.rb +1 -1
  77. data/lib/when_exe/locales/nl.rb +1 -1
  78. data/lib/when_exe/locales/nn.rb +1 -1
  79. data/lib/when_exe/locales/or.rb +1 -1
  80. data/lib/when_exe/locales/pl.rb +1 -1
  81. data/lib/when_exe/locales/pt.rb +1 -1
  82. data/lib/when_exe/locales/pt_BR.rb +1 -1
  83. data/lib/when_exe/locales/rm.rb +1 -1
  84. data/lib/when_exe/locales/ro.rb +1 -1
  85. data/lib/when_exe/locales/ru.rb +1 -1
  86. data/lib/when_exe/locales/sk.rb +1 -1
  87. data/lib/when_exe/locales/sl.rb +1 -1
  88. data/lib/when_exe/locales/sr.rb +1 -1
  89. data/lib/when_exe/locales/sv.rb +1 -1
  90. data/lib/when_exe/locales/sw.rb +1 -1
  91. data/lib/when_exe/locales/th.rb +1 -1
  92. data/lib/when_exe/locales/tl.rb +1 -1
  93. data/lib/when_exe/locales/tr.rb +1 -1
  94. data/lib/when_exe/locales/uk.rb +1 -1
  95. data/lib/when_exe/locales/ur.rb +1 -1
  96. data/lib/when_exe/locales/uz.rb +1 -1
  97. data/lib/when_exe/locales/vi.rb +1 -1
  98. data/lib/when_exe/locales/wo.rb +1 -1
  99. data/lib/when_exe/locales/zh_CN.rb +1 -1
  100. data/lib/when_exe/locales/zh_HK.rb +1 -1
  101. data/lib/when_exe/locales/zh_TW.rb +1 -1
  102. data/lib/when_exe/mini_application.rb +6 -2
  103. data/lib/when_exe/parts/enumerator.rb +13 -8
  104. data/lib/when_exe/parts/geometric_complex.rb +3 -5
  105. data/lib/when_exe/parts/locale.rb +185 -28
  106. data/lib/when_exe/parts/method_cash.rb +20 -10
  107. data/lib/when_exe/parts/resource.rb +154 -76
  108. data/lib/when_exe/parts/timezone.rb +11 -6
  109. data/lib/when_exe/region/bahai.rb +2 -2
  110. data/lib/when_exe/region/balinese.rb +296 -296
  111. data/lib/when_exe/region/chinese.rb +564 -564
  112. data/lib/when_exe/region/chinese_calendar.rb +5 -1
  113. data/lib/when_exe/region/chinese_epoch.rb +47 -102
  114. data/lib/when_exe/region/chinese_twin.rb +798 -0
  115. data/lib/when_exe/region/christian.rb +314 -338
  116. data/lib/when_exe/region/coptic.rb +88 -0
  117. data/lib/when_exe/region/ephemeric_notes.rb +322 -307
  118. data/lib/when_exe/region/french.rb +2 -2
  119. data/lib/when_exe/region/indian.rb +361 -272
  120. data/lib/when_exe/region/iranian.rb +2 -2
  121. data/lib/when_exe/region/islamic.rb +3 -3
  122. data/lib/when_exe/region/japanese.rb +1 -1
  123. data/lib/when_exe/region/japanese_notes.rb +165 -103
  124. data/lib/when_exe/region/japanese_residues.rb +56 -55
  125. data/lib/when_exe/region/japanese_twin.rb +228 -0
  126. data/lib/when_exe/region/javanese.rb +2 -2
  127. data/lib/when_exe/region/jewish.rb +2 -2
  128. data/lib/when_exe/region/korean.rb +4 -4
  129. data/lib/when_exe/region/m17n.rb +19 -19
  130. data/lib/when_exe/region/martian.rb +21 -9
  131. data/lib/when_exe/region/mayan.rb +19 -11
  132. data/lib/when_exe/region/moon.rb +7 -7
  133. data/lib/when_exe/region/nihon_shoki.rb +7 -7
  134. data/lib/when_exe/region/roman.rb +100 -100
  135. data/lib/when_exe/region/shire.rb +130 -147
  136. data/lib/when_exe/region/thai.rb +2 -2
  137. data/lib/when_exe/region/tibetan.rb +2 -2
  138. data/lib/when_exe/region/vietnamese.rb +383 -114
  139. data/lib/when_exe/region/world.rb +112 -129
  140. data/lib/when_exe/timestandard.rb +12 -1
  141. data/lib/when_exe/tmposition.rb +28 -14
  142. data/lib/when_exe/tmreference.rb +96 -93
  143. data/lib/when_exe/version.rb +1 -1
  144. data/test/examples/Terms.m17n +2 -2
  145. data/test/examples/sample.json +16 -0
  146. data/test/examples/sample.xml +1 -1
  147. data/test/test.rb +4 -0
  148. data/test/test/basictypes.rb +2 -2
  149. data/test/test/calendarnote.rb +69 -0
  150. data/test/test/calendartypes.rb +41 -1
  151. data/test/test/coordinates.rb +12 -1
  152. data/test/test/ephemeris.rb +13 -66
  153. data/test/test/icalendar.rb +3 -3
  154. data/test/test/inspect.rb +1 -1
  155. data/test/test/parts.rb +7 -4
  156. data/test/test/region/chinese.rb +45 -0
  157. data/test/test/region/coptic.rb +27 -0
  158. data/test/test/region/indian.rb +1 -1
  159. data/test/test/region/japanese.rb +4 -4
  160. data/test/test/region/jewish.rb +1 -1
  161. data/test/test/region/m17n.rb +7 -5
  162. data/test/test/region/residue.rb +2 -2
  163. data/test/test/region/vietnamese.rb +102 -0
  164. data/test/test/timestandard.rb +81 -0
  165. data/test/test/tmposition.rb +1 -1
  166. data/test/test/tmreference.rb +1 -1
  167. data/when_exe.gemspec +2 -2
  168. metadata +16 -7
data/bin/locales.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
3
  =begin
4
- Copyright (C) 2011-2012 Takashi SUGA
4
+ Copyright (C) 2011-2014 Takashi SUGA
5
5
 
6
6
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
7
7
  =end
@@ -14,7 +14,7 @@ require 'net/https'
14
14
  HEADER = <<HEADER
15
15
  # -*- coding: utf-8 -*-
16
16
  =begin
17
- Copyright (C) 2012-2013 Takashi SUGA
17
+ Copyright (C) 2012-2014 Takashi SUGA
18
18
 
19
19
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
20
20
  =end
data/bin/when.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
3
  =begin
4
- Copyright (C) 2011-2013 Takashi SUGA
4
+ Copyright (C) 2011-2014 Takashi SUGA
5
5
 
6
6
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
7
7
  =end
@@ -12,5 +12,5 @@ require 'when_exe/mini_application'
12
12
  args = ARGV.map {|arg| arg.encode('UTF-8')}
13
13
  config = When.config
14
14
  server, port = config['?']
15
- result = !port ? When.free_conv(*args) : args == [] ? When.server(port) : When.client(server, port, args.join(' '))
15
+ result = !port || !Object.const_defined?(:JSON) ? When.free_conv(*args) : args == [] ? When.server(port) : When.client(server, port, args.join(' '))
16
16
  pp When::Parts::Locale.translate(result, config['!']) if result
data/lib/when_exe.rb CHANGED
@@ -5,6 +5,10 @@
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
7
7
 
8
+ begin
9
+ require 'json'
10
+ rescue LoadError
11
+ end
8
12
  begin
9
13
  require 'rubygems'
10
14
  rescue LoadError
@@ -20,12 +24,12 @@ begin
20
24
  rescue LoadError, NoMethodError
21
25
  end
22
26
 
23
- autoload :URI, 'uri'
24
- autoload :OpenURI, 'open-uri'
25
- autoload :OpenSSL, 'openssl'
26
- autoload :JSON, 'json'
27
- autoload :REXML, 'rexml/document'
28
- autoload :Mutex, 'thread' unless Object.const_defined?(:Mutex)
27
+ autoload :URI, 'uri'
28
+ autoload :OpenURI, 'open-uri'
29
+ autoload :OpenSSL, 'openssl'
30
+ autoload :FileUtils, 'fileutils'
31
+ autoload :REXML, 'rexml/document'
32
+ autoload :Mutex, 'thread' unless Object.const_defined?(:Mutex)
29
33
 
30
34
  $:.unshift(File.dirname(__FILE__)) unless
31
35
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
@@ -46,8 +50,8 @@ module When
46
50
 
47
51
  # Initializations
48
52
  #
49
- # @param [Hash] options
50
- # @option options [When::TM::Clock, When::V::Timezone, When::Parts::Timezone] :local デフォルトの地方時
53
+ # @param [Hash] options 以下の通り
54
+ # @option options [When::Parts::Timezone::Base] :local デフォルトの地方時
51
55
  # @option options [When::Coordinates::Spatial] :location デフォルトの空間位置
52
56
  # @option options [When::TM::IntervalLength] :until V::Event::Enumerator の until
53
57
  # @option options [Hash{String=>String}] :alias Locale の読替パターン ({ 読替前のlocale=>読替後のlocale })
@@ -55,9 +59,13 @@ module When
55
59
  # @option options [Array<String>] :order CalendarEra の検索順序 ([ IRI of When::TM::CalendarEra ])
56
60
  # @option options [Hash{String=>Array, String}] :format strftime で用いる記号の定義 ({ 記号=>[ 書式,項目名 ] or 記号列 })
57
61
  # @option options [Array<Array>] :leap_seconds 閏秒の挿入記録 ([ [JD, TAI-UTC, (MJD, OFFSET)] ])
62
+ # @option options [String] :base_uri Base URI for When_exe Resources (Default When::SourceURI)
63
+ # @option options [String] :root_dir Root Directory for When_exe Resources Cash data (Default When::RootDir)
58
64
  # @option options [Boolean] :multi_thread マルチスレッド対応 (true: 対応, false/nil: 非対応)
59
65
  # @option options [Boolean] :direct '_' で終わるメソッドをキャッシュせずに毎回計算するか否か
60
66
  # @option options [Hash{Symbol=>boolean}] :escape 毎回 method_missing を発生させるメソッドを true にする
67
+ # @option options [false, nil] :escape to_str, to_ary, to_hash のみ毎回 method_missing を発生させる
68
+ # @option options [true] :escape すべて毎回 method_missing を発生させる
61
69
  #
62
70
  # @return [void]
63
71
  #
@@ -67,8 +75,8 @@ module When
67
75
  #
68
76
  def _setup_(options={})
69
77
  @multi_thread = options[:multi_thread]
70
- Parts::MethodCash._setup_(options[:direct], options[:escape])
71
- Parts::Resource._setup_
78
+ Parts::MethodCash._setup_(options)
79
+ Parts::Resource._setup_(options)
72
80
  Parts::Locale._setup_(options)
73
81
  Coordinates::Spatial._setup_(options[:location])
74
82
  TM::CalendarEra._setup_(options[:order])
@@ -80,10 +88,35 @@ module When
80
88
  Parts::Timezone._setup_
81
89
  TimeStandard._setup_(options[:leap_seconds])
82
90
  end
91
+
92
+ # 設定情報を取得する
93
+ #
94
+ # @return [Hash] 設定情報
95
+ #
96
+ def _setup_info
97
+ {:multi_thread => @multi_thread}.
98
+ update(Parts::MethodCash._setup_info).
99
+ update(Parts::Resource._setup_info).
100
+ update(Parts::Locale._setup_info).
101
+ update(Coordinates::Spatial._setup_info).
102
+ update(TM::CalendarEra._setup_info).
103
+ update(TM::Clock._setup_info).
104
+ update(TM::TemporalPosition._setup_info).
105
+ update(V::Event._setup_info).
106
+ update(TimeStandard._setup_info)
107
+ end
83
108
  end
84
109
 
110
+ #
111
+ # when_exe 用 International Resource Identifier
112
+ #
85
113
  SourceURI = "http://hosi.org/When/"
86
114
 
115
+ #
116
+ # ライブラリのあるディレクトリ
117
+ #
118
+ RootDir = File.dirname(__FILE__).sub(/\/[^\/]*$/,'')
119
+
87
120
  require 'when_exe/version'
88
121
  require 'when_exe/parts/enumerator'
89
122
  require 'when_exe/parts/locale'
@@ -102,6 +135,7 @@ module When
102
135
  require 'when_exe/tmposition'
103
136
  require 'when_exe/tmreference'
104
137
  require 'when_exe/calendartypes'
138
+ require 'when_exe/calendarnote'
105
139
  require 'when_exe/locales/locales'
106
140
  require 'when_exe/region/m17n'
107
141
  require 'when_exe/region/residue'
@@ -138,7 +172,7 @@ module When
138
172
  autoload :IslamicTerms, 'when_exe/region/islamic'
139
173
  autoload :JewishTerms, 'when_exe/region/jewish'
140
174
  autoload :RomanTerms, 'when_exe/region/roman'
141
- autoload :ChristianTerms, 'when_exe/region/christian'
175
+ autoload :CopticTerms, 'when_exe/region/coptic'
142
176
  autoload :FrenchTerms, 'when_exe/region/french'
143
177
  autoload :WorldTerms, 'when_exe/region/world'
144
178
  autoload :ShireTerms, 'when_exe/region/shire'
@@ -148,9 +182,10 @@ module When
148
182
 
149
183
  module CalendarTypes
150
184
  autoload :Japanese, 'when_exe/region/japanese'
185
+ autoload :JapaneseTwin, 'when_exe/region/japanese_twin'
186
+ autoload :ChineseTwin, 'when_exe/region/chinese_twin'
151
187
  autoload :ChineseSolar, 'when_exe/region/chinese'
152
188
  autoload :ChineseLuniSolar, 'when_exe/region/chinese'
153
- autoload :Chinese, 'when_exe/region/chinese'
154
189
  autoload :Yi, 'when_exe/region/chinese'
155
190
  autoload :Tibetan, 'when_exe/region/tibetan'
156
191
  autoload :ThaiB, 'when_exe/region/thai'
@@ -165,6 +200,7 @@ module When
165
200
  autoload :TabularIslamic, 'when_exe/region/islamic'
166
201
  autoload :EphemerisBasedIslamic, 'when_exe/region/islamic'
167
202
  autoload :Jewish, 'when_exe/region/jewish'
203
+ autoload :Coptic, 'when_exe/region/coptic'
168
204
  autoload :JulianA, 'when_exe/region/roman'
169
205
  autoload :JulianB, 'when_exe/region/roman'
170
206
  autoload :JulianC, 'when_exe/region/roman'
@@ -186,28 +222,28 @@ module When
186
222
  _time_systems.each_pair do |key, required|
187
223
  autoload key.to_sym, required if required
188
224
  end
225
+ end
189
226
 
190
- class CalendarNote
191
- autoload :SolarTerms, 'when_exe/region/ephemeric_notes'
192
- autoload :LunarPhases, 'when_exe/region/ephemeric_notes'
193
- autoload :EphemericNote, 'when_exe/region/ephemeric_notes'
194
- autoload :JapaneseNote, 'when_exe/region/japanese_notes'
195
- autoload :BalineseNote, 'when_exe/region/balinese'
196
- autoload :RomanNote, 'when_exe/region/roman'
197
- autoload :WorldWeek, 'when_exe/region/world'
198
- autoload :ShireWeek, 'when_exe/region/shire'
199
-
200
- DefaultNotes = [['_m:CalendarTerms::Month'], []]
201
- JulianDayNotes = [['CommonResidue::Week', 'CommonResidue::干支']]
202
- BahaiNotes = [['Bahai::YearName'], ['_m:BahaiTerms::Month'], []]
203
- JavaneseNotes = [['Javanese::Windu'], ['_m:CalendarTerms::Month'],
204
- ['Javanese::Pasaran', 'Javanese::Paringkelan', 'Javanese::Week', 'Javanese::Wuku']]
205
- ChineseNotes = [['CommonResidue::干支'], ['_m:CalendarTerms::Month'], ['CommonResidue::干支']]
206
- TibetanNotes = [['Tibetan::干支'], ['_m:CalendarTerms::Month'], []]
207
- YiNotes = [['Yi::YearName'], ['_m:CalendarTerms::Month'], []]
208
- MayanNotes = [{'0B'=>{'Base'=>'?Epoch=0D'}, '2B'=>{'Base'=>'?Epoch=2D'}},
209
- ['Mayan#{Base:}::Trecena', 'Mayan#{Base:}::Tzolk\'in', 'Mayan#{Base:}::Lords_of_the_Night', 'Mayan#{Base:}::Haab\'']]
210
- end
227
+ class CalendarNote
228
+ autoload :SolarTerms, 'when_exe/region/ephemeric_notes'
229
+ autoload :LunarPhases, 'when_exe/region/ephemeric_notes'
230
+ autoload :EphemericNote, 'when_exe/region/ephemeric_notes'
231
+ autoload :JapaneseNote, 'when_exe/region/japanese_notes'
232
+ autoload :BalineseNote, 'when_exe/region/balinese'
233
+ autoload :RomanNote, 'when_exe/region/roman'
234
+ autoload :WorldWeek, 'when_exe/region/world'
235
+ autoload :ShireWeek, 'when_exe/region/shire'
236
+
237
+ DefaultNotes = [['_m:CalendarTerms::Month'], ['CommonResidue::Week']]
238
+ JulianDayNotes = [['CommonResidue::Week', 'CommonResidue::干支']]
239
+ BahaiNotes = [['Bahai::YearName'], ['_m:BahaiTerms::Month'], ['CommonResidue::Week']]
240
+ JavaneseNotes = [['Javanese::Windu'], ['_m:CalendarTerms::Month'],
241
+ ['Javanese::Pasaran', 'Javanese::Paringkelan', 'Javanese::Week', 'Javanese::Wuku']]
242
+ ChineseNotes = [['CommonResidue::干支'], ['_m:CalendarTerms::Month'], ['CommonResidue::Week', 'CommonResidue::干支']]
243
+ TibetanNotes = [['Tibetan::干支'], ['_m:CalendarTerms::Month'], ['CommonResidue::Week']]
244
+ YiNotes = [['Yi::YearName'], ['_m:CalendarTerms::Month'], ['CommonResidue::Week']]
245
+ MayanNotes = [{},['Mayan#{?Epoch=Epoch}::Trecena', 'Mayan#{?Epoch=Epoch}::Tzolk\'in',
246
+ 'Mayan#{?Epoch=Epoch}::Lords_of_the_Night', 'Mayan#{?Epoch=Epoch}::Haab\'']]
211
247
  end
212
248
 
213
249
  module Coordinates
@@ -246,11 +282,11 @@ module When
246
282
  autoload :JapanesePrimeMinister, 'when_exe/region/japanese'
247
283
  autoload :NihonKoki, 'when_exe/region/nihon_shoki'
248
284
  autoload :NihonShoki, 'when_exe/region/nihon_shoki'
249
- autoload :JapaneseSolarSeries, 'when_exe/region/japanese_notes'
250
- autoload :JapaneseLuniSolarSeries, 'when_exe/region/japanese_notes'
285
+ autoload :JapaneseSolarSeries, 'when_exe/region/japanese_twin'
286
+ autoload :JapaneseLuniSolarSeries, 'when_exe/region/japanese_twin'
251
287
  autoload :Chinese, 'when_exe/region/chinese_epoch'
252
- autoload :ChineseSolarSeries, 'when_exe/region/chinese_epoch'
253
- autoload :ChineseLuniSolarSeries, 'when_exe/region/chinese_epoch'
288
+ autoload :ChineseSolarSeries, 'when_exe/region/chinese_twin'
289
+ autoload :ChineseLuniSolarSeries, 'when_exe/region/chinese_twin'
254
290
  autoload :Ryukyu, 'when_exe/region/ryukyu'
255
291
  autoload :Korean, 'when_exe/region/korean'
256
292
  autoload :Vietnamese, 'when_exe/region/vietnamese'
@@ -274,10 +310,9 @@ module When
274
310
  autoload :LongCount, 'when_exe/region/mayan'
275
311
 
276
312
  # Defualt search path for Epochs and Eras
277
- DefaultEpochs = ['Common', 'Common?Reform=1752.09.14', 'ModernJapanese',
278
- 'IndianNationalSolar', 'Iranian', 'Hijra', 'Jewish',
279
- 'Roman', 'Byzantine', 'French', 'World',
280
- 'LongCount', 'LongCount?Epoch=0D', 'LongCount?Epoch=2D',
313
+ DefaultEpochs = ['Common', 'ModernJapanese',
314
+ 'IndianNationalSolar', 'Iranian', 'Hijra', 'Jewish',
315
+ 'Roman', 'Byzantine', 'French', 'World', 'LongCount',
281
316
  'BalineseLuniSolar', 'JavaneseLunar',
282
317
  'Japanese', 'JapanesePrimeMinister', 'NihonKoki', 'NihonShoki',
283
318
  'Chinese', 'Ryukyu', 'Vietnamese', 'Korean',
@@ -512,11 +547,11 @@ module When
512
547
  Parts::Resource._instance(calendar, '_c:')
513
548
  end
514
549
 
515
- # When::CalendarTypes::CalendarNote の生成/参照
550
+ # When::CalendarNote の生成/参照
516
551
  #
517
552
  # @param [String] notes 暦注リストを表す文字列
518
553
  #
519
- # @return [When::CalendarTypes::CalendarNote] notes に対応する When::CalendarTypes::CalendarNote オブジェクト
554
+ # @return [When::CalendarNote] notes に対応する When::CalendarNote オブジェクト
520
555
  #
521
556
  def CalendarNote(notes)
522
557
  Parts::Resource._instance(notes, '_n:')
@@ -538,7 +573,7 @@ module When
538
573
  # @param [String, Regexp] key 検索する暦年代または、暦年代にマッチする正規表現
539
574
  # @param [Integer] epoch 年数を昇順にカウントする方式での暦元(0年)の通年(デフォルトは nil - 指定なし)
540
575
  # @param [Integer] reverse 年数を降順にカウントする方式での暦元(0年)の通年(デフォルトは nil - 指定なし)
541
- # @param [Hash] options
576
+ # @param [Hash] options 以下の通り
542
577
  # @option options [String] :area 暦年代の使用地域の指定(デフォルトは nil - 指定なし)
543
578
  # @option options [String] :period 暦年代の使用時代の指定(デフォルトは nil - 指定なし)
544
579
  # @option options [Integer] :count 何件ヒットするまで検索するかを指定(デフォルトは 1件)
@@ -554,25 +589,27 @@ module When
554
589
 
555
590
  # When::TM::Clock の生成/参照
556
591
  #
592
+ # @param [When::Parts::Timezone::Base] clock なにもせず clock をそのまま返す
557
593
  # @param [String] clock 時法を表す文字列
558
594
  # @param [Numeric] clock 秒を単位として表した時差(東経側を + とする)
559
- # @param [When::TM::Clock] clock なにもせず clock をそのまま返す
560
595
  #
561
- # @return [When::TM::Clock] clock に対応する When::TM::Clock オブジェクト
596
+ # @return [When::Parts::Timezone::Base] 生成/参照した When::Parts::Timezone::Base オブジェクト
562
597
  #
563
598
  def Clock(clock)
564
599
  case clock
565
- when TM::Clock ; return clock
566
- when 'Z' ; return utc
600
+ when Parts::Timezone::Base ; return clock
601
+ when 'Z', 0 ; return utc
602
+ when Numeric ; return Parts::Resource._instance("_tm:Clock?label=" + TM::Clock.to_hms(clock))
567
603
  when /^#{CalendarTypes::TimeSystems}/ ; return Parts::Resource._instance('_c:' + clock)
568
- when Numeric ; return utc if clock==0
569
- when String
570
- c = TM::Clock[clock] || V::Timezone[clock]
571
- return c if c
572
- clock, options = clock.split('?')
573
- else ; raise TypeError, "Invalid Type: #{clock.class}"
604
+ when String ;
605
+ else ; raise TypeError, "Invalid Type: #{clock.class}"
574
606
  end
575
- iri = "_tm:Clock?label=" + TM::Clock.to_hms(clock)
607
+ c = TM::Clock[clock] || V::Timezone[clock]
608
+ return c if c
609
+ clock, options = clock.split('?')
610
+ hms = TM::Clock.to_hms(clock)
611
+ return Parts::Timezone[clock] unless hms
612
+ iri = "_tm:Clock?label=" + hms
576
613
  iri += "&" + options if options
577
614
  Parts::Resource._instance(iri)
578
615
  end
@@ -585,6 +622,52 @@ module When
585
622
  Parts::Resource._instance("_c:UTC")
586
623
  end
587
624
 
625
+ # When::Coordinates::Spatial の生成/参照
626
+ #
627
+ # @overload Location(location)
628
+ # @param [When::Coordinates::Spatial] location なにもせず location をそのまま返す
629
+ # @param [String] location 空間位置の IRI (デフォルトプレフィクス _l:)
630
+ # @param [When::Parts::Timezone] 代表する都市の時間帯
631
+ #
632
+ # @overload Location(longitude, latitide, altitide=0, datum='Earth')
633
+ # @param [Numeric] longitude 経度 / 度 (東経を正とする)
634
+ # @param [Numeric] latitide 緯度 / 度 (北緯を正とする)
635
+ # @param [Numeric] altitide 高度 / m
636
+ # @param [When::Ephemeris::Datum] datum 座標系
637
+ # @param [String] datum 座標系の IRI (デフォルトプレフィクス _ep:)
638
+ #
639
+ # @note longitudeが経度を意味する文字列, latitude が緯度を意味する文字列の場合、
640
+ # 引数の順番によらず、それぞれ経度および緯度と解釈する
641
+ #
642
+ # @return [When::Coordinates::Spatial] 生成/参照した When::Coordinates::Spatial オブジェクト
643
+ #
644
+ def Location(*args)
645
+ case args[0]
646
+ when Coordinates::Spatial ; return args[0]
647
+ when Parts::Timezone ; return args[0].location
648
+ when String ; return Parts::Resource._instance(args[0], '_l:') if args.size == 1
649
+ when Numeric ;
650
+ else ; raise TypeError, "Invalid Type: #{args[0].class}"
651
+ end
652
+ rest = []
653
+ longitude = latitude = nil
654
+ args.each do |arg|
655
+ case arg
656
+ when /^#{Coordinates::MATCH['EW']}\s*[.@\d]/, /[.@\d]\s*#{Coordinates::MATCH['EW']}$/; longitude = arg
657
+ when /^#{Coordinates::MATCH['NS']}\s*[.@\d]/, /[.@\d]\s*#{Coordinates::MATCH['NS']}$/; latitude = arg
658
+ else ; rest << arg
659
+ end
660
+ end
661
+ longitude ||= rest.shift
662
+ latitude ||= rest.shift
663
+ raise ArgumentError, "too few arguments" unless longitude && latitude
664
+ altitude, datum = rest
665
+ iri = "_l:long=#{longitude}&lat=#{latitude}"
666
+ iri += "&alt=#{altitude}" if altitude
667
+ iri += "&datum=#{datum}" if datum
668
+ Parts::Resource._instance(iri)
669
+ end
670
+
588
671
  #
589
672
  # 曜日(剰余類)
590
673
  #
@@ -646,6 +729,29 @@ module When
646
729
  end
647
730
  end
648
731
 
732
+ # Wikipedia を参照して When::BasicTypes::M17n を生成する
733
+ #
734
+ # @param [String] title Wikipedia の項目名
735
+ # @param [Hash] options 以下の通り
736
+ # @option options [String] :locale Wikipedia の言語(デフォルト 'en' - 英語)
737
+ # @option options [Numeric, nil] :interval Wikipedia サイトへのアクセス制御(デフォルト When::Parts::Locale.wikipedia_interval)
738
+ # @option options [Object] :その他 キャッシュファイルへの追加書き出し要素
739
+ #
740
+ # @return [When::BasicTypes::M17n] 項目に対応する多言語対応文字列
741
+ #
742
+ # @note 生成した多言語対応文字列の what が nil でない場合、
743
+ # その項目の位置情報を表わす When::Coordinates::Spatial を指す
744
+ #
745
+ def Wikipedia(title, options={})
746
+ locale = options.delete(:locale) || 'en'
747
+ entry, query = title.split('?', 2)
748
+ url = "http://#{locale}.wikipedia.org/wiki/#{URI.encode(entry).gsub(' ', '_')}"
749
+ Parts::Locale.send(:wikipedia_object, url, options) unless options.empty?
750
+ url += '?' + query if query
751
+ object = Parts::Resource._instance(url)
752
+ object.kind_of?(BasicTypes::M17n) ? object : object.label
753
+ end
754
+
649
755
  # When::Parts::Resource の生成/参照
650
756
  #
651
757
  # @param [String] iri IRI を表す文字列
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2011-2013 Takashi SUGA
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -23,7 +23,7 @@ module When
23
23
  # When.exe Standard Representation 形式の表現を分解してArray化する
24
24
  #
25
25
  # @param [String] date_time 日時を表現する When.exe Standard Representation 形式の文字列
26
- # @param [Hash] options
26
+ # @param [Hash] options 以下の通り
27
27
  # @option options [String, Array<String, Integer>] :era_name デフォルトの年号(Integerは0年に対応する通年)
28
28
  # @option options [Array<Numeric>] :abbr 上位省略形式で使用する上位部分
29
29
  # @option options [Integer] :extra_year_digits ISO8601拡大表記のための年の構成要素拡大桁数(省略時 1桁)
@@ -64,19 +64,19 @@ module When
64
64
 
65
65
  case date_time
66
66
  # basic date & time format (ISO 8601)
67
- when /^([-+W\d]+)(?:(T([.,\d]+)?)([A-Z]+|[-+]\d+)?)?$/
67
+ when /^([-+W\d]+)(?:(T([.,\d]+)?)([A-Z]+(\?.+)?|[-+]\d+)?)?$/
68
68
  d, t, time, clock = $~[1..4]
69
69
  format, date = Date._to_array_basic_ISO8601(d, options)
70
70
 
71
71
  # basic date & time format (JIS X0301)
72
- when /^([.\d]+)(?:(T([.,\d]+)?)([A-Z]+|[-+]\d+)?)?$/
72
+ when /^([.\d]+)(?:(T([.,\d]+)?)([A-Z]+(\?.+)?|[-+]\d+)?)?$/
73
73
  raise ArgumentError, "Wrong date format" unless options[:era_name]
74
74
  d, t, time, clock = $~[1..4]
75
75
  format, date = Date._to_array_basic_X0301(d, options)
76
76
  era = options[:era_name]
77
77
 
78
78
  # basic time format (ISO 8601)
79
- when /^(T(-{0,2}[.,\d]+)?)([A-Z]+|[-+]\d+)?$/
79
+ when /^(T(-{0,2}[.,\d]+)?)([A-Z]+(\?.+)?|[-+]\d+)?$/
80
80
  t, time, clock = $~[1..3]
81
81
 
82
82
  # not supported
@@ -93,18 +93,18 @@ module When
93
93
 
94
94
  case date_time
95
95
  # extended date & time format (ISO 8601)
96
- when /^([-+*&%@!>=<?\dW.]+)(?:(T([:*=.,\d]+)?)([A-Z]+|[-+][:\d]+)?)?$/
96
+ when /^([-+*&%@!>=<?\dW.]+)(?:(T([:*=.,\d]+)?)([A-Z]+(\?.+)?|[-+][:\d]+)?)?$/
97
97
  d, t, time, clock = $~[1..4]
98
98
  format, date = Date._to_array_extended_ISO8601(d, options)
99
99
 
100
100
  # extended date & time format (JIS X0301)
101
- when /^((.+::)?(\[[^\]]+\]|[^-+\d]+))([-+*&%@!>=<?\dW.\(\)]+)?(?:(T([:*=.,\d]+)?)([A-Z]+|[-+][:\d]+)?)?$/
101
+ when /^((.+::)?(\[[^\]]+\]|[^-+\d]+))([-+*&%@!>=<?\dW.\(\)]+)?(?:(T([:*=.,\d]+)?)([A-Z]+(\?.+)?|[-+][:\d]+)?)?$/
102
102
  era, parent, child, d, t, time, clock = $~[1..7]
103
103
  format, date, era = Date._to_array_extended_X0301(d, era, options)
104
104
  era ||= options[:era_name] if (d =~ /\./)
105
105
 
106
106
  # extended time format (ISO 8601)
107
- when /^(T(-{0,2}[:*=.,\d]+)?)([A-Z]+|[-+][:\d]+)?$/
107
+ when /^(T(-{0,2}[:*=.,\d]+)?)([A-Z]+(\?.+)?|[-+][:\d]+)?$/
108
108
  t, time, clock = $~[1..3]
109
109
 
110
110
  # not supported
@@ -336,10 +336,12 @@ module When
336
336
  # 時間帯の表現を正規化する
337
337
  def _to_string_clock(clock)
338
338
  return nil unless clock
339
- return clock if (clock =~ /^[A-Z]+$/)
340
- raise ArgumentError, "Wrong clock format: #{clock}" unless (clock =~ /^([-+])(\d{2})(?::?(\d{2}))?$/)
341
- s, h, m = $~[1..3]
342
- return s + h + ':' + (m||'00')
339
+ return clock if (clock =~ /^[A-Z]+(\?.+)?$/)
340
+ raise ArgumentError, "Wrong clock format: #{clock}" unless clock =~ /^([-+])(\d{2})(?::?(\d{2}))?(?::?(\d{2}))?$/
341
+ sgn, h, m, s = $~[1..4]
342
+ zone = sgn + h + ':' + (m||'00')
343
+ zone += s if s
344
+ return zone
343
345
  end
344
346
  end
345
347
  end
@@ -356,8 +358,9 @@ module When
356
358
  # an optional codeSpace
357
359
  #
358
360
  # @return [String] anyURI (Optional)
359
- attr_reader :code_space
361
+ attr_accessor :code_space
360
362
  alias :codeSpace :code_space
363
+ private :code_space=
361
364
 
362
365
  # オブジェクトの生成
363
366
  #
@@ -418,24 +421,29 @@ module When
418
421
  return nil
419
422
  end
420
423
 
424
+ # @private
425
+ HashProperty = [:label, :names, :link, :access_key, :code_space]
426
+
421
427
  #
422
- # When::BasicTypes::M17n に変換する - 何もしないで自身を返す
428
+ # 代表名
423
429
  #
424
- # @return [When::BasicTypes::M17n]
430
+ # @return [String]
425
431
  #
426
- def to_m17n
427
- self
428
- end
429
- alias :label :to_m17n
432
+ attr_reader :label
430
433
 
431
434
  #
432
- # _m17n_form のための要素生成 - 何もしないで自身を返す
435
+ # 名前が意味するもの自体のオブジェクト
436
+ #
437
+ # @return [When::BasicTypes::Object]
438
+ #
439
+ alias :what :parent
440
+
433
441
  #
434
- # @param [Hash] options 未使用
442
+ # When::BasicTypes::M17n に変換する - 何もしないで自身を返す
435
443
  #
436
444
  # @return [When::BasicTypes::M17n]
437
445
  #
438
- def _to_hash_value(options={})
446
+ def to_m17n
439
447
  self
440
448
  end
441
449
 
@@ -479,7 +487,9 @@ module When
479
487
  rest, options = _attributes(args)
480
488
  _sequence
481
489
 
482
- return _copy_all(_pool[@label.to_s]) if _pool[@label.to_s]
490
+ return _pool[@label.to_s] ?
491
+ _copy_all(_pool[@label.to_s]) : # 階層になった Resource の代表ラベルのための生成
492
+ _copy(options) if @label # M17n#to_h の出力と書式互換の入力による生成
483
493
 
484
494
  case rest[0]
485
495
  when When::Parts::Resource::ContentLine
@@ -498,20 +508,18 @@ module When
498
508
  @names ||= names.reverse
499
509
  @namespace ||= namespace if namespace.kind_of?(Hash)
500
510
  @locale ||= locale.reverse
501
- @label = self
502
511
  when nil ;
503
512
  else
504
513
  names, namespace, locale = rest
505
514
  @names = names if names
506
515
  @namespace ||= Parts::Locale._namespace(namespace) if namespace
507
516
  @locale ||= Parts::Locale._locale(locale) if locale
508
- @label = self
509
517
  end
510
518
  @namespace ||= {}
511
519
  @locale ||= []
512
520
 
513
521
  @code_space = @namespace['']
514
- self[0..-1] = _names(@names, @namespace, @locale)
522
+ self[0..-1] = @label = _names(@names, @namespace, @locale)
515
523
  end
516
524
  end
517
525