liblzma 0.3-x86-mingw32

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.
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