sugar_png 0.0.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -1
- data/Gemfile.lock +4 -4
- data/README.md +105 -0
- data/README.md.tpl +99 -0
- data/Rakefile +41 -6
- data/VERSION +1 -1
- data/data/1-dump-hex.rb +22 -0
- data/data/2-marshal-test.rb +22 -0
- data/data/3-hex2marshal.rb +71 -0
- data/data/font/00 +0 -0
- data/data/font/01 +0 -0
- data/data/font/02 +0 -0
- data/data/font/03 +0 -0
- data/data/font/04 +0 -0
- data/data/font/05 +0 -0
- data/data/font/06 +0 -0
- data/data/font/07 +0 -0
- data/data/font/09 +0 -0
- data/data/font/0a +0 -0
- data/data/font/0b +0 -0
- data/data/font/0c +0 -0
- data/data/font/0d +0 -0
- data/data/font/0e +0 -0
- data/data/font/0f +0 -0
- data/data/font/10 +0 -0
- data/data/font/11 +0 -0
- data/data/font/12 +0 -0
- data/data/font/13 +0 -0
- data/data/font/14 +0 -0
- data/data/font/15 +0 -0
- data/data/font/16 +0 -0
- data/data/font/17 +0 -0
- data/data/font/18 +0 -0
- data/data/font/19 +0 -0
- data/data/font/1a +0 -0
- data/data/font/1b +0 -0
- data/data/font/1c +0 -0
- data/data/font/1d +0 -0
- data/data/font/1e +0 -0
- data/data/font/1f +0 -0
- data/data/font/20 +0 -0
- data/data/font/21 +0 -0
- data/data/font/22 +0 -0
- data/data/font/23 +0 -0
- data/data/font/24 +0 -0
- data/data/font/25 +0 -0
- data/data/font/26 +0 -0
- data/data/font/27 +0 -0
- data/data/font/28 +0 -0
- data/data/font/29 +0 -0
- data/data/font/2a +0 -0
- data/data/font/2b +0 -0
- data/data/font/2c +0 -0
- data/data/font/2d +0 -0
- data/data/font/2e +0 -0
- data/data/font/2f +0 -0
- data/data/font/30 +0 -0
- data/data/font/31 +0 -0
- data/data/font/32 +0 -0
- data/data/font/33 +0 -0
- data/data/font/34 +0 -0
- data/data/font/35 +0 -0
- data/data/font/36 +0 -0
- data/data/font/37 +0 -0
- data/data/font/38 +0 -0
- data/data/font/39 +0 -0
- data/data/font/3a +0 -0
- data/data/font/3b +0 -0
- data/data/font/3c +0 -0
- data/data/font/3d +0 -0
- data/data/font/3e +0 -0
- data/data/font/3f +0 -0
- data/data/font/40 +0 -0
- data/data/font/41 +0 -0
- data/data/font/42 +0 -0
- data/data/font/43 +0 -0
- data/data/font/44 +0 -0
- data/data/font/45 +0 -0
- data/data/font/46 +0 -0
- data/data/font/47 +0 -0
- data/data/font/48 +0 -0
- data/data/font/49 +0 -0
- data/data/font/4a +0 -0
- data/data/font/4b +0 -0
- data/data/font/4c +0 -0
- data/data/font/4d +0 -0
- data/data/font/4e +0 -0
- data/data/font/4f +0 -0
- data/data/font/50 +0 -0
- data/data/font/51 +0 -0
- data/data/font/52 +0 -0
- data/data/font/53 +0 -0
- data/data/font/54 +0 -0
- data/data/font/55 +0 -0
- data/data/font/56 +0 -0
- data/data/font/57 +0 -0
- data/data/font/58 +0 -0
- data/data/font/59 +0 -0
- data/data/font/5a +0 -0
- data/data/font/5b +0 -0
- data/data/font/5c +0 -0
- data/data/font/5d +0 -0
- data/data/font/5e +0 -0
- data/data/font/5f +0 -0
- data/data/font/60 +0 -0
- data/data/font/61 +0 -0
- data/data/font/62 +0 -0
- data/data/font/63 +0 -0
- data/data/font/64 +0 -0
- data/data/font/65 +0 -0
- data/data/font/66 +0 -0
- data/data/font/67 +0 -0
- data/data/font/68 +0 -0
- data/data/font/69 +0 -0
- data/data/font/6a +0 -0
- data/data/font/6b +0 -0
- data/data/font/6c +0 -0
- data/data/font/6d +0 -0
- data/data/font/6e +0 -0
- data/data/font/6f +0 -0
- data/data/font/70 +0 -0
- data/data/font/71 +0 -0
- data/data/font/72 +0 -0
- data/data/font/73 +0 -0
- data/data/font/74 +0 -0
- data/data/font/75 +0 -0
- data/data/font/76 +0 -0
- data/data/font/77 +0 -0
- data/data/font/78 +0 -0
- data/data/font/79 +0 -0
- data/data/font/7a +0 -0
- data/data/font/7b +0 -0
- data/data/font/7c +0 -0
- data/data/font/7d +0 -0
- data/data/font/7e +0 -0
- data/data/font/7f +0 -0
- data/data/font/80 +0 -0
- data/data/font/81 +0 -0
- data/data/font/82 +0 -0
- data/data/font/83 +0 -0
- data/data/font/84 +0 -0
- data/data/font/85 +0 -0
- data/data/font/86 +0 -0
- data/data/font/87 +0 -0
- data/data/font/88 +0 -0
- data/data/font/89 +0 -0
- data/data/font/8a +0 -0
- data/data/font/8b +0 -0
- data/data/font/8c +0 -0
- data/data/font/8d +0 -0
- data/data/font/8e +0 -0
- data/data/font/8f +0 -0
- data/data/font/90 +0 -0
- data/data/font/91 +0 -0
- data/data/font/92 +0 -0
- data/data/font/93 +0 -0
- data/data/font/94 +0 -0
- data/data/font/95 +0 -0
- data/data/font/96 +0 -0
- data/data/font/97 +0 -0
- data/data/font/98 +0 -0
- data/data/font/99 +0 -0
- data/data/font/9a +0 -0
- data/data/font/9b +0 -0
- data/data/font/9c +0 -0
- data/data/font/9d +0 -0
- data/data/font/9e +0 -0
- data/data/font/9f +0 -0
- data/data/font/a0 +0 -0
- data/data/font/a1 +0 -0
- data/data/font/a2 +0 -0
- data/data/font/a3 +0 -0
- data/data/font/a4 +0 -0
- data/data/font/a5 +0 -0
- data/data/font/a6 +0 -0
- data/data/font/a7 +0 -0
- data/data/font/a8 +0 -0
- data/data/font/a9 +0 -0
- data/data/font/aa +0 -0
- data/data/font/ac +0 -0
- data/data/font/ad +0 -0
- data/data/font/ae +0 -0
- data/data/font/af +0 -0
- data/data/font/b0 +0 -0
- data/data/font/b1 +0 -0
- data/data/font/b2 +0 -0
- data/data/font/b3 +0 -0
- data/data/font/b4 +0 -0
- data/data/font/b5 +0 -0
- data/data/font/b6 +0 -0
- data/data/font/b7 +0 -0
- data/data/font/b8 +0 -0
- data/data/font/b9 +0 -0
- data/data/font/ba +0 -0
- data/data/font/bb +0 -0
- data/data/font/bc +0 -0
- data/data/font/bd +0 -0
- data/data/font/be +0 -0
- data/data/font/bf +0 -0
- data/data/font/c0 +0 -0
- data/data/font/c1 +0 -0
- data/data/font/c2 +0 -0
- data/data/font/c3 +0 -0
- data/data/font/c4 +0 -0
- data/data/font/c5 +0 -0
- data/data/font/c6 +0 -0
- data/data/font/c7 +0 -0
- data/data/font/c8 +0 -0
- data/data/font/c9 +0 -0
- data/data/font/ca +0 -0
- data/data/font/cb +0 -0
- data/data/font/cc +0 -0
- data/data/font/cd +0 -0
- data/data/font/ce +0 -0
- data/data/font/cf +0 -0
- data/data/font/d0 +0 -0
- data/data/font/d1 +0 -0
- data/data/font/d2 +0 -0
- data/data/font/d3 +0 -0
- data/data/font/d4 +0 -0
- data/data/font/d5 +0 -0
- data/data/font/d6 +0 -0
- data/data/font/d7 +0 -0
- data/data/font/f9 +0 -0
- data/data/font/fa +0 -0
- data/data/font/fb +0 -0
- data/data/font/fc +0 -0
- data/data/font/fd +0 -0
- data/data/font/fe +0 -0
- data/data/font/ff +0 -0
- data/data/unifont-5.1.20080820.7z +0 -0
- data/data/unused-4-read-tar.rb +49 -0
- data/lib/sugar_png.rb +164 -2
- data/lib/sugar_png/border.rb +20 -0
- data/lib/sugar_png/color.rb +118 -0
- data/lib/sugar_png/datastream.rb +2 -17
- data/lib/sugar_png/dyn_accessor.rb +28 -0
- data/lib/sugar_png/font.rb +44 -0
- data/lib/sugar_png/glyph.rb +36 -0
- data/lib/sugar_png/image.rb +104 -0
- data/samples/damaged_chunk.png +0 -0
- data/samples/png_suite/f00n0g08_reference.png +0 -0
- data/samples/png_suite/f00n2c08_reference.png +0 -0
- data/samples/png_suite/f01n0g08_reference.png +0 -0
- data/samples/png_suite/f01n2c08_reference.png +0 -0
- data/samples/png_suite/f02n0g08_reference.png +0 -0
- data/samples/png_suite/f02n2c08_reference.png +0 -0
- data/samples/png_suite/f03n0g08_reference.png +0 -0
- data/samples/png_suite/f03n2c08_reference.png +0 -0
- data/samples/png_suite/f04n0g08_reference.png +0 -0
- data/samples/png_suite/f04n2c08_reference.png +0 -0
- data/samples/readme/explicit_image_dimensions_bg_color.png +0 -0
- data/samples/readme/hello_world.png +0 -0
- data/samples/readme/japanese_text_with_rainbow_borders_zoomed_4x.png +0 -0
- data/samples/readme/pixels_can_be_set_using_ranges_enumerators_arrays.png +0 -0
- data/samples/readme/playing_with_transparency_16_bit_color_depth.png +0 -0
- data/samples/readme/white_noise.png +0 -0
- data/samples/rgba.tar.bz2 +0 -0
- data/samples/text_chunk.png +0 -0
- data/samples/ztxt_chunk.png +0 -0
- data/spec/color_spec.rb +81 -0
- data/spec/font_spec.rb +82 -0
- data/spec/magic/border_spec.rb +49 -0
- data/spec/magic/create_spec.rb +42 -0
- data/spec/magic/pixels_spec.rb +73 -0
- data/spec/magic/text_spec.rb +113 -0
- data/spec/magic/zoom_spec.rb +38 -0
- data/spec/png_suite_spec.rb +145 -0
- data/spec/spec_helper.rb +43 -1
- data/spec/sugar_png/datastream_spec.rb +32 -0
- data/spec/support/png_suite.rb +43 -0
- data/sugar_png.gemspec +275 -6
- metadata +287 -5
data/Gemfile
CHANGED
@@ -2,7 +2,7 @@ source "http://rubygems.org"
|
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
|
-
gem 'zpng', ">= 0.2.
|
5
|
+
gem 'zpng', ">= 0.2.1"
|
6
6
|
|
7
7
|
# Add dependencies to develop your gem here.
|
8
8
|
# Include everything needed to run rake, tests, features, etc.
|
@@ -10,4 +10,5 @@ group :development do
|
|
10
10
|
gem "rspec", ">= 2.8.0"
|
11
11
|
gem "bundler", ">= 1.0.0"
|
12
12
|
gem "jeweler", "~> 1.8.4"
|
13
|
+
gem "awesome_print"
|
13
14
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
awesome_print (1.1.0)
|
4
5
|
diff-lcs (1.1.3)
|
5
6
|
git (1.2.5)
|
6
|
-
hexdump (0.2.3)
|
7
7
|
jeweler (1.8.4)
|
8
8
|
bundler (~> 1.0)
|
9
9
|
git (>= 1.2.5)
|
@@ -22,15 +22,15 @@ GEM
|
|
22
22
|
rspec-expectations (2.12.1)
|
23
23
|
diff-lcs (~> 1.1.3)
|
24
24
|
rspec-mocks (2.12.1)
|
25
|
-
zpng (0.2.
|
26
|
-
hexdump
|
25
|
+
zpng (0.2.1)
|
27
26
|
rainbow
|
28
27
|
|
29
28
|
PLATFORMS
|
30
29
|
ruby
|
31
30
|
|
32
31
|
DEPENDENCIES
|
32
|
+
awesome_print
|
33
33
|
bundler (>= 1.0.0)
|
34
34
|
jeweler (~> 1.8.4)
|
35
35
|
rspec (>= 2.8.0)
|
36
|
-
zpng (>= 0.2.
|
36
|
+
zpng (>= 0.2.1)
|
data/README.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
sugar_png [](http://secure.travis-ci.org/zed-0xff/sugar_png) [](https://gemnasium.com/zed-0xff/sugar_png)
|
2
|
+
======
|
3
|
+
|
4
|
+
|
5
|
+
Description
|
6
|
+
-----------
|
7
|
+
A pure ruby high-level PNG file creation toolkit.
|
8
|
+
|
9
|
+
(If you need a low-level PNG manipulation & analysis toolkit - take a look at [ZPNG](https://github.com/zed-0xff/zpng))
|
10
|
+
|
11
|
+
Features
|
12
|
+
--------
|
13
|
+
* neat syntax
|
14
|
+
* unicode text drawing support
|
15
|
+
* 16-bit color depth support
|
16
|
+
|
17
|
+
Installation
|
18
|
+
------------
|
19
|
+
gem install sugar_png
|
20
|
+
|
21
|
+
Examples
|
22
|
+
--------
|
23
|
+
|
24
|
+
### Hello World!
|
25
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/hello_world.png" alt="Hello World!" title="Hello World!" align="right" />
|
26
|
+
```ruby
|
27
|
+
SugarPNG.new do
|
28
|
+
text "Hello World!"
|
29
|
+
save "out.png"
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
### Explicit image dimensions + bg color
|
34
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/explicit_image_dimensions_bg_color.png" alt="Explicit image dimensions + bg color" title="Explicit image dimensions + bg color" align="right" />
|
35
|
+
```ruby
|
36
|
+
SugarPNG.new do
|
37
|
+
background 'red' # or :blue, or #ffee00, or :transparent (default)
|
38
|
+
width 100
|
39
|
+
height 50
|
40
|
+
text "Hello World!", :color => '#ffffff'
|
41
|
+
save "out.png"
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
### Japanese text with rainbow borders, zoomed 4x
|
46
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/japanese_text_with_rainbow_borders_zoomed_4x.png" alt="Japanese text with rainbow borders, zoomed 4x" title="Japanese text with rainbow borders, zoomed 4x" align="right" />
|
47
|
+
```ruby
|
48
|
+
SugarPNG.new do
|
49
|
+
border 1, :red
|
50
|
+
border 1, :green
|
51
|
+
border 1, :blue
|
52
|
+
text '水水水'
|
53
|
+
zoom 4
|
54
|
+
|
55
|
+
save "out.png"
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
### White noise
|
60
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/white_noise.png" alt="White noise" title="White noise" align="right" />
|
61
|
+
```ruby
|
62
|
+
SugarPNG.new do
|
63
|
+
bg :black # shortcut for 'background'
|
64
|
+
fg :white # ditto
|
65
|
+
width 100
|
66
|
+
height 100
|
67
|
+
200.times{ pixel(rand(100),rand(100)) }
|
68
|
+
|
69
|
+
save "out.png"
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
### Playing with transparency & 16-bit color depth
|
74
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/playing_with_transparency_16_bit_color_depth.png" alt="Playing with transparency & 16-bit color depth" title="Playing with transparency & 16-bit color depth" align="right" />
|
75
|
+
```ruby
|
76
|
+
SugarPNG.new do |img|
|
77
|
+
img.depth = 16
|
78
|
+
|
79
|
+
100.times do |y|
|
80
|
+
100.times do |x|
|
81
|
+
img[x,y] = [0,65536*x/100,0,65535*y/100] # RGBA
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# 'export' returns PNG image data suitable for streaming to client
|
86
|
+
# or manually saving to a file or do whatever you want
|
87
|
+
@data = img.export
|
88
|
+
end
|
89
|
+
```
|
90
|
+
|
91
|
+
### Pixels can be set using Ranges, Enumerators & Arrays
|
92
|
+
<img src="//raw.github.com/zed-0xff/sugar_png/master/samples/readme/pixels_can_be_set_using_ranges_enumerators_arrays.png" alt="Pixels can be set using Ranges, Enumerators & Arrays" title="Pixels can be set using Ranges, Enumerators & Arrays" align="right" />
|
93
|
+
```ruby
|
94
|
+
SugarPNG.new do |img|
|
95
|
+
# Ranges
|
96
|
+
img[10...50, 10..20] = :blue
|
97
|
+
# Array + Enumerator
|
98
|
+
img[[1,2,4,8,16,32], 0.step(50,2)] = :red
|
99
|
+
img.zoom = 2
|
100
|
+
end.save("out.png")
|
101
|
+
```
|
102
|
+
|
103
|
+
License
|
104
|
+
-------
|
105
|
+
Released under the MIT License. See the [LICENSE](https://github.com/zed-0xff/sugar_png/blob/master/LICENSE.txt) file for further details.
|
data/README.md.tpl
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
sugar_png [](http://secure.travis-ci.org/zed-0xff/sugar_png) [](https://gemnasium.com/zed-0xff/sugar_png)
|
2
|
+
======
|
3
|
+
|
4
|
+
|
5
|
+
Description
|
6
|
+
-----------
|
7
|
+
A pure ruby high-level PNG file creation toolkit.
|
8
|
+
|
9
|
+
(If you need a low-level PNG manipulation & analysis toolkit - take a look at [ZPNG](https://github.com/zed-0xff/zpng))
|
10
|
+
|
11
|
+
Features
|
12
|
+
--------
|
13
|
+
* neat syntax
|
14
|
+
* unicode text drawing support
|
15
|
+
* 16-bit color depth support
|
16
|
+
|
17
|
+
Installation
|
18
|
+
------------
|
19
|
+
gem install sugar_png
|
20
|
+
|
21
|
+
Examples
|
22
|
+
--------
|
23
|
+
|
24
|
+
### Hello World!
|
25
|
+
```ruby
|
26
|
+
SugarPNG.new do
|
27
|
+
text "Hello World!"
|
28
|
+
save "out.png"
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
### Explicit image dimensions + bg color
|
33
|
+
```ruby
|
34
|
+
SugarPNG.new do
|
35
|
+
background 'red' # or :blue, or #ffee00, or :transparent (default)
|
36
|
+
width 100
|
37
|
+
height 50
|
38
|
+
text "Hello World!", :color => '#ffffff'
|
39
|
+
save "out.png"
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
### Japanese text with rainbow borders, zoomed 4x
|
44
|
+
```ruby
|
45
|
+
SugarPNG.new do
|
46
|
+
border 1, :red
|
47
|
+
border 1, :green
|
48
|
+
border 1, :blue
|
49
|
+
text '水水水'
|
50
|
+
zoom 4
|
51
|
+
|
52
|
+
save "out.png"
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
### White noise
|
57
|
+
```ruby
|
58
|
+
SugarPNG.new do
|
59
|
+
bg :black # shortcut for 'background'
|
60
|
+
fg :white # ditto
|
61
|
+
width 100
|
62
|
+
height 100
|
63
|
+
200.times{ pixel(rand(100),rand(100)) }
|
64
|
+
|
65
|
+
save "out.png"
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
69
|
+
### Playing with transparency & 16-bit color depth
|
70
|
+
```ruby
|
71
|
+
SugarPNG.new do |img|
|
72
|
+
img.depth = 16
|
73
|
+
|
74
|
+
100.times do |y|
|
75
|
+
100.times do |x|
|
76
|
+
img[x,y] = [0,65536*x/100,0,65535*y/100] # RGBA
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# 'export' returns PNG image data suitable for streaming to client
|
81
|
+
# or manually saving to a file or do whatever you want
|
82
|
+
@data = img.export
|
83
|
+
end
|
84
|
+
```
|
85
|
+
|
86
|
+
### Pixels can be set using Ranges, Enumerators & Arrays
|
87
|
+
```ruby
|
88
|
+
SugarPNG.new do |img|
|
89
|
+
# Ranges
|
90
|
+
img[10...50, 10..20] = :blue
|
91
|
+
# Array + Enumerator
|
92
|
+
img[[1,2,4,8,16,32], 0.step(50,2)] = :red
|
93
|
+
img.zoom = 2
|
94
|
+
end.save("out.png")
|
95
|
+
```
|
96
|
+
|
97
|
+
License
|
98
|
+
-------
|
99
|
+
Released under the MIT License. See the [LICENSE](https://github.com/zed-0xff/sugar_png/blob/master/LICENSE.txt) file for further details.
|
data/Rakefile
CHANGED
@@ -23,6 +23,7 @@ Jeweler::Tasks.new do |gem|
|
|
23
23
|
gem.authors = ["Andrey \"Zed\" Zaikin"]
|
24
24
|
#gem.executables = %w'sugar_png'
|
25
25
|
gem.files.include "lib/**/*.rb"
|
26
|
+
gem.files.include "data/font/??"
|
26
27
|
# dependencies defined in Gemfile
|
27
28
|
end
|
28
29
|
Jeweler::RubygemsDotOrgTasks.new
|
@@ -40,12 +41,46 @@ end
|
|
40
41
|
|
41
42
|
task :default => :spec
|
42
43
|
|
43
|
-
desc "
|
44
|
-
task :
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
desc "build readme"
|
45
|
+
task :readme do
|
46
|
+
dir = "samples/readme"
|
47
|
+
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
48
|
+
|
49
|
+
tpl = File.read('README.md.tpl')
|
50
|
+
Dir.chdir "tmp"
|
51
|
+
result = tpl.gsub(/^### ([^~`\n]+?)\n```ruby(.+?)^```/m) do |x|
|
52
|
+
title, code = $1, $2
|
53
|
+
fname = File.join(
|
54
|
+
dir,
|
55
|
+
title.split(/\W+/).join('_').sub(/^_+/,'').sub(/_+$/,'').downcase + ".png"
|
56
|
+
)
|
57
|
+
|
58
|
+
File.open("tmp.rb", "w:utf-8") do |f|
|
59
|
+
f.puts "#coding: utf-8"
|
60
|
+
f.puts "$:.unshift('../lib')"
|
61
|
+
f.puts "require 'sugar_png'"
|
62
|
+
f.puts "srand 0"
|
63
|
+
f.puts code
|
64
|
+
f.puts <<-EOF
|
65
|
+
if defined?(@data) && @data
|
66
|
+
File.open("out.png","wb"){ |f| f<<@data }
|
67
|
+
end
|
68
|
+
EOF
|
69
|
+
end
|
70
|
+
|
71
|
+
puts "[.] #{fname} .. "
|
72
|
+
system "ruby tmp.rb"
|
73
|
+
exit unless $?.success?
|
74
|
+
raise "[?] no out.png" unless File.exist?("out.png")
|
75
|
+
FileUtils.mv "out.png", "../#{fname}"
|
76
|
+
|
77
|
+
url = File.join("//raw.github.com/zed-0xff/sugar_png/master", fname)
|
78
|
+
img = %Q|<img src="#{url}" alt="#{title}" title="#{title}" align="right" />|
|
79
|
+
|
80
|
+
x.sub(title,title+"\n"+img)
|
81
|
+
end
|
82
|
+
Dir.chdir ".."
|
83
|
+
File.open('README.md','w'){ |f| f << result }
|
49
84
|
end
|
50
85
|
|
51
86
|
Rake::Task[:console].clear
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.4.0
|
data/data/1-dump-hex.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
fname = ARGV.first || "unifont-5.1.20080820.hex"
|
4
|
+
|
5
|
+
want = ARGV[1] && ARGV[1].to_i(16)
|
6
|
+
|
7
|
+
File.read(fname).each_line do |line|
|
8
|
+
idx, data = line.strip.split(':',2)
|
9
|
+
idx = idx.to_i(16)
|
10
|
+
next if want && want != idx
|
11
|
+
case data.size
|
12
|
+
when 32
|
13
|
+
data.scan(/../).each do |x|
|
14
|
+
puts(("%08b" % x.to_i(16)).tr('01',' #'))
|
15
|
+
end
|
16
|
+
when 64
|
17
|
+
data.scan(/..../).each do |x|
|
18
|
+
puts(("%016b" % x.to_i(16)).tr('01',' #'))
|
19
|
+
end
|
20
|
+
else raise data.size.to_s
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'hexdump'
|
3
|
+
require 'awesome_print'
|
4
|
+
|
5
|
+
def dump x
|
6
|
+
data = Marshal.dump(x)
|
7
|
+
printf "[.] %4d: %-10s (%d): %s\n".green, data.size, x.class.to_s, x.size, x.inspect[0,30].gray
|
8
|
+
Hexdump.dump data
|
9
|
+
puts
|
10
|
+
end
|
11
|
+
|
12
|
+
dump 0
|
13
|
+
dump 0xff
|
14
|
+
dump [0] * 10
|
15
|
+
dump [0xff] * 10
|
16
|
+
dump 'x'
|
17
|
+
dump 'x'*100
|
18
|
+
dump ['x']*100
|
19
|
+
|
20
|
+
a = [1,2,3,4,5]
|
21
|
+
dump a
|
22
|
+
dump [a]*10
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
fname = ARGV.first || "unifont-5.1.20080820.hex"
|
4
|
+
|
5
|
+
want = ARGV[1] && ARGV[1].to_i(16)
|
6
|
+
|
7
|
+
h = {}
|
8
|
+
a = []
|
9
|
+
dedup = {}
|
10
|
+
aa = []
|
11
|
+
|
12
|
+
File.read(fname).each_line do |line|
|
13
|
+
idx, data = line.strip.split(':',2)
|
14
|
+
idx = idx.to_i(16)
|
15
|
+
s = data.scan(/../).map{ |x| x.to_i(16).chr }.join
|
16
|
+
s = (dedup[s] ||= s)
|
17
|
+
# unless s.split('').uniq == ["\x00"]
|
18
|
+
h[idx] = s
|
19
|
+
a[idx] = s
|
20
|
+
aa[idx >> 8] ||= []
|
21
|
+
aa[idx >> 8][idx & 0xff] = s
|
22
|
+
# end
|
23
|
+
end
|
24
|
+
|
25
|
+
puts "[=] #{aa.size} pages"
|
26
|
+
puts "[=] #{aa.uniq.size} unique pages"
|
27
|
+
|
28
|
+
# dedup pages
|
29
|
+
aa.each_with_index do |page,idx|
|
30
|
+
(idx+1).upto(aa.size-1) do |idx2|
|
31
|
+
aa[idx2] = page if aa[idx2] == page
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
puts "[=] #{h.size} non-empty chars"
|
36
|
+
puts "[=] #{h.values.uniq.size} unique chars"
|
37
|
+
|
38
|
+
puts "[=] #{h.values.join.size} bytes raw data size"
|
39
|
+
|
40
|
+
data = Marshal.dump(h)
|
41
|
+
puts "[=] #{data.size} bytes marshaled hash"
|
42
|
+
|
43
|
+
data = Marshal.dump(a)
|
44
|
+
puts "[=] #{data.size} bytes marshaled array"
|
45
|
+
|
46
|
+
data = Marshal.dump(aa)
|
47
|
+
puts "[=] #{data.size} bytes marshaled array2"
|
48
|
+
|
49
|
+
# .index header = 512 bytes
|
50
|
+
# .index data = 1024 bytes (256 pages of 4 bytes each)
|
51
|
+
# first file header = 512 bytes
|
52
|
+
#index = ''
|
53
|
+
#offset = 512 + 1024 + 512
|
54
|
+
aa.each_with_index do |a,pageno|
|
55
|
+
# skip empty pages and pages entirely of one glyph (most likely Unassigned ones)
|
56
|
+
next if a.nil? || a.empty? || a.uniq.size == 1
|
57
|
+
fname = "font/%02x" % pageno
|
58
|
+
data = Marshal.dump(a)
|
59
|
+
puts "[.] #{fname}: #{data.size}"
|
60
|
+
File.open(fname, "wb"){ |f| f << data }
|
61
|
+
|
62
|
+
# index << [offset].pack('V')
|
63
|
+
#
|
64
|
+
# size = data.size
|
65
|
+
# if size & 0x1ff != 0
|
66
|
+
# size = (size|0x1ff) + 1
|
67
|
+
# end
|
68
|
+
# offset += size+512 # add TAR header size
|
69
|
+
end
|
70
|
+
|
71
|
+
#File.open('data/.index','wb'){ |f| f<<index }
|
data/data/font/00
ADDED
Binary file
|
data/data/font/01
ADDED
Binary file
|
data/data/font/02
ADDED
Binary file
|
data/data/font/03
ADDED
Binary file
|
data/data/font/04
ADDED
Binary file
|
data/data/font/05
ADDED
Binary file
|
data/data/font/06
ADDED
Binary file
|