when_exe 0.3.2 → 0.3.3
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.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/locales.rb +2 -1
- data/bin/when.rb.config +1 -1
- data/lib/when_exe.rb +70 -48
- data/lib/when_exe/basictypes.rb +99 -65
- data/lib/when_exe/calendartypes.rb +40 -178
- data/lib/when_exe/coordinates.rb +156 -62
- data/lib/when_exe/core/compatibility.rb +10 -0
- data/lib/when_exe/core/extension.rb +40 -0
- data/lib/when_exe/ephemeris.rb +112 -50
- data/lib/when_exe/icalendar.rb +125 -91
- data/lib/when_exe/inspect.rb +100 -48
- data/lib/when_exe/locales/ar.rb +48 -48
- data/lib/when_exe/locales/bg.rb +1 -1
- data/lib/when_exe/locales/bs.rb +4 -2
- data/lib/when_exe/locales/ca.rb +1 -1
- data/lib/when_exe/locales/en_CA.rb +3 -4
- data/lib/when_exe/locales/en_IE.rb +88 -0
- data/lib/when_exe/locales/en_US.rb +87 -0
- data/lib/when_exe/locales/es_CR.rb +84 -0
- data/lib/when_exe/locales/es_EC.rb +85 -0
- data/lib/when_exe/locales/es_PA.rb +85 -0
- data/lib/when_exe/locales/fr.rb +39 -39
- data/lib/when_exe/locales/hu.rb +15 -14
- data/lib/when_exe/locales/it.rb +1 -1
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/locales.rb +7 -0
- data/lib/when_exe/locales/lt.rb +21 -19
- data/lib/when_exe/locales/ms.rb +84 -0
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/ru.rb +1 -1
- data/lib/when_exe/locales/uk.rb +1 -1
- data/lib/when_exe/locales/ur.rb +84 -0
- data/lib/when_exe/mini_application.rb +44 -43
- data/lib/when_exe/parts/enumerator.rb +3 -3
- data/lib/when_exe/parts/geometric_complex.rb +6 -1
- data/lib/when_exe/parts/locale.rb +49 -18
- data/lib/when_exe/parts/method_cash.rb +61 -0
- data/lib/when_exe/parts/resource.rb +221 -106
- data/lib/when_exe/parts/timezone.rb +70 -33
- data/lib/when_exe/region/bahai.rb +2 -2
- data/lib/when_exe/region/balinese.rb +40 -43
- data/lib/when_exe/region/chinese.rb +93 -33
- data/lib/when_exe/region/chinese_calendar.rb +117 -1
- data/lib/when_exe/region/chinese_epoch.rb +65 -10
- data/lib/when_exe/region/christian.rb +97 -2
- data/lib/when_exe/region/ephemeric_notes.rb +353 -0
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/geologicalage.rb +171 -171
- data/lib/when_exe/region/indian.rb +18 -14
- data/lib/when_exe/region/iranian.rb +1 -1
- data/lib/when_exe/region/japanese.rb +49 -12
- data/lib/when_exe/region/japanese_notes.rb +838 -507
- data/lib/when_exe/region/japanese_residues.rb +724 -662
- data/lib/when_exe/region/javanese.rb +7 -7
- data/lib/when_exe/region/mayan.rb +19 -17
- data/lib/when_exe/region/nihon_shoki.rb +3 -3
- data/lib/when_exe/region/residue.rb +29 -28
- data/lib/when_exe/region/shire.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +87 -5
- data/lib/when_exe/region/world.rb +1 -1
- data/lib/when_exe/timestandard.rb +85 -7
- data/lib/when_exe/tmobjects.rb +32 -4
- data/lib/when_exe/tmposition.rb +104 -55
- data/lib/when_exe/tmreference.rb +157 -60
- data/lib/when_exe/version.rb +2 -2
- data/test/examples/JapanHolidays.ics +3 -3
- data/test/examples/JapanHolidaysRFC6350.ics +499 -0
- data/test/examples/Residue.m17n +3 -2
- data/test/examples/Spatial.m17n +3 -3
- data/test/examples/USA-DST.ics +27 -27
- data/test/examples/today.rb +1 -1
- data/test/test.rb +4 -2
- data/test/test/basictypes.rb +40 -15
- data/test/test/coordinates.rb +9 -4
- data/test/test/icalendar.rb +24 -14
- data/test/test/inspect.rb +5 -3
- data/test/test/parts.rb +11 -2
- data/test/test/region/chinese.rb +4 -4
- data/test/test/region/civil.rb +124 -0
- data/test/test/region/geologicalage.rb +5 -2
- data/test/test/region/indian.rb +2 -0
- data/test/test/region/japanese.rb +156 -1
- data/test/test/region/jewish.rb +3 -3
- data/test/test/region/m17n.rb +9 -9
- data/test/test/region/mayan.rb +122 -5
- data/test/test/region/residue.rb +1 -1
- data/test/test/tmobjects.rb +27 -64
- data/test/test/tmposition.rb +48 -1
- data/test/test/tmreference.rb +66 -4
- data/when_exe.gemspec +1 -1
- metadata +15 -6
data/lib/when_exe/locales/nl.rb
CHANGED
|
@@ -12,7 +12,7 @@ module When::BasicTypes
|
|
|
12
12
|
|
|
13
13
|
Locale_nl =
|
|
14
14
|
{"date"=>
|
|
15
|
-
{"abbr_day_names"=>["
|
|
15
|
+
{"abbr_day_names"=>["zo", "ma", "di", "wo", "do", "vr", "za"],
|
|
16
16
|
"abbr_month_names"=>
|
|
17
17
|
[nil,
|
|
18
18
|
"jan",
|
|
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
|
35
35
|
"donderdag",
|
|
36
36
|
"vrijdag",
|
|
37
37
|
"zaterdag"],
|
|
38
|
-
"formats"=>{"default"=>"%d
|
|
38
|
+
"formats"=>{"default"=>"%d-%m-%Y", "long"=>"%e %B %Y", "short"=>"%e %b"},
|
|
39
39
|
"month_names"=>
|
|
40
40
|
[nil,
|
|
41
41
|
"januari",
|
data/lib/when_exe/locales/ru.rb
CHANGED
|
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
|
35
35
|
"четверг",
|
|
36
36
|
"пятница",
|
|
37
37
|
"суббота"],
|
|
38
|
-
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"
|
|
38
|
+
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"%-d %B %Y", "short"=>"%-d %b"},
|
|
39
39
|
"month_names"=>
|
|
40
40
|
[nil,
|
|
41
41
|
"января",
|
data/lib/when_exe/locales/uk.rb
CHANGED
|
@@ -35,7 +35,7 @@ module When::BasicTypes
|
|
|
35
35
|
"четвер",
|
|
36
36
|
"п'ятниця",
|
|
37
37
|
"субота"],
|
|
38
|
-
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"
|
|
38
|
+
"formats"=>{"default"=>"%d.%m.%Y", "long"=>"%-d %B %Y", "short"=>"%-d %b"},
|
|
39
39
|
"month_names"=>
|
|
40
40
|
[nil,
|
|
41
41
|
"Січень",
|
|
@@ -0,0 +1,84 @@
|
|
|
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/ur.yml
|
|
12
|
+
|
|
13
|
+
Locale_ur =
|
|
14
|
+
{"date"=>
|
|
15
|
+
{"abbr_day_names"=>
|
|
16
|
+
["اتوار", "سوموار", "منگل", "ندھ", "جمعرات", "جمعہ", "ہفتہ"],
|
|
17
|
+
"abbr_month_names"=>
|
|
18
|
+
[nil,
|
|
19
|
+
"جنوری",
|
|
20
|
+
"فروری",
|
|
21
|
+
"مارچ",
|
|
22
|
+
"اپریل",
|
|
23
|
+
"مئی",
|
|
24
|
+
"جون",
|
|
25
|
+
"جولائی",
|
|
26
|
+
"اگست",
|
|
27
|
+
"ستمبر",
|
|
28
|
+
"اکتوبر",
|
|
29
|
+
"نومبر",
|
|
30
|
+
"دسمبر"],
|
|
31
|
+
"day_names"=>["اتوار", "سوموار", "منگل", "ندھ", "جمعرات", "جمعہ", "ہفتہ"],
|
|
32
|
+
"formats"=>{"default"=>"%d %B %Y", "long"=>"%B %d، %Y", "short"=>"%d %b"},
|
|
33
|
+
"month_names"=>
|
|
34
|
+
[nil,
|
|
35
|
+
"جنوری",
|
|
36
|
+
"فروری",
|
|
37
|
+
"مارچ",
|
|
38
|
+
"اپریل",
|
|
39
|
+
"مئی",
|
|
40
|
+
"جون",
|
|
41
|
+
"جولائی",
|
|
42
|
+
"اگست",
|
|
43
|
+
"ستمبر",
|
|
44
|
+
"اکتوبر",
|
|
45
|
+
"نومبر",
|
|
46
|
+
"دسمبر"],
|
|
47
|
+
"order"=>[:day, :month, :year]},
|
|
48
|
+
"time"=>
|
|
49
|
+
{"am"=>"صبح",
|
|
50
|
+
"pm"=>"شام",
|
|
51
|
+
"formats"=>
|
|
52
|
+
{"default"=>"%a، %d %b %Y، %p %l:%M %Z",
|
|
53
|
+
"long"=>"%B %d، %Y %p %H:%M",
|
|
54
|
+
"short"=>"%d %b، %H:%M"}},
|
|
55
|
+
"datetime"=>
|
|
56
|
+
{"distance_in_words"=>
|
|
57
|
+
{"about_x_hours"=>
|
|
58
|
+
{"one"=>"تقریبا ایک گھنٹہ", "other"=>"تقریبا %{count} گھنٹے"},
|
|
59
|
+
"about_x_months"=>
|
|
60
|
+
{"one"=>"تقریبا ایک مہینہ", "other"=>"تقریبا %{count} مہینہ"},
|
|
61
|
+
"about_x_years"=>
|
|
62
|
+
{"one"=>"تقریبا ایک سال", "other"=>"تقریبا %{count} سال"},
|
|
63
|
+
"almost_x_years"=>
|
|
64
|
+
{"one"=>"تقریبا ایک سال", "other"=>"تقریبا %{count} سال"},
|
|
65
|
+
"half_a_minute"=>"آدھا منٹ",
|
|
66
|
+
"less_than_x_minutes"=>
|
|
67
|
+
{"one"=>"ایک مںٹ سے کم", "other"=>"%{count} مںٹوں سے کم"},
|
|
68
|
+
"less_than_x_seconds"=>
|
|
69
|
+
{"one"=>"ایک سیکنڈ سے کم", "other"=>"%{count} سیکنڈوں سے کم"},
|
|
70
|
+
"over_x_years"=>
|
|
71
|
+
{"one"=>"ایک سال سے زیادہ", "other"=>"%{count} سالوں سے زیادہ"},
|
|
72
|
+
"x_days"=>{"one"=>"ایک دن", "other"=>"%{count} دن"},
|
|
73
|
+
"x_minutes"=>{"one"=>"ایک منٹ", "other"=>"%{count} منٹ"},
|
|
74
|
+
"x_months"=>{"one"=>"ایک ماہ", "other"=>"%{count} ماہ"},
|
|
75
|
+
"x_seconds"=>{"one"=>"ایک سیکنڈ", "other"=>"%{count} سیکنڈ"}},
|
|
76
|
+
"prompts"=>
|
|
77
|
+
{"day"=>"دن",
|
|
78
|
+
"hour"=>"گہنٹہ",
|
|
79
|
+
"minute"=>"منٹ",
|
|
80
|
+
"month"=>"ماہ",
|
|
81
|
+
"second"=>"سیکنڈ",
|
|
82
|
+
"year"=>"سال"}}}
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
=begin
|
|
3
|
-
Copyright (C) 2013 Takashi SUGA
|
|
3
|
+
Copyright (C) 2013-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
|
|
@@ -102,40 +102,6 @@ module When
|
|
|
102
102
|
end
|
|
103
103
|
end
|
|
104
104
|
|
|
105
|
-
# JSONで通信するために Symbol を String に変換する
|
|
106
|
-
def _to_string(source)
|
|
107
|
-
case source
|
|
108
|
-
when Array
|
|
109
|
-
source.map {|e| _to_string(e)}
|
|
110
|
-
when Hash
|
|
111
|
-
result = {}
|
|
112
|
-
source.each_pair {|k,v|
|
|
113
|
-
result[k.kind_of?(Symbol) ? '_sym_' + k.to_s : k] = _to_string(v)
|
|
114
|
-
}
|
|
115
|
-
result
|
|
116
|
-
else
|
|
117
|
-
source
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
private :_to_string
|
|
121
|
-
|
|
122
|
-
# JSONで通信するために String を Symbol に変換する
|
|
123
|
-
def _to_symbol(source)
|
|
124
|
-
case source
|
|
125
|
-
when Array
|
|
126
|
-
source.map {|e| _to_symbol(e)}
|
|
127
|
-
when Hash
|
|
128
|
-
result = {}
|
|
129
|
-
source.each_pair {|k,v|
|
|
130
|
-
result[k =~ /^_sym_(.+)$/ ? $1.to_sym : k] = _to_symbol(v)
|
|
131
|
-
}
|
|
132
|
-
result
|
|
133
|
-
else
|
|
134
|
-
source
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
private :_to_symbol
|
|
138
|
-
|
|
139
105
|
# 日付の自由変換
|
|
140
106
|
#
|
|
141
107
|
# @param [Array<String>] args コマンドライン入力
|
|
@@ -148,7 +114,7 @@ module When
|
|
|
148
114
|
# @note mini_application
|
|
149
115
|
#
|
|
150
116
|
def free_conv(*args, &block)
|
|
151
|
-
calendars, dates, numbers, methods, output, options =
|
|
117
|
+
calendars, dates, numbers, methods, output, options = _parse_command(args)
|
|
152
118
|
|
|
153
119
|
if numbers.size >= 2 && calendars.size == 0
|
|
154
120
|
result = []
|
|
@@ -173,6 +139,8 @@ module When
|
|
|
173
139
|
_free_conv(calendars, dates, methods, output, options, &block)
|
|
174
140
|
end
|
|
175
141
|
|
|
142
|
+
private
|
|
143
|
+
|
|
176
144
|
# 引数読み込み
|
|
177
145
|
#
|
|
178
146
|
# args [String] コマンドライン入力
|
|
@@ -185,8 +153,7 @@ module When
|
|
|
185
153
|
# [ output [Array<Symbol, String>] 出力処理に使うメソッドのシンボルと引数 ]
|
|
186
154
|
# [ options [Hash{ :extent=>Boolean, :go_back=><:All || :Before(nil) || :After> }]
|
|
187
155
|
#
|
|
188
|
-
|
|
189
|
-
def _parse(args)
|
|
156
|
+
def _parse_command(args)
|
|
190
157
|
calendars = []
|
|
191
158
|
dates = []
|
|
192
159
|
numbers = []
|
|
@@ -244,16 +211,18 @@ module When
|
|
|
244
211
|
#
|
|
245
212
|
# @return [Array] 変換結果
|
|
246
213
|
#
|
|
247
|
-
# @private
|
|
248
214
|
def _free_conv(calendars, dates, methods, output, options, &block)
|
|
249
215
|
dates[0] ||= When.now
|
|
250
216
|
calendars[0] ||= When.Calendar('Gregorian')
|
|
251
217
|
result = dates.map {|date|
|
|
252
218
|
date = When.when?(date)
|
|
219
|
+
opts = {}
|
|
220
|
+
opts[:location] = date.location if date.location
|
|
221
|
+
opts[:clock ] = date.clock if date.respond_to?(:clock) && date.clock
|
|
253
222
|
list = calendars.dup
|
|
254
223
|
(0...calendars.size).to_a.reverse.each do |i|
|
|
255
224
|
case list[i]
|
|
256
|
-
when When::TM::Calendar ; list.slice!(i) if options[:extent] && !list[i].domain.include?(date)
|
|
225
|
+
when When::TM::Calendar ; list.slice!(i) if options[:extent] && !list[i].domain[''].include?(date)
|
|
257
226
|
when Class ;
|
|
258
227
|
else
|
|
259
228
|
eras = (date ^ list[i]).delete_if {|e| !e.leaf?}
|
|
@@ -271,12 +240,12 @@ module When
|
|
|
271
240
|
if methods.size == 0
|
|
272
241
|
list.map {|calendar|
|
|
273
242
|
calendar.kind_of?(Class) ?
|
|
274
|
-
yield(calendar.new(date)) :
|
|
275
|
-
yield(calendar
|
|
243
|
+
yield(calendar.new(date, opts.dup)) :
|
|
244
|
+
yield(calendar.^(calendar.rate_of_clock == date.time_standard.rate_of_clock ? date.to_i : date, opts))
|
|
276
245
|
}
|
|
277
246
|
else
|
|
278
247
|
list.map {|calendar|
|
|
279
|
-
date_for_calendar = calendar
|
|
248
|
+
date_for_calendar = calendar.^(calendar.rate_of_clock == date.time_standard.rate_of_clock ? date.to_i : date, opts)
|
|
280
249
|
methods.map {|method|
|
|
281
250
|
date_for_calendar.send(method[0].to_sym, method[1], &block)
|
|
282
251
|
}
|
|
@@ -286,5 +255,37 @@ module When
|
|
|
286
255
|
result = result[0] while result.kind_of?(Array) && result.size == 1
|
|
287
256
|
return result
|
|
288
257
|
end
|
|
258
|
+
|
|
259
|
+
# JSONで通信するために Symbol を String に変換する
|
|
260
|
+
def _to_string(source)
|
|
261
|
+
case source
|
|
262
|
+
when Array
|
|
263
|
+
source.map {|e| _to_string(e)}
|
|
264
|
+
when Hash
|
|
265
|
+
result = {}
|
|
266
|
+
source.each_pair {|k,v|
|
|
267
|
+
result[k.kind_of?(Symbol) ? '_sym_' + k.to_s : k] = _to_string(v)
|
|
268
|
+
}
|
|
269
|
+
result
|
|
270
|
+
else
|
|
271
|
+
source
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# JSONで通信するために String を Symbol に変換する
|
|
276
|
+
def _to_symbol(source)
|
|
277
|
+
case source
|
|
278
|
+
when Array
|
|
279
|
+
source.map {|e| _to_symbol(e)}
|
|
280
|
+
when Hash
|
|
281
|
+
result = {}
|
|
282
|
+
source.each_pair {|k,v|
|
|
283
|
+
result[k =~ /^_sym_(.+)$/ ? $1.to_sym : k] = _to_symbol(v)
|
|
284
|
+
}
|
|
285
|
+
result
|
|
286
|
+
else
|
|
287
|
+
source
|
|
288
|
+
end
|
|
289
|
+
end
|
|
289
290
|
end
|
|
290
291
|
end
|
|
@@ -262,7 +262,7 @@ module When::Parts
|
|
|
262
262
|
def _range(args)
|
|
263
263
|
if (args[0].instance_of?(Range))
|
|
264
264
|
range, @count_limit, others = args
|
|
265
|
-
raise ArgumentError, "Too many arguments" if
|
|
265
|
+
raise ArgumentError, "Too many arguments" if others
|
|
266
266
|
@first = When.when?(range.first)
|
|
267
267
|
@last = When.when?(range.last)
|
|
268
268
|
@exdate |= @last if (range.exclude_end?)
|
|
@@ -274,8 +274,8 @@ module When::Parts
|
|
|
274
274
|
end
|
|
275
275
|
else
|
|
276
276
|
@first, @direction, @count_limit, others = args
|
|
277
|
-
raise ArgumentError, "Too many arguments" if
|
|
278
|
-
raise ArgumentError, "Too few arguments" unless
|
|
277
|
+
raise ArgumentError, "Too many arguments" if others
|
|
278
|
+
raise ArgumentError, "Too few arguments" unless @first
|
|
279
279
|
@direction ||= :forward
|
|
280
280
|
@last = nil
|
|
281
281
|
end
|
|
@@ -373,7 +373,12 @@ module When::Parts
|
|
|
373
373
|
# 処理を first (type: When::TM::(Temporal)Position) に委譲する
|
|
374
374
|
#
|
|
375
375
|
def method_missing(name, *args, &block)
|
|
376
|
-
|
|
376
|
+
self.class.module_eval %Q{
|
|
377
|
+
def #{name}(*args, &block)
|
|
378
|
+
first.send("#{name}", *args, &block)
|
|
379
|
+
end
|
|
380
|
+
} unless When::Parts::MethodCash.escape(name)
|
|
381
|
+
first.send(name, *args, &block)
|
|
377
382
|
end
|
|
378
383
|
end
|
|
379
384
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
=begin
|
|
3
|
-
Copyright (C) 2011-
|
|
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
|
|
@@ -45,8 +45,14 @@ module When::Parts
|
|
|
45
45
|
'竜' => '龍',
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
# Escape
|
|
48
49
|
# @private
|
|
49
|
-
Escape =
|
|
50
|
+
Escape = {
|
|
51
|
+
"\\\\" => "\\",
|
|
52
|
+
"\\n" => "\n",
|
|
53
|
+
"\\r" => "\r",
|
|
54
|
+
"\\," => ","
|
|
55
|
+
}
|
|
50
56
|
|
|
51
57
|
class << self
|
|
52
58
|
|
|
@@ -128,8 +134,8 @@ module When::Parts
|
|
|
128
134
|
# @private
|
|
129
135
|
def _namespace(source=nil)
|
|
130
136
|
case source
|
|
131
|
-
when Hash ;
|
|
132
|
-
when nil ;
|
|
137
|
+
when Hash ; source
|
|
138
|
+
when nil ; {}
|
|
133
139
|
when String
|
|
134
140
|
namespace = {}
|
|
135
141
|
source = $1 if (source=~/\A\s*\[?(.+?)\]?\s*\z/m)
|
|
@@ -139,8 +145,10 @@ module When::Parts
|
|
|
139
145
|
pair = [''] + v.split(/\s*=\s*/, 2)
|
|
140
146
|
namespace[pair[-2]] = pair[-1]
|
|
141
147
|
end
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
namespace
|
|
149
|
+
when When::Parts::Resource::ContentLine
|
|
150
|
+
source.object.names
|
|
151
|
+
else ; raise TypeError, "Irregal Namespace Type: #{source.class}"
|
|
144
152
|
end
|
|
145
153
|
end
|
|
146
154
|
|
|
@@ -153,7 +161,9 @@ module When::Parts
|
|
|
153
161
|
# source の配列化
|
|
154
162
|
if source.kind_of?(String)
|
|
155
163
|
source = $1 if (source=~/\A\s*\[?(.+?)\]?\s*\z/m)
|
|
156
|
-
source = source.
|
|
164
|
+
source = source.scan(/((?:[^\\\n\r,]|\\.)+)(?:[\n\r,]+(?!\z))?|[\n\r,]+/m).flatten.map {|token|
|
|
165
|
+
(token||'').gsub(/\\./) {|escape| Escape[escape] || escape}
|
|
166
|
+
}
|
|
157
167
|
end
|
|
158
168
|
|
|
159
169
|
# 各Localeの展開
|
|
@@ -170,10 +180,12 @@ module When::Parts
|
|
|
170
180
|
|
|
171
181
|
# 文字列 [.., .., ..] を分割する
|
|
172
182
|
# @private
|
|
173
|
-
def _split(
|
|
174
|
-
line =
|
|
183
|
+
def _split(source)
|
|
184
|
+
line = source.dup
|
|
185
|
+
return [line] unless line =~ /,/
|
|
186
|
+
list = []
|
|
175
187
|
b = d = s = 0
|
|
176
|
-
(
|
|
188
|
+
(source.length-1).downto(0) do |i|
|
|
177
189
|
bs = 0
|
|
178
190
|
(i-1).downto(0) do |k|
|
|
179
191
|
break unless (line[k,1] == '\\')
|
|
@@ -181,14 +193,18 @@ module When::Parts
|
|
|
181
193
|
end
|
|
182
194
|
next if (bs[0] == 1)
|
|
183
195
|
case line[i,1]
|
|
184
|
-
when "'"
|
|
185
|
-
when '"'
|
|
186
|
-
when ']' ; b += 1 if (d+s == 0)
|
|
187
|
-
when '[' ; b -= 1 if (d+s == 0 && b > 0)
|
|
188
|
-
when ','
|
|
196
|
+
when "'" ; s = 1-s if (d == 0)
|
|
197
|
+
when '"' ; d = 1-d if (s == 0)
|
|
198
|
+
when ']','}',')' ; b += 1 if (d+s == 0)
|
|
199
|
+
when '[','{','(' ; b -= 1 if (d+s == 0 && b > 0)
|
|
200
|
+
when ','
|
|
201
|
+
if (b+d+s == 0)
|
|
202
|
+
list.unshift(line[i+1..-1])
|
|
203
|
+
line = i > 0 ? line[0..i-1] : ''
|
|
204
|
+
end
|
|
189
205
|
end
|
|
190
206
|
end
|
|
191
|
-
|
|
207
|
+
list.unshift(line)
|
|
192
208
|
end
|
|
193
209
|
|
|
194
210
|
# locale 指定を解析して Hash の値を取り出す
|
|
@@ -299,6 +315,21 @@ module When::Parts
|
|
|
299
315
|
return nil
|
|
300
316
|
end
|
|
301
317
|
|
|
318
|
+
# 部分文字列の位置
|
|
319
|
+
#
|
|
320
|
+
# @param [String] other 部分文字列
|
|
321
|
+
#
|
|
322
|
+
# @return [Integer] 部分文字列の先頭のindex(いずれかの locale で部分文字列を含んだ場合)
|
|
323
|
+
# @return [nil] すべての locale で部分文字列を含まない場合
|
|
324
|
+
#
|
|
325
|
+
def index(other)
|
|
326
|
+
@keys.each do |key|
|
|
327
|
+
index = @names[key].index(Locale.translate(other, key))
|
|
328
|
+
return index if index
|
|
329
|
+
end
|
|
330
|
+
return nil
|
|
331
|
+
end
|
|
332
|
+
|
|
302
333
|
# 文字列の連結
|
|
303
334
|
#
|
|
304
335
|
# @param [String, When::Toos::Locale] other 連結する文字列
|
|
@@ -493,7 +524,7 @@ module When::Parts
|
|
|
493
524
|
case v
|
|
494
525
|
when '', /^#/ ;
|
|
495
526
|
when /^\/(.+)/; @access_key = $1
|
|
496
|
-
when /^(\*)?(?:([^=%]*?)\s*:)?\s*(.+?)\s*(=\s*(
|
|
527
|
+
when /^(\*)?(?:([^=%]*?)\s*:)?\s*(.+?)\s*(=\s*([^=]+?)?)?$/
|
|
497
528
|
asterisk[0], locale, name, assignment, ref = $~[1..5]
|
|
498
529
|
asterisk[1], locale, default_ref = default_locale.shift unless locale
|
|
499
530
|
locale ||= ''
|
|
@@ -523,7 +554,7 @@ module When::Parts
|
|
|
523
554
|
# encode URI from patterns %%(...) or %.(...)
|
|
524
555
|
def _encode(source)
|
|
525
556
|
source.gsub(/%.<.+?>/) do |match|
|
|
526
|
-
URI.encode(match[3..-2].gsub(match[1]
|
|
557
|
+
URI.encode(match[3..-2]).gsub('%', match[1..1])
|
|
527
558
|
end
|
|
528
559
|
end
|
|
529
560
|
end
|
|
@@ -51,6 +51,66 @@ module When::Parts
|
|
|
51
51
|
#
|
|
52
52
|
module MethodCash
|
|
53
53
|
|
|
54
|
+
# @private
|
|
55
|
+
Escape = {:to_str => true,
|
|
56
|
+
:to_ary => true,
|
|
57
|
+
:to_hash => true}
|
|
58
|
+
|
|
59
|
+
class << self
|
|
60
|
+
|
|
61
|
+
# '_' で終わるメソッドをキャッシュせずに毎回計算するか否か
|
|
62
|
+
#
|
|
63
|
+
# @return [Boolean] キャッシュしない true, キャッシュする false/nil
|
|
64
|
+
#
|
|
65
|
+
attr_accessor :direct
|
|
66
|
+
|
|
67
|
+
# When::Parts::MethodCash のグローバルな設定を行う
|
|
68
|
+
#
|
|
69
|
+
# @param [Boolean] direct '_' で終わるメソッドをキャッシュせずに毎回計算する場合 true, キャッシュする場合 false/nil
|
|
70
|
+
# @param [Hash{Symbol=>boolean}] escape 毎回 method_missing を発生させるメソッドを true にして指定
|
|
71
|
+
# @param [false, nil] escape to_str, to_ary, to_hash のみ毎回 method_missing を発生させる
|
|
72
|
+
# @param [true] escape すべて毎回 method_missing を発生させる
|
|
73
|
+
#
|
|
74
|
+
# @return [void]
|
|
75
|
+
#
|
|
76
|
+
# @note When::TM::Calendar クラスの一部はキャッシュ使用を前提としているため direct=true では動作しません
|
|
77
|
+
#
|
|
78
|
+
def _setup_(direct=false, escape=false)
|
|
79
|
+
@direct = direct
|
|
80
|
+
case escape
|
|
81
|
+
when true
|
|
82
|
+
instance_eval %Q{
|
|
83
|
+
def escape(method)
|
|
84
|
+
true
|
|
85
|
+
end
|
|
86
|
+
}
|
|
87
|
+
when Hash
|
|
88
|
+
@escape = Escape.merge(escape)
|
|
89
|
+
instance_eval %Q{
|
|
90
|
+
def escape(method)
|
|
91
|
+
@escape[method]
|
|
92
|
+
end
|
|
93
|
+
}
|
|
94
|
+
else
|
|
95
|
+
instance_eval %Q{
|
|
96
|
+
def escape(method)
|
|
97
|
+
Escape.key?(method)
|
|
98
|
+
end
|
|
99
|
+
}
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# method_missing メソッドを forward するか否か
|
|
104
|
+
#
|
|
105
|
+
# @param [Symbol] method メソッドシンボル
|
|
106
|
+
#
|
|
107
|
+
# @return [boolean] true - しない, false/nil - する
|
|
108
|
+
#
|
|
109
|
+
def escape(method)
|
|
110
|
+
Escape.key?(method)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
54
114
|
alias :method_missing_ :method_missing
|
|
55
115
|
|
|
56
116
|
#
|
|
@@ -65,6 +125,7 @@ module When::Parts
|
|
|
65
125
|
def method_missing(name, *args, &block)
|
|
66
126
|
|
|
67
127
|
return method_missing_(name, *args, &block) unless respond_to?("#{name}_", true)
|
|
128
|
+
return send("#{name}_", *args, &block) if MethodCash.direct
|
|
68
129
|
|
|
69
130
|
if ((name.to_s =~ /^(_*)(.+?)_to_(.+)$/) && respond_to?("#{$1}#{$3}_to_#{$2}_", true))
|
|
70
131
|
prefix, from, to = $~[1..3]
|