liblzma 0.3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Binary file
Binary file
@@ -0,0 +1,222 @@
1
+ #vim: set fileencoding:utf-8
2
+
3
+ ver = RbConfig::CONFIG["ruby_version"]
4
+ lib = File.join(File.dirname(__FILE__), ver, "liblzma.so")
5
+ if File.file?(lib)
6
+ require_relative File.join(ver, "liblzma.so")
7
+ else
8
+ require_relative "liblzma.so"
9
+ end
10
+
11
+
12
+ #--
13
+ # This comment is avoid the problem that is recognized binary by rdoc
14
+ # #
15
+ # #
16
+ # #
17
+ # #
18
+ # #
19
+ # #
20
+ # #
21
+ # #
22
+ # #
23
+ # #
24
+ # #
25
+ # #
26
+ #++
27
+
28
+ module LibLZMA
29
+ LZMA = self
30
+
31
+ # call-seq:
32
+ # LibLZMA.encode(data, ...) -> encoded_xz_data
33
+ #
34
+ # データを圧縮します。圧縮されたデータ列は、xz ファイルフォーマットとなるため、コマンドラインの xz などで伸張させることが可能です。
35
+ #
36
+ # [data] 圧縮元となるデータを String インスタンスで渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立て処理を行います。
37
+ #
38
+ # [options] LZMA::Filter::LZMA2.new に渡される可変引数です。詳細は LZMA::Filter::LZMA2.new を見てください。
39
+ #
40
+ # [RETURN] xz データストリームとしての String インスタンスです。
41
+ #
42
+ # [EXCEPTIONS] (NO DOCUMENT)
43
+ module_function
44
+ def encode(data, *args)
45
+ s = Stream.encoder(Filter.lzma2(*args))
46
+ s.update(data, LZMA::FINISH)
47
+ ensure
48
+ s.finish rescue nil if s
49
+ end
50
+
51
+ # call-seq:
52
+ # LZMA.decode(encoded_data, ...) -> string
53
+ #
54
+ # 圧縮されたデータを伸張します。
55
+ #
56
+ # [encoded_data] 圧縮されたデータを与えます。圧縮されたデータの形式は、xz と lzma です。これらはあらかじめ区別する必要なく与えることが出来ます。
57
+ #
58
+ # [options] LZMA::Filter::LZMA2.new に渡される可変引数です。詳細は LZMA::Filter::LZMA2.new を見てください。
59
+ #
60
+ # [RETURN] xz データストリームとしての String インスタンスです。
61
+ #
62
+ # [EXCEPTIONS] (NO DOCUMENT)
63
+ module_function
64
+ def decode(data, *args)
65
+ s = Stream.auto_decoder(*args)
66
+ s.update(data, LZMA::FINISH)
67
+ ensure
68
+ s.finish rescue nil if s
69
+ end
70
+
71
+ # call-seq:
72
+ # LZMA.raw_encode(data, ...) -> encoded_data
73
+ #
74
+ # データを圧縮します。圧縮されたデータ列は生の lzma1/lzma2 のデータ列であるため、伸張する際に適切なフィルタを与える必要があります。
75
+ #
76
+ # xz ファイルフォーマットヘッダや整合値を持たないため、これらが不要な場合は有用かもしれません。
77
+ #
78
+ # [data] 圧縮元となるデータを String インスタンスで渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立てて処理を行います。
79
+ #
80
+ # [options] LZMA::Filter のインスタンスを与えます。
81
+ #
82
+ # [RETURN] 生の lzma1/lzma2 のデータ列となる String インスタンスです。
83
+ #
84
+ # [EXCEPTIONS] (NO DOCUMENT)
85
+ module_function
86
+ def raw_encode(data, *args)
87
+ s = Stream.raw_encoder(*args)
88
+ s.update(data, LZMA::FINISH)
89
+ ensure
90
+ s.finish rescue nil if s
91
+ end
92
+
93
+ # call-seq:
94
+ # LZMA.raw_decode(encoded_data, ...) -> decoded_data
95
+ #
96
+ # 圧縮されたデータを伸張します。圧縮した際に用いたフィルタをそのままの順番・数で与える必要があります。
97
+ #
98
+ # [data] 圧縮された生の lzma1/lzma2 の String インスタンスを渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立てて処理を行います。
99
+ #
100
+ # [options] LZMA::Filter のインスタンスを与えます。
101
+ #
102
+ # [RETURN] 伸張されたデータ列となる String インスタンスです。
103
+ #
104
+ # [EXCEPTIONS] (NO DOCUMENT)
105
+ module_function
106
+ def raw_decode(data, *args)
107
+ s = Stream.raw_decoder(*args)
108
+ s.update(data, LZMA::FINISH)
109
+ ensure
110
+ s.finish rescue nil if s
111
+ end
112
+
113
+ class Stream
114
+ def self.encoder(*args)
115
+ Encoder.new(*args)
116
+ end
117
+
118
+ def self.decoder(*args)
119
+ Decoder.new(*args)
120
+ end
121
+
122
+ def self.auto_decoder(*args)
123
+ AutoDecoder.new(*args)
124
+ end
125
+
126
+ def self.raw_encoder(*args)
127
+ RawEncoder.new(*args)
128
+ end
129
+
130
+ def self.raw_decoder(*args)
131
+ RawDecoder.new(*args)
132
+ end
133
+ end
134
+
135
+ module Utils
136
+ # CRC32 を Digest のように生成できるようになります。
137
+ class CRC32 < Struct.new(:state, :init)
138
+ def initialize(state = 0)
139
+ state = state.to_i
140
+ super(state, state)
141
+ end
142
+
143
+ # call-seq:
144
+ # LZMA::Utils::CRC32#update(data) -> self
145
+ def update(data)
146
+ self.state = Utils.crc32(data, state)
147
+ self
148
+ end
149
+
150
+ alias << update
151
+
152
+ def finish
153
+ self
154
+ end
155
+
156
+ def reset
157
+ self.state = init
158
+ self
159
+ end
160
+
161
+ def digest
162
+ [state].pack("N")
163
+ end
164
+
165
+ def hexdigest
166
+ "%08x" % state
167
+ end
168
+
169
+ alias to_s hexdigest
170
+
171
+ def to_str
172
+ "CRC32 <#{hexdigest}>"
173
+ end
174
+
175
+ alias inspect to_str
176
+ end
177
+
178
+ # CRC64 を Digest のように生成できるようになります。
179
+ class CRC64 < Struct.new(:state, :init)
180
+ def initialize(state = 0)
181
+ state = state.to_i
182
+ super(state, state)
183
+ end
184
+
185
+ # call-seq:
186
+ # LZMA::Utils::CRC64#update(data) -> self
187
+ def update(data)
188
+ self.state = Utils.crc64(data, state)
189
+ self
190
+ end
191
+
192
+ alias << update
193
+
194
+ def finish
195
+ self
196
+ end
197
+
198
+ def reset
199
+ self.state = init
200
+ self
201
+ end
202
+
203
+ def digest
204
+ [state].pack("Q>")
205
+ end
206
+
207
+ def hexdigest
208
+ "%016x" % state
209
+ end
210
+
211
+ alias to_s hexdigest
212
+
213
+ def to_str
214
+ "CRC64 <#{hexdigest}>"
215
+ end
216
+
217
+ alias inspect to_str
218
+ end
219
+ end
220
+ end
221
+
222
+ LZMA = LibLZMA unless Object.const_defined?(:LZMA)
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ #vim: set fileencoding:utf-8
3
+
4
+ # このrubyスクリプトはliblzma for Rubyの利用手引きを兼ねたサンプルスクリプトです。
5
+
6
+
7
+ # rubyでliblzmaの機能を利用するのに必要なのは、次の一文のみです
8
+ require "liblzma"
9
+
10
+
11
+ # 圧縮するデータを用意します
12
+ original_data = "0123456789abcdefghijklmnopqrstuvwxyz\n" * 10
13
+
14
+
15
+ # liblzmaを使って、データを圧縮します (xzデータストリームそのものが出力されます)
16
+ encoded_data = LZMA.encode(original_data)
17
+
18
+
19
+ # 圧縮レベルを変える場合は、第二引数に0から9の整数値を与えます
20
+ # この例は xz -1 と等価です
21
+ # (『9』を与える場合、作業メモリ空間が700MBほど必要になります)
22
+ encoded_data = LZMA.encode(original_data, 1)
23
+
24
+
25
+ # さらに細かい調整は、圧縮レベル(プリセット値)の後にハッシュ値を指定します
26
+ # この例ではプリセット値を省略しています
27
+ # (プリセット値の規定値はliblzma由来であり、『6』です)
28
+ encoded_data = LZMA.encode(original_data, mode: LZMA::MODE_FAST)
29
+
30
+ # この他にどんな値が与えられるかは、LZMA::Filter::LZMA2.newを参考にしてください
31
+
32
+
33
+ # 必要であればファイルに書き出しましょう
34
+ # xzデータストリームそのものです
35
+ File.write("sample.txt.xz", encoded_data, mode: "wb")
36
+
37
+ # 出力されたファイルがxzユーティリティ(もしくは7-Zip)で開けることを確認してください
38
+
39
+
40
+
41
+ # 圧縮されたデータを伸張してみましょう
42
+ # たったこれだけです
43
+ puts LZMA.decode(encoded_data)
44
+
45
+
46
+
47
+ # 今回は処理したいデータをあらかじめ用意してから、一気に処理を行う方法を提示しました
48
+ # 現実には少しずつデータを処理していく必要がある事例も少なくありません
49
+ # (巨大な――数ギガバイトにも及ぶ――ファイルなどはオンメモリでは現実的に処理できませんね)
50
+ # データを少しずつ圧縮/伸張していく、ストリーム志向での処理は 02-* にて提示します
51
+
52
+
53
+ # 今回利用したクラス/モジュール/メソッド
54
+ # LZMA.encode
55
+ # LZMA.decode
56
+
57
+
58
+ # [EOF]
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ #vim: set fileencoding:utf-8
3
+
4
+ # この ruby スクリプトは liblzma for Ruby の利用手引きを兼ねたサンプルスクリプトです。
5
+
6
+
7
+ # 01-* ではデータの全てを用意してから処理を行う方法を提示しますた。
8
+ # このサンプルではオンメモリでは難しい大きなデータを処理する方法を提示します。
9
+
10
+
11
+ # 始めはお決まりで
12
+ require "liblzma"
13
+
14
+ # 今回のサンプルでファイルI/Oを再現するためにStringIOを利用します
15
+ require "stringio"
16
+
17
+ # 圧縮元となるデータを用意します
18
+ original_data = "abcdefghijklmnopqrstuvwxyz" * 50
19
+
20
+
21
+ # まずは圧縮してみましょう
22
+ source = StringIO.new(original_data)
23
+ dest = ""
24
+ encoder = LZMA::Stream.encoder(LZMA::Filter.lzma2) # (1)
25
+ while fragment = source.read(16) # (2)
26
+ dest << encoder.update(fragment) # -
27
+ end # -
28
+ dest << encoder.finish # (3)
29
+
30
+ # (1) はじめに圧縮器を構築します
31
+ # LZMA::Stream.encoderの引数は、1つ以上をとることが出来ます (上限はliblzma由来となる4つです)
32
+ # LZMA::Filter.lzma2の引数は、LZMA.encodeの二つ目以降の引数と同じです
33
+ # (LZMA::Filter.lzma2(1) とか LZMA::Filter.lzma2(mode: LZMA::MODE_FAST) とか)
34
+ # (2) 取り込んだ部分データを処理します
35
+ # (3) データの終わりを通知し、圧縮器内に残ったデータを取り出します
36
+ # これを忘れるとxzデータストリームとして間違ったものが生成されます
37
+
38
+
39
+
40
+ encoded_data = dest
41
+
42
+
43
+ # 伸張も圧縮とほとんど同じです
44
+ source = StringIO.new(encoded_data)
45
+ dest = ""
46
+ decoder = LZMA::Stream.decoder # (1)
47
+ while fragment = source.read(16) # (2)
48
+ dest << decoder.update(fragment) # -
49
+ end # -
50
+ dest << decoder.finish # (3)
51
+
52
+ puts(dest == original_data ? "data ok" : "bad data")
53
+
54
+ # 圧縮時と伸張時の違いがわかりますか?
55
+ # はじめ(1)の伸張器の構築部分 (encoderかdecoderか) を変更するだけで、後は同じような文で処理を行えます
56
+
57
+
58
+ # 上の例ではxzデータストリームのみの対応です
59
+ # lzmaデータストリームは対象となりません
60
+ # xzもlzmaも区別なく伸張したい場合は、decoder ではなく auto_decoder を使います
61
+ source = StringIO.new(encoded_data)
62
+ dest = ""
63
+ decoder = LZMA::Stream.auto_decoder # (1)
64
+ while fragment = source.read(16) # (2)
65
+ dest << decoder.update(fragment) # -
66
+ end # -
67
+ dest << decoder.finish # (3)
68
+
69
+ puts(dest == original_data ? "data ok" : "bad data")
70
+
71
+
72
+
73
+ # 今回利用したクラス/モジュール/メソッド
74
+ # LZMA::Stream.encoder LZMA::Stream::Encoder.new と等価
75
+ # LZMA::Stream.decoder LZMA::Stream::Decoder.new と等価
76
+ # LZMA::Stream.auto_decoder LZMA::Stream::AutoDecoder.new と等価
77
+ # LZMA::Filter.lzma2 LZMA::Filter::LZMA2.new と等価
78
+ # LZMA::Stream#update
79
+ # LZMA::Stream#finish
80
+
81
+
82
+ # [EOF]
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: liblzma
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.3'
5
+ prerelease:
6
+ platform: x86-mingw32
7
+ authors:
8
+ - dearblue
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email: dearblue@users.sourceforge.jp
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.txt
21
+ - ext/extconf.rb
22
+ - ext/liblzma.c
23
+ - lib/liblzma.rb
24
+ - lib/1.9.1/liblzma.so
25
+ - lib/2.0.0/liblzma.so
26
+ - samples/01-easy_using.rb
27
+ - samples/02-streaming.rb
28
+ homepage:
29
+ licenses:
30
+ - 2-clause BSD License
31
+ post_install_message:
32
+ rdoc_options:
33
+ - -eUTF-8
34
+ - -mREADME.txt
35
+ - README.txt
36
+ - ext/liblzma.c
37
+ - lib/liblzma.rb
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.9.3
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 1.8.25
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: ruby bindings for liblzma that is included in the xz utilities
58
+ test_files: []
59
+ has_rdoc: false