zopfli-ffi 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.ruby-version +1 -0
- data/.travis.yml +23 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +76 -0
- data/Rakefile +38 -0
- data/ext/zopfli_ffi/Rakefile +17 -0
- data/ext/zopfli_ffi/zopfli_ffi.c +116 -0
- data/ext/zopfli_ffi/zopfli_ffi.h +23 -0
- data/lib/zopfli-ffi.rb +1 -0
- data/lib/zopfli/c.rb +14 -0
- data/lib/zopfli/libc.rb +20 -0
- data/lib/zopfli/options.rb +28 -0
- data/lib/zopfli/version.rb +3 -0
- data/lib/zopfli/zopfii.rb +19 -0
- data/lib/zopfli_ffi.rb +15 -0
- data/spec/fixtures/test0.txt +1 -0
- data/spec/fixtures/test1.txt +64 -0
- data/spec/fixtures/test2.svg +49 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/travis_build.sh +5 -0
- data/spec/zopfli_ffi_spec.rb +85 -0
- data/zopfli-ffi.gemspec +28 -0
- metadata +145 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: da0f9bd399b19a7fd81b7fa554180f93f85b3ef9
|
4
|
+
data.tar.gz: f409afccb3951669199cf577270f5f430a83cf5f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 78a885851fd5f278603f90da1ca45d781aba88a05dac7d2ab7d4670d4edf79c93d882951334178ace0d6f71d2b13f5d3e44e44c919a5cebe16c1d04553652e99
|
7
|
+
data.tar.gz: 5a2662144ec366ebbd22e67cacbbf41f7a44369e31d7f0ec1fbd1766b5c7529c31425edc19110d7b1b7de49de508bdc9cc6dab0d2bf076c3e62e1156be61e789
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
ext/zopfli_ffi/x86_64-darwin/
|
19
|
+
ext/zopfli_ffi/x86_64-linux/
|
20
|
+
.vagrant
|
21
|
+
Vagrantfile
|
22
|
+
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.2
|
data/.travis.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
language: ruby
|
2
|
+
before_install:
|
3
|
+
- ./spec/travis_build.sh > /dev/null 2>&1
|
4
|
+
rvm:
|
5
|
+
- 1.9.2
|
6
|
+
- 1.9.3
|
7
|
+
- 2.0.0
|
8
|
+
- 2.1.3
|
9
|
+
- jruby-19mode
|
10
|
+
- rbx-19mode
|
11
|
+
- ruby-head
|
12
|
+
- jruby-head
|
13
|
+
notifications:
|
14
|
+
email: false
|
15
|
+
branches:
|
16
|
+
only:
|
17
|
+
- master
|
18
|
+
- development
|
19
|
+
matrix:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: rbx-19mode
|
22
|
+
- rvm: ruby-head
|
23
|
+
- rvm: jruby-head
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Alexey Vasiliev
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# Zopfli-ffi [![Build Status](https://travis-ci.org/le0pard/zopfli-ffi.svg?branch=master)](https://travis-ci.org/le0pard/zopfli-ffi)
|
2
|
+
|
3
|
+
Ruby wrapper for [Zopfli](https://code.google.com/p/zopfli/) library. Zopfli Compression Algorithm is a new zlib (gzip, deflate) compatible compressor. This compressor takes more time (~100x slower), but compresses around 5% better than zlib and better than any other zlib-compatible compressor.
|
4
|
+
|
5
|
+
### Requirements
|
6
|
+
|
7
|
+
First of all you should have install libraries: zopfli, zlib.
|
8
|
+
|
9
|
+
For Ubuntu, Debian:
|
10
|
+
|
11
|
+
sudo apt-get install git build-essential zlib1g-dev
|
12
|
+
|
13
|
+
Next you should install zopfli:
|
14
|
+
|
15
|
+
git clone https://github.com/Hello71/zopfli.git
|
16
|
+
cd zopfli
|
17
|
+
make && sudo make install
|
18
|
+
|
19
|
+
|
20
|
+
This gem is not support Windows and Mac OS systems (libzopfli isn't compiling on this systems).
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
Add this line to your application's Gemfile:
|
25
|
+
|
26
|
+
gem 'zopfli-ffi'
|
27
|
+
|
28
|
+
And then execute:
|
29
|
+
|
30
|
+
$ bundle
|
31
|
+
|
32
|
+
Or install it yourself as:
|
33
|
+
|
34
|
+
$ gem install zopfli-ffi
|
35
|
+
|
36
|
+
## Usage
|
37
|
+
|
38
|
+
Very simple usage example:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
require 'zlib'
|
42
|
+
require 'zopfli_ffi'
|
43
|
+
|
44
|
+
uncompressed_file = 'spec/fixtures/test.txt'
|
45
|
+
compressed_file = 'spec/fixtures/test.txt.gz'
|
46
|
+
|
47
|
+
Zopfli.compress(uncompressed_file, compressed_file)
|
48
|
+
|
49
|
+
uncompressed_data = File.read(uncompressed_file)
|
50
|
+
uncompressed_zopfli_data = Zlib::Inflate.inflate File.read(compressed_file)
|
51
|
+
uncompressed_zopfli_data == uncompressed_data # true
|
52
|
+
```
|
53
|
+
|
54
|
+
You can define format of compression (`:zlib` is default):
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib) # default format
|
58
|
+
Zopfli.compress(uncompressed_file, compressed_file, :deflate)
|
59
|
+
Zopfli.compress(uncompressed_file, compressed_file, :gzip)
|
60
|
+
```
|
61
|
+
|
62
|
+
Also you can define number of iterations for compression (greater number - better compression, but slower compression time; default = 15):
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib, 15) # default format
|
66
|
+
Zopfli.compress(uncompressed_file, compressed_file, :deflate, 5)
|
67
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib, 25)
|
68
|
+
```
|
69
|
+
|
70
|
+
## Contributing
|
71
|
+
|
72
|
+
1. Fork it ( http://github.com/le0pard/zopfli-ffi/fork )
|
73
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
74
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
75
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
76
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/clean'
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
require 'ffi-compiler/compile_task'
|
8
|
+
|
9
|
+
desc "compiler tasks"
|
10
|
+
namespace "ffi-compiler" do
|
11
|
+
FFI::Compiler::CompileTask.new('ext/zopfli_ffi/zopfli_ffi') do |c|
|
12
|
+
c.have_header?('stdio.h', '/usr/local/include')
|
13
|
+
c.have_func?('puts')
|
14
|
+
c.have_library?('z')
|
15
|
+
# zopfli
|
16
|
+
c.have_header?('zopfli.h', '/usr/local/include')
|
17
|
+
c.have_func?('ZopfliInitOptions')
|
18
|
+
c.have_func?('ZopfliCompress')
|
19
|
+
c.have_library?('zopfli')
|
20
|
+
# compiler flags
|
21
|
+
if c.platform.mac?
|
22
|
+
c.cflags << "-arch x86_64"
|
23
|
+
c.ldflags << "-arch x86_64"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
task :compile => ["ffi-compiler:default"]
|
28
|
+
|
29
|
+
desc "run specs"
|
30
|
+
task :spec do
|
31
|
+
RSpec::Core::RakeTask.new
|
32
|
+
end
|
33
|
+
|
34
|
+
task :default => [:clean, :compile, :spec]
|
35
|
+
|
36
|
+
CLEAN.include('ext/**/*{.o,.log,.so,.bundle}')
|
37
|
+
CLEAN.include('lib/**/*{.o,.log,.so,.bundle}')
|
38
|
+
CLEAN.include('ext/**/Makefile')
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'ffi-compiler/compile_task'
|
2
|
+
|
3
|
+
FFI::Compiler::CompileTask.new('zopfli_ffi') do |c|
|
4
|
+
c.have_header?('stdio.h', '/usr/local/include')
|
5
|
+
c.have_func?('puts')
|
6
|
+
c.have_library?('z')
|
7
|
+
# zopfli
|
8
|
+
c.have_header?('zopfli.h', '/usr/local/include')
|
9
|
+
c.have_func?('ZopfliInitOptions')
|
10
|
+
c.have_func?('ZopfliCompress')
|
11
|
+
c.have_library?('zopfli')
|
12
|
+
# compiler flags
|
13
|
+
if c.platform.mac?
|
14
|
+
c.cflags << "-arch x86_64"
|
15
|
+
c.ldflags << "-arch x86_64"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
#include "./zopfli_ffi.h"
|
2
|
+
|
3
|
+
#define DEFAULT_FORMAT ZOPFLI_FORMAT_ZLIB
|
4
|
+
|
5
|
+
#if defined(__cplusplus) || defined(c_plusplus)
|
6
|
+
extern "C" {
|
7
|
+
#endif
|
8
|
+
|
9
|
+
/*
|
10
|
+
Loads a file into a memory array.
|
11
|
+
*/
|
12
|
+
static void LoadFile(const char* filename,
|
13
|
+
unsigned char** out, size_t* outsize) {
|
14
|
+
FILE* file;
|
15
|
+
|
16
|
+
*out = 0;
|
17
|
+
*outsize = 0;
|
18
|
+
file = fopen(filename, "rb");
|
19
|
+
if (!file) return;
|
20
|
+
|
21
|
+
fseek(file , 0 , SEEK_END);
|
22
|
+
*outsize = ftell(file);
|
23
|
+
rewind(file);
|
24
|
+
|
25
|
+
*out = (unsigned char*)malloc(*outsize);
|
26
|
+
|
27
|
+
if (*outsize && (*out)) {
|
28
|
+
size_t testsize = fread(*out, 1, *outsize, file);
|
29
|
+
if (testsize != *outsize) {
|
30
|
+
/* It could be a directory */
|
31
|
+
free(*out);
|
32
|
+
*out = 0;
|
33
|
+
*outsize = 0;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
assert(!(*outsize) || out); /* If size is not zero, out must be allocated. */
|
38
|
+
fclose(file);
|
39
|
+
}
|
40
|
+
|
41
|
+
/*
|
42
|
+
Saves a file from a memory array, overwriting the file if it existed.
|
43
|
+
*/
|
44
|
+
static void SaveFile(const char* filename,
|
45
|
+
const unsigned char* in, size_t insize) {
|
46
|
+
FILE* file = fopen(filename, "wb" );
|
47
|
+
assert(file);
|
48
|
+
fwrite((char*)in, 1, insize, file);
|
49
|
+
fclose(file);
|
50
|
+
}
|
51
|
+
|
52
|
+
/*
|
53
|
+
outfilename: filename to write output to, or 0 to write to stdout instead
|
54
|
+
*/
|
55
|
+
static void CompressFile(const ZopfliOptions* options,
|
56
|
+
ZopfliFormat output_type,
|
57
|
+
const char* infilename,
|
58
|
+
const char* outfilename) {
|
59
|
+
unsigned char* in;
|
60
|
+
size_t insize;
|
61
|
+
unsigned char* out = 0;
|
62
|
+
size_t outsize = 0;
|
63
|
+
LoadFile(infilename, &in, &insize);
|
64
|
+
if (insize == 0) {
|
65
|
+
fprintf(stderr, "Invalid filename: %s\n", infilename);
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
|
69
|
+
ZopfliCompress(options, output_type, in, insize, &out, &outsize);
|
70
|
+
|
71
|
+
if (outfilename) {
|
72
|
+
SaveFile(outfilename, out, outsize);
|
73
|
+
} else {
|
74
|
+
size_t i;
|
75
|
+
for (i = 0; i < outsize; i++) {
|
76
|
+
/* Works only if terminal does not convert newlines. */
|
77
|
+
printf("%c", out[i]);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
free(out);
|
82
|
+
free(in);
|
83
|
+
}
|
84
|
+
|
85
|
+
int zopfli_convert(const char *in_file, const char *out_file, const ZopfliConfig *zopfli_config) {
|
86
|
+
ZopfliOptions options;
|
87
|
+
ZopfliFormat output_type = ZOPFLI_FORMAT_GZIP;
|
88
|
+
|
89
|
+
ZopfliInitOptions(&options);
|
90
|
+
|
91
|
+
if (zopfli_config->type == 1) {
|
92
|
+
output_type = ZOPFLI_FORMAT_DEFLATE;
|
93
|
+
} else if (zopfli_config->type == 2) {
|
94
|
+
output_type = ZOPFLI_FORMAT_GZIP;
|
95
|
+
} else {
|
96
|
+
output_type = DEFAULT_FORMAT;
|
97
|
+
}
|
98
|
+
|
99
|
+
if (zopfli_config->numiterations > 0) {
|
100
|
+
options.numiterations = zopfli_config->numiterations;
|
101
|
+
}
|
102
|
+
|
103
|
+
CompressFile(&options, output_type, in_file, out_file);
|
104
|
+
|
105
|
+
return 0;
|
106
|
+
}
|
107
|
+
|
108
|
+
// test
|
109
|
+
int test_c(int n) {
|
110
|
+
return n + 100;
|
111
|
+
}
|
112
|
+
|
113
|
+
|
114
|
+
#if defined(__cplusplus) || defined(c_plusplus)
|
115
|
+
} // extern "C"
|
116
|
+
#endif
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#include <assert.h>
|
2
|
+
#include <stdio.h>
|
3
|
+
#include <stdlib.h>
|
4
|
+
#include <string.h>
|
5
|
+
|
6
|
+
#include "zopfli/zopfli.h"
|
7
|
+
|
8
|
+
#if defined(__cplusplus) || defined(c_plusplus)
|
9
|
+
extern "C" {
|
10
|
+
#endif
|
11
|
+
|
12
|
+
typedef struct {
|
13
|
+
int type; // type
|
14
|
+
int numiterations; // number of iterations
|
15
|
+
} ZopfliConfig;
|
16
|
+
|
17
|
+
|
18
|
+
int zopfli_convert(const char *in_file, const char *out_file, const ZopfliConfig *zopfli_config);
|
19
|
+
int test_c(int n);
|
20
|
+
|
21
|
+
#if defined(__cplusplus) || defined(c_plusplus)
|
22
|
+
} // extern "C"
|
23
|
+
#endif
|
data/lib/zopfli-ffi.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "zopfli_ffi"
|
data/lib/zopfli/c.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Zopfli
|
2
|
+
module C
|
3
|
+
# struct
|
4
|
+
class ZopfliConfig < FFI::Struct
|
5
|
+
layout :type, :int,
|
6
|
+
:numiterations, :int
|
7
|
+
end
|
8
|
+
|
9
|
+
attach_function :zopfli_convert, [:string, :string, :pointer], :int
|
10
|
+
|
11
|
+
attach_function :test_c, [:int], :int
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/lib/zopfli/libc.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Zopfli
|
2
|
+
module LibC
|
3
|
+
extend FFI::Library
|
4
|
+
# figures out the correct libc for each platform including Windows
|
5
|
+
library = ffi_lib(FFI::Library::LIBC).first
|
6
|
+
|
7
|
+
# Size_t not working properly on Windows
|
8
|
+
find_type(:size_t) rescue typedef(:ulong, :size_t)
|
9
|
+
|
10
|
+
# memory allocators
|
11
|
+
attach_function :malloc, [:size_t], :pointer
|
12
|
+
attach_function :free, [:pointer], :void
|
13
|
+
|
14
|
+
# get a pointer to the free function
|
15
|
+
Free = library.find_symbol('free')
|
16
|
+
|
17
|
+
# memory movers
|
18
|
+
attach_function :memcpy, [:pointer, :pointer, :size_t], :pointer
|
19
|
+
end # module LibC
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "zopfli/c"
|
2
|
+
|
3
|
+
module Zopfli
|
4
|
+
class Options
|
5
|
+
|
6
|
+
attr_reader :type, :iterations
|
7
|
+
|
8
|
+
def initialize(type, iterations)
|
9
|
+
@type, @iterations = type, iterations
|
10
|
+
end
|
11
|
+
|
12
|
+
def compress_pointer
|
13
|
+
options_pointer = FFI::MemoryPointer.new :char, C::ZopfliConfig.size, false
|
14
|
+
options_struct = C::ZopfliConfig.new options_pointer
|
15
|
+
# set format
|
16
|
+
options_struct[:type] = case type
|
17
|
+
when :deflate then 1
|
18
|
+
when :gzip then 2
|
19
|
+
else 0
|
20
|
+
end
|
21
|
+
# set numiterations
|
22
|
+
options_struct[:numiterations] = iterations.to_i if iterations.to_i > 0
|
23
|
+
|
24
|
+
options_pointer
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "zopfli/options"
|
2
|
+
require "zopfli/c"
|
3
|
+
|
4
|
+
module Zopfli
|
5
|
+
class << self
|
6
|
+
|
7
|
+
# encode
|
8
|
+
def compress(input_file, output_file, type = :zlib, iterations = 15)
|
9
|
+
C.zopfli_convert(input_file, output_file, get_options_object(type, iterations))
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def get_options_object(type, iterations)
|
15
|
+
Options.new(type, iterations).compress_pointer
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/zopfli_ffi.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'ffi-compiler/loader'
|
3
|
+
|
4
|
+
module Zopfli
|
5
|
+
module C
|
6
|
+
extend FFI::Library
|
7
|
+
ffi_lib FFI::Compiler::Loader.find('zopfli_ffi')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require "zopfli/options"
|
12
|
+
require "zopfli/c"
|
13
|
+
require "zopfli/libc" # not used right now
|
14
|
+
require "zopfli/zopfii"
|
15
|
+
require "zopfli/version"
|
@@ -0,0 +1 @@
|
|
1
|
+
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
|
@@ -0,0 +1,64 @@
|
|
1
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
2
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
3
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
4
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
5
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
6
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
7
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
8
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
9
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
10
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
11
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
12
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
13
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
14
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
15
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
16
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
17
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
18
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
19
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
20
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
21
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
22
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
23
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
24
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
25
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
26
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
27
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
28
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
29
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
30
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
31
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
32
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
33
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
34
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
35
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
36
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
37
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
38
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
39
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
40
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
41
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
42
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
43
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
44
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
45
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
46
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
47
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
48
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
49
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
50
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
51
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
52
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
53
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
54
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
55
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
56
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
57
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
58
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
59
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
60
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
61
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
62
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
63
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
64
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg width="469pt" height="428pt" viewBox="0 0 469 428" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<path fill="#fcfcfc" d=" M 0.00 0.00 L 469.00 0.00 L 469.00 428.00 L 0.00 428.00 L 0.00 0.00 Z" />
|
5
|
+
<path fill="#0d0d0d" d=" M 170.86 51.27 C 224.03 44.99 277.69 47.20 331.01 49.97 C 338.06 49.76 345.09 48.42 352.14 49.19 C 358.18 49.90 363.59 53.03 368.43 56.54 C 378.18 63.74 386.36 72.88 393.31 82.76 C 401.53 94.62 403.32 109.66 411.61 121.50 C 422.55 136.73 440.00 145.87 450.40 161.56 C 457.42 171.74 458.61 184.79 457.28 196.77 C 456.13 207.53 450.49 217.27 443.21 225.08 C 433.49 235.40 422.33 244.68 415.07 257.04 C 410.29 265.17 408.45 274.63 403.76 282.79 C 392.60 299.48 376.31 311.95 359.30 322.24 C 334.70 337.02 307.93 347.59 282.24 360.23 C 270.17 366.07 258.58 372.89 246.22 378.12 C 234.81 383.08 222.32 384.37 210.19 386.57 C 199.64 388.18 189.34 391.04 178.93 393.34 C 153.40 398.87 127.11 403.17 100.94 400.39 C 83.06 398.47 64.88 392.02 52.32 378.68 C 47.44 373.18 42.89 367.07 40.34 360.13 C 38.86 339.05 41.73 318.02 44.48 297.17 C 47.08 277.10 48.65 256.50 44.31 236.55 C 40.10 220.75 30.12 207.31 25.10 191.81 C 21.17 180.08 20.29 166.86 24.91 155.20 C 32.39 141.46 47.26 133.46 54.11 119.27 C 58.01 111.72 58.78 103.07 58.51 94.71 C 70.75 82.47 86.07 73.73 102.09 67.43 C 124.10 58.77 147.47 54.18 170.86 51.27 Z" />
|
6
|
+
<path fill="#fcfcfc" d=" M 147.64 65.69 C 200.71 57.99 254.48 54.68 308.08 56.61 C 320.72 57.43 333.44 56.63 346.04 58.18 C 356.70 59.61 366.32 65.69 373.23 73.78 C 389.62 92.84 394.69 118.97 411.43 137.79 C 404.24 138.55 397.06 136.51 389.90 137.48 C 387.75 137.67 385.85 138.76 384.13 139.98 C 395.02 138.61 406.41 139.01 416.61 143.45 C 430.56 149.17 441.97 161.20 446.21 175.75 C 449.48 187.09 447.71 199.63 441.86 209.83 C 435.00 221.85 423.78 230.97 411.32 236.71 C 411.90 236.98 412.49 237.24 413.08 237.51 C 415.34 236.66 417.35 235.32 419.36 234.01 C 419.64 234.59 420.20 235.76 420.48 236.34 C 417.27 238.44 413.76 240.27 411.39 243.39 C 405.79 250.22 404.04 259.10 400.87 267.13 C 397.49 276.45 391.01 284.20 384.13 291.16 C 367.55 307.20 347.13 318.41 326.71 328.76 C 312.11 335.90 297.27 342.54 282.60 349.54 C 269.75 355.53 257.77 363.18 244.88 369.08 C 242.02 370.26 239.17 371.68 236.06 372.00 C 231.66 372.04 227.31 370.77 222.90 371.28 C 215.18 372.10 208.00 375.24 200.73 377.74 C 185.67 383.44 169.74 386.26 153.87 388.56 C 136.01 390.93 117.85 392.00 99.93 389.70 C 85.29 387.72 69.98 383.49 59.22 372.77 C 53.49 366.66 48.73 358.59 49.50 349.92 C 49.31 315.09 58.63 280.74 55.77 245.85 C 54.57 235.19 52.84 224.17 47.19 214.85 C 42.74 207.01 36.38 200.02 34.23 191.07 C 32.16 180.43 31.99 168.87 36.85 158.93 C 42.95 146.03 56.88 138.98 62.65 125.86 C 65.77 119.05 66.03 111.42 65.59 104.08 C 80.71 86.42 101.85 73.54 124.81 69.30 C 140.48 66.26 156.34 69.57 172.06 70.34 C 203.65 72.39 234.44 61.54 266.02 63.06 C 280.55 64.02 294.74 68.21 307.88 74.41 C 322.38 81.22 335.46 90.57 348.98 99.07 C 353.31 101.65 357.56 104.47 362.28 106.32 C 348.08 95.11 333.49 84.15 317.54 75.51 C 300.79 66.52 282.07 60.99 263.02 60.41 C 231.45 59.41 200.55 68.56 168.98 68.00 C 161.83 67.77 154.61 67.37 147.64 65.69 Z" />
|
7
|
+
<path fill="#0d0d0d" d=" M 225.14 75.63 C 250.38 72.12 276.66 73.50 300.79 82.15 C 315.53 87.41 329.31 95.50 340.79 106.17 C 344.51 109.85 348.45 113.43 351.25 117.90 C 331.49 100.15 307.96 85.94 281.83 80.11 C 265.99 76.41 249.55 75.73 233.37 77.20 C 220.75 78.55 208.77 83.55 196.02 84.03 C 172.62 85.58 149.21 83.01 126.00 80.17 C 123.72 79.95 121.45 79.51 119.16 79.60 C 115.14 81.62 112.08 85.31 107.53 86.31 C 110.55 81.24 115.97 77.92 121.79 77.23 C 133.39 75.87 144.64 79.78 156.06 81.02 C 179.23 83.08 202.29 79.03 225.14 75.63 Z" />
|
8
|
+
<path fill="#0d0d0d" d=" M 242.06 88.97 C 265.39 86.53 289.77 88.24 311.49 97.63 C 321.56 102.21 331.96 109.47 334.83 120.79 C 327.56 107.86 313.72 100.42 299.95 96.31 C 278.91 90.13 256.64 89.26 234.88 90.34 C 237.19 89.54 239.62 89.15 242.06 88.97 Z" />
|
9
|
+
<path fill="#0d0d0d" d=" M 120.90 97.12 C 136.54 92.02 153.56 91.79 169.58 95.23 C 172.52 95.87 175.79 95.89 178.34 97.67 C 180.05 98.59 178.50 100.44 178.15 101.67 C 163.87 96.00 148.08 94.05 132.89 96.45 C 123.72 98.10 114.32 101.94 108.53 109.56 C 106.02 112.73 104.82 116.61 103.25 120.27 C 103.55 114.59 105.66 109.25 108.20 104.24 C 111.54 100.61 116.34 98.75 120.90 97.12 Z" />
|
10
|
+
<path fill="#0d0d0d" d=" M 240.30 94.12 C 241.87 92.59 243.65 93.93 245.23 94.64 C 240.02 97.58 236.12 102.49 234.11 108.11 C 233.82 111.46 234.33 114.91 233.28 118.18 C 230.95 113.99 231.37 108.98 231.77 104.39 C 235.08 101.35 236.86 97.01 240.30 94.12 Z" />
|
11
|
+
<path fill="#0d0d0d" d=" M 166.76 106.97 C 168.02 106.61 169.28 106.28 170.56 105.96 C 171.88 108.69 173.43 111.32 175.54 113.53 C 175.45 120.14 175.63 126.75 175.45 133.36 C 170.15 128.60 175.16 121.06 173.29 115.17 C 171.26 112.31 168.31 110.18 166.76 106.97 Z" />
|
12
|
+
<path fill="#0d0d0d" d=" M 265.15 119.16 C 281.54 116.19 299.15 116.52 314.61 123.31 C 324.47 127.57 332.97 135.99 335.20 146.76 C 332.56 148.84 329.53 150.70 326.07 150.78 C 318.15 151.14 310.82 147.30 302.99 146.77 C 281.29 145.02 259.85 151.85 241.01 162.19 C 236.21 157.30 228.09 155.57 225.71 148.55 C 223.88 144.16 227.25 140.17 229.79 136.91 C 238.77 126.72 252.17 121.85 265.15 119.16 Z" />
|
13
|
+
<path fill="#fcfcfc" d=" M 245.56 136.61 C 253.71 131.61 263.10 129.29 272.12 126.40 C 270.98 131.24 274.10 135.34 274.78 139.95 C 268.58 139.24 262.41 140.92 257.11 144.10 C 251.40 147.34 245.00 151.90 238.13 149.18 C 237.46 143.74 241.16 139.22 245.56 136.61 Z" />
|
14
|
+
<path fill="#0d0d0d" d=" M 122.13 129.36 C 134.39 126.33 147.38 128.43 159.14 132.53 C 167.07 135.56 175.35 139.49 180.09 146.88 C 185.05 145.44 190.66 143.28 195.54 146.20 C 195.44 148.15 195.51 150.46 193.88 151.84 C 189.99 155.70 183.49 155.18 180.00 159.65 C 179.99 166.65 180.03 173.65 179.97 180.65 C 173.91 187.39 162.47 188.71 159.60 198.26 C 164.45 206.66 170.44 215.70 180.12 218.90 C 184.02 219.20 186.53 215.61 189.83 214.16 C 191.03 214.87 192.23 215.60 193.42 216.34 C 191.53 221.01 189.21 226.04 184.65 228.64 C 181.66 230.28 178.13 229.21 175.42 227.54 C 165.97 221.62 160.48 211.24 151.13 205.20 C 149.25 207.25 147.14 210.05 144.03 209.76 C 142.46 207.70 141.84 205.12 140.71 202.82 C 131.93 205.00 124.77 213.72 115.13 212.14 C 136.39 203.64 153.04 187.54 171.00 173.89 C 171.00 168.52 171.00 163.14 171.00 157.76 C 162.57 152.72 152.55 151.73 142.97 150.79 C 130.52 149.53 117.59 149.50 105.89 144.51 C 107.60 136.67 114.57 131.13 122.13 129.36 Z" />
|
15
|
+
<path fill="#fcfcfc" d=" M 310.00 135.26 C 314.14 134.54 318.75 135.08 321.91 138.09 C 323.31 139.07 323.09 140.87 323.09 142.35 C 320.10 139.75 316.21 139.85 312.52 139.33 C 310.46 139.13 310.42 136.79 310.00 135.26 Z" />
|
16
|
+
<path fill="#fcfcfc" d=" M 121.16 137.96 C 126.13 138.24 131.05 137.27 136.02 137.25 C 138.41 137.17 140.63 138.21 142.33 139.85 C 138.18 139.73 134.05 140.03 129.92 140.42 C 126.84 140.66 123.30 140.54 121.16 137.96 Z" />
|
17
|
+
<path fill="#0d0d0d" d=" M 339.80 137.77 C 346.86 136.92 353.18 141.82 360.30 140.27 C 359.12 147.32 348.95 148.90 344.09 144.62 C 347.33 144.12 351.67 145.60 353.71 142.27 C 348.83 141.89 343.52 141.36 339.80 137.77 Z" />
|
18
|
+
<path fill="#0d0d0d" d=" M 68.88 142.71 C 75.94 143.84 82.98 142.27 89.94 141.19 C 94.05 140.45 98.55 141.39 101.47 144.52 C 88.91 142.87 75.80 143.08 63.87 147.77 C 53.89 151.47 44.81 158.95 41.09 169.14 C 37.69 178.12 38.70 188.14 41.61 197.11 C 42.29 198.99 42.76 201.20 44.50 202.42 C 50.48 206.94 58.67 206.97 64.63 211.46 C 66.43 212.65 65.95 214.83 65.88 216.67 C 63.15 214.91 60.58 212.85 57.54 211.65 C 51.80 209.15 45.18 207.95 40.60 203.37 C 36.19 193.66 34.82 182.37 37.36 171.95 C 40.57 158.43 51.25 147.31 64.14 142.49 C 65.68 141.92 67.31 142.63 68.88 142.71 Z" />
|
19
|
+
<path fill="#0d0d0d" d=" M 378.49 143.71 C 383.81 142.00 389.50 142.60 395.01 142.46 C 405.32 142.38 416.31 144.77 424.09 151.95 C 431.10 158.60 433.82 168.46 434.38 177.84 C 434.88 183.19 434.14 188.53 433.99 193.87 C 433.41 193.22 432.83 192.57 432.25 191.93 C 433.08 183.62 432.86 175.22 432.01 166.93 C 428.62 158.67 422.38 151.13 413.88 147.86 C 402.62 143.35 390.27 145.02 378.49 143.71 Z" />
|
20
|
+
<path fill="#0d0d0d" d=" M 339.22 149.20 C 342.29 147.59 345.67 149.99 347.09 152.73 C 344.03 152.84 341.33 151.28 339.22 149.20 Z" />
|
21
|
+
<path fill="#0d0d0d" d=" M 366.89 151.77 C 379.84 149.15 394.06 151.30 404.95 159.05 C 414.83 165.93 421.71 177.61 421.07 189.85 C 420.88 200.29 414.96 209.79 407.14 216.38 C 404.05 209.61 408.14 202.90 410.40 196.63 C 413.31 189.50 411.70 181.37 408.23 174.75 C 404.81 168.06 398.27 163.31 391.09 161.36 C 384.70 159.38 377.93 159.64 371.34 160.04 C 364.64 166.53 355.69 169.98 346.83 172.37 C 335.20 175.30 322.98 176.20 311.11 174.40 C 303.12 173.02 294.67 170.15 289.56 163.48 C 286.79 160.03 285.90 155.55 285.74 151.23 C 296.11 152.75 302.15 162.80 311.88 165.87 C 320.73 168.67 330.54 167.71 339.08 164.26 C 348.51 160.46 356.74 153.75 366.89 151.77 Z" />
|
22
|
+
<path fill="#0d0d0d" d=" M 51.79 162.63 C 56.90 158.24 63.38 156.02 69.63 153.80 C 66.42 160.59 56.51 159.68 53.86 166.93 C 51.73 173.44 54.33 180.58 51.97 187.12 C 51.37 186.25 50.78 185.39 50.17 184.53 C 50.28 177.20 51.43 169.94 51.79 162.63 Z" />
|
23
|
+
<path fill="#0d0d0d" d=" M 69.42 164.39 C 77.74 160.41 87.37 162.10 95.87 164.61 C 103.63 167.05 111.21 170.60 117.22 176.19 C 120.62 174.35 123.49 171.58 127.10 170.11 C 129.21 169.47 131.17 170.43 132.87 171.58 C 132.65 175.75 131.14 180.24 127.13 182.19 C 119.14 186.04 109.98 184.42 101.42 184.82 C 101.12 179.71 98.59 174.07 93.21 172.71 C 82.25 169.97 71.60 175.40 60.75 176.14 C 61.92 171.27 64.69 166.52 69.42 164.39 Z" />
|
24
|
+
<path fill="#0d0d0d" d=" M 372.40 168.41 C 373.68 166.68 375.98 166.84 377.88 166.57 C 378.08 171.34 378.68 176.40 381.67 180.32 C 387.77 188.69 399.30 190.53 405.44 198.87 C 400.46 203.44 393.74 199.88 387.98 199.52 C 384.90 198.97 384.03 202.68 382.76 204.72 C 380.82 207.89 380.63 211.70 382.07 215.10 C 383.31 217.20 380.45 218.10 379.46 219.45 C 368.84 230.19 361.70 243.69 352.77 255.75 C 345.75 265.53 337.59 274.57 328.04 281.93 C 311.68 294.56 293.50 304.90 274.14 312.16 C 255.91 319.10 236.33 321.13 217.02 322.68 C 194.75 324.18 172.38 324.29 150.11 322.70 C 134.57 321.42 118.92 319.65 103.99 314.98 C 97.92 312.97 91.58 310.60 87.26 305.66 C 80.84 298.45 77.38 289.19 74.91 280.00 C 69.96 260.14 69.32 239.29 72.13 219.07 C 73.43 209.51 78.12 200.96 82.61 192.59 C 84.78 189.10 83.63 184.78 84.97 181.07 C 85.76 178.92 88.41 180.13 90.08 179.97 C 94.08 188.50 91.68 198.31 94.59 207.08 C 110.16 222.58 131.99 230.12 153.43 232.83 C 184.43 236.47 215.72 231.68 245.84 224.37 C 289.09 213.54 330.68 196.97 371.00 178.12 C 371.09 174.88 370.44 171.24 372.40 168.41 Z" />
|
25
|
+
<path fill="#0d0d0d" d=" M 229.57 191.94 C 229.86 186.30 236.00 183.89 240.90 184.51 C 247.08 185.23 253.81 186.85 258.30 191.45 C 259.74 195.03 259.24 199.12 259.16 202.91 C 258.57 208.43 256.71 215.07 251.13 217.45 C 248.49 218.74 245.65 217.42 243.06 216.68 C 243.06 214.95 242.69 213.11 243.50 211.50 C 245.02 208.21 249.13 206.94 250.30 203.43 C 251.22 200.98 250.38 198.41 249.93 195.97 C 243.37 193.44 235.98 194.96 229.57 191.94 Z" />
|
26
|
+
<path fill="#0d0d0d" d=" M 261.55 191.61 C 260.82 189.50 260.20 186.36 262.85 185.39 C 263.55 185.59 264.93 185.97 265.62 186.17 C 264.69 186.87 263.76 187.56 262.83 188.25 C 263.01 190.79 264.89 192.89 267.37 193.42 C 276.45 195.67 285.90 192.67 295.02 194.33 C 297.02 194.51 297.66 196.34 297.34 198.13 C 288.93 193.45 279.11 197.18 270.09 196.32 C 266.83 196.11 262.71 195.11 261.55 191.61 Z" />
|
27
|
+
<path fill="#0d0d0d" d=" M 50.38 187.14 C 50.87 187.45 51.87 188.08 52.37 188.40 C 55.02 193.81 60.82 196.38 64.76 200.67 C 61.28 200.25 57.55 199.61 54.90 197.11 C 52.01 194.62 51.03 190.73 50.38 187.14 Z" />
|
28
|
+
<path fill="#fcfcfc" d=" M 333.04 207.61 C 347.72 202.73 359.48 190.07 375.55 189.40 C 375.80 198.10 371.76 206.58 365.20 212.21 C 356.06 220.20 343.99 223.74 332.18 225.38 C 335.07 219.77 332.13 213.53 333.04 207.61 Z" />
|
29
|
+
<path fill="#0d0d0d" d=" M 432.04 192.99 C 432.60 193.74 433.16 194.50 433.72 195.25 C 432.66 202.37 431.37 209.46 429.60 216.44 C 423.54 220.04 417.89 224.79 410.85 226.30 C 409.05 226.86 407.26 226.21 405.54 225.71 C 412.30 224.61 419.18 221.99 423.65 216.57 C 429.09 210.00 431.45 201.37 432.04 192.99 Z" />
|
30
|
+
<path fill="#0d0d0d" d=" M 212.82 201.73 C 221.25 199.44 230.25 200.44 238.49 203.03 C 238.77 206.79 238.48 210.66 236.46 213.94 C 227.39 205.80 214.87 214.66 204.72 209.86 C 205.24 205.65 208.90 202.71 212.82 201.73 Z" />
|
31
|
+
<path fill="#fcfcfc" d=" M 83.28 219.04 C 84.41 216.49 85.82 214.06 87.75 212.04 C 87.28 215.07 86.41 218.08 84.49 220.54 C 84.19 220.16 83.58 219.41 83.28 219.04 Z" />
|
32
|
+
<path fill="#fcfcfc" d=" M 267.98 227.88 C 286.73 223.07 304.96 216.35 323.90 212.22 C 323.78 220.37 319.85 228.47 312.82 232.82 C 300.48 240.65 285.31 241.48 272.24 247.68 C 270.59 241.13 269.75 234.40 267.98 227.88 Z" />
|
33
|
+
<path fill="#fcfcfc" d=" M 88.68 241.81 C 88.80 234.25 92.70 227.35 96.87 221.27 C 99.40 230.84 96.98 240.86 94.45 250.17 C 91.16 248.69 88.46 245.62 88.68 241.81 Z" />
|
34
|
+
<path fill="#fcfcfc" d=" M 342.03 235.17 C 347.38 232.12 353.41 230.33 359.54 229.89 C 349.19 238.33 346.71 254.59 333.01 259.16 C 331.44 255.69 330.12 251.87 331.00 248.02 C 332.26 242.21 337.06 237.98 342.03 235.17 Z" />
|
35
|
+
<path fill="#fcfcfc" d=" M 108.12 254.40 C 107.13 246.58 102.72 236.37 109.87 230.22 C 113.63 234.01 118.67 235.89 123.75 237.13 C 124.31 241.97 120.80 245.77 119.40 250.12 C 118.59 252.56 119.81 254.96 120.76 257.15 C 116.68 255.71 112.61 253.37 108.12 254.40 Z" />
|
36
|
+
<path fill="#fcfcfc" d=" M 217.92 240.46 C 231.40 237.43 244.90 234.45 258.58 232.40 C 260.52 238.95 261.18 245.79 263.01 252.36 C 252.51 253.49 242.56 257.33 232.13 258.81 C 226.06 259.73 219.89 259.64 213.79 259.16 C 213.85 253.34 213.68 247.53 213.84 241.72 C 214.98 240.85 216.58 240.88 217.92 240.46 Z" />
|
37
|
+
<path fill="#fcfcfc" d=" M 128.97 254.96 C 133.34 250.73 130.75 243.76 134.59 239.24 C 144.12 244.53 155.56 241.43 165.57 245.11 C 162.06 249.07 164.87 254.51 164.31 259.20 C 152.46 259.17 140.14 259.54 128.97 254.96 Z" />
|
38
|
+
<path fill="#fcfcfc" d=" M 175.95 243.83 C 185.70 245.17 195.03 241.20 204.72 241.18 C 204.77 247.18 204.73 253.19 204.75 259.19 C 194.22 259.21 183.70 259.24 173.17 259.18 C 171.79 253.68 176.32 249.25 175.95 243.83 Z" />
|
39
|
+
<path fill="#fcfcfc" d=" M 276.80 263.98 C 292.46 260.18 307.20 253.47 321.46 246.11 C 320.16 254.05 321.99 262.66 328.12 268.21 C 313.69 276.55 301.24 288.07 285.97 294.99 C 285.78 285.91 277.61 279.73 276.71 270.88 C 276.36 268.58 276.62 266.27 276.80 263.98 Z" />
|
40
|
+
<path fill="#fcfcfc" d=" M 222.78 279.66 C 238.28 277.70 252.91 271.92 267.38 266.30 C 266.99 271.50 266.88 276.97 269.28 281.75 C 272.06 287.52 275.93 292.92 276.74 299.45 C 263.15 302.79 250.10 308.53 236.06 309.82 C 231.77 310.33 227.45 309.72 223.27 308.78 C 224.99 299.11 221.26 289.39 222.78 279.66 Z" />
|
41
|
+
<path fill="#fcfcfc" d=" M 85.55 281.33 C 84.63 279.51 84.76 277.45 85.09 275.51 C 87.25 280.58 90.99 284.78 93.14 289.85 C 94.28 292.24 93.69 294.92 92.67 297.23 C 91.46 291.44 87.94 286.62 85.55 281.33 Z" />
|
42
|
+
<path fill="#fcfcfc" d=" M 103.08 281.62 C 110.15 288.11 113.86 297.26 116.77 306.20 C 111.27 304.78 105.48 304.14 100.34 301.62 C 98.80 300.97 98.32 299.29 97.72 297.91 C 98.56 298.65 99.38 299.40 100.20 300.17 C 101.96 299.68 104.02 299.49 105.27 297.97 C 107.29 292.19 99.37 287.14 103.08 281.62 Z" />
|
43
|
+
<path fill="#fcfcfc" d=" M 177.91 286.47 C 190.03 287.53 202.20 285.50 213.78 281.96 C 214.39 291.62 211.52 301.88 215.58 311.05 C 204.86 314.64 193.42 312.68 182.36 313.00 C 181.26 304.09 179.11 295.36 177.91 286.47 Z" />
|
44
|
+
<path fill="#fcfcfc" d=" M 119.25 286.18 C 124.71 285.80 129.24 289.99 134.78 289.12 C 134.50 297.07 140.22 303.28 141.64 310.82 C 136.47 310.07 130.98 309.84 126.48 306.88 C 127.07 305.02 128.11 303.00 127.16 301.06 C 125.33 295.69 120.96 291.62 119.25 286.18 Z" />
|
45
|
+
<path fill="#fcfcfc" d=" M 144.12 288.60 C 150.84 287.03 158.65 286.12 164.53 290.51 C 171.24 295.94 172.11 305.22 173.11 313.19 C 166.40 313.47 159.60 313.10 153.19 310.92 C 151.39 303.01 146.54 296.29 144.12 288.60 Z" />
|
46
|
+
<path fill="#0d0d0d" d=" M 305.72 310.82 C 316.64 305.82 327.88 300.72 339.98 299.60 C 320.45 306.59 302.38 316.88 283.61 325.58 C 259.35 336.89 233.15 346.37 206.00 345.20 C 195.99 344.02 186.01 346.09 175.98 345.99 C 156.71 345.76 137.21 348.15 118.12 344.39 C 110.22 342.68 101.98 339.65 96.83 333.07 C 94.17 329.91 92.78 325.94 91.99 321.94 C 98.93 333.60 112.17 339.18 124.86 342.06 C 140.63 345.42 156.92 346.53 173.00 345.12 C 194.56 344.20 216.40 344.39 237.51 339.30 C 261.61 333.44 283.49 321.42 305.72 310.82 Z" />
|
47
|
+
<path fill="#0d0d0d" d=" M 328.06 313.21 C 339.02 307.81 349.74 300.64 362.25 299.70 C 348.66 308.85 333.85 316.07 318.96 322.86 C 260.34 348.87 196.05 361.19 132.03 361.26 C 119.29 361.33 106.30 360.80 94.05 356.96 C 84.33 353.92 75.25 347.81 70.12 338.85 C 69.97 335.07 68.46 330.88 69.95 327.30 C 70.45 327.01 71.45 326.44 71.95 326.15 C 72.05 330.75 71.98 335.36 72.00 339.96 C 77.52 345.53 84.49 349.46 91.83 352.10 C 103.10 356.25 115.10 357.91 127.02 358.78 C 145.75 359.91 164.53 358.75 183.17 356.78 C 233.63 351.48 282.81 335.99 328.06 313.21 Z" />
|
48
|
+
<path fill="#0d0d0d" d=" M 144.64 331.46 C 158.76 331.58 172.89 331.24 186.99 331.72 C 196.31 331.74 206.35 329.08 215.15 333.22 C 199.78 332.55 184.43 333.77 169.06 333.80 C 160.91 333.58 152.53 333.79 144.64 331.46 Z" />
|
49
|
+
</svg>
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'zlib'
|
3
|
+
require 'benchmark'
|
4
|
+
|
5
|
+
describe Zopfli do
|
6
|
+
before :all do
|
7
|
+
@out_dir = File.expand_path(File.join(File.dirname(__FILE__), "../tmp/"))
|
8
|
+
Dir.mkdir(@out_dir) unless File.exists?(@out_dir)
|
9
|
+
end
|
10
|
+
after :all do
|
11
|
+
@out_dir = File.expand_path(File.join(File.dirname(__FILE__), "../tmp/"))
|
12
|
+
Dir["#{@out_dir}/*{.txt,.zfl}"].each do |file|
|
13
|
+
File.delete(file) rescue nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "calculate plus 100 by test_c (verify C)" do
|
18
|
+
expect(Zopfli::C.test_c(100)).to eq(200)
|
19
|
+
expect(Zopfli::C.test_c(150)).to eq(250)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'check files compression' do
|
23
|
+
['test0.txt', 'test1.txt', 'test2.svg'].each do |fixture|
|
24
|
+
|
25
|
+
it "#{fixture} in result must be the same" do
|
26
|
+
uncompressed_file = "spec/fixtures/#{fixture}"
|
27
|
+
compressed_file = "#{@out_dir}/#{fixture}.zfl"
|
28
|
+
# made compress
|
29
|
+
Zopfli.compress(uncompressed_file, compressed_file)
|
30
|
+
|
31
|
+
uncompressed_data, compressed_data = File.read(uncompressed_file), File.read(compressed_file)
|
32
|
+
# check
|
33
|
+
expect(Zlib::Inflate.inflate(compressed_data)).to eq(uncompressed_data)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'check formats' do
|
40
|
+
[:deflate, :gzip, :zlib].each do |format|
|
41
|
+
|
42
|
+
it "#{format} in result must be the same" do
|
43
|
+
uncompressed_file = "spec/fixtures/test0.txt"
|
44
|
+
compressed_file = "#{@out_dir}/test0.txt.zfl"
|
45
|
+
# made compress
|
46
|
+
Zopfli.compress(uncompressed_file, compressed_file, format)
|
47
|
+
|
48
|
+
uncompressed_data, compressed_data = File.read(uncompressed_file), File.read(compressed_file)
|
49
|
+
# check
|
50
|
+
case format
|
51
|
+
when :deflate
|
52
|
+
# no matchers
|
53
|
+
when :gzip
|
54
|
+
gz = Zlib::GzipReader.new(StringIO.new(compressed_data))
|
55
|
+
expect(gz.read).to eq(uncompressed_data)
|
56
|
+
else
|
57
|
+
expect(Zlib::Inflate.inflate(compressed_data)).to eq(uncompressed_data)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'check iterations' do
|
65
|
+
it "with more iterations must be slower" do
|
66
|
+
uncompressed_file = "spec/fixtures/test0.txt"
|
67
|
+
compressed_file = "#{@out_dir}/test0.txt.zfl"
|
68
|
+
# made compress
|
69
|
+
fast_time = Benchmark.realtime do
|
70
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib, 1)
|
71
|
+
end
|
72
|
+
medium_time = Benchmark.realtime do
|
73
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib, 10)
|
74
|
+
end
|
75
|
+
slow_time = Benchmark.realtime do
|
76
|
+
Zopfli.compress(uncompressed_file, compressed_file, :zlib, 20)
|
77
|
+
end
|
78
|
+
|
79
|
+
expect(fast_time).to be < medium_time
|
80
|
+
expect(medium_time).to be < slow_time
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
end
|
data/zopfli-ffi.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'zopfli/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "zopfli-ffi"
|
8
|
+
spec.version = Zopfli::VERSION
|
9
|
+
spec.authors = ["Alexey Vasiliev"]
|
10
|
+
spec.email = ["leopard.not.a@gmail.com"]
|
11
|
+
spec.summary = %q{Ruby wrapper for Zopfli library}
|
12
|
+
spec.description = %q{Ruby wrapper for Zopfli library}
|
13
|
+
spec.homepage = "http://leopard.in.ua/zopfli-ffi"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
spec.extensions << 'ext/zopfli_ffi/Rakefile'
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "ffi", ">= 1.9.0"
|
23
|
+
spec.add_runtime_dependency "ffi-compiler", ">= 0.1.2"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", ">= 1.2"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "rspec", ">= 3"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zopfli-ffi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexey Vasiliev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ffi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.9.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.9.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ffi-compiler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3'
|
83
|
+
description: Ruby wrapper for Zopfli library
|
84
|
+
email:
|
85
|
+
- leopard.not.a@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions:
|
88
|
+
- ext/zopfli_ffi/Rakefile
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- ".ruby-version"
|
93
|
+
- ".travis.yml"
|
94
|
+
- Gemfile
|
95
|
+
- LICENSE.txt
|
96
|
+
- README.md
|
97
|
+
- Rakefile
|
98
|
+
- ext/zopfli_ffi/Rakefile
|
99
|
+
- ext/zopfli_ffi/zopfli_ffi.c
|
100
|
+
- ext/zopfli_ffi/zopfli_ffi.h
|
101
|
+
- lib/zopfli-ffi.rb
|
102
|
+
- lib/zopfli/c.rb
|
103
|
+
- lib/zopfli/libc.rb
|
104
|
+
- lib/zopfli/options.rb
|
105
|
+
- lib/zopfli/version.rb
|
106
|
+
- lib/zopfli/zopfii.rb
|
107
|
+
- lib/zopfli_ffi.rb
|
108
|
+
- spec/fixtures/test0.txt
|
109
|
+
- spec/fixtures/test1.txt
|
110
|
+
- spec/fixtures/test2.svg
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
- spec/travis_build.sh
|
113
|
+
- spec/zopfli_ffi_spec.rb
|
114
|
+
- zopfli-ffi.gemspec
|
115
|
+
homepage: http://leopard.in.ua/zopfli-ffi
|
116
|
+
licenses:
|
117
|
+
- MIT
|
118
|
+
metadata: {}
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options: []
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
requirements: []
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 2.2.2
|
136
|
+
signing_key:
|
137
|
+
specification_version: 4
|
138
|
+
summary: Ruby wrapper for Zopfli library
|
139
|
+
test_files:
|
140
|
+
- spec/fixtures/test0.txt
|
141
|
+
- spec/fixtures/test1.txt
|
142
|
+
- spec/fixtures/test2.svg
|
143
|
+
- spec/spec_helper.rb
|
144
|
+
- spec/travis_build.sh
|
145
|
+
- spec/zopfli_ffi_spec.rb
|