rio 0.3.8 → 0.3.9

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 (223) hide show
  1. data/README +18 -12
  2. data/Rakefile +57 -87
  3. data/build_doc.rb +19 -17
  4. data/doc/ANNOUNCE +3 -32
  5. data/doc/RELEASE_NOTES +4 -5
  6. data/doc/RIOIS +215 -0
  7. data/doc/generators/template/html/rio.css +428 -0
  8. data/doc/generators/template/html/rio.rb +18 -389
  9. data/doc/generators/template/html/ugly.rb +130 -0
  10. data/doc/pkg_def.rb +66 -0
  11. data/ex/catcsv.rb +64 -0
  12. data/ex/colx.rb +8 -0
  13. data/ex/findinruby +15 -0
  14. data/ex/findruby +14 -0
  15. data/ex/passwd_report.rb +8 -0
  16. data/ex/prompt.rb +25 -0
  17. data/ex/rgb.txt.gz +0 -0
  18. data/ex/riocat +42 -0
  19. data/ex/riogunzip +31 -0
  20. data/ex/riogzip +24 -0
  21. data/ex/rioprompt.rb +10 -0
  22. data/ex/targz2zip +17 -0
  23. data/ex/tonl +10 -0
  24. data/lib/rio.rb +16 -10
  25. data/lib/rio/abstract_method.rb +3 -4
  26. data/lib/rio/argv.rb +3 -4
  27. data/lib/rio/arycopy.rb +3 -4
  28. data/lib/rio/assert.rb +3 -4
  29. data/lib/rio/base.rb +3 -4
  30. data/lib/rio/callstr.rb +3 -4
  31. data/lib/rio/const.rb +3 -4
  32. data/lib/rio/construct.rb +3 -4
  33. data/lib/rio/constructor.rb +12 -8
  34. data/lib/rio/context.rb +15 -30
  35. data/lib/rio/context/autoclose.rb +3 -4
  36. data/lib/rio/context/copying.rb +3 -4
  37. data/lib/rio/context/cxx.rb +3 -4
  38. data/lib/rio/context/dir.rb +3 -4
  39. data/lib/rio/context/gzip.rb +3 -4
  40. data/lib/rio/context/methods.rb +16 -5
  41. data/lib/rio/context/skip.rb +3 -4
  42. data/lib/rio/context/stream.rb +42 -5
  43. data/lib/rio/cp.rb +7 -7
  44. data/lib/rio/def.rb +3 -4
  45. data/lib/rio/dir.rb +3 -4
  46. data/lib/rio/doc.rb +4 -5
  47. data/lib/rio/doc/EXAMPLES.rb +299 -0
  48. data/lib/rio/doc/HOWTO.rb +3 -4
  49. data/lib/rio/doc/INTRO.rb +86 -105
  50. data/lib/rio/doc/OPTIONAL.rb +4 -5
  51. data/lib/rio/doc/SYNOPSIS.rb +7 -6
  52. data/lib/rio/entrysel.rb +21 -23
  53. data/lib/rio/exception.rb +3 -4
  54. data/lib/rio/exception/copy.rb +3 -4
  55. data/lib/rio/exception/notimplemented.rb +57 -0
  56. data/lib/rio/exception/notsupported.rb +3 -4
  57. data/lib/rio/exception/open.rb +3 -4
  58. data/lib/rio/exception/state.rb +3 -4
  59. data/lib/rio/ext.rb +47 -13
  60. data/lib/rio/ext/csv.rb +4 -5
  61. data/lib/rio/ext/if.rb +45 -0
  62. data/lib/rio/ext/mp3info.rb +80 -0
  63. data/lib/rio/ext/splitlines.rb +253 -0
  64. data/lib/rio/ext/yaml.rb +9 -5
  65. data/lib/rio/ext/yaml/doc.rb +133 -0
  66. data/lib/rio/ext/yaml/tie.rb +149 -0
  67. data/lib/rio/ext/zipfile.rb +23 -4
  68. data/lib/rio/ext/zipfile/fs.rb +116 -0
  69. data/lib/rio/ext/zipfile/rl.rb +251 -0
  70. data/lib/rio/ext/zipfile/rootdir.rb +117 -0
  71. data/lib/rio/ext/zipfile/state.rb +161 -0
  72. data/lib/rio/ext/zipfile/wrap.rb +204 -0
  73. data/lib/rio/factory.rb +235 -27
  74. data/lib/rio/file.rb +4 -4
  75. data/lib/rio/filter.rb +3 -4
  76. data/lib/rio/filter/closeoneof.rb +3 -4
  77. data/lib/rio/filter/gzip.rb +9 -4
  78. data/lib/rio/fs/base.rb +3 -4
  79. data/lib/rio/fs/impl.rb +4 -5
  80. data/lib/rio/fs/native.rb +3 -4
  81. data/lib/rio/fs/stream.rb +3 -4
  82. data/lib/rio/fs/url.rb +3 -4
  83. data/lib/rio/ftp/conncache.rb +19 -5
  84. data/lib/rio/ftp/dir.rb +3 -4
  85. data/lib/rio/ftp/fs.rb +30 -24
  86. data/lib/rio/grande.rb +27 -7
  87. data/lib/rio/handle.rb +3 -4
  88. data/lib/rio/if.rb +19 -15
  89. data/lib/rio/if/basic.rb +7 -7
  90. data/lib/rio/if/csv.rb +5 -6
  91. data/lib/rio/if/dir.rb +120 -114
  92. data/lib/rio/if/file.rb +52 -44
  93. data/lib/rio/if/fileordir.rb +217 -211
  94. data/lib/rio/if/grande.rb +674 -644
  95. data/lib/rio/if/grande_entry.rb +321 -313
  96. data/lib/rio/if/grande_stream.rb +653 -553
  97. data/lib/rio/if/internal.rb +3 -4
  98. data/lib/rio/if/path.rb +425 -426
  99. data/lib/rio/if/rubyio.rb +681 -0
  100. data/lib/rio/if/string.rb +42 -5
  101. data/lib/rio/if/temp.rb +3 -4
  102. data/lib/rio/if/test.rb +245 -238
  103. data/lib/rio/if/yaml.rb +15 -41
  104. data/lib/rio/ioh.rb +7 -5
  105. data/lib/rio/iomode.rb +19 -7
  106. data/lib/rio/ios/fail.rb +4 -5
  107. data/lib/rio/ios/generic.rb +4 -5
  108. data/lib/rio/ios/mode.rb +4 -5
  109. data/lib/rio/ios/null.rb +6 -7
  110. data/lib/rio/iowrap.rb +3 -4
  111. data/lib/rio/kernel.rb +3 -5
  112. data/lib/rio/local.rb +3 -4
  113. data/lib/rio/match.rb +3 -4
  114. data/lib/rio/matchrecord.rb +3 -4
  115. data/lib/rio/no_warn.rb +3 -4
  116. data/lib/rio/nullio.rb +3 -4
  117. data/lib/rio/open3.rb +4 -5
  118. data/lib/rio/ops/construct.rb +3 -4
  119. data/lib/rio/ops/create.rb +11 -6
  120. data/lib/rio/ops/dir.rb +19 -8
  121. data/lib/rio/ops/either.rb +6 -5
  122. data/lib/rio/ops/file.rb +3 -4
  123. data/lib/rio/ops/path.rb +14 -35
  124. data/lib/rio/ops/stream.rb +3 -4
  125. data/lib/rio/ops/stream/input.rb +4 -7
  126. data/lib/rio/ops/stream/output.rb +3 -4
  127. data/lib/rio/ops/stream/read.rb +6 -5
  128. data/lib/rio/ops/stream/write.rb +3 -4
  129. data/lib/rio/ops/symlink.rb +3 -4
  130. data/lib/rio/path.rb +22 -18
  131. data/lib/rio/path/reset.rb +4 -5
  132. data/lib/rio/piper.rb +3 -4
  133. data/lib/rio/piper/cp.rb +3 -4
  134. data/lib/rio/prompt.rb +10 -5
  135. data/lib/rio/rectype.rb +5 -5
  136. data/lib/rio/rl/base.rb +17 -71
  137. data/lib/rio/rl/builder.rb +14 -38
  138. data/lib/rio/rl/chmap.rb +66 -0
  139. data/lib/rio/rl/fs2url.rb +82 -0
  140. data/lib/rio/rl/ioi.rb +4 -4
  141. data/lib/rio/rl/path.rb +44 -122
  142. data/lib/rio/rl/pathmethods.rb +19 -8
  143. data/lib/rio/rl/uri.rb +137 -60
  144. data/lib/rio/rl/withpath.rb +295 -0
  145. data/lib/rio/scheme/aryio.rb +3 -4
  146. data/lib/rio/scheme/cmdio.rb +3 -4
  147. data/lib/rio/scheme/cmdpipe.rb +4 -4
  148. data/lib/rio/scheme/fd.rb +3 -4
  149. data/lib/rio/scheme/ftp.rb +7 -7
  150. data/lib/rio/scheme/http.rb +4 -5
  151. data/lib/rio/scheme/null.rb +3 -4
  152. data/lib/rio/scheme/path.rb +3 -4
  153. data/lib/rio/scheme/stderr.rb +3 -4
  154. data/lib/rio/scheme/stdio.rb +3 -4
  155. data/lib/rio/scheme/strio.rb +3 -4
  156. data/lib/rio/scheme/sysio.rb +3 -4
  157. data/lib/rio/scheme/tcp.rb +3 -4
  158. data/lib/rio/scheme/temp.rb +6 -6
  159. data/lib/rio/state.rb +18 -46
  160. data/lib/rio/state/error.rb +3 -4
  161. data/lib/rio/stream.rb +4 -4
  162. data/lib/rio/stream/base.rb +3 -4
  163. data/lib/rio/stream/duplex.rb +3 -4
  164. data/lib/rio/stream/open.rb +3 -8
  165. data/lib/rio/symantics.rb +3 -4
  166. data/lib/rio/tempdir.rb +2 -2
  167. data/lib/rio/to_rio.rb +3 -4
  168. data/lib/rio/to_rio/all.rb +3 -4
  169. data/lib/rio/to_rio/array.rb +4 -5
  170. data/lib/rio/to_rio/io.rb +4 -5
  171. data/lib/rio/to_rio/object.rb +4 -5
  172. data/lib/rio/to_rio/string.rb +4 -5
  173. data/lib/rio/uri/file.rb +41 -5
  174. data/lib/rio/util.rb +3 -4
  175. data/lib/rio/version.rb +4 -5
  176. data/setup.rb +368 -339
  177. data/test/bin/list_dir.rb +1 -1
  178. data/test/ftp/anon_misc.rb +13 -1
  179. data/test/ftp/anon_special.rb +6 -6
  180. data/test/ftp/anon_write.rb +10 -3
  181. data/test/ftp/ftp2ftp.rb +2 -2
  182. data/test/ftp/testdef.rb +9 -6
  183. data/test/http/all.rb +3 -0
  184. data/test/http/copy-from-http.rb +140 -0
  185. data/test/lib/temp_server.rb +44 -0
  186. data/test/runalltests.rb +3 -1
  187. data/test/runhttp.rb +12 -0
  188. data/test/runhttptests.rb +1 -1
  189. data/test/runtests.rb +41 -3
  190. data/test/tc/abs.rb +9 -5
  191. data/test/tc/all.rb +9 -4
  192. data/test/tc/base.rb +1 -1
  193. data/test/tc/base2.rb +87 -0
  194. data/test/tc/{methods.rb → clone.rb} +72 -50
  195. data/test/tc/closeoncopy.rb +13 -2
  196. data/test/tc/copy-dir-samevar.rb +91 -0
  197. data/test/tc/dir_iter.rb +0 -1
  198. data/test/tc/empty.rb +6 -2
  199. data/test/tc/expand_path.rb +36 -54
  200. data/test/tc/ext.rb +42 -18
  201. data/test/tc/gzip.rb +30 -3
  202. data/test/tc/likeio.rb +5 -1
  203. data/test/tc/line_record_row.rb +51 -0
  204. data/test/tc/noqae.rb +71 -70
  205. data/test/tc/path_parts.rb +175 -0
  206. data/test/tc/programs_util.rb +3 -3
  207. data/test/tc/rename.rb +4 -5
  208. data/test/tc/riorl.rb +9 -7
  209. data/test/tc/skip.rb +35 -6
  210. data/test/tc/skiplines.rb +34 -5
  211. data/test/tc/split.rb +8 -50
  212. data/test/tc/splitlines.rb +65 -0
  213. data/test/tc/splitpath.rb +83 -0
  214. data/test/tc/testcase.rb +1 -1
  215. data/test/tc/truncate.rb +39 -0
  216. data/test/tc/yaml.rb +9 -8
  217. metadata +261 -207
  218. data/ChangeLog +0 -1418
  219. data/VERSION +0 -1
  220. data/lib/rio/doc/MISC.rb +0 -259
  221. data/lib/rio/if/stream.rb +0 -680
  222. data/lib/rio/impl/path.rb +0 -87
  223. data/test/tc/copy-from-http.rb +0 -89
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  # class String
@@ -44,13 +43,210 @@
44
43
  require 'singleton'
