ruby-japanize 0.1.0

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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/Gemfile +13 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +1459 -0
  6. data/Rakefile +88 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/lib/japanize/base.rb +652 -0
  10. data/lib/japanize/container.rb +213 -0
  11. data/lib/japanize/core.rb +194 -0
  12. data/lib/japanize/enum.rb +127 -0
  13. data/lib/japanize/errors.rb +79 -0
  14. data/lib/japanize/globals.rb +109 -0
  15. data/lib/japanize/io.rb +388 -0
  16. data/lib/japanize/names.rb +213 -0
  17. data/lib/japanize/num.rb +319 -0
  18. data/lib/japanize/process.rb +318 -0
  19. data/lib/japanize/string.rb +257 -0
  20. data/lib/japanize/syntax.rb +805 -0
  21. data/lib/japanize/sys.rb +174 -0
  22. data/lib/japanize/test_unit.rb +99 -0
  23. data/lib/japanize/thread.rb +143 -0
  24. data/lib/japanize/time.rb +82 -0
  25. data/lib/japanize/version.rb +12 -0
  26. data/lib/japanize.rb +24 -0
  27. data/ruby-japanize.gemspec +41 -0
  28. data/sample/README.md +33 -0
  29. data/sample/dir.rb +15 -0
  30. data/sample/eval.rb +48 -0
  31. data/sample/export.rb +44 -0
  32. data/sample/fact.rb +17 -0
  33. data/sample/fib.rb +13 -0
  34. data/sample/freq.rb +17 -0
  35. data/sample/fullpath.rb +29 -0
  36. data/sample/less.rb +19 -0
  37. data/sample/list.rb +86 -0
  38. data/sample/list2.rb +22 -0
  39. data/sample/list3.rb +23 -0
  40. data/sample/mine.rb +204 -0
  41. data/sample/mkproto.rb +33 -0
  42. data/sample/mpart.rb +48 -0
  43. data/sample/occur.rb +17 -0
  44. data/sample/occur2.rb +17 -0
  45. data/sample/philos.rb +57 -0
  46. data/sample/pi.rb +20 -0
  47. data/sample/rcs.dat +17 -0
  48. data/sample/rcs.rb +45 -0
  49. data/sample/sieve.rb +17 -0
  50. data/sample/time.rb +14 -0
  51. data/sample/trojan.rb +18 -0
  52. data/sample/uumerge.rb +47 -0
  53. metadata +164 -0
