ruby-lzws 1.4.0 → 1.4.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.
- checksums.yaml +4 -4
- data/README.md +11 -12
- data/ext/lzws_ext/gvl.h +2 -2
- data/ext/lzws_ext/macro.h +1 -1
- data/lib/lzws/error.rb +9 -4
- data/lib/lzws/file.rb +12 -35
- data/lib/lzws/option.rb +36 -0
- data/lib/lzws/stream/raw/compressor.rb +11 -53
- data/lib/lzws/stream/raw/decompressor.rb +11 -35
- data/lib/lzws/stream/reader.rb +6 -176
- data/lib/lzws/stream/writer.rb +6 -140
- data/lib/lzws/string.rb +12 -16
- data/lib/lzws/validation.rb +4 -41
- data/lib/lzws/version.rb +1 -1
- metadata +42 -19
- data/lib/lzws/stream/abstract.rb +0 -152
- data/lib/lzws/stream/delegates.rb +0 -36
- data/lib/lzws/stream/raw/abstract.rb +0 -63
- data/lib/lzws/stream/reader_helpers.rb +0 -194
- data/lib/lzws/stream/stat.rb +0 -78
- data/lib/lzws/stream/writer_helpers.rb +0 -91
@@ -1,194 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require "English"
|
5
|
-
|
6
|
-
require_relative "../validation"
|
7
|
-
|
8
|
-
module LZWS
|
9
|
-
module Stream
|
10
|
-
module ReaderHelpers
|
11
|
-
def getbyte
|
12
|
-
read 1
|
13
|
-
end
|
14
|
-
|
15
|
-
def each_byte(&block)
|
16
|
-
each_string method(:getbyte), &block
|
17
|
-
end
|
18
|
-
|
19
|
-
def readbyte
|
20
|
-
readstring method(:getbyte)
|
21
|
-
end
|
22
|
-
|
23
|
-
def ungetbyte(byte)
|
24
|
-
Validation.validate_string byte
|
25
|
-
|
26
|
-
@buffer.prepend byte
|
27
|
-
|
28
|
-
nil
|
29
|
-
end
|
30
|
-
|
31
|
-
# -- char --
|
32
|
-
|
33
|
-
def getc
|
34
|
-
if @external_encoding.nil?
|
35
|
-
byte = getbyte
|
36
|
-
return nil if byte.nil?
|
37
|
-
|
38
|
-
return transcode_to_internal byte
|
39
|
-
end
|
40
|
-
|
41
|
-
char = ::String.new :encoding => ::Encoding::BINARY
|
42
|
-
|
43
|
-
# Read one byte until valid string will appear.
|
44
|
-
loop do
|
45
|
-
byte = getbyte
|
46
|
-
return nil if byte.nil?
|
47
|
-
|
48
|
-
char << byte
|
49
|
-
|
50
|
-
char.force_encoding @external_encoding
|
51
|
-
return transcode_to_internal char if char.valid_encoding?
|
52
|
-
|
53
|
-
char.force_encoding ::Encoding::BINARY
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def readchar
|
58
|
-
readstring method(:getc)
|
59
|
-
end
|
60
|
-
|
61
|
-
def each_char(&block)
|
62
|
-
each_string method(:getc), &block
|
63
|
-
end
|
64
|
-
|
65
|
-
def ungetc(char)
|
66
|
-
ungetstring char
|
67
|
-
end
|
68
|
-
|
69
|
-
# -- lines --
|
70
|
-
|
71
|
-
def gets(separator = $OUTPUT_RECORD_SEPARATOR, limit = nil)
|
72
|
-
# Limit can be a first argument.
|
73
|
-
if separator.is_a? ::Numeric
|
74
|
-
limit = separator
|
75
|
-
separator = $OUTPUT_RECORD_SEPARATOR
|
76
|
-
end
|
77
|
-
|
78
|
-
line_ending =
|
79
|
-
if separator.nil?
|
80
|
-
nil
|
81
|
-
else
|
82
|
-
Validation.validate_string separator
|
83
|
-
::String.new separator, :encoding => target_encoding
|
84
|
-
end
|
85
|
-
|
86
|
-
Validation.validate_positive_integer limit unless limit.nil?
|
87
|
-
|
88
|
-
line = ::String.new :encoding => target_encoding
|
89
|
-
|
90
|
-
loop do
|
91
|
-
char = getc
|
92
|
-
|
93
|
-
if char.nil?
|
94
|
-
return nil if line.empty?
|
95
|
-
|
96
|
-
break
|
97
|
-
end
|
98
|
-
|
99
|
-
line << char
|
100
|
-
|
101
|
-
break if
|
102
|
-
(!line_ending.nil? && line.end_with?(line_ending)) ||
|
103
|
-
(!limit.nil? && line.length >= limit)
|
104
|
-
end
|
105
|
-
|
106
|
-
@lineno += 1
|
107
|
-
|
108
|
-
line
|
109
|
-
end
|
110
|
-
|
111
|
-
def readline
|
112
|
-
readstring method(:gets)
|
113
|
-
end
|
114
|
-
|
115
|
-
def readlines
|
116
|
-
lines = []
|
117
|
-
each_line { |line| lines << line }
|
118
|
-
|
119
|
-
lines
|
120
|
-
end
|
121
|
-
|
122
|
-
def each_line(&block)
|
123
|
-
each_string method(:gets), &block
|
124
|
-
end
|
125
|
-
|
126
|
-
alias each each_line
|
127
|
-
|
128
|
-
def ungetline(line)
|
129
|
-
ungetstring line
|
130
|
-
|
131
|
-
@lineno -= 1
|
132
|
-
|
133
|
-
nil
|
134
|
-
end
|
135
|
-
|
136
|
-
# -- common --
|
137
|
-
|
138
|
-
protected def readstring(each_proc)
|
139
|
-
string = each_proc.call
|
140
|
-
raise ::EOFError if string.nil?
|
141
|
-
|
142
|
-
string
|
143
|
-
end
|
144
|
-
|
145
|
-
protected def each_string(each_proc, &block)
|
146
|
-
return enum_for __method__, each_proc unless block.is_a? ::Proc
|
147
|
-
|
148
|
-
loop do
|
149
|
-
string = each_proc.call
|
150
|
-
break if string.nil?
|
151
|
-
|
152
|
-
yield string
|
153
|
-
end
|
154
|
-
|
155
|
-
nil
|
156
|
-
end
|
157
|
-
|
158
|
-
protected def ungetstring(string)
|
159
|
-
Validation.validate_string string
|
160
|
-
|
161
|
-
string = ::String.new string, :encoding => @internal_encoding unless @internal_encoding.nil?
|
162
|
-
string = transcode_to_external string unless @external_encoding.nil?
|
163
|
-
|
164
|
-
string.force_encoding ::Encoding::BINARY
|
165
|
-
@buffer.prepend string
|
166
|
-
|
167
|
-
nil
|
168
|
-
end
|
169
|
-
|
170
|
-
# -- etc --
|
171
|
-
|
172
|
-
module ClassMethods
|
173
|
-
def open(file_path, *args, &block)
|
174
|
-
Validation.validate_string file_path
|
175
|
-
Validation.validate_proc block
|
176
|
-
|
177
|
-
::File.open file_path, "rb" do |io|
|
178
|
-
reader = new io, *args
|
179
|
-
|
180
|
-
begin
|
181
|
-
yield reader
|
182
|
-
ensure
|
183
|
-
reader.close
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def self.included(klass)
|
190
|
-
klass.extend ClassMethods
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
data/lib/lzws/stream/stat.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require "forwardable"
|
5
|
-
|
6
|
-
module LZWS
|
7
|
-
module Stream
|
8
|
-
class Stat
|
9
|
-
# Libraries like minitar tries to access stat to know whether stream is seekable.
|
10
|
-
# We need to mark stream as not directory, file, etc, because it is not seekable.
|
11
|
-
|
12
|
-
# User can use disabled delegates using :io reader.
|
13
|
-
|
14
|
-
extend ::Forwardable
|
15
|
-
|
16
|
-
METHODS_RETURNING_FALSE = %i[
|
17
|
-
blockdev?
|
18
|
-
chardev?
|
19
|
-
directory?
|
20
|
-
executable?
|
21
|
-
executable_real?
|
22
|
-
file?
|
23
|
-
grpowned?
|
24
|
-
owned?
|
25
|
-
pipe?
|
26
|
-
setgid?
|
27
|
-
setuid?
|
28
|
-
socket?
|
29
|
-
sticky?
|
30
|
-
symlink?
|
31
|
-
zero?
|
32
|
-
]
|
33
|
-
.freeze
|
34
|
-
|
35
|
-
DELEGATES = %i[
|
36
|
-
<=>
|
37
|
-
atime
|
38
|
-
birthtime
|
39
|
-
blksize
|
40
|
-
blocks
|
41
|
-
ctime
|
42
|
-
dev
|
43
|
-
dev_major
|
44
|
-
dev_minor
|
45
|
-
ftype
|
46
|
-
gid
|
47
|
-
ino
|
48
|
-
inspect
|
49
|
-
mode
|
50
|
-
mtime
|
51
|
-
nlink
|
52
|
-
rdev
|
53
|
-
rdev_major
|
54
|
-
rdev_minor
|
55
|
-
readable?
|
56
|
-
readable_real?
|
57
|
-
size
|
58
|
-
size?
|
59
|
-
uid
|
60
|
-
world_readable?
|
61
|
-
world_writable?
|
62
|
-
writable?
|
63
|
-
writable_real?
|
64
|
-
]
|
65
|
-
.freeze
|
66
|
-
|
67
|
-
def initialize(stat)
|
68
|
-
@stat = stat
|
69
|
-
end
|
70
|
-
|
71
|
-
METHODS_RETURNING_FALSE.each do |method_name|
|
72
|
-
define_method(method_name) { false }
|
73
|
-
end
|
74
|
-
|
75
|
-
def_delegators :@stat, *DELEGATES
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require "English"
|
5
|
-
|
6
|
-
require_relative "../error"
|
7
|
-
require_relative "../validation"
|
8
|
-
|
9
|
-
module LZWS
|
10
|
-
module Stream
|
11
|
-
module WriterHelpers
|
12
|
-
def <<(object)
|
13
|
-
write object
|
14
|
-
end
|
15
|
-
|
16
|
-
def print(*objects, field_separator: $OUTPUT_FIELD_SEPARATOR, record_separator: $OUTPUT_RECORD_SEPARATOR)
|
17
|
-
objects.each do |object|
|
18
|
-
write object
|
19
|
-
write field_separator unless field_separator.nil?
|
20
|
-
end
|
21
|
-
|
22
|
-
write record_separator unless record_separator.nil?
|
23
|
-
|
24
|
-
nil
|
25
|
-
end
|
26
|
-
|
27
|
-
def printf(*args)
|
28
|
-
write sprintf(*args)
|
29
|
-
|
30
|
-
nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def putc(object, encoding: ::Encoding::BINARY)
|
34
|
-
case object
|
35
|
-
when ::Numeric
|
36
|
-
write object.chr(encoding)
|
37
|
-
when ::String
|
38
|
-
write object[0]
|
39
|
-
else
|
40
|
-
raise ValidateError, "invalid object: \"#{object}\" for putc"
|
41
|
-
end
|
42
|
-
|
43
|
-
object
|
44
|
-
end
|
45
|
-
|
46
|
-
def puts(*objects)
|
47
|
-
objects.each do |object|
|
48
|
-
if object.is_a? ::Array
|
49
|
-
puts(*object)
|
50
|
-
next
|
51
|
-
end
|
52
|
-
|
53
|
-
source = object.to_s
|
54
|
-
newline = "\n".encode source.encoding
|
55
|
-
|
56
|
-
# Do not add newline if source ends with newline.
|
57
|
-
if source.end_with? newline
|
58
|
-
write source
|
59
|
-
else
|
60
|
-
write source + newline
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
nil
|
65
|
-
end
|
66
|
-
|
67
|
-
# -- etc --
|
68
|
-
|
69
|
-
module ClassMethods
|
70
|
-
def open(file_path, *args, &block)
|
71
|
-
Validation.validate_string file_path
|
72
|
-
Validation.validate_proc block
|
73
|
-
|
74
|
-
::File.open file_path, "wb" do |io|
|
75
|
-
writer = new io, *args
|
76
|
-
|
77
|
-
begin
|
78
|
-
yield writer
|
79
|
-
ensure
|
80
|
-
writer.close
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def self.included(klass)
|
87
|
-
klass.extend ClassMethods
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|