45
44
  require 'rio/handle'
46
45
  require 'rio/rl/builder'
47
-
46
+ #require 'rio/state/machine'
48
47
 
49
48
  module RIO
49
+ # class StateDesc
50
+ # attr_accessor :class_name,:class_file
51
+ # def initialize(class_name,class_file)
52
+ # @class_name = class_name
53
+ # @class_file = class_file
54
+ # end
55
+ # end
56
+ # module StateMap
57
+ # class Base
58
+ # STATE_FILE = {
59
+ # 'Path::Reset' => 'rio/path/reset',
60
+ # 'Path::Empty' => 'rio/path',
61
+ # 'Path::Str' => 'rio/path',
62
+ # 'Path::NonExisting' => 'rio/path',
63
+
64
+ # 'File::Existing' => 'rio/file',
65
+ # 'File::NonExisting' => 'rio/file',
66
+
67
+ # 'Dir::Existing' => 'rio/dir',
68
+ # 'Dir::Open' => 'rio/dir',
69
+ # 'Dir::Close' => 'rio/dir',
70
+ # 'Dir::Stream' => 'rio/dir',
71
+ # 'Dir::NonExisting' => 'rio/dir',
72
+
73
+ # 'Stream::Reset' => 'rio/stream',
74
+ # 'Stream::Open' => 'rio/stream/open',
75
+ # 'Stream::Input' => 'rio/stream',
76
+ # 'Stream::Output' => 'rio/stream',
77
+ # 'Stream::InOut' => 'rio/stream',
78
+ # 'Stream::Close' => 'rio/stream/open',
79
+ # }
80
+ # def class_name(state_name)
81
+ # 'State::' + state_name
82
+ # end
83
+ # def file_name(state_name)
84
+ # STATE_FILE[state_name]
85
+ # end
86
+ # def path_reset() 'Path::Reset' end
87
+ # def path_empty() 'Path::Empty' end
88
+ # def path_str() 'Path::Str' end
89
+ # def path_nonexisting() 'Path::NonExisting' end
90
+ # def file_existing() 'File::Existing' end
91
+ # def file_nonexisting() 'File::NonExisting' end
92
+ # def dir_existing() 'Dir::Existing' end
93
+ # def dir_open() 'Dir::Open' end
94
+ # def dir_close() 'Dir::Close' end
95
+ # def dir_stream() 'Dir::Stream' end
96
+ # def dir_nonexisting() 'Dir::NonExisting' end
97
+ # def stream_reset() 'Stream::Reset' end
98
+ # def stream_open() 'Stream::Open' end
99
+ # def stream_input() 'Stream::Input' end
100
+ # def stream_output() 'Stream::Output' end
101
+ # def stream_inout() 'Stream::InOut' end
102
+ # def stream_close() 'Stream::Close' end
103
+ # end
104
+ # end
105
+ # module Path
106
+ # class StateMap < RIO::StateMap::Base
107
+ # def stream_open() 'Path::Stream::Open' end
108
+ # end
109
+ # end
110
+ # module Path
111
+ # class StateMap < RIO::StateMap::Base
112
+ # STATE_FILE = { 'Stream::Open' => 'rio/scheme/path' }
113
+ # def stream_open() 'Path::Stream::Open' end
114
+ # end
115
+ # end
116
+ # module CmdPipe
117
+ # class StateMap < RIO::StateMap::Base
118
+ # def stream_reset() 'CmdPipe::Stream::reset' end
119
+ # end
120
+ # end
121
+
122
+ # module States
123
+ # class Base
124
+ # end
125
+ # end
126
+
127
+ # class StateMapper
128
+ # include Singleton
129
+
130
+ # STD_STATE_FILES = {
131
+ # 'Path::Reset' => 'rio/path/reset',
132
+ # 'Path::Empty' => 'rio/path',
133
+ # 'Path::Str' => 'rio/path',
134
+ # 'Path::NonExisting' => 'rio/path',
135
+
136
+ # 'File::Existing' => 'rio/file',
137
+ # 'File::NonExisting' => 'rio/file',
138
+
139
+ # 'Dir::Existing' => 'rio/dir',
140
+ # 'Dir::Open' => 'rio/dir',
141
+ # 'Dir::Close' => 'rio/dir',
142
+ # 'Dir::Stream' => 'rio/dir',
143
+ # 'Dir::NonExisting' => 'rio/dir',
144
+
145
+ # 'Stream::Reset' => 'rio/stream',
146
+ # 'Stream::Open' => 'rio/stream/open',
147
+ # 'Stream::Input' => 'rio/stream',
148
+ # 'Stream::Output' => 'rio/stream',
149
+ # 'Stream::InOut' => 'rio/stream',
150
+ # 'Stream::Close' => 'rio/stream/open',
151
+ # }
152
+ # SCHEME_STATE_FILES = {
153
+ # 'Stream::Duplex::Open' => 'rio/stream/duplex',
154
+
155
+ # #'Path::Stream::Open' => 'rio/scheme/path',
156
+
157
+ # #'StrIO::Stream::Open' => 'rio/scheme/strio',
158
+
159
+ # #'Null::Stream::Open' => 'rio/scheme/null',
160
+
161
+ # #'CmdPipe::Stream::Reset' => 'rio/scheme/cmdpipe',
162
+
163
+ # #'HTTP::Stream::Input' => 'rio/scheme/http',
164
+ # #'HTTP::Stream::Open' => 'rio/scheme/http',
165
+
166
+ # 'Temp::Reset' => 'rio/scheme/temp',
167
+ # 'Temp::Stream::Open' => 'rio/scheme/temp',
168
+
169
+ # 'Ext::YAML::Doc::Existing' => 'rio/ext/yaml/doc',
170
+ # 'Ext::YAML::Doc::Open' => 'rio/ext/yaml/doc',
171
+ # 'Ext::YAML::Doc::Stream' => 'rio/ext/yaml/doc',
172
+ # 'Ext::YAML::Doc::Close' => 'rio/ext/yaml/doc',
173
+ # }
174
+ # def initialize()
175
+ # @state_cache = {}
176
+ # end
177
+ # def scheme_states()
178
+ # {
179
+ # 'path' => { 'Stream::Open' => 'Path::Stream::Open' },
180
+ # 'file' => { 'Stream::Open' => 'Path::Stream::Open' },
181
+ # 'strio' => { 'Stream::Open' => 'StrIO::Stream::Open' },
182
+ # 'cmdpipe' => { 'Stream::Reset' => 'CmdPipe::Stream::Reset' },
183
+ # 'http' => {'Stream::Input' => 'HTTP::Stream::Input',
184
+ # 'Stream::Open' => 'HTTP::Stream::Open' },
185
+ # }
186
+ # end
187
+ # def known?(state_name)
188
+ # STD_STATE_FILES.has_key?(state_name) or SCHEME_STATE_FILES.has_key?(state_name)
189
+ # end
190
+ # def std_state_name(state_name)
191
+ # case
192
+ # when STD_STATE_FILES.has_key?(state_name) then 'State::'+state_name
193
+ # when SCHEME_STATE_FILES.has_key?(state_name) then state_name
194
+ # else raise ArgumentError,"Unknown State Name (#{state_name})"
195
+ # end
196
+ # end
197
+ # def mode_mixins()
198
+ # {
199
+ # 'Stream::Input' => { 'splitlines' => 'Ext::SplitLines::Stream::Input', },
200
+ # 'Stream::Output' => { 'splitlines' => 'Ext::SplitLines::Stream::Output', },
201
+ # }
202
+ # end
203
+ # def mode_state_name(state_name,cx)
204
+ # mixins = mode_mixins()
205
+ # return state_name unless mixins.has_key?(state_name)
206
+ # modes = mstates[state_name]
207
+ # for mode in modes.keys
208
+ # next unless cx[mode]
209
+ # return modes[mode]
210
+ # end
211
+ # end
212
+
213
+ # def scheme_state_name(state_name,scheme)
214
+ # schemes = scheme_states()
215
+ # if schemes.has_key?(scheme)
216
+ # states = schemes[scheme]
217
+ # if states.has_key?(state_name)
218
+ # return scheme_states[scheme][state_name]
219
+ # end
220
+ # end
221
+ # return std_state_name(state_name)
222
+ # end
223
+ # def state_file(state_name,rio_handle)
224
+ # case
225
+ # when STD_STATE_FILES.has_key?(state_name) then STD_STATE_FILES[state_name]
226
+ # when SCHEME_STATE_FILES.has_key?(state_name) then SCHEME_STATE_FILES[state_name]
227
+ # else raise ArgumentError,"Unknown State Name (#{state_name})"
228
+ # end
229
+ # end
230
+ # def state2class(state_name,rio_handle=nil)
231
+ # scheme = rio_handle.rl.scheme unless rio_handle.nil?
232
+ # state = nil
233
+ # if scheme_cache = @state_cache[scheme]
234
+ # return state if state = scheme_cache[state_name]
235
+ # end
236
+ # mapped_name = rio_handle.nil? ? std_state_name(state_name) : scheme_state_name(state_name,rio_handle.rl.scheme)
237
+ # if self.known?(state_name)
238
+ # require self.state_file(state_name,rio_handle)
239
+ # @state_cache[scheme] ||= {}
240
+ # @state_cache[scheme][state_name] = RIO.module_eval(mapped_name)
241
+ # return @state_cache[scheme][state_name]
242
+ # else
243
+ # raise ArgumentError,"Unknown State Name (#{state_name})"
244
+ # end
245
+ # end
246
+
247
+ # end
248
+
50
249
 
51
- # module TryState
52
- # attr_accessor :try_state
53
- # end
54
250
  class Factory #:nodoc: all
55
251
  include Singleton
56
252
  def initialize()
@@ -59,14 +255,15 @@ module RIO
59
255
  @state_class = {}
60
256
  @ss_class = {}
61
257
  end
258
+
62
259
  def subscheme_module(sch)
63
260
  @ss_module[sch] ||= case sch
64
261
  when 'file','path'
65
262
  require 'rio/scheme/path'
66
263
  Path
67
- when 'zfile','zpath'
68
- require 'rio/ext/zipfile/zpath'
69
- Ext::ZipFile::ZPath
264
+ when 'zipfile'
265
+ require 'rio/ext/zipfile/rl'
266
+ ZipFile::RootDir
70
267
  when 'stdio','stdin','stdout'
71
268
  require 'rio/scheme/stdio'
72
269
  StdIO
@@ -85,7 +282,7 @@ module RIO
85
282
  when 'tempdir'
86
283
  require 'rio/scheme/temp'
87
284
  Temp::Dir
88
- when 'strio'
285
+ when 'strio','stringio','string'
89
286
  require 'rio/scheme/strio'
90
287
  StrIO
91
288
  when 'cmdpipe'
@@ -118,15 +315,6 @@ module RIO
118
315
  end