@@ -0,0 +1,652 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'japanize/core'
4
+
5
+ 要求 'japanize/names'
6
+
7
+ 組(部) {
8
+ 特異組{
9
+ 別名 :定数の一覧, :constants
10
+ 別名 :入れ子, :nesting
11
+ 別名 :新規, :new
12
+ 別名 :使用中の部の一覧, :used_modules
13
+ }
14
+
15
+ # 別名 :別名, :alias_method # japanize/coreで定義済み
16
+ 別名 :原型の一覧, :ancestors
17
+ 別名 :属性, :attr
18
+ 別名 :読み書き属性, :attr_accessor
19
+ 別名 :読み取り属性, :attr_reader
20
+ 別名 :書き込み属性, :attr_writer
21
+ 別名 :自動配置, :autoload
22
+ 別名 :自動配置か?, :autoload?
23
+ # 別名 :部で評価, :module_eval # japanize/coreで定義済み
24
+ # 別名 :組で評価, :class_eval # japanize/coreで定義済み
25
+ 別名 :組の変数は定義済みか?, :class_variable_defined?
26
+ 別名 :組の変数の一覧, :class_variables
27
+ # 別名 :定数は定義済みか?, :const_defined? # japanize/coreで定義済み
28
+ # 別名 :定数を取得, :const_get # japanize/coreで定義済み
29
+ 別名 :不明な定数, :const_missing
30
+ 定義(:const_missing) {|名前| 不明な定数(名前) }
31
+ # 別名 :定数を設定, :const_set # japanize/coreで定義済み
32
+ 別名 :定数の一覧, :constants
33
+ # 別名 :定義, :define_method # japanize/coreで定義済み
34
+ 別名 :凍結する, :freeze
35
+ 別名 :付加, :include
36
+ 別名 :付加済みか?, :include?
37
+ 別名 :含まれる部の一覧, :included_modules
38
+ 別名 :名前, :name
39
+ 別名 :生成物が持つ操作を取得, :instance_method
40
+ 別名 :生成物が持つ操作の一覧, :instance_methods
41
+ 別名 :操作は定義済みか?, :method_defined?
42
+ 別名 :付与, :prepend
43
+ 別名 :組が持つ操作を秘密にする, :private_class_method
44
+ 別名 :生成物が持つ秘密の操作の一覧, :private_instance_methods
45
+ 別名 :秘密の操作は定義済みか?, :private_method_defined?
46
+ 別名 :生成物が持つ保護された操作の一覧, :protected_instance_methods
47
+ 別名 :保護された操作は定義済みか?, :protected_method_defined?
48
+ 別名 :組が持つ操作を公開する, :public_class_method
49
+ 別名 :生成物が持つ公開された操作を取得, :public_instance_method
50
+ 別名 :生成物が持つ公開された操作の一覧, :public_instance_methods
51
+ 別名 :公開された操作は定義済みか?, :public_method_defined?
52
+ 別名 :組の変数を除去する, :remove_class_variable
53
+ 別名 :操作を除去する, :remove_method
54
+ 別名 :操作を未定義にする, :undef_method
55
+
56
+ 別名 :機能を付加する, :append_features
57
+ 別名 :部で実行, :module_exec
58
+ 別名 :組で実行, :class_exec
59
+ 別名 :組の変数を取得, :class_variable_get
60
+ 別名 :組の変数を設定, :class_variable_set
61
+ 別名 :定数を非推奨にする, :deprecate_constant
62
+ 別名 :物を拡張する, :extend_object
63
+ 別名 :拡張した時, :extended
64
+ 定義(:extended) {|物| 拡張した時(物) }
65
+ 別名 :付加された時, :included
66
+ 定義(:included) {|組または部| 付加された時(組または部) }
67
+ 別名 :操作が追加された時, :method_added
68
+ 定義(:method_added) {|名前| 操作が追加された時(名前) }
69
+ 別名 :操作が除去された時, :method_removed
70
+ 定義(:method_removed) {|名前| 操作が除去された時(名前) }
71
+ 別名 :操作が未定義にされた時, :method_undefined
72
+ 定義(:method_undefined) {|名前| 操作が未定義にされた時(名前) }
73
+ # 別名 :部の関数, :module_function # japanize/coreで定義済み
74
+ 別名 :機能を付与する, :prepend_features
75
+ 別名 :付与された時, :prepended
76
+ 定義(:prepended) {|組または部| 付与された時(組または部) }
77
+ # 別名 :秘密, :private # japanize/coreで定義済み
78
+ 別名 :秘密の定数, :private_constant
79
+ 別名 :保護, :protected
80
+ 別名 :公開, :public
81
+ 別名 :公開された定数, :public_constant
82
+ 別名 :限定拡張, :refine
83
+ 別名 :定数を除去する, :remove_const
84
+ 別名 :特異組か?, :singleton_class?
85
+ 別名 :限定拡張を使用, :using
86
+
87
+ 秘密 :機能を付加する,
88
+ :部で実行,
89
+ :組で実行,
90
+ :組の変数を取得,
91
+ :組の変数を設定,
92
+ :定数を非推奨にする,
93
+ :物を拡張する,
94
+ :拡張した時, :extended,
95
+ :付加された時, :included,
96
+ :操作が追加された時, :method_added,
97
+ :操作が除去された時, :method_removed,
98
+ :操作が未定義にされた時, :method_undefined,
99
+ :機能を付与する,
100
+ :付与された時, :prepended,
101
+ :秘密の定数,
102
+ :保護,
103
+ :公開,
104
+ :公開された定数,
105
+ :限定拡張,
106
+ :定数を除去する,
107
+ :特異組か?,
108
+ :限定拡張を使用
109
+
110
+ 定義(:日本語の定数を移譲) {|移譲先の部, 名前, *名前の一覧, 上書き: 偽値|
111
+ 名前の一覧 = [ 名前 ] + 名前の一覧
112
+
113
+ 日本語の定数を移譲できる部 = 部.新規
114
+ 名前の一覧.each{|定数名| # スコープを作るためブロックにする
115
+ 移譲先の操作 = 移譲先の部.公開された操作を取得(定数名)
116
+ unless (移譲先の操作.parameters.empty?) then
117
+ 例外を発生 名前解決に失敗, "定数ではありません: #{定数名}"
118
+ end
119
+ 日本語の定数を移譲できる部.定義(定数名) {
120
+ 移譲先の部.公開された範囲で送信(定数名)
121
+ }
122
+ }
123
+
124
+ 特異組{
125
+ if (上書き) then
126
+ 付与 日本語の定数を移譲できる部
127
+ else
128
+ 付加 日本語の定数を移譲できる部
129
+ end
130
+ }
131
+
132
+ 自分
133
+ }
134
+
135
+ 定義(:日本語の定数を付加できること) {|名前, *名前の一覧|
136
+ 名前の一覧 = [ 名前 ] + 名前の一覧
137
+
138
+ 日本語の定数を付加できる部 = 部.新規
139
+ 部(日本語の定数を付加できる部) {
140
+ 定義(:付加された時) {|組または部|
141
+ super(組または部)
142
+ 組または部.日本語の定数を移譲(自分, *名前の一覧, 上書き: 偽値)
143
+ }
144
+
145
+ 定義(:付与された時) {|組または部|
146
+ super(組または部)
147
+ 組または部.日本語の定数を移譲(自分, *名前の一覧, 上書き: 真値)
148
+ }
149
+ }
150
+
151
+ 拡張 日本語の定数を付加できる部
152
+ }
153
+ }
154
+
155
+ 組(組) {
156
+ 操作を未定義にする :部の関数
157
+ 操作を未定義にする :物を拡張する
158
+ 操作を未定義にする :機能を付加する
159
+ 操作を未定義にする :機能を付与する
160
+ 操作を未定義にする :限定拡張
161
+ 操作を未定義にする :日本語の定数を付加できること
162
+
163
+ 特異組{
164
+ 別名 :新規, :new
165
+ }
166
+
167
+ 別名 :生成, :allocate
168
+ 定義(:新規) {|*引数, &塊| new(*引数, &塊) } # 個別の組でnewを再定義するかもしれないので別名にしない
169
+ 別名 :原型, :superclass
170
+
171
+ 別名 :継承された時, :inherited
172
+ 定義(:inherited) {|継承した組| 継承された時(継承した組) }
173
+
174
+ 秘密 :継承された時, :inherited
175
+ }
176
+
177
+ 組(物の土台) {
178
+ 別名 :__識別番号__, :__id__
179
+ 別名 :__送信__, :__send__
180
+ 定義(:同一か?) {|他の物| equal?(他の物) } # equal?を継承先で再定義するかもしれないので別名にしない
181
+ 別名 :生成物で評価, :instance_eval
182
+ 別名 :生成物で実行, :instance_exec
183
+
184
+ 別名 :不明な操作, :method_missing
185
+ 定義(:method_missing) {|名前, *引数, &塊| 不明な操作(名前, *引数, &塊) }
186
+ 別名 :特異操作が追加された時, :singleton_method_added
187
+ 定義(:singleton_method_added) {|名前| 特異操作が追加された時(名前) }
188
+ 別名 :特異操作が除去された時, :singleton_method_removed
189
+ 定義(:singleton_method_removed) {|名前| 特異操作が除去された時(名前) }
190
+ 別名 :特異操作が未定義にされた時, :singleton_method_undefined
191
+ 定義(:singleton_method_undefined) {|名前| 特異操作が未定義にされた時(名前) }
192
+
193
+ 秘密 :不明な操作, :method_missing,
194
+ :特異操作が追加された時, :singleton_method_added,
195
+ :特異操作が除去された時, :singleton_method_removed,
196
+ :特異操作が未定義にされた時, :singleton_method_undefined
197
+ }
198
+
199
+ 組(物) {
200
+ 別名 :送信, :send
201
+ 別名 :生成元, :class
202
+ 定義(:複写) {|*引数, &塊| clone(*引数, &塊) } # cloneを継承先で再定義するかもしれないので別名にしない
203
+ 定義(:複製) {|*引数, &塊| dup(*引数, &塊) } # dupを継承先で再定義するかもしれないので別名にしない
204
+ 別名 :特異操作の定義, :define_singleton_method
205
+ 別名 :表示する, :display
206
+ 別名 :列挙に変換, :to_enum
207
+ 別名 :列挙する, :enum_for
208
+ 定義(:等しいか?) {|他の物| eql?(他の物) } # eql?を継承先で再定義するかもしれないので別名にしない
209
+ 別名 :拡張, :extend
210
+ 別名 :凍結する, :freeze
211
+ 別名 :凍結済みか?, :frozen?
212
+ 定義(:ハッシュ値) { hash } # hashを継承先で再定義するかもしれないので別名にしない
213
+ 定義(:検査) {|*引数, &塊| inspect(*引数, &塊) } # inspectを継承先で再定義するかもしれないので別名にしない
214
+ 別名 :生成物か?, :instance_of?
215
+ 別名 :生成物の変数は定義済みか?, :instance_variable_defined?
216
+ 別名 :生成物の変数を取得, :instance_variable_get
217
+ 別名 :生成物の変数を設定, :instance_variable_set
218
+ 別名 :生成物の変数の一覧, :instance_variables
219
+ 別名 :一種か?, :is_a?
220
+ 別名 :自分自身, :itself
221
+ 別名 :操作を取得, :method
222
+ 別名 :操作の一覧, :methods
223
+ 別名 :無値か?, :nil?
224
+ 別名 :物の識別番号, :object_id
225
+ 別名 :秘密の操作の一覧, :private_methods
226
+ 別名 :保護された操作の一覧, :protected_methods
227
+ 別名 :公開された操作を取得, :public_method
228
+ 別名 :公開された操作の一覧, :public_methods
229
+ 別名 :公開された範囲で送信, :public_send
230
+ 別名 :生成物の変数を除去する, :remove_instance_variable
231
+ 別名 :応答するか?, :respond_to?
232
+ # 別名 :特異組, :singleton_class # japanize/coreで定義済み
233
+ 別名 :特異操作を取得, :singleton_method
234
+ 別名 :特異操作の一覧, :singleton_methods
235
+ 別名 :汚染させる, :taint
236
+ 別名 :汚染されているか?, :tainted?
237
+ 別名 :蛇口, :tap
238
+ 別名 :それから, :then
239
+ 別名 :自分を委ねる, :yield_self
240
+ 定義(:文字列に変換) {|*引数, &塊| to_s(*引数, &塊) } # to_sを継承先で再定義するかもしれないので別名にしない
241
+ 別名 :汚染を除去する, :untaint
242
+
243
+ 別名 :初期化, :initialize
244
+ 別名 :不明な応答か?, :respond_to_missing?
245
+
246
+ 秘密 :初期化,
247
+ :不明な応答か?
248
+ }
249
+
250
+ 部(日本語化) {
251
+ # initializeを直接上書きすると警告が出るので、間接的に上書きする。
252
+ 部(:物の初期化を日本語化する) {
253
+ 定義(:initialize) {|*引数, &塊| 初期化(*引数, &塊) }
254
+ 秘密 :initialize
255
+ }
256
+
257
+ # respond_to_missing?を直接上書きすると警告が出るので、間接的に上書きする。
258
+ 部(:物の不明な応答を日本語化する) {
259
+ 定義(:respond_to_missing?) {|名前, *引数| 不明な応答か?(名前, *引数) }
260
+ 秘密 :respond_to_missing?
261
+ }
262
+
263
+ 組(物) {
264
+ 付与 物の初期化を日本語化する
265
+ 付与 物の不明な応答を日本語化する
266
+ }
267
+ }
268
+
269
+ # 組の定義と被る変換関数を定義する。
270
+ 部(核) {
271
+ 部(:変換関数の日本語化) {
272
+ 定義(:配列) {|*引数|
273
+ if (引数.empty?) then
274
+ Array
275
+ else
276
+ Array(*引数)
277
+ end
278
+ }
279
+
280
+ 定義(:複素数) {|*引数|
281
+ if (引数.empty?) then
282
+ Complex
283
+ else
284
+ Complex(*引数)
285
+ end
286
+ }
287
+
288
+ 定義(:不動小数点) {|*引数|
289
+ if (引数.empty?) then
290
+ Float
291
+ else
292
+ Float(*引数)
293
+ end
294
+ }
295
+
296
+ 定義(:連想配列) {|*引数|
297
+ if (引数.empty?) then
298
+ Hash
299
+ else
300
+ Hash(*引数)
301
+ end
302
+ }
303
+
304
+ 定義(:整数) {|*引数|
305
+ if (引数.empty?) then
306
+ Integer
307
+ else
308
+ Integer(*引数)
309
+ end
310
+ }
311
+
312
+ 定義(:有理数) {|*引数|
313
+ if (引数.empty?) then
314
+ Rational
315
+ else
316
+ Rational(*引数)
317
+ end
318
+ }
319
+
320
+ 定義(:文字列) {|*引数|
321
+ if (引数.empty?) then
322
+ String
323
+ else
324
+ String(*引数)
325
+ end
326
+ }
327
+ }
328
+ 拡張 変換関数の日本語化
329
+ }
330
+
331
+ 部(日本語化) {
332
+ 拡張 核::変換関数の日本語化
333
+ 付与 核::変換関数の日本語化
334
+ }
335
+ 付加 核::変換関数の日本語化
336
+
337
+ 部(核) {
338
+ 別名 :__呼び出し先__, :__callee__
339
+ 別名 :__ディレクトリ__, :__dir__
340
+ 別名 :__操作名__, :__method__
341
+ 別名 :中断, :abort
342
+ 別名 :終了時に実行, :at_exit
343
+ 別名 :自動配置, :autoload
344
+ 別名 :自動配置か?, :autoload?
345
+ 別名 :束縛を取得, :binding
346
+ 別名 :操作に手続きが与えられているか?, :block_given?
347
+ 別名 :呼び出し元, :caller
348
+ 別名 :呼び出し元の場所の一覧, :caller_locations
349
+ 別名 :捕捉, :catch
350
+ 別名 :評価, :eval
351
+ 別名 :外部のプログラムを上書き実行する, :exec
352
+ 別名 :終了, :exit
353
+ 別名 :終了!, :exit!
354
+ 別名 :例外を発生, :raise
355
+ 別名 :プロセスを分岐, :fork
356
+ 別名 :整形, :format
357
+ 別名 :文字列に整形, :sprintf
358
+ 別名 :行を取得, :gets
359
+ 別名 :大域変数の一覧, :global_variables
360
+ 別名 :手続き, :proc
361
+ 別名 :λ, :lambda
362
+ 別名 :配置, :load
363
+ 別名 :局所変数の一覧, :local_variables
364
+ 別名 :循環, :loop
365
+ 別名 :ファイルを開く, :open
366
+ 別名 :点検, :p
367
+ 別名 :目視点検, :pp
368
+ 別名 :印字, :print
369
+ 別名 :整形して印字, :printf
370
+ 別名 :文字を出力, :putc
371
+ 別名 :行を出力, :puts
372
+ 別名 :乱数, :rand
373
+ 別名 :行を読む, :readline
374
+ 別名 :全行を読む, :readlines
375
+ # 別名 :要求, :require # japanize/coreで定義済み
376
+ # 別名 :相対位置で要求, :require_relative # japanize/coreで定義済み
377
+ 別名 :入出力を選択, :select
378
+ 別名 :追跡関数を設定, :set_trace_func
379
+ 別名 :休止, :sleep
380
+ 別名 :外部のプログラムを実行する, :spawn
381
+ 別名 :乱数の種を設定, :srand
382
+ 別名 :システムコールを実行する, :syscall
383
+ 別名 :外部のコマンドを実行する, :system
384
+ 別名 :ファイルを検査, :test
385
+ 別名 :脱出, :throw
386
+ 別名 :大域変数を追跡, :trace_var
387
+ 別名 :シグナルの捕捉, :trap
388
+ 別名 :大域変数の追跡を解除, :untrace_var
389
+ 別名 :警告, :warn
390
+
391
+ 部の関数 :__呼び出し先__,
392
+ :__ディレクトリ__,
393
+ :__操作名__,
394
+ :中断,
395
+ :終了時に実行,
396
+ :自動配置,
397
+ :自動配置か?,
398
+ :束縛を取得,
399
+ :操作に手続きが与えられているか?,
400
+ :呼び出し元,
401
+ :呼び出し元の場所の一覧,
402
+ :捕捉,
403
+ :評価,
404
+ :外部のプログラムを上書き実行する,
405
+ :終了,
406
+ :終了!,
407
+ :例外を発生,
408
+ :プロセスを分岐,
409
+ :整形,
410
+ :文字列に整形,
411
+ :行を取得,
412
+ :大域変数の一覧,
413
+ :手続き,
414
+ :λ,
415
+ :配置,
416
+ :局所変数の一覧,
417
+ :循環,
418
+ :ファイルを開く,
419
+ :点検,
420
+ :目視点検,
421
+ :印字,
422
+ :整形して印字,
423
+ :文字を出力,
424
+ :行を出力,
425
+ :乱数,
426
+ :行を読む,
427
+ :全行を読む,
428
+ :入出力を選択,
429
+ :追跡関数を設定,
430
+ :休止,
431
+ :外部のプログラムを実行する,
432
+ :乱数の種を設定,
433
+ :システムコールを実行する,
434
+ :外部のコマンドを実行する,
435
+ :ファイルを検査,
436
+ :脱出,
437
+ :大域変数を追跡,
438
+ :シグナルの捕捉,
439
+ :大域変数の追跡を解除,
440
+ :警告
441
+
442
+ # コマンドラインオプションで -p または -n を指定した時のみ定義される。
443
+ [ [ :末尾を食べる, :chomp ],
444
+ [ :末尾を切り落す, :chop ],
445
+ [ :全置換, :gsub ],
446
+ [ :置換, :sub ],
447
+ ].each do |日本語の操作, 元の操作|
448
+ if (操作は定義済みか? 元の操作) then
449
+ 別名 日本語の操作, 元の操作
450
+ 部の関数 日本語の操作
451
+ end
452
+ end
453
+ }
454
+
455
+ 組(無値の組) {
456
+ 別名 :無値か?, :nil?
457
+ 別名 :有理化, :rationalize
458
+ 別名 :配列に変換, :to_a
459
+ 別名 :複素数に変換, :to_c
460
+ 別名 :浮動小数点に変換, :to_f
461
+ 別名 :連想配列に変換, :to_h
462
+ 別名 :整数に変換, :to_i
463
+ 別名 :有理数に変換, :to_r
464
+ # 別名 :文字列に変換, :to_s # 物で定義済み
465
+ }
466
+
467
+ 組(例外) {
468
+ 特異組{
469
+ 別名 :例外を生成, :exception
470
+ }
471
+
472
+ 別名 :呼び出し履歴, :backtrace
473
+ 別名 :呼び出し履歴の場所の一覧, :backtrace_locations
474
+ 別名 :起因, :cause
475
+ 別名 :例外を生成, :exception
476
+ 別名 :完全な伝文, :full_message
477
+ # 別名 :検査, :inspect # 物で定義済み
478
+ 別名 :伝文, :message
479
+ # 別名 :文字列に変換, :to_s # 物で定義済み
480
+ 別名 :呼び出し履歴を設定, :set_backtrace
481
+ }
482
+
483
+ 部(日本語化) {
484
+ 部(:不明な操作の呼び出し履歴を消す) {
485
+ 定義(:不明な操作) {|名前, *引数, &塊|
486
+ begin
487
+ super(名前, *引数, &塊)
488
+ rescue 名前解決に失敗 => ある例外
489
+ # 物#不明な操作 と Object#method_missing の履歴を消して、元の場所で例外が発生したように見せる
490
+ ある例外.呼び出し履歴.shift(2)
491
+ ある例外.呼び出し履歴の場所の一覧.shift(2)
492
+ 例外を発生 ある例外
493
+ end
494
+ }
495
+ }
496
+
497
+ 組(物の土台) {
498
+ 付与 不明な操作の呼び出し履歴を消す
499
+ }
500
+
501
+ 部(:初期化を秘密にする) {
502
+ 定義(:操作が追加された時) {|名前|
503
+ super(名前)
504
+ if (名前 == :初期化) then
505
+ 秘密 :初期化
506
+ end
507
+ }
508
+ 秘密 :操作が追加された時
509
+ }
510
+
511
+ 組(部) {
512
+ 付与 初期化を秘密にする
513
+ }
514
+
515
+ 部(:操作の日本語化) {
516
+ 日本語の定数 :変換操作の日本語化対応表, {
517
+ 検査: :inspect,
518
+ 配列に変換: :to_a,
519
+ 連想配列に変換: :to_h,
520
+ 文字列に変換: :to_s,
521
+ 記号に変換: :to_sym,
522
+ 整数に変換: :to_i,
523
+ 浮動小数点に変換: :to_f,
524
+ 有理数に変換: :to_r,
525
+ 複素数に変換: :to_c
526
+ }
527
+
528
+ 日本語の定数 :繰り返し操作の日本語化対応表, {
529
+ 個別に: :each,
530
+ キー毎に: :each_key,
531
+ 値毎に: :each_value,
532
+ 対毎に: :each_pair
533
+ }
534
+
535
+ 日本語の定数 :入れ物の操作の日本語化対応表, {
536
+ 取得: :fetch,
537
+ 格納: :store,
538
+ 削除: :delete,
539
+ 大きさ: :size,
540
+ 長さ: :length,
541
+ 空か?: :empty?,
542
+ キーの一覧: :keys,
543
+ キーか?: :key?,
544
+ キーを持つか?: :has_key?,
545
+ 含むか?: :include?,
546
+ 一員か?: :member?
547
+ }
548
+
549
+ 特異操作の定義(:操作を日本語化できる部を作る) {|日本語化対応表|
550
+ 部(部.新規) {
551
+ 定義(:操作が追加された時) {|名前|
552
+ super(名前)
553
+ if (本来の名前 = 日本語化対応表[名前]) then
554
+ if (! (操作は定義済みか? 本来の名前) || (生成物が持つ操作を取得(名前) != 生成物が持つ操作を取得(本来の名前))) then
555
+ 定義(本来の名前) {|*引数, &塊|
556
+ __送信__(名前, *引数, &塊)
557
+ }
558
+ end
559
+ end
560
+ }
561
+ 秘密 :操作が追加された時
562
+
563
+ 定義(:操作が除去された時) {|名前|
564
+ super(名前)
565
+ if (本来の名前 = 日本語化対応表[名前]) then
566
+ if (操作は定義済みか? 本来の名前) then
567
+ 操作を除去する(本来の名前)
568
+ end
569
+ end
570
+ }
571
+ 秘密 :操作が除去された時
572
+
573
+ 定義(:操作が未定義にされた時) {|名前|
574
+ super(名前)
575
+ if (本来の名前 = 日本語化対応表[名前]) then
576
+ if (操作は定義済みか? 本来の名前) then
577
+ 操作を未定義にする(本来の名前)
578
+ end
579
+ end
580
+ }
581
+ 秘密 :操作が未定義にされた時
582
+ }
583
+ }
584
+
585
+ 特異操作の定義(:物の操作を日本語化できる部を作る) {|日本語化対応表|
586
+ 部(部.新規) {
587
+ 定義(:特異操作が追加された時) {|名前|
588
+ super(名前)
589
+ if (本来の名前 = 日本語化対応表[名前]) then
590
+ 特異組{
591
+ if (! (操作は定義済みか? 本来の名前) || (生成物が持つ操作を取得(名前) != 生成物が持つ操作を取得(本来の名前))) then
592
+ 定義(本来の名前) {|*引数, &塊|
593
+ __送信__(名前, *引数, &塊)
594
+ }
595
+ end
596
+ }
597
+ end
598
+ }
599
+ 秘密 :特異操作が追加された時
600
+
601
+ 定義(:特異操作が除去された時) {|名前|
602
+ super(名前)
603
+ if (本来の名前 = 日本語化対応表[名前]) then
604
+ 特異組{
605
+ if (操作は定義済みか? 本来の名前) then
606
+ 操作を除去する(本来の名前)
607
+ end
608
+ }
609
+ end
610
+ }
611
+ 秘密 :特異操作が除去された時
612
+
613
+ 定義(:特異操作が未定義にされた時) {|名前|
614
+ super(名前)
615
+ if (本来の名前 = 日本語化対応表[名前]) then
616
+ 特異組{
617
+ if (操作は定義済みか? 本来の名前) then
618
+ 操作を未定義にする(本来の名前)
619
+ end
620
+ }
621
+ end
622
+ }
623
+ 秘密 :特異操作が未定義にされた時
624
+ }
625
+ }
626
+
627
+ 日本語の定数 :変換操作を日本語化できる, 操作を日本語化できる部を作る(変換操作の日本語化対応表)
628
+ 日本語の定数 :繰り返し操作を日本語化できる, 操作を日本語化できる部を作る(繰り返し操作の日本語化対応表)
629
+ 日本語の定数 :入れ物の操作を日本語化できる, 操作を日本語化できる部を作る(入れ物の操作の日本語化対応表)
630
+
631
+ 日本語の定数 :物の変換操作を日本語化できる, 物の操作を日本語化できる部を作る(変換操作の日本語化対応表)
632
+ 日本語の定数 :物の繰り返し操作を日本語化できる, 物の操作を日本語化できる部を作る(繰り返し操作の日本語化対応表)
633
+ 日本語の定数 :物の入れ物の操作を日本語化できる, 物の操作を日本語化できる部を作る(入れ物の操作の日本語化対応表)
634
+ }
635
+
636
+ 組(部) {
637
+ 付与 操作の日本語化::変換操作を日本語化できる
638
+ 付与 操作の日本語化::繰り返し操作を日本語化できる
639
+ 付与 操作の日本語化::入れ物の操作を日本語化できる
640
+ }
641
+
642
+ 組(物) {
643
+ 付与 操作の日本語化::物の変換操作を日本語化できる
644
+ 付与 操作の日本語化::物の繰り返し操作を日本語化できる
645
+ 付与 操作の日本語化::物の入れ物の操作を日本語化できる
646
+ }
647
+ }
648
+
649
+ # Local Variables:
650
+ # mode: Ruby
651
+ # indent-tabs-mode: nil
652
+ # End: