when_exe 0.2.100 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. data/LICENSE.ja.txt +25 -25
  2. data/LICENSE.txt +31 -31
  3. data/bin/irb.rc +5 -0
  4. data/bin/locales.rb +2 -2
  5. data/bin/when.rb +16 -0
  6. data/bin/when.rb.config +7 -0
  7. data/lib/when_exe.rb +616 -14
  8. data/lib/when_exe/basictypes.rb +615 -0
  9. data/lib/when_exe/calendartypes.rb +1700 -0
  10. data/lib/when_exe/coordinates.rb +1936 -0
  11. data/lib/when_exe/core/compatibility.rb +54 -0
  12. data/lib/when_exe/core/duration.rb +72 -72
  13. data/lib/when_exe/core/extension.rb +382 -0
  14. data/lib/when_exe/ephemeris.rb +1845 -0
  15. data/lib/when_exe/googlecalendar.rb +140 -0
  16. data/lib/when_exe/icalendar.rb +1587 -0
  17. data/lib/when_exe/inspect.rb +1237 -0
  18. data/lib/when_exe/locales/af.rb +90 -0
  19. data/lib/when_exe/locales/ar.rb +145 -0
  20. data/lib/when_exe/locales/az.rb +90 -0
  21. data/lib/when_exe/locales/bg.rb +90 -0
  22. data/lib/when_exe/locales/bn.rb +94 -0
  23. data/lib/when_exe/locales/bs.rb +121 -0
  24. data/lib/when_exe/locales/ca.rb +92 -0
  25. data/lib/when_exe/locales/cs.rb +107 -0
  26. data/lib/when_exe/locales/cy.rb +150 -0
  27. data/lib/when_exe/locales/da.rb +84 -0
  28. data/lib/when_exe/locales/de.rb +92 -0
  29. data/lib/when_exe/locales/de_AT.rb +92 -0
  30. data/lib/when_exe/locales/de_CH.rb +92 -0
  31. data/lib/when_exe/locales/el.rb +93 -0
  32. data/lib/when_exe/locales/en.rb +88 -0
  33. data/lib/when_exe/locales/en_AU.rb +88 -0
  34. data/lib/when_exe/locales/en_CA.rb +88 -0
  35. data/lib/when_exe/locales/en_GB.rb +88 -0
  36. data/lib/when_exe/locales/en_IN.rb +88 -0
  37. data/lib/when_exe/locales/en_NZ.rb +88 -0
  38. data/lib/when_exe/locales/eo.rb +89 -0
  39. data/lib/when_exe/locales/es.rb +84 -0
  40. data/lib/when_exe/locales/es_419.rb +84 -0
  41. data/lib/when_exe/locales/es_AR.rb +84 -0
  42. data/lib/when_exe/locales/es_CL.rb +84 -0
  43. data/lib/when_exe/locales/es_CO.rb +84 -0
  44. data/lib/when_exe/locales/es_MX.rb +84 -0
  45. data/lib/when_exe/locales/es_PE.rb +85 -0
  46. data/lib/when_exe/locales/es_VE.rb +84 -0
  47. data/lib/when_exe/locales/et.rb +94 -0
  48. data/lib/when_exe/locales/eu.rb +95 -0
  49. data/lib/when_exe/locales/fa.rb +80 -0
  50. data/lib/when_exe/locales/fi.rb +89 -0
  51. data/lib/when_exe/locales/fr.rb +88 -0
  52. data/lib/when_exe/locales/fr_CA.rb +88 -0
  53. data/lib/when_exe/locales/fr_CH.rb +88 -0
  54. data/lib/when_exe/locales/gl.rb +81 -0
  55. data/lib/when_exe/locales/he.rb +84 -0
  56. data/lib/when_exe/locales/hi.rb +80 -0
  57. data/lib/when_exe/locales/hi_IN.rb +84 -0
  58. data/lib/when_exe/locales/hr.rb +128 -0
  59. data/lib/when_exe/locales/hu.rb +84 -0
  60. data/lib/when_exe/locales/id.rb +89 -0
  61. data/lib/when_exe/locales/is.rb +89 -0
  62. data/lib/when_exe/locales/it.rb +87 -0
  63. data/lib/when_exe/locales/it_CH.rb +87 -0
  64. data/lib/when_exe/locales/ja.rb +78 -0
  65. data/lib/when_exe/locales/kn.rb +86 -0
  66. data/lib/when_exe/locales/ko.rb +78 -0
  67. data/lib/when_exe/locales/links.rb +2342 -0
  68. data/lib/when_exe/locales/lo.rb +123 -0
  69. data/lib/when_exe/locales/locales.rb +91 -0
  70. data/lib/when_exe/locales/lt.rb +111 -0
  71. data/lib/when_exe/locales/lv.rb +118 -0
  72. data/lib/when_exe/locales/mk.rb +93 -0
  73. data/lib/when_exe/locales/mn.rb +80 -0
  74. data/lib/when_exe/locales/nb.rb +81 -0
  75. data/lib/when_exe/locales/ne.rb +81 -0
  76. data/lib/when_exe/locales/nl.rb +92 -0
  77. data/lib/when_exe/locales/nn.rb +73 -0
  78. data/lib/when_exe/locales/or.rb +84 -0
  79. data/lib/when_exe/locales/pl.rb +128 -0
  80. data/lib/when_exe/locales/pt.rb +88 -0
  81. data/lib/when_exe/locales/pt_BR.rb +88 -0
  82. data/lib/when_exe/locales/rm.rb +143 -0
  83. data/lib/when_exe/locales/ro.rb +105 -0
  84. data/lib/when_exe/locales/ru.rb +128 -0
  85. data/lib/when_exe/locales/sk.rb +109 -0
  86. data/lib/when_exe/locales/sl.rb +122 -0
  87. data/lib/when_exe/locales/sr.rb +122 -0
  88. data/lib/when_exe/locales/sv.rb +83 -0
  89. data/lib/when_exe/locales/sw.rb +89 -0
  90. data/lib/when_exe/locales/th.rb +78 -0
  91. data/lib/when_exe/locales/tl.rb +99 -0
  92. data/lib/when_exe/locales/tr.rb +96 -0
  93. data/lib/when_exe/locales/uk.rb +128 -0
  94. data/lib/when_exe/locales/uz.rb +128 -0
  95. data/lib/when_exe/locales/vi.rb +94 -0
  96. data/lib/when_exe/locales/wo.rb +82 -0
  97. data/lib/when_exe/locales/zh_CN.rb +77 -0
  98. data/lib/when_exe/locales/zh_HK.rb +77 -0
  99. data/lib/when_exe/locales/zh_TW.rb +77 -0
  100. data/lib/when_exe/mini_application.rb +252 -0
  101. data/lib/when_exe/parts/enumerator.rb +472 -0
  102. data/lib/when_exe/parts/geometric_complex.rb +379 -0
  103. data/lib/when_exe/parts/locale.rb +513 -0
  104. data/lib/when_exe/parts/method_cash.rb +207 -0
  105. data/lib/when_exe/parts/resource.rb +806 -0
  106. data/lib/when_exe/parts/timezone.rb +182 -0
  107. data/lib/when_exe/region/bahai.rb +145 -0
  108. data/lib/when_exe/region/balinese.rb +627 -0
  109. data/lib/when_exe/region/chinese.rb +896 -0
  110. data/lib/when_exe/region/chinese_calendar.rb +919 -0
  111. data/lib/when_exe/region/chinese_epoch.rb +1245 -0
  112. data/lib/when_exe/region/christian.rb +644 -0
  113. data/lib/when_exe/region/far_east.rb +192 -0
  114. data/lib/when_exe/region/french.rb +66 -0
  115. data/lib/when_exe/region/geologicalage.rb +639 -0
  116. data/lib/when_exe/region/indian.rb +1066 -0
  117. data/lib/when_exe/region/iranian.rb +66 -0
  118. data/lib/when_exe/region/islamic.rb +105 -0
  119. data/lib/when_exe/region/japanese.rb +851 -0
  120. data/lib/when_exe/region/japanese_notes.rb +964 -0
  121. data/lib/when_exe/region/japanese_residues.rb +1149 -0
  122. data/lib/when_exe/region/javanese.rb +228 -0
  123. data/lib/when_exe/region/jewish.rb +127 -0
  124. data/lib/when_exe/region/korean.rb +267 -0
  125. data/lib/when_exe/region/m17n.rb +115 -0
  126. data/lib/when_exe/region/martian.rb +215 -0
  127. data/lib/when_exe/region/mayan.rb +122 -0
  128. data/lib/when_exe/region/moon.rb +333 -0
  129. data/lib/when_exe/region/nihon_shoki.rb +73 -0
  130. data/lib/when_exe/region/planets.rb +585 -0
  131. data/lib/when_exe/region/pope.rb +298 -0
  132. data/lib/when_exe/region/residue.rb +229 -0
  133. data/lib/when_exe/region/roman.rb +325 -0
  134. data/lib/when_exe/region/ryukyu.rb +98 -0
  135. data/lib/when_exe/region/shire.rb +254 -0
  136. data/lib/when_exe/region/sun.rb +210 -0
  137. data/lib/when_exe/region/thai.rb +227 -0
  138. data/lib/when_exe/region/tibetan.rb +233 -0
  139. data/lib/when_exe/region/v50.rb +111 -0
  140. data/lib/when_exe/region/vietnamese.rb +173 -0
  141. data/lib/when_exe/region/world.rb +197 -0
  142. data/lib/when_exe/timestandard.rb +547 -0
  143. data/lib/when_exe/tmduration.rb +330 -330
  144. data/lib/when_exe/tmobjects.rb +1295 -0
  145. data/lib/when_exe/tmposition.rb +1955 -0
  146. data/lib/when_exe/tmreference.rb +1547 -0
  147. data/lib/when_exe/version.rb +10 -3
  148. data/link_to_online_documents +4 -0
  149. data/test/examples/JapanHolidays.ics +456 -0
  150. data/test/examples/Millennium.ics +17 -0
  151. data/test/examples/NewYork.ics +61 -0
  152. data/test/examples/Residue.m17n +135 -0
  153. data/test/examples/Spatial.m17n +179 -0
  154. data/test/examples/Terms.m17n +39 -0
  155. data/test/examples/Test.ics +53 -0
  156. data/test/examples/USA-DST.ics +61 -0
  157. data/test/examples/geometric_complex.rb +41 -0
  158. data/test/examples/sample.xml +14 -0
  159. data/test/examples/today.rb +61 -0
  160. data/test/test.rb +54 -19
  161. data/test/test.rb.config +1 -0
  162. data/test/test/basictypes.rb +368 -0
  163. data/test/test/calendartypes.rb +57 -0
  164. data/test/test/coordinates.rb +380 -0
  165. data/test/test/ephemeris.rb +127 -0
  166. data/test/test/googlecalendar.rb +167 -0
  167. data/test/test/icalendar.rb +848 -0
  168. data/test/test/inspect.rb +115 -0
  169. data/test/test/parts.rb +480 -0
  170. data/test/test/region/chinese.rb +161 -0
  171. data/test/test/region/french.rb +33 -0
  172. data/test/test/region/geologicalage.rb +14 -0
  173. data/test/test/region/indian.rb +55 -0
  174. data/test/test/region/iran.rb +54 -0
  175. data/test/test/region/islamic.rb +18 -0
  176. data/test/test/region/japanese.rb +62 -0
  177. data/test/test/region/jewish.rb +61 -0
  178. data/test/test/region/m17n.rb +181 -0
  179. data/test/test/region/mayan.rb +78 -0
  180. data/test/test/region/moon.rb +14 -0
  181. data/test/test/region/planets.rb +14 -0
  182. data/test/test/region/residue.rb +123 -0
  183. data/test/test/region/sun.rb +14 -0
  184. data/test/test/region/thai.rb +94 -0
  185. data/test/test/region/tibetan.rb +30 -0
  186. data/test/test/tmobjects.rb +356 -57
  187. data/test/test/tmposition.rb +237 -0
  188. data/test/test/tmreference.rb +95 -0
  189. data/when_exe.gemspec +2 -2
  190. metadata +187 -7
  191. data/doc/COPYING +0 -31
  192. data/doc/COPYING.ja +0 -25
  193. data/doc/document_url +0 -1
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2013 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::BasicTypes
9
+ class M17n
10
+
11
+ # from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/wo.yml
12
+
13
+ Locale_wo =
14
+ {"date"=>
15
+ {"abbr_day_names"=>["Dib", "Alt", "Tal", "All", "Alx", "Ajj", "Gaw"],
16
+ "abbr_month_names"=>
17
+ [nil,
18
+ "Jan",
19
+ "Feb",
20
+ "Mar",
21
+ "Apr",
22
+ "May",
23
+ "Jun",
24
+ "Jul",
25
+ "Aug",
26
+ "Sep",
27
+ "Oct",
28
+ "Nov",
29
+ "Dec"],
30
+ "day_names"=>
31
+ ["Dibèer", "Altine", "Talaata", "Allarba", "Alxamess", "Ajjouma", "Gaawu"],
32
+ "formats"=>{"default"=>"%Y-%m-%d", "long"=>"%B %d, %Y", "short"=>"%b %d"},
33
+ "month_names"=>
34
+ [nil,
35
+ "Tamkharit",
36
+ "Digui Gamou",
37
+ "Gamou",
38
+ "Raki Gamou",
39
+ "Rakati Gamou",
40
+ "Mamou Kor",
41
+ "Ndeyou Kor",
42
+ "Baraxlou",
43
+ "Kor",
44
+ "Kori",
45
+ "Digui Tabaski",
46
+ "Tabaski"],
47
+ "order"=>[:year, :month, :day]},
48
+ "time"=>
49
+ {"am"=>"am",
50
+ "formats"=>
51
+ {"default"=>"%a, %d %b %Y %H:%M:%S %z",
52
+ "long"=>"%B %d, %Y %H:%M",
53
+ "short"=>"%d %b %H:%M",
54
+ "time"=>"%H:%M:%S %z"},
55
+ "pm"=>"pm"},
56
+ "datetime"=>
57
+ {"distance_in_words"=>
58
+ {"about_x_hours"=>{"one"=>"about 1 hour", "other"=>"about %{count} hours"},
59
+ "about_x_months"=>
60
+ {"one"=>"about 1 month", "other"=>"about %{count} months"},
61
+ "about_x_years"=>{"one"=>"about 1 year", "other"=>"about %{count} years"},
62
+ "almost_x_years"=>
63
+ {"one"=>"almost 1 year", "other"=>"almost %{count} years"},
64
+ "half_a_minute"=>"half a minute",
65
+ "less_than_x_minutes"=>
66
+ {"one"=>"less than a minute", "other"=>"less than %{count} minutes"},
67
+ "less_than_x_seconds"=>
68
+ {"one"=>"less than 1 second", "other"=>"less than %{count} seconds"},
69
+ "over_x_years"=>{"one"=>"over 1 year", "other"=>"over %{count} years"},
70
+ "x_days"=>{"one"=>"1 day", "other"=>"%{count} days"},
71
+ "x_minutes"=>{"one"=>"1 minute", "other"=>"%{count} minutes"},
72
+ "x_months"=>{"one"=>"1 month", "other"=>"%{count} months"},
73
+ "x_seconds"=>{"one"=>"1 second", "other"=>"%{count} seconds"}},
74
+ "prompts"=>
75
+ {"day"=>"Day",
76
+ "hour"=>"Hour",
77
+ "minute"=>"Minute",
78
+ "month"=>"Month",
79
+ "second"=>"Seconds",
80
+ "year"=>"Year"}}}
81
+ end
82
+ end
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2013 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::BasicTypes
9
+ class M17n
10
+
11
+ # from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-CN.yml
12
+
13
+ Locale_zh_CN =
14
+ {"date"=>
15
+ {"abbr_day_names"=>["日", "一", "二", "三", "四", "五", "六"],
16
+ "abbr_month_names"=>
17
+ [nil,
18
+ "1月",
19
+ "2月",
20
+ "3月",
21
+ "4月",
22
+ "5月",
23
+ "6月",
24
+ "7月",
25
+ "8月",
26
+ "9月",
27
+ "10月",
28
+ "11月",
29
+ "12月"],
30
+ "day_names"=>["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
31
+ "formats"=>{"default"=>"%Y-%m-%d", "long"=>"%Y年%b%d日", "short"=>"%b%d日"},
32
+ "month_names"=>
33
+ [nil,
34
+ "一月",
35
+ "二月",
36
+ "三月",
37
+ "四月",
38
+ "五月",
39
+ "六月",
40
+ "七月",
41
+ "八月",
42
+ "九月",
43
+ "十月",
44
+ "十一月",
45
+ "十二月"],
46
+ "order"=>[:year, :month, :day]},
47
+ "time"=>
48
+ {"am"=>"上午",
49
+ "formats"=>
50
+ {"default"=>"%Y年%b%d日 %A %H:%M:%S %Z",
51
+ "long"=>"%Y年%b%d日 %H:%M",
52
+ "short"=>"%b%d日 %H:%M",
53
+ "time"=>"%H:%M:%S %Z"},
54
+ "pm"=>"下午"},
55
+ "datetime"=>
56
+ {"distance_in_words"=>
57
+ {"about_x_hours"=>{"one"=>"大约一小时", "other"=>"大约 %{count} 小时"},
58
+ "about_x_months"=>{"one"=>"大约一个月", "other"=>"大约 %{count} 个月"},
59
+ "about_x_years"=>{"one"=>"大约一年", "other"=>"大约 %{count} 年"},
60
+ "almost_x_years"=>{"one"=>"接近一年", "other"=>"接近 %{count} 年"},
61
+ "half_a_minute"=>"半分钟",
62
+ "less_than_x_minutes"=>{"one"=>"不到一分钟", "other"=>"不到 %{count} 分钟"},
63
+ "less_than_x_seconds"=>{"one"=>"不到一秒", "other"=>"不到 %{count} 秒"},
64
+ "over_x_years"=>{"one"=>"一年多", "other"=>"%{count} 年多"},
65
+ "x_days"=>{"one"=>"一天", "other"=>"%{count} 天"},
66
+ "x_minutes"=>{"one"=>"一分钟", "other"=>"%{count} 分钟"},
67
+ "x_months"=>{"one"=>"一个月", "other"=>"%{count} 个月"},
68
+ "x_seconds"=>{"one"=>"一秒", "other"=>"%{count} 秒"}},
69
+ "prompts"=>
70
+ {"day"=>"日",
71
+ "hour"=>"时",
72
+ "minute"=>"分",
73
+ "month"=>"月",
74
+ "second"=>"秒",
75
+ "year"=>"年"}}}
76
+ end
77
+ end
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2013 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::BasicTypes
9
+ class M17n
10
+
11
+ # from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-HK.yml
12
+
13
+ Locale_zh_HK =
14
+ {"date"=>
15
+ {"abbr_day_names"=>["日", "一", "二", "三", "四", "五", "六"],
16
+ "abbr_month_names"=>
17
+ [nil,
18
+ "1月",
19
+ "2月",
20
+ "3月",
21
+ "4月",
22
+ "5月",
23
+ "6月",
24
+ "7月",
25
+ "8月",
26
+ "9月",
27
+ "10月",
28
+ "11月",
29
+ "12月"],
30
+ "day_names"=>["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
31
+ "formats"=>{"default"=>"%Y-%m-%d", "long"=>"%Y年%b%d日", "short"=>"%b%d日"},
32
+ "month_names"=>
33
+ [nil,
34
+ "一月",
35
+ "二月",
36
+ "三月",
37
+ "四月",
38
+ "五月",
39
+ "六月",
40
+ "七月",
41
+ "八月",
42
+ "九月",
43
+ "十月",
44
+ "十一月",
45
+ "十二月"],
46
+ "order"=>[:year, :month, :day]},
47
+ "time"=>
48
+ {"am"=>"上晝",
49
+ "formats"=>
50
+ {"default"=>"%Y年%b%d號 %A %H:%M:%S %Z",
51
+ "long"=>"%Y年%b%d號 %H:%M",
52
+ "short"=>"%b%d號 %H:%M",
53
+ "time"=>"%H:%M:%S %Z"},
54
+ "pm"=>"下晝"},
55
+ "datetime"=>
56
+ {"distance_in_words"=>
57
+ {"about_x_hours"=>{"one"=>"大概一個鐘", "other"=>"大概%{count}個鐘"},
58
+ "about_x_months"=>{"one"=>"大概一個月", "other"=>"大概%{count}個月"},
59
+ "about_x_years"=>{"one"=>"大概一年", "other"=>"大概%{count}年"},
60
+ "almost_x_years"=>{"one"=>"差唔多一年", "other"=>"差唔多%{count}年"},
61
+ "half_a_minute"=>"半分鐘",
62
+ "less_than_x_minutes"=>{"one"=>"唔夠一分鐘", "other"=>"唔夠%{count}分鐘"},
63
+ "less_than_x_seconds"=>{"one"=>"唔夠一秒", "other"=>"唔夠%{count}秒"},
64
+ "over_x_years"=>{"one"=>"超過一年", "other"=>"超過%{count}年"},
65
+ "x_days"=>{"one"=>"一日", "other"=>"%{count}日"},
66
+ "x_minutes"=>{"one"=>"一分鐘", "other"=>"%{count}分鐘"},
67
+ "x_months"=>{"one"=>"一個月", "other"=>"%{count}個月"},
68
+ "x_seconds"=>{"one"=>"一秒", "other"=>"%{count}秒"}},
69
+ "prompts"=>
70
+ {"day"=>"日",
71
+ "hour"=>"點",
72
+ "minute"=>"分",
73
+ "month"=>"月",
74
+ "second"=>"秒",
75
+ "year"=>"年"}}}
76
+ end
77
+ end
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2013 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::BasicTypes
9
+ class M17n
10
+
11
+ # from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-TW.yml
12
+
13
+ Locale_zh_TW =
14
+ {"date"=>
15
+ {"abbr_day_names"=>["日", "一", "二", "三", "四", "五", "六"],
16
+ "abbr_month_names"=>
17
+ [nil,
18
+ "1月",
19
+ "2月",
20
+ "3月",
21
+ "4月",
22
+ "5月",
23
+ "6月",
24
+ "7月",
25
+ "8月",
26
+ "9月",
27
+ "10月",
28
+ "11月",
29
+ "12月"],
30
+ "day_names"=>["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
31
+ "formats"=>{"default"=>"%Y-%m-%d", "long"=>"%Y年%b%d日", "short"=>"%b%d日"},
32
+ "month_names"=>
33
+ [nil,
34
+ "一月",
35
+ "二月",
36
+ "三月",
37
+ "四月",
38
+ "五月",
39
+ "六月",
40
+ "七月",
41
+ "八月",
42
+ "九月",
43
+ "十月",
44
+ "十一月",
45
+ "十二月"],
46
+ "order"=>[:year, :month, :day]},
47
+ "time"=>
48
+ {"am"=>"上午",
49
+ "formats"=>
50
+ {"default"=>"%Y年%b%d日 %A %H:%M:%S %Z",
51
+ "long"=>"%Y年%b%d日 %H:%M",
52
+ "short"=>"%b%d日 %H:%M",
53
+ "time"=>"%H:%M:%S %Z"},
54
+ "pm"=>"下午"},
55
+ "datetime"=>
56
+ {"distance_in_words"=>
57
+ {"about_x_hours"=>{"one"=>"大約一小時", "other"=>"大約 %{count} 小時"},
58
+ "about_x_months"=>{"one"=>"大約一個月", "other"=>"大約 %{count} 個月"},
59
+ "about_x_years"=>{"one"=>"大約一年", "other"=>"大約 %{count} 年"},
60
+ "almost_x_years"=>{"one"=>"接近一年", "other"=>"接近 %{count} 年"},
61
+ "half_a_minute"=>"半分鐘",
62
+ "less_than_x_minutes"=>{"one"=>"不到一分鐘", "other"=>"不到 %{count} 分鐘"},
63
+ "less_than_x_seconds"=>{"one"=>"不到一秒", "other"=>"不到 %{count} 秒"},
64
+ "over_x_years"=>{"one"=>"一年多", "other"=>"%{count} 年多"},
65
+ "x_days"=>{"one"=>"一天", "other"=>"%{count} 天"},
66
+ "x_minutes"=>{"one"=>"一分鐘", "other"=>"%{count} 分鐘"},
67
+ "x_months"=>{"one"=>"一個月", "other"=>"%{count} 個月"},
68
+ "x_seconds"=>{"one"=>"一秒", "other"=>"%{count} 秒"}},
69
+ "prompts"=>
70
+ {"day"=>"日",
71
+ "hour"=>"時",
72
+ "minute"=>"分",
73
+ "month"=>"月",
74
+ "second"=>"秒",
75
+ "year"=>"年"}}}
76
+ end
77
+ end
@@ -0,0 +1,252 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2013 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
+ require 'socket'
9
+
10
+ #
11
+ # Time for v1.8.x compatibility
12
+ #
13
+ class Time
14
+ if Time.now.respond_to?(:strftime) && Time.now.strftime('%FT%X.%L').length > 0
15
+ alias :_log_ :strftime
16
+ else
17
+ def _log_(format)
18
+ "%04d-%02d-%02dT%02d:%02d:%02d.%03d" % [year, month, day, hour, min, sec, usec / 1000]
19
+ end
20
+ end
21
+ end
22
+
23
+ #
24
+ # Micro Client / Server
25
+ #
26
+ module When
27
+ class << self
28
+
29
+ #
30
+ # 設定ファイルを読み込む
31
+ # @private
32
+ def config(path=File.expand_path($0) + '.config')
33
+ config = {}
34
+ open(path, 'r') do |file|
35
+ while (line=file.gets)
36
+ next if line =~ /^\s*#/
37
+ key, *value = line.chomp.split(':')
38
+ value = value[0] if value.size <= 1
39
+ config[key] = value
40
+ end
41
+ end
42
+ config
43
+ rescue
44
+ {}
45
+ end
46
+
47
+ #
48
+ # マイクロ・サーバーを起動する
49
+ #
50
+ # @param [#to_i] port 待ち受けるポート番号
51
+ #
52
+ # @return [void]
53
+ #
54
+ # @note mini_application
55
+ #
56
+ def server(port)
57
+ config = When.config
58
+ TCPServer.open(port.to_i) do |socket|
59
+ puts Time.now._log_('%FT%X.%L') + ': Start'
60
+ loop do
61
+ Thread.start(socket.accept) do |client|
62
+ query = client.gets.chomp.force_encoding("UTF-8")
63
+ start = Time.now
64
+ puts start._log_('%FT%X.%L') + ': Query - ' + When::Parts::Locale.translate(query, config['!'])
65
+ begin
66
+ client.puts JSON.generate(Array(free_conv(*query.split(/\s+/)))).to_s
67
+ stop = Time.now
68
+ puts stop._log_('%FT%X.%L') + ": Respond (%7.0f ms)" % (1000 * (stop.to_f - start.to_f))
69
+ rescue => err
70
+ puts Time.now._log_('%FT%X.%L') + ': error - ' + err.to_s
71
+ client.puts JSON.generate({:error=>query}).to_s
72
+ end
73
+ client.close
74
+ end
75
+ end
76
+ end
77
+ rescue Exception => e
78
+ puts Time.now._log_('%FT%X.%L') + ': Exception - ' + e.to_s
79
+ ensure
80
+ puts Time.now._log_('%FT%X.%L') + ': Done.'
81
+ end
82
+
83
+ #
84
+ # マイクロ・クライアントを実行する
85
+ #
86
+ # @param [String] server マイクロ・サーバのアドレス
87
+ # @param [#to_i] port つなぐポート番号
88
+ # @param [String] query 問い合わせ文字列
89
+ #
90
+ # @return [JSON] 応答
91
+ #
92
+ # @note mini_application
93
+ #
94
+ def client(server, port, query)
95
+ TCPSocket.open(server, port.to_i) do |socket|
96
+ socket.puts(query)
97
+ JSON.parse(socket.gets.force_encoding("UTF-8"))
98
+ end
99
+ end
100
+
101
+ # 日付の自由変換
102
+ #
103
+ # @param [Array<String>] args コマンドライン入力
104
+ # @param [Block] block ブロック
105
+ #
106
+ # @return [Array<Hash>] 変換結果
107
+ # @return [Array<Array<Numeric>>] 最良近似分数列
108
+ #
109
+ # @note 暦法のIRI, When.exe Standard Expression, 最良近似分数列の分母分子などを文字列で指定
110
+ # @note mini_application
111
+ #
112
+ def free_conv(*args, &block)
113
+ calendars, dates, numbers, methods, output, options = _parse(args)
114
+
115
+ if numbers.size >= 2 && calendars.size == 0
116
+ result = []
117
+ When::Coordinates::Residue.new(numbers[0], numbers[1]).each { |v| result << v }
118
+ return result
119
+ end
120
+
121
+ block ||=
122
+ if methods.size == 0
123
+ lambda {|date| date.send(*output)}
124
+ else
125
+ lambda {|date, type|
126
+ case type
127
+ when When::YEAR ; date.strftime("%Y")
128
+ when When::MONTH ; date.strftime("%B %Y")
129
+ when When::WEEK ; nil
130
+ when When::DAY ; date[0]
131
+ else ; '-'
132
+ end
133
+ }
134
+ end
135
+ _free_conv(calendars, dates, methods, output, options, &block)
136
+ end
137
+
138
+ # 引数読み込み
139
+ #
140
+ # args [String] コマンドライン入力
141
+ #
142
+ # @return [Array] ( calendars, dates, numbers, methods )
143
+ # [ calendars [Array<When::TM::Calendar or When::TM::CalendarEra>]]
144
+ # [ dates [Array<When::TM::CalData or When::TM::DateAndTime>] ]
145
+ # [ numbers [Array<Numeric>]]
146
+ # [ methods [Array<String>] メソッド名('week', 'month', 'year') ]
147
+ # [ output [Array<Symbol, String>] 出力処理に使うメソッドのシンボルと引数 ]
148
+ # [ options [Hash{ :extent=>Boolean, :go_back=><:All || :Before(nil) || :After> }]
149
+ #
150
+ # @private
151
+ def _parse(args)
152
+ calendars = []
153
+ dates = []
154
+ numbers = []
155
+ methods = []
156
+ options = {}
157
+ output = [:to_s]
158
+
159
+ config = When.config
160
+ args.flatten.each do |arg|
161
+ case arg
162
+ when Numeric ; dates << arg ; numbers << arg
163
+ when Hash ; options.update(arg)
164
+ when Range ; arg.each {|d| dates << d}
165
+ when Symbol ; output = arg
166
+ when String
167
+ case arg
168
+ when /^:(.+?)(?:\[(..)\])?$/ ; output = [$1.to_sym, $2].compact
169
+ when /^(year|month|week)(?:\[(..)\])?$/i ; methods << [$1.downcase + '_included', $2||'SU']
170
+ when /^[-+\d]\d*$/ ; dates << arg.to_i ; numbers << arg.to_i
171
+ when /^[-+.\d][.\d]*$/ ; dates << arg.to_f ; numbers << arg.to_f
172
+ when /^now$/i ; dates << When.now
173
+ when /^today$/i ; dates << When.today
174
+ when /(^[-+\d])|\^/ ; dates << arg
175
+ when /^\//
176
+ arg[1..-1].scan(/./) do |c|
177
+ c = c.upcase
178
+ if config.key?(c)
179
+ calendar = config[c]
180
+ calendar = calendar.join(':') if calendar.kind_of?(Array)
181
+ calendars << When.Calendar(calendar)
182
+ elsif c == 'D'
183
+ calendars << When::TM::JulianDate
184
+ end
185
+ end
186
+ else
187
+ begin
188
+ calendars << ((arg == 'JulianDate') ? When::TM::JulianDate : When.Calendar(arg))
189
+ rescue NameError, OpenURI::HTTPError
190
+ dates << arg
191
+ end
192
+ end
193
+ else
194
+ dates << arg
195
+ end
196
+ end
197
+ [calendars, dates, numbers, methods, output, options]
198
+ end
199
+
200
+ # 変換処理(実行部)
201
+ #
202
+ # @param [When::TM::Calendar, When::TM::CalendarEra] calendars
203
+ # @param [When::TM::CalData, When::TM::DateAndTime] dates
204
+ # @param [String] methods メソッド名('week', 'month', 'year')
205
+ # @param [Hash] options {:extent=>Boolean, :go_back=><:All||:Before(nil)||:After>}
206
+ #
207
+ # @return [Array] 変換結果
208
+ #
209
+ # @private
210
+ def _free_conv(calendars, dates, methods, output, options, &block)
211
+ dates[0] ||= When.now
212
+ calendars[0] ||= When.Calendar('Gregorian')
213
+ result = dates.map {|date|
214
+ date = When.when?(date)
215
+ list = calendars.dup
216
+ (0...calendars.size).to_a.reverse.each do |i|
217
+ case list[i]
218
+ when When::TM::Calendar ; list.slice!(i) if options[:extent] && !list[i].domain.include?(date)
219
+ when Class ;
220
+ else
221
+ eras = (date ^ list[i]).delete_if {|e| !e.leaf?}
222
+ unless options[:go_back] == :All
223
+ if options[:go_back] == :After
224
+ eras = [eras[(eras.index {|e| e.calendar_era_name[3]}) || -1]]
225
+ else
226
+ eras.delete_if {|e| e.calendar_era_name[3]}
227
+ end
228
+ end
229
+ list[i,1] = eras.map {|e| e.calendar_era}
230
+ end
231
+ end
232
+
233
+ if methods.size == 0
234
+ list.map {|calendar|
235
+ calendar.kind_of?(Class) ?
236
+ yield(calendar.new(date)) :
237
+ yield(calendar ^ (calendar.rate_of_clock == date.rate_of_clock ? date.to_i : date))
238
+ }
239
+ else
240
+ list.map {|calendar|
241
+ date_for_calendar = calendar ^ (calendar.rate_of_clock == date.rate_of_clock ? date.to_i : date)
242
+ methods.map {|method|
243
+ date_for_calendar.send(method[0].to_sym, method[1], &block)
244
+ }
245
+ }
246
+ end
247
+ }
248
+ result = result[0] while result.kind_of?(Array) && result.size == 1
249
+ return result
250
+ end
251
+ end
252
+ end