119
316
  end
120
317
 
121
- def riorl_class(sch)
122
- subscheme_module(sch).const_get(:RL)
123
- end
124
-
125
- def reset_state(rl)
126
- mod = subscheme_module(rl.scheme)
127
- mod.const_get(:RESET_STATE) unless mod.nil?
128
- end
129
-
130
318
  STATE2FILE = {
131
319
  'Path::Reset' => 'rio/path/reset',
132
320
  'Path::Empty' => 'rio/path',
@@ -157,11 +345,6 @@ module RIO
157
345
 
158
346
  'Null::Stream::Open' => 'rio/scheme/null',
159
347
 
160
- 'ZipFile::CentralDir::Open' => 'rio/zipfile/centraldir',
161
- 'ZipFile::CentralDir::Stream' => 'rio/zipfile/centraldir',
162
- 'ZipFile::CentralDir::Close' => 'rio/zipfile/centraldir',
163
- 'ZipFile::Path::Str' => 'rio/zipfile/path',
164
-
165
348
  'CmdPipe::Stream::Reset' => 'rio/scheme/cmdpipe',
166
349
 
167
350
  'HTTP::Stream::Input' => 'rio/scheme/http',
@@ -170,9 +353,23 @@ module RIO
170
353
  'Temp::Reset' => 'rio/scheme/temp',
171
354
  'Temp::Stream::Open' => 'rio/scheme/temp',
172
355
 
356
+ 'Ext::YAML::Doc::Existing' => 'rio/ext/yaml/doc',
357
+ 'Ext::YAML::Doc::Open' => 'rio/ext/yaml/doc',
358
+ 'Ext::YAML::Doc::Stream' => 'rio/ext/yaml/doc',
359
+ 'Ext::YAML::Doc::Close' => 'rio/ext/yaml/doc',
360
+
361
+
173
362
  }
