gtk2html 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/gtk2html.rb +149 -56
- data.tar.gz.sig +0 -0
- metadata +6 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c71c9bf3bcd28dc51ea164bda94b482e0ce3ee7
|
4
|
+
data.tar.gz: 1a42d43901620e37f640e58af6bf6f3a813214b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5d3685e45170d735b58133c936684e42257f6008f0184f041d73f9eb7a90187f805001252d282cb04867f3e3142e7f80625942672130c3f3f6e05ae818d3e6b
|
7
|
+
data.tar.gz: 3caf8a98e72ec960d47f137afc8414710d4bc40a9d2e139f1cf0010dec7338c3e188975598a2c15c1da6a554f741ad42af33e4839296c2706bdd3317592896f0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/gtk2html.rb
CHANGED
@@ -6,13 +6,51 @@ require 'gtk2svg'
|
|
6
6
|
require 'htmle'
|
7
7
|
|
8
8
|
|
9
|
+
module InspectArray
|
10
|
+
|
11
|
+
def scan(a, i=0)
|
12
|
+
|
13
|
+
if a.first.is_a? Symbol
|
14
|
+
|
15
|
+
puts a.inspect
|
16
|
+
|
17
|
+
else
|
18
|
+
|
19
|
+
puts (' ' * i) + '['
|
20
|
+
|
21
|
+
a.each.with_index do |row, j|
|
22
|
+
|
23
|
+
if row.is_a? String or row.is_a? Symbol then
|
24
|
+
print (' ' * (i+1)) + row.inspect
|
25
|
+
print ',' unless a.length - 1 == j
|
26
|
+
puts
|
27
|
+
elsif row.first.is_a? Symbol or row.first.is_a? String
|
28
|
+
puts (' ' * (i+1)) + '['
|
29
|
+
puts (' ' * (i+2)) + row.inspect[1..-2]
|
30
|
+
print (' ' * (i+1)) + ']'
|
31
|
+
print ',' unless a.length - 1 == j
|
32
|
+
puts
|
33
|
+
else
|
34
|
+
scan(row,i+1)
|
35
|
+
print ',' unless a.length - 1 == j
|
36
|
+
puts
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
print indent = (' ' * i) + ']'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
9
47
|
module Gtk2HTML
|
10
48
|
|
11
49
|
class Render < DomRender
|
12
50
|
|
13
51
|
def initialize(x, width, height)
|
14
52
|
|
15
|
-
@width, @height = width, height
|
53
|
+
@width, @height = width.to_i, height.to_i
|
16
54
|
super x
|
17
55
|
|
18
56
|
end
|
@@ -20,17 +58,30 @@ module Gtk2HTML
|
|
20
58
|
def body(e, attributes, raw_style)
|
21
59
|
|
22
60
|
style = style_filter(attributes).merge(raw_style)
|
23
|
-
|
24
|
-
|
61
|
+
margin = style[:margin].values
|
62
|
+
coords = [nil, nil, nil, nil]
|
63
|
+
padding = style[:padding].values
|
25
64
|
|
26
|
-
[[:draw_box,
|
65
|
+
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
27
66
|
end
|
67
|
+
|
68
|
+
def strong(e, attributes, raw_style)
|
69
|
+
|
70
|
+
style = style_filter(attributes).merge(raw_style)
|
71
|
+
margin = style[:margin].values
|
72
|
+
coords = [nil, nil, nil, nil]
|
73
|
+
padding = style[:padding].values
|
74
|
+
|
75
|
+
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
76
|
+
end
|
77
|
+
|
78
|
+
alias b strong
|
28
79
|
|
29
80
|
def div(e, attributes, raw_style)
|
30
81
|
|
31
82
|
style = style_filter(attributes).merge(raw_style)
|
32
83
|
margin = style[:margin].values
|
33
|
-
coords = [
|
84
|
+
coords = [nil, nil, nil, nil]
|
34
85
|
padding = style[:padding].values
|
35
86
|
|
36
87
|
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
@@ -43,7 +94,11 @@ module Gtk2HTML
|
|
43
94
|
padding = style[:padding].values
|
44
95
|
|
45
96
|
[[:draw_box, margin, coords, padding, style], render_all(e)]
|
46
|
-
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def style(*args)
|
100
|
+
|
101
|
+
end
|
47
102
|
|
48
103
|
private
|
49
104
|
|
@@ -51,12 +106,17 @@ module Gtk2HTML
|
|
51
106
|
|
52
107
|
h = super attribute
|
53
108
|
|
54
|
-
%i(margin padding).inject(h) do |r,x|
|
109
|
+
r2 = %i(margin padding).inject(h) do |r,x|
|
55
110
|
|
56
111
|
if h.has_key? x then
|
57
112
|
|
58
113
|
a = expand_shorthand(h[x])
|
59
|
-
|
114
|
+
|
115
|
+
a.map! do |v|
|
116
|
+
# note: there is 16px in 1em, see http://pxtoem.com/
|
117
|
+
v =~ /em$/i ? v.to_f * 16 : v.to_f
|
118
|
+
end
|
119
|
+
|
60
120
|
r.merge!(x => Hash[%i(top right bottom left).zip(a)])
|
61
121
|
else
|
62
122
|
r
|
@@ -64,6 +124,8 @@ module Gtk2HTML
|
|
64
124
|
|
65
125
|
end
|
66
126
|
|
127
|
+
r2
|
128
|
+
|
67
129
|
end
|
68
130
|
|
69
131
|
def style_filter(attributes)
|
@@ -77,55 +139,82 @@ module Gtk2HTML
|
|
77
139
|
end
|
78
140
|
|
79
141
|
class Layout
|
142
|
+
include InspectArray
|
80
143
|
|
81
144
|
attr_reader :to_a
|
82
145
|
|
83
146
|
def initialize(instructions, width: 320, height: 240)
|
84
147
|
|
85
|
-
@
|
86
|
-
a = lay_out(instructions
|
87
|
-
@to_a = a
|
148
|
+
@pcoords = [0, 0, width, height]
|
149
|
+
@a = lay_out(instructions)
|
88
150
|
|
89
151
|
end
|
90
152
|
|
153
|
+
def to_a(inspect: false, verbose: false)
|
154
|
+
|
155
|
+
if inspect or verbose then
|
156
|
+
scan @a
|
157
|
+
puts
|
158
|
+
else
|
159
|
+
@a
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
|
91
164
|
|
92
165
|
private
|
93
166
|
|
94
|
-
def lay_out(a
|
167
|
+
def lay_out(a)
|
95
168
|
|
96
|
-
|
97
|
-
|
98
|
-
|
169
|
+
if a.first.is_a? Symbol then
|
170
|
+
|
171
|
+
@text_style = %i(font-size color).inject({}){|r,x| r.merge(x => a[4][x]) }
|
172
|
+
|
173
|
+
set_row(a)
|
174
|
+
|
175
|
+
elsif a.first.is_a? String then
|
176
|
+
a.concat [@pcoords.take(2), @text_style]
|
177
|
+
elsif a.first.is_a? Array and a.first.empty?
|
178
|
+
a.delete a.first
|
179
|
+
lay_out a
|
180
|
+
else
|
181
|
+
|
182
|
+
a.map do |row|
|
183
|
+
|
184
|
+
if a.first.is_a? String then
|
185
|
+
a.concat [@pcoords.take(2), style]
|
186
|
+
else
|
187
|
+
lay_out(row)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
def set_row(row)
|
196
|
+
|
197
|
+
name, margin, raw_coords, padding, style = row
|
99
198
|
|
100
|
-
coords = raw_coords.map.with_index {|x,i| x ? x : pcoords[i]}
|
199
|
+
coords = raw_coords.map.with_index {|x,i| x ? x : @pcoords[i]}
|
101
200
|
|
102
201
|
x1 = coords[0] + margin[0]
|
103
202
|
y1 = coords[1] + margin[1]
|
104
203
|
x2 = coords[2] - margin[2]
|
105
204
|
y2 = coords[3] - margin[3]
|
106
205
|
|
107
|
-
|
108
|
-
|
109
|
-
nested = if children and children.length > 1 then
|
110
|
-
lay_out(children, pcoords: coords)
|
111
|
-
else
|
112
|
-
children
|
113
|
-
end
|
114
|
-
#[owidth=(coords[2] - coords[0]), oheight=(coords[3] - coords[1])]
|
115
|
-
r = [item]
|
116
|
-
r << nested if nested
|
117
|
-
r
|
118
|
-
end
|
119
|
-
|
120
|
-
def lay_out2(a, pcoords: [])
|
206
|
+
new_coords = [x1, y1, x2, y2]
|
121
207
|
|
122
|
-
|
123
|
-
coords = raw_coords.map.with_index {|x,i| x ? x : pcoords[i]}
|
124
|
-
|
125
|
-
owidth, oheight = lay_out(children, pcoords: coords) if children
|
208
|
+
curpos = new_coords.zip(padding).map{|x| x.inject(&:+)}
|
126
209
|
|
127
|
-
[
|
128
|
-
|
210
|
+
@pcoords[0] = x1 + padding[0]
|
211
|
+
@pcoords[1] = y1 + padding[1]
|
212
|
+
@pcoords[2] = x2 - padding[2]
|
213
|
+
@pcoords[3] = y2 - padding[3]
|
214
|
+
|
215
|
+
r = [name, margin, new_coords, padding, style]
|
216
|
+
|
217
|
+
end
|
129
218
|
|
130
219
|
end
|
131
220
|
|
@@ -140,15 +229,12 @@ module Gtk2HTML
|
|
140
229
|
|
141
230
|
end
|
142
231
|
|
143
|
-
def draw_box(margin,
|
144
|
-
|
145
|
-
coords = raw_coords.map.with_index {|x,i| x ? x : @curpos[i] }
|
232
|
+
def draw_box(margin, coords, padding, style)
|
146
233
|
|
147
234
|
h2 = style.clone
|
148
235
|
h2.delete :color
|
236
|
+
|
149
237
|
x1, y1, x2, y2 = coords
|
150
|
-
|
151
|
-
@curpos = coords
|
152
238
|
|
153
239
|
width = x2 - x1
|
154
240
|
height = y2 - y1
|
@@ -157,10 +243,10 @@ module Gtk2HTML
|
|
157
243
|
@area.window.draw_rectangle(gc, 1, x1, y1, width, height)
|
158
244
|
end
|
159
245
|
|
160
|
-
def draw_layout(text, style)
|
161
|
-
|
162
|
-
x, y =
|
163
|
-
|
246
|
+
def draw_layout(text, coords, style)
|
247
|
+
|
248
|
+
x, y = coords
|
249
|
+
|
164
250
|
text ||= ''
|
165
251
|
h2 = style.clone
|
166
252
|
h2.delete :'background-color'
|
@@ -195,33 +281,39 @@ module Gtk2HTML
|
|
195
281
|
a.each do |row|
|
196
282
|
|
197
283
|
next unless row
|
198
|
-
x, remaining = row
|
199
284
|
|
200
|
-
|
285
|
+
x = row
|
286
|
+
|
287
|
+
case row[0].class.to_s.to_sym
|
201
288
|
|
202
289
|
when :Symbol
|
203
290
|
|
204
|
-
name, *
|
291
|
+
name, margin, coords, padding, style, *children = x
|
205
292
|
|
206
|
-
@latest_style =
|
207
|
-
|
208
|
-
|
209
|
-
draw remaining
|
293
|
+
@latest_style = style
|
294
|
+
method(name).call(margin, coords, padding, style)
|
295
|
+
draw children
|
210
296
|
|
211
297
|
when :String then
|
212
298
|
|
213
299
|
next if x.empty?
|
214
300
|
|
215
|
-
|
301
|
+
coords, style = row[1..-1]#remaining
|
302
|
+
method(:draw_layout).call(x,coords, style)
|
216
303
|
|
217
304
|
when :Array
|
218
|
-
|
305
|
+
|
306
|
+
if row[-1][0].is_a? String then
|
307
|
+
method(:draw_layout).call(*row[-1])
|
308
|
+
else
|
309
|
+
draw row[-1]
|
310
|
+
end
|
219
311
|
else
|
220
312
|
|
221
313
|
name, *args = x
|
222
314
|
|
223
315
|
method(name).call(args)
|
224
|
-
draw
|
316
|
+
draw row[-1]
|
225
317
|
end
|
226
318
|
|
227
319
|
end
|
@@ -298,11 +390,12 @@ module Gtk2HTML
|
|
298
390
|
|
299
391
|
@width, @height = window.size
|
300
392
|
instructions = Gtk2HTML::Render.new(@doc, @width, @height).to_a
|
393
|
+
|
301
394
|
@layout_instructions = Gtk2HTML::Layout.new(instructions).to_a
|
302
395
|
|
303
396
|
end
|
304
397
|
|
305
|
-
drawing = DrawingInstructions.new area
|
398
|
+
drawing = Gtk2HTML::DrawingInstructions.new area
|
306
399
|
drawing.render @layout_instructions
|
307
400
|
@dirty = false
|
308
401
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtk2html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
XW00gFE4S5Cq4J0/5Y8BLyxXWUTTXHeLXwfiIfffKOUtTUjlivG+dvqexj8Qbbv9
|
32
32
|
bW25tpA1jigdbQ==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2015-11-
|
34
|
+
date: 2015-11-29 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: gtk2svg
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
version: '0.3'
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.3.
|
45
|
+
version: 0.3.12
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
version: '0.3'
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.3.
|
55
|
+
version: 0.3.12
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: htmle
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
version: '0.1'
|
63
63
|
- - ">="
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 0.1.
|
65
|
+
version: 0.1.3
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
version: '0.1'
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1.
|
75
|
+
version: 0.1.3
|
76
76
|
description:
|
77
77
|
email: james@r0bertson.co.uk
|
78
78
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|