wishdev-rio 0.4.3.1
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/COPYING +341 -0
- data/README +81 -0
- data/Rakefile +281 -0
- data/build_doc.rb +94 -0
- data/doc/ANNOUNCE +159 -0
- data/doc/RELEASE_NOTES +308 -0
- data/doc/RIOIS +215 -0
- data/doc/generators/template/html/rio.css +428 -0
- data/doc/generators/template/html/rio.rb +523 -0
- data/doc/generators/template/html/ugly.rb +132 -0
- data/doc/pkg_def.rb +60 -0
- data/doc/rfc1738.txt +1403 -0
- data/doc/rfc959.txt +3933 -0
- data/ex/catcsv.rb +64 -0
- data/ex/colx.rb +8 -0
- data/ex/findinruby +15 -0
- data/ex/findruby +14 -0
- data/ex/passwd_report.rb +8 -0
- data/ex/prompt.rb +25 -0
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +42 -0
- data/ex/riogunzip +31 -0
- data/ex/riogzip +24 -0
- data/ex/rioprompt.rb +10 -0
- data/ex/targz2zip +17 -0
- data/ex/tonl +10 -0
- data/lib/rio/abstract_method.rb +56 -0
- data/lib/rio/argv.rb +56 -0
- data/lib/rio/arycopy.rb +43 -0
- data/lib/rio/assert.rb +114 -0
- data/lib/rio/base.rb +56 -0
- data/lib/rio/callstr.rb +46 -0
- data/lib/rio/const.rb +51 -0
- data/lib/rio/construct.rb +50 -0
- data/lib/rio/constructor.rb +258 -0
- data/lib/rio/context/autoclose.rb +72 -0
- data/lib/rio/context/copying.rb +55 -0
- data/lib/rio/context/cxx.rb +66 -0
- data/lib/rio/context/dir.rb +120 -0
- data/lib/rio/context/gzip.rb +50 -0
- data/lib/rio/context/methods.rb +182 -0
- data/lib/rio/context/skip.rb +66 -0
- data/lib/rio/context/stream.rb +229 -0
- data/lib/rio/context.rb +117 -0
- data/lib/rio/cp.rb +370 -0
- data/lib/rio/def.rb +53 -0
- data/lib/rio/dir.rb +144 -0
- data/lib/rio/doc/EXAMPLES.rb +299 -0
- data/lib/rio/doc/HOWTO.rb +737 -0
- data/lib/rio/doc/INDEX.rb +311 -0
- data/lib/rio/doc/INTRO.rb +1068 -0
- data/lib/rio/doc/OPTIONAL.rb +130 -0
- data/lib/rio/doc/SYNOPSIS.rb +183 -0
- data/lib/rio/doc.rb +45 -0
- data/lib/rio/entrysel.rb +246 -0
- data/lib/rio/exception/copy.rb +97 -0
- data/lib/rio/exception/notimplemented.rb +57 -0
- data/lib/rio/exception/notsupported.rb +46 -0
- data/lib/rio/exception/open.rb +61 -0
- data/lib/rio/exception/state.rb +73 -0
- data/lib/rio/exception.rb +41 -0
- data/lib/rio/ext/csv.rb +351 -0
- data/lib/rio/ext/if.rb +45 -0
- data/lib/rio/ext/mp3info.rb +80 -0
- data/lib/rio/ext/splitlines.rb +253 -0
- data/lib/rio/ext/yaml/doc.rb +133 -0
- data/lib/rio/ext/yaml/tie.rb +149 -0
- data/lib/rio/ext/yaml.rb +164 -0
- data/lib/rio/ext/zipfile/fs.rb +116 -0
- data/lib/rio/ext/zipfile/rl.rb +251 -0
- data/lib/rio/ext/zipfile/rootdir.rb +117 -0
- data/lib/rio/ext/zipfile/state.rb +161 -0
- data/lib/rio/ext/zipfile/wrap.rb +204 -0
- data/lib/rio/ext/zipfile.rb +110 -0
- data/lib/rio/ext.rb +138 -0
- data/lib/rio/factory.rb +436 -0
- data/lib/rio/file.rb +118 -0
- data/lib/rio/filter/closeoneof.rb +103 -0
- data/lib/rio/filter/gzip.rb +70 -0
- data/lib/rio/filter.rb +94 -0
- data/lib/rio/fs/base.rb +41 -0
- data/lib/rio/fs/impl.rb +122 -0
- data/lib/rio/fs/native.rb +75 -0
- data/lib/rio/fs/stream.rb +61 -0
- data/lib/rio/fs/url.rb +63 -0
- data/lib/rio/ftp/conncache.rb +101 -0
- data/lib/rio/ftp/dir.rb +94 -0
- data/lib/rio/ftp/fs.rb +180 -0
- data/lib/rio/ftp/ftpfile.rb +20 -0
- data/lib/rio/grande.rb +97 -0
- data/lib/rio/handle.rb +100 -0
- data/lib/rio/if/basic.rb +64 -0
- data/lib/rio/if/csv.rb +76 -0
- data/lib/rio/if/dir.rb +157 -0
- data/lib/rio/if/file.rb +89 -0
- data/lib/rio/if/fileordir.rb +268 -0
- data/lib/rio/if/grande.rb +729 -0
- data/lib/rio/if/grande_entry.rb +379 -0
- data/lib/rio/if/grande_stream.rb +693 -0
- data/lib/rio/if/internal.rb +125 -0
- data/lib/rio/if/path.rb +462 -0
- data/lib/rio/if/rubyio.rb +681 -0
- data/lib/rio/if/string.rb +83 -0
- data/lib/rio/if/temp.rb +45 -0
- data/lib/rio/if/test.rb +282 -0
- data/lib/rio/if/yaml.rb +206 -0
- data/lib/rio/if.rb +64 -0
- data/lib/rio/ioh.rb +162 -0
- data/lib/rio/iomode.rb +109 -0
- data/lib/rio/ios/fail.rb +106 -0
- data/lib/rio/ios/generic.rb +119 -0
- data/lib/rio/ios/mode.rb +60 -0
- data/lib/rio/ios/null.rb +119 -0
- data/lib/rio/iowrap.rb +128 -0
- data/lib/rio/kernel.rb +54 -0
- data/lib/rio/local.rb +62 -0
- data/lib/rio/match.rb +53 -0
- data/lib/rio/matchrecord.rb +283 -0
- data/lib/rio/no_warn.rb +49 -0
- data/lib/rio/nullio.rb +159 -0
- data/lib/rio/open3.rb +68 -0
- data/lib/rio/ops/construct.rb +61 -0
- data/lib/rio/ops/create.rb +77 -0
- data/lib/rio/ops/dir.rb +346 -0
- data/lib/rio/ops/either.rb +134 -0
- data/lib/rio/ops/file.rb +102 -0
- data/lib/rio/ops/path.rb +296 -0
- data/lib/rio/ops/stream/input.rb +267 -0
- data/lib/rio/ops/stream/output.rb +100 -0
- data/lib/rio/ops/stream/read.rb +86 -0
- data/lib/rio/ops/stream/write.rb +57 -0
- data/lib/rio/ops/stream.rb +87 -0
- data/lib/rio/ops/symlink.rb +80 -0
- data/lib/rio/path/reset.rb +69 -0
- data/lib/rio/path.rb +129 -0
- data/lib/rio/piper/cp.rb +80 -0
- data/lib/rio/piper.rb +122 -0
- data/lib/rio/prompt.rb +66 -0
- data/lib/rio/rectype.rb +88 -0
- data/lib/rio/rl/base.rb +118 -0
- data/lib/rio/rl/builder.rb +117 -0
- data/lib/rio/rl/chmap.rb +66 -0
- data/lib/rio/rl/fs2url.rb +82 -0
- data/lib/rio/rl/ioi.rb +78 -0
- data/lib/rio/rl/path.rb +110 -0
- data/lib/rio/rl/pathmethods.rb +116 -0
- data/lib/rio/rl/uri.rb +200 -0
- data/lib/rio/rl/withpath.rb +296 -0
- data/lib/rio/scheme/aryio.rb +88 -0
- data/lib/rio/scheme/cmdio.rb +80 -0
- data/lib/rio/scheme/cmdpipe.rb +118 -0
- data/lib/rio/scheme/fd.rb +65 -0
- data/lib/rio/scheme/ftp.rb +141 -0
- data/lib/rio/scheme/http.rb +78 -0
- data/lib/rio/scheme/null.rb +55 -0
- data/lib/rio/scheme/path.rb +98 -0
- data/lib/rio/scheme/stderr.rb +55 -0
- data/lib/rio/scheme/stdio.rb +71 -0
- data/lib/rio/scheme/strio.rb +87 -0
- data/lib/rio/scheme/sysio.rb +63 -0
- data/lib/rio/scheme/tcp.rb +75 -0
- data/lib/rio/scheme/temp.rb +200 -0
- data/lib/rio/state/error.rb +72 -0
- data/lib/rio/state.rb +242 -0
- data/lib/rio/stream/base.rb +54 -0
- data/lib/rio/stream/duplex.rb +79 -0
- data/lib/rio/stream/open.rb +202 -0
- data/lib/rio/stream.rb +181 -0
- data/lib/rio/symantics.rb +45 -0
- data/lib/rio/tempdir.rb +132 -0
- data/lib/rio/to_rio/all.rb +39 -0
- data/lib/rio/to_rio/array.rb +39 -0
- data/lib/rio/to_rio/io.rb +40 -0
- data/lib/rio/to_rio/object.rb +42 -0
- data/lib/rio/to_rio/string.rb +40 -0
- data/lib/rio/to_rio.rb +67 -0
- data/lib/rio/uri/file.rb +198 -0
- data/lib/rio/util.rb +48 -0
- data/lib/rio/version.rb +51 -0
- data/lib/rio.rb +162 -0
- data/setup.rb +1360 -0
- data/test/bin/count_lines.rb +11 -0
- data/test/bin/find_lines.rb +13 -0
- data/test/bin/list_dir.rb +14 -0
- data/test/ftp/all.rb +9 -0
- data/test/ftp/anon_copy_data.rb +36 -0
- data/test/ftp/anon_misc.rb +124 -0
- data/test/ftp/anon_read.rb +105 -0
- data/test/ftp/anon_special.rb +68 -0
- data/test/ftp/anon_write.rb +70 -0
- data/test/ftp/ftp2ftp.rb +51 -0
- data/test/ftp/initftpfiles.rb +14 -0
- data/test/ftp/testdef.rb +55 -0
- data/test/gem_runtests.rb +15 -0
- data/test/http/all.rb +4 -0
- data/test/http/copy-from-http.rb +141 -0
- data/test/http/uri-meta.rb +72 -0
- data/test/lib/temp_server.rb +46 -0
- data/test/runalltests.rb +17 -0
- data/test/runftptests.rb +14 -0
- data/test/runhttp.rb +11 -0
- data/test/runhttptests.rb +14 -0
- data/test/runtests.rb +52 -0
- data/test/tc/abs.rb +355 -0
- data/test/tc/all.rb +80 -0
- data/test/tc/base.rb +31 -0
- data/test/tc/base2.rb +87 -0
- data/test/tc/cd1.rb +113 -0
- data/test/tc/clearsel.rb +68 -0
- data/test/tc/clone.rb +208 -0
- data/test/tc/closeoncopy.rb +102 -0
- data/test/tc/closeoneof.rb +194 -0
- data/test/tc/cmdpipe.rb +149 -0
- data/test/tc/copy-dir-samevar.rb +91 -0
- data/test/tc/copy-from.rb +129 -0
- data/test/tc/copy-to.rb +91 -0
- data/test/tc/copy.rb +74 -0
- data/test/tc/copyarray.rb +188 -0
- data/test/tc/copydest.rb +50 -0
- data/test/tc/copydir.rb +166 -0
- data/test/tc/copydirlines.rb +121 -0
- data/test/tc/copylines.rb +46 -0
- data/test/tc/copynonex.rb +118 -0
- data/test/tc/copysymlink.rb +39 -0
- data/test/tc/create.rb +114 -0
- data/test/tc/csv.rb +226 -0
- data/test/tc/csv2.rb +138 -0
- data/test/tc/csv_columns.rb +37 -0
- data/test/tc/csvutil.rb +56 -0
- data/test/tc/dir.rb +76 -0
- data/test/tc/dir_iter.rb +383 -0
- data/test/tc/dirautoclose.rb +67 -0
- data/test/tc/dirent.rb +178 -0
- data/test/tc/dirss.rb +81 -0
- data/test/tc/each.rb +111 -0
- data/test/tc/each_break.rb +243 -0
- data/test/tc/edf.rb +81 -0
- data/test/tc/empty.rb +51 -0
- data/test/tc/emptyriodir.rb +129 -0
- data/test/tc/entary.rb +227 -0
- data/test/tc/entsel.rb +110 -0
- data/test/tc/eq.rb +101 -0
- data/test/tc/expand_path.rb +69 -0
- data/test/tc/ext.rb +136 -0
- data/test/tc/fileno.rb +94 -0
- data/test/tc/files_select.rb +92 -0
- data/test/tc/get.rb +152 -0
- data/test/tc/getrec.rb +137 -0
- data/test/tc/gzip.rb +109 -0
- data/test/tc/io_each_byte.rb +60 -0
- data/test/tc/io_read.rb +80 -0
- data/test/tc/iometh.rb +149 -0
- data/test/tc/likeio.rb +116 -0
- data/test/tc/line_record_row.rb +51 -0
- data/test/tc/lineno.rb +196 -0
- data/test/tc/lines.rb +66 -0
- data/test/tc/misc.rb +432 -0
- data/test/tc/nolines.rb +204 -0
- data/test/tc/noqae.rb +879 -0
- data/test/tc/null.rb +45 -0
- data/test/tc/once.rb +6 -0
- data/test/tc/overload.rb +140 -0
- data/test/tc/pa.rb +158 -0
- data/test/tc/path_parts.rb +175 -0
- data/test/tc/pathop.rb +60 -0
- data/test/tc/paths.rb +145 -0
- data/test/tc/pid.rb +31 -0
- data/test/tc/piper.rb +143 -0
- data/test/tc/programs_util.rb +24 -0
- data/test/tc/qae.rb +493 -0
- data/test/tc/qae_riovar.rb +499 -0
- data/test/tc/readline.rb +30 -0
- data/test/tc/records.rb +68 -0
- data/test/tc/rename.rb +233 -0
- data/test/tc/rename_assign.rb +45 -0
- data/test/tc/riorl.rb +181 -0
- data/test/tc/route.rb +51 -0
- data/test/tc/selnosel.rb +33 -0
- data/test/tc/skip.rb +89 -0
- data/test/tc/skiplines.rb +71 -0
- data/test/tc/split.rb +28 -0
- data/test/tc/splitlines.rb +65 -0
- data/test/tc/splitpath.rb +83 -0
- data/test/tc/sub.rb +46 -0
- data/test/tc/symlink.rb +176 -0
- data/test/tc/symlink0.rb +348 -0
- data/test/tc/symlink1.rb +114 -0
- data/test/tc/synopsis.rb +75 -0
- data/test/tc/temp.rb +152 -0
- data/test/tc/tempdir.rb +60 -0
- data/test/tc/tempfile.rb +66 -0
- data/test/tc/testcase.rb +170 -0
- data/test/tc/tonl.rb +37 -0
- data/test/tc/truncate.rb +39 -0
- data/test/tc/yaml.rb +275 -0
- metadata +387 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
module RIO
|
|
38
|
+
module Match #:nodoc: all
|
|
39
|
+
module Record
|
|
40
|
+
|
|
41
|
+
class Base
|
|
42
|
+
def initialize(arg)
|
|
43
|
+
@select_arg = arg
|
|
44
|
+
end
|
|
45
|
+
def inspect
|
|
46
|
+
@select_arg.inspect
|
|
47
|
+
end
|
|
48
|
+
def val()
|
|
49
|
+
@select_arg
|
|
50
|
+
end
|
|
51
|
+
def match_all?() false end
|
|
52
|
+
def match_none?() false end
|
|
53
|
+
end
|
|
54
|
+
class All < Base
|
|
55
|
+
def match?(val,recno) true end
|
|
56
|
+
def match_all?() true end
|
|
57
|
+
end
|
|
58
|
+
class None < Base
|
|
59
|
+
def match?(val,recno) false end
|
|
60
|
+
def match_none?() true end
|
|
61
|
+
end
|
|
62
|
+
class RegExp < Base
|
|
63
|
+
def match?(val,recno)
|
|
64
|
+
@select_arg.match(val)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
class Range < Base
|
|
68
|
+
def match?(val,recno)
|
|
69
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
70
|
+
@select_arg === recno
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
class Fixnum < Base
|
|
74
|
+
def match?(val,recno)
|
|
75
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
76
|
+
@select_arg === recno
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
class Proc < Base
|
|
80
|
+
def initialize(arg,therio)
|
|
81
|
+
super(arg)
|
|
82
|
+
@therio = therio
|
|
83
|
+
end
|
|
84
|
+
def match?(val,recno)
|
|
85
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
86
|
+
args = [val,recno,@therio]
|
|
87
|
+
@select_arg.call(*args[0,@select_arg.arity])
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
class Symbol < Base
|
|
91
|
+
def match?(val,recno)
|
|
92
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
93
|
+
val.__send__(@select_arg)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
class And < Base
|
|
97
|
+
def initialize(matches,therio)
|
|
98
|
+
list = []
|
|
99
|
+
matches.each do |arg|
|
|
100
|
+
list << Match::Record.create(therio,arg)
|
|
101
|
+
end
|
|
102
|
+
super(list)
|
|
103
|
+
@therio = therio
|
|
104
|
+
end
|
|
105
|
+
def match?(val,recno)
|
|
106
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
107
|
+
@select_arg.all? { |sel| sel.match?(val,recno) }
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
class Case < Base
|
|
111
|
+
def match?(val,recno)
|
|
112
|
+
#p "match?(#{val},#{recno}) select_arg=#{@select_arg}"
|
|
113
|
+
@select_arg === val
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
def create(therio,arg)
|
|
117
|
+
case arg
|
|
118
|
+
when ::Regexp
|
|
119
|
+
Match::Record::RegExp.new(arg)
|
|
120
|
+
when ::Range
|
|
121
|
+
Match::Record::Range.new(arg)
|
|
122
|
+
when ::Proc
|
|
123
|
+
Match::Record::Proc.new(arg,therio)
|
|
124
|
+
when ::Symbol
|
|
125
|
+
Match::Record::Symbol.new(arg)
|
|
126
|
+
when ::Fixnum
|
|
127
|
+
Match::Record::Fixnum.new(arg)
|
|
128
|
+
when ::Array
|
|
129
|
+
Match::Record::And.new(arg,therio)
|
|
130
|
+
else
|
|
131
|
+
Match::Record::Case.new(arg)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
module_function :create
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
module Match
|
|
139
|
+
module Record
|
|
140
|
+
# for a sellist
|
|
141
|
+
# nil indicates no call was made, so nothing selected
|
|
142
|
+
# empty indicates a call was made, so all selected
|
|
143
|
+
# contents should be checked for matches
|
|
144
|
+
# if contents are removed the list should become nil, not empty
|
|
145
|
+
class SelList
|
|
146
|
+
def initialize(therio,args)
|
|
147
|
+
if args.nil?
|
|
148
|
+
@list = nil
|
|
149
|
+
else
|
|
150
|
+
@list = []
|
|
151
|
+
args.each do |arg|
|
|
152
|
+
@list << create_sel(therio,arg)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
#p "SelList(#{args.inspect},#{@list.inspect})"
|
|
156
|
+
end
|
|
157
|
+
def inspect
|
|
158
|
+
@list.inspect
|
|
159
|
+
end
|
|
160
|
+
def size() @list.size unless @list.nil? end
|
|
161
|
+
def only_one_fixnum?()
|
|
162
|
+
@list && @list.size == 1 && @list[0].kind_of?(Match::Record::Fixnum)
|
|
163
|
+
end
|
|
164
|
+
def delete_at(index)
|
|
165
|
+
@list.delete_at(index)
|
|
166
|
+
@list = nil if @list.empty?
|
|
167
|
+
end
|
|
168
|
+
def self.create(therio,args)
|
|
169
|
+
new(therio,args) unless args.nil?
|
|
170
|
+
end
|
|
171
|
+
def ranges()
|
|
172
|
+
@list.nil? ? [] : @list.select { |sel| sel.kind_of?(Record::Range) }
|
|
173
|
+
end
|
|
174
|
+
def remove_passed_ranges(n)
|
|
175
|
+
return nil if @list.nil?
|
|
176
|
+
return self if @list.empty?
|
|
177
|
+
newlist = []
|
|
178
|
+
@list.each do |sel|
|
|
179
|
+
newlist << sel unless sel.kind_of?(Match::Record::Range) and sel.val.max < n
|
|
180
|
+
end
|
|
181
|
+
@list = (newlist.empty? ? nil : newlist) if newlist.length != @list.length
|
|
182
|
+
@list.nil? ? nil : self
|
|
183
|
+
end
|
|
184
|
+
def create_sel(therio,arg)
|
|
185
|
+
Match::Record.create(therio,arg)
|
|
186
|
+
# case arg
|
|
187
|
+
# when ::Regexp
|
|
188
|
+
# Match::Record::RegExp.new(arg)
|
|
189
|
+
# when ::Range
|
|
190
|
+
# Match::Record::Range.new(arg)
|
|
191
|
+
# when ::Proc
|
|
192
|
+
# Match::Record::Proc.new(arg,therio)
|
|
193
|
+
# when ::Symbol
|
|
194
|
+
# Match::Record::Symbol.new(arg)
|
|
195
|
+
# when ::Fixnum
|
|
196
|
+
# Match::Record::Fixnum.new(arg)
|
|
197
|
+
# when ::Array
|
|
198
|
+
# Match::Record::And.new(arg)
|
|
199
|
+
# else
|
|
200
|
+
# raise ArgumentError,"Argument must be a Regexp,Range,Fixnum,Proc, or Symbol"
|
|
201
|
+
# end
|
|
202
|
+
end
|
|
203
|
+
def match?(val,recno)
|
|
204
|
+
# !@list.nil? && (@list.empty? || @list.detect { |sel| sel.match?(val,recno) } || false) && true
|
|
205
|
+
return false if @list.nil?
|
|
206
|
+
return true if @list.empty?
|
|
207
|
+
as = nil
|
|
208
|
+
al = @list.detect { |sel| as = sel.match?(val,recno)
|
|
209
|
+
#p "1: #{$1} as[match?]: #{as.inspect}"
|
|
210
|
+
as
|
|
211
|
+
}
|
|
212
|
+
#p "[SelList.match?] as:#{as.inspect} al:#{al.inspect}"
|
|
213
|
+
return as if al
|
|
214
|
+
return false
|
|
215
|
+
end
|
|
216
|
+
def always?() !@list.nil? && @list.empty? end
|
|
217
|
+
def never?() @list.nil? end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class SelRej
|
|
222
|
+
def initialize(therio,sel_args,rej_args)
|
|
223
|
+
@sel = SelList.create(therio,sel_args)
|
|
224
|
+
@rej = SelList.create(therio,rej_args)
|
|
225
|
+
@always = init_always()
|
|
226
|
+
end
|
|
227
|
+
def only_one_fixnum?()
|
|
228
|
+
@rej.nil? && @sel && @sel.only_one_fixnum?
|
|
229
|
+
end
|
|
230
|
+
def init_always(reset=false)
|
|
231
|
+
if @sel.nil? and @rej.nil?
|
|
232
|
+
!reset
|
|
233
|
+
elsif @rej.nil? and @sel.always?
|
|
234
|
+
true
|
|
235
|
+
elsif @sel.nil?
|
|
236
|
+
false
|
|
237
|
+
elsif !@rej.nil? and @rej.always?
|
|
238
|
+
false
|
|
239
|
+
else
|
|
240
|
+
nil
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
def remove_passed_ranges(n)
|
|
244
|
+
@sel = @sel.remove_passed_ranges(n) unless @sel.nil?
|
|
245
|
+
@rej = @rej.remove_passed_ranges(n) unless @rej.nil?
|
|
246
|
+
@always = init_always(true)
|
|
247
|
+
self
|
|
248
|
+
end
|
|
249
|
+
def rangetops()
|
|
250
|
+
rtops = ranges.map { |r| r.val.max }.sort.uniq
|
|
251
|
+
rtops.empty? ? nil : rtops
|
|
252
|
+
end
|
|
253
|
+
def ranges()
|
|
254
|
+
(@sel.nil? ? [] : @sel.ranges) + (@rej.nil? ? [] : @rej.ranges)
|
|
255
|
+
end
|
|
256
|
+
def class_tail
|
|
257
|
+
self.class.to_s.sub(/^.+::/,'')
|
|
258
|
+
end
|
|
259
|
+
def inspect
|
|
260
|
+
sprintf("#<%s:0x%08x @always=%s @sel=%s @rej=%s>",self.class_tail,self.object_id,@always.inspect,
|
|
261
|
+
@sel.inspect,@rej.inspect)
|
|
262
|
+
end
|
|
263
|
+
def always?()
|
|
264
|
+
@always == true
|
|
265
|
+
end
|
|
266
|
+
def never?()
|
|
267
|
+
@always == false
|
|
268
|
+
end
|
|
269
|
+
def match?(val,recno)
|
|
270
|
+
#p "match?(#{val},#{recno}) #{self.inspect}"
|
|
271
|
+
return @always unless @always.nil?
|
|
272
|
+
as = nil
|
|
273
|
+
ok = ((!@sel.nil? && (as = @sel.match?(val,recno))) && !(!@rej.nil? && @rej.match?(val,recno)))
|
|
274
|
+
return (ok ? as : ok)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
data/lib/rio/no_warn.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
module RIO
|
|
38
|
+
# Based on a suggestion posted by Andrew L. Johnson to comp.lang.ruby
|
|
39
|
+
def no_warn
|
|
40
|
+
begin
|
|
41
|
+
verbose = $VERBOSE
|
|
42
|
+
$VERBOSE = nil
|
|
43
|
+
yield
|
|
44
|
+
ensure
|
|
45
|
+
$VERBOSE = verbose
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
module_function :no_warn
|
|
49
|
+
end
|
data/lib/rio/nullio.rb
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
module RIO
|
|
39
|
+
class NotSupportedException < ArgumentError #:nodoc: all
|
|
40
|
+
def self.emsg(fname,obj)
|
|
41
|
+
"#{fname}() is not supported for #{obj.class} objects"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
class NullIOMode #:nodoc: all
|
|
46
|
+
def initialize(mode_string)
|
|
47
|
+
@str = mode_string
|
|
48
|
+
end
|
|
49
|
+
def to_s() @str end
|
|
50
|
+
def can_write?
|
|
51
|
+
@str =~ /^[aw]/ or @str =~ /\+/
|
|
52
|
+
end
|
|
53
|
+
def can_read?
|
|
54
|
+
@str =~ /^r/ or @str =~ /\+/
|
|
55
|
+
end
|
|
56
|
+
def appends?
|
|
57
|
+
@str =~ /^a/
|
|
58
|
+
end
|
|
59
|
+
def =~(re)
|
|
60
|
+
re =~ @str
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
class NullIO #:nodoc: all
|
|
64
|
+
def initialize(a=nil,m='r')
|
|
65
|
+
# p "#{callstr('initialize',a,m)} hnd=#{@hnd.inspect}"
|
|
66
|
+
@lineno = 0
|
|
67
|
+
@open = true
|
|
68
|
+
@mode = NullIOMode.new(m)
|
|
69
|
+
end
|
|
70
|
+
def lineno() @lineno end
|
|
71
|
+
def lineno=(a) @lineno = a end
|
|
72
|
+
def self.open(a=nil,m='r',&block)
|
|
73
|
+
rtn = io = new(a,m)
|
|
74
|
+
if block_given?
|
|
75
|
+
rtn = yield(io)
|
|
76
|
+
io.close
|
|
77
|
+
end
|
|
78
|
+
rtn
|
|
79
|
+
end
|
|
80
|
+
def fileno() nil end
|
|
81
|
+
def flush() nil end
|
|
82
|
+
def fsync() nil end
|
|
83
|
+
def isatty() false end
|
|
84
|
+
def tty?() false end
|
|
85
|
+
def pos() 0 end
|
|
86
|
+
def pos=(n) 0 end
|
|
87
|
+
|
|
88
|
+
def readchar() nil end
|
|
89
|
+
def read() nil end
|
|
90
|
+
def getc() nil end
|
|
91
|
+
|
|
92
|
+
def closed?
|
|
93
|
+
not @open
|
|
94
|
+
end
|
|
95
|
+
def close
|
|
96
|
+
@open = false
|
|
97
|
+
end
|
|
98
|
+
def eof?()
|
|
99
|
+
true
|
|
100
|
+
end
|
|
101
|
+
def each_line(sep_string=$/,&block)
|
|
102
|
+
self
|
|
103
|
+
end
|
|
104
|
+
def each_byte(sep_string=$/,&block)
|
|
105
|
+
nil
|
|
106
|
+
end
|
|
107
|
+
def fcntl(integer_cmd,arg)
|
|
108
|
+
raise NotSupportedException,NotSupportedException.emsg('fcntl',self)
|
|
109
|
+
end
|
|
110
|
+
def ioctl(integer_cmd,arg)
|
|
111
|
+
raise NotSupportedException,NotSupportedException.emsg('fcntl',self)
|
|
112
|
+
end
|
|
113
|
+
alias each each_line
|
|
114
|
+
def gets(sep_string=$/)
|
|
115
|
+
raise IOError,"NullIO is not open for reading" unless @mode.can_read?
|
|
116
|
+
nil
|
|
117
|
+
end
|
|
118
|
+
def readline(sep_string=$/)
|
|
119
|
+
raise EOFError
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def readlines(sep_string=$/)
|
|
123
|
+
[]
|
|
124
|
+
end
|
|
125
|
+
def rewind
|
|
126
|
+
@lineno = 0
|
|
127
|
+
end
|
|
128
|
+
def print(*objs)
|
|
129
|
+
raise IOError,"NullIO is not open for writing" unless @mode.can_write?
|
|
130
|
+
nil
|
|
131
|
+
end
|
|
132
|
+
def close_read(*objs)
|
|
133
|
+
raise IOError,"NullIO is not a duplex stream"
|
|
134
|
+
nil
|
|
135
|
+
end
|
|
136
|
+
def close_write(*objs)
|
|
137
|
+
raise IOError,"NullIO is not a duplex stream"
|
|
138
|
+
nil
|
|
139
|
+
end
|
|
140
|
+
def <<(obj)
|
|
141
|
+
self
|
|
142
|
+
end
|
|
143
|
+
def puts(*objs)
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
def write(string)
|
|
147
|
+
print(string)
|
|
148
|
+
string.size
|
|
149
|
+
end
|
|
150
|
+
def binmode() nil end
|
|
151
|
+
def printf(fmt,*args)
|
|
152
|
+
print(sprintf(fmt,*args))
|
|
153
|
+
end
|
|
154
|
+
def callstr(func,*args)
|
|
155
|
+
self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
end
|