363
+ def riorl_class(sch)
364
+ subscheme_module(sch).const_get(:RL)
365
+ end
366
+
367
+ def reset_state(rl)
368
+ mod = subscheme_module(rl.scheme)
369
+ mod.const_get(:RESET_STATE) unless mod.nil?
370
+ end
371
+
174
372
  def state2class(state_name)
175
- #p "state_name=#{state_name}"
176
373
  return @state_class[state_name] if @state_class.has_key?(state_name)
177
374
  if STATE2FILE.has_key?(state_name)
178
375
  require STATE2FILE[state_name]
@@ -181,6 +378,13 @@ module RIO
181
378
  raise ArgumentError,"Unknown State Name (#{state_name})"
182
379
  end
183
380
  end
381
+ def try_state_proc1(current_state,rio_handle)
382
+ #p "try_state_proc cur=#{current_state}[#{current_state.class}] han=#{rio_handle}[#{rio_handle.class}]"
383
+ proc { |new_state_name|
384
+ # new_state_class = state2class(new_state_name)
385
+ _change_state(state2class(new_state_name,rio_handle),current_state,rio_handle)
386
+ }
387
+ end
184
388
  def try_state_proc(current_state,rio_handle)
185
389
  proc { |new_state_name|
186
390
  # new_state_class = state2class(new_state_name)
@@ -200,6 +404,10 @@ module RIO
200
404
  private :_change_state
201
405
 
202
406
  # factory creates a state from args
407
+ def create_state1(*args)
408
+ riorl = RIO::RL::Builder.build(*args)
409
+ create_handle(state2class(reset_state(riorl)).new(riorl))
410
+ end
203
411
  def create_state(*args)
204
412
  riorl = RIO::RL::Builder.build(*args)
205
413
  create_handle(state2class(reset_state(riorl)).new(riorl))
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  require 'rio/state'
@@ -83,6 +82,7 @@ module RIO
83
82
  end
84
83
  def [](*args)
85
84
  #p "#{callstr('[]',*args)} ss_type=#{ss_type?}"
85
+ return self.yamldoc[*args] if cx['yamldoc']
86
86
  if _using_files_with_a_file
87
87
  unless args.empty?
88
88
  ss_args = cx['ss_args'] = args
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  module RIO
@@ -1,6 +1,6 @@
1
1
  #--
2
2
  # ===============================================================================
3
- # Copyright (c) 2005, 2006 Christopher Kleckner
3
+ # Copyright (c) 2005,2006,2007 Christopher Kleckner
4
4
  # All rights reserved
5
5
  #
6
6
  # This file is part of the Rio library for ruby.
@@ -23,16 +23,15 @@
23
23
  #
24
24
  # To create the documentation for Rio run the command
25
25
  # ruby build_doc.rb
26
- # from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
26
+ # from the distribution directory.
27
27
  #
28
28
  # Suggested Reading
29
29
  # * RIO::Doc::SYNOPSIS
30
30
  # * RIO::Doc::INTRO
31
31
  # * RIO::Doc::HOWTO
32
+ # * RIO::Doc::EXAMPLES
32
33
  # * RIO::Rio
33
34
  #
34
- # <b>Rio is pre-alpha software.
35
- # The documented interface and behavior is subject to change without notice.</b>
36
35
 
37
36
 
38
37
  require 'zlib'
@@ -44,11 +43,17 @@ module RIO
44
43
  self
45
44
  end
46
45
  end
46
+ module GZipWin32MissingEachLine
47
+ def each_line(*args,&block)
48
+ self.each(*args,&block)
49
+ end
50
+ end
47
51
  module GZipRead
48
52
  def self.extend_object(ioh_stream)
49
53
  super
50
54
  gz = Zlib::GzipReader.new(ioh_stream.ios)
51
55
  gz.extend Filter::GZipMissing
56
+ gz.extend Filter::GZipWin32MissingEachLine
52
57
  ioh_stream.iostack.push(gz)
53
58
  end
54
59
  end