lz77 0.1.0

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 (4) hide show
  1. data/README.rdoc +14 -0
  2. data/lib/lz77.rb +1 -0
  3. data/lib/lz77/decoder.rb +44 -0
  4. metadata +47 -0
@@ -0,0 +1,14 @@
1
+ = lz77
2
+
3
+ A Rubygem that uncompress ASCII-8BIT encoded strings encoded with LZ77
4
+ algorythm.
5
+
6
+ == Installation
7
+
8
+ $ gem install lz77
9
+
10
+ == Usuage
11
+
12
+ To decode a compressed string:
13
+
14
+ LZ77.decode(encoded_string.encode('ASCII-8BIT'))
@@ -0,0 +1 @@
1
+ require 'lz77/decoder'
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module LZ77
4
+ # Decodes a string with LZ77 compression.
5
+ #
6
+ # Params:
7
+ # string: (String) encoded string
8
+ #
9
+ # Returns: (String) decoded string
10
+ def self.decode(string)
11
+ result = ''
12
+ i = 0
13
+
14
+ while i < string.size
15
+ b = string[i].ord
16
+
17
+ if b == 0x00 or (0x09 <= b and b <= 0x7f)
18
+ result << b.chr
19
+ elsif 0x01 <= b and b <= 0x08
20
+ b.times do |j|
21
+ bb = string[i + j + 1]
22
+ result << bb.chr
23
+ end
24
+
25
+ i += b
26
+ elsif 0x80 <= b and b <= 0xbf
27
+ b = (b << 8) + string[i + 1].ord
28
+ s = result[(-1 * ((b & 0x3ff8) >> 3)), ((b & 0x0007) + 3)]
29
+
30
+ s.each_byte do |bb|
31
+ result << bb.chr
32
+ end
33
+
34
+ i += 1
35
+ elsif 0xc0 <= b and b <= 0xff
36
+ result << ' ' + (b ^ 0x80).chr
37
+ end
38
+
39
+ i += 1
40
+ end
41
+
42
+ return result
43
+ end
44
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lz77
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - karaszandris
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-02 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: LZ-77 compressor/decompressor
15
+ email: karaszandris@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/lz77.rb
21
+ - lib/lz77/decoder.rb
22
+ - README.rdoc
23
+ homepage: http://rubygems.org/gem/lz77
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.23
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: LZ-77 coder
47
+ test_files: []