svggvs 0.0.5 → 0.0.6
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/bin/svggvs +9 -3
- data/lib/svggvs/pdf.rb +57 -0
- data/lib/svggvs/version.rb +1 -1
- data/lib/svggvs.rb +1 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/svggvs/pdf_spec.rb +46 -0
- data/svggvs.gemspec +2 -0
- metadata +28 -12
data/bin/svggvs
CHANGED
@@ -46,6 +46,8 @@ module SVGGVS
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
CARDS_PER_PAGE = 9
|
50
|
+
|
49
51
|
desc "pdf", "Create PDF of card images"
|
50
52
|
def pdf
|
51
53
|
pngs
|
@@ -58,19 +60,23 @@ module SVGGVS
|
|
58
60
|
tmp_target
|
59
61
|
end
|
60
62
|
|
61
|
-
png_slices = trimmed_pngs.each_slice(
|
63
|
+
png_slices = trimmed_pngs.each_slice(CARDS_PER_PAGE)
|
62
64
|
|
63
|
-
page_count = trimmed_pngs.length /
|
65
|
+
page_count = trimmed_pngs.length / CARDS_PER_PAGE
|
64
66
|
|
65
67
|
placeholder = tmp_target_for("placeholder.png")
|
66
68
|
system %{convert -size #{context.session.pdf_card_size} xc:white #{placeholder}}
|
67
69
|
|
70
|
+
pdf_obj = SVGGVS::PDF.new(card_size: context.session.pdf_card_size)
|
71
|
+
|
68
72
|
pages = Parallel.map(png_slices.each_with_index) do |files, page_index|
|
73
|
+
tmp_pdf_png_target = tmp_path.join("page%05d.pdf" % page_index)
|
69
74
|
tmp_pdf_target = tmp_path.join("page%05d.pdf" % page_index)
|
70
75
|
|
71
76
|
files += Array.new(9 - files.length, placeholder)
|
72
77
|
|
73
|
-
system %{montage -density #{context.session.pdf_dpi} -geometry +0+0 #{files.join(' ')} #{
|
78
|
+
system %{montage -density #{context.session.pdf_dpi} -geometry +0+0 #{files.join(' ')} #{tmp_pdf_png_target}}
|
79
|
+
system %{convert -density #{context.session.pdf_dpi} #{tmp_pdf_png_target} -bordercolor white -border #{SVGGVS::PDF.border_size} #{pdf_obj.generate_crop_mark_draws.join(' ')} #{tmp_pdf_target}}.tap { |o| p o }
|
74
80
|
|
75
81
|
tmp_pdf_target
|
76
82
|
end
|
data/lib/svggvs/pdf.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module SVGGVS
|
2
|
+
CROP_MARK_SIZE = 20.freeze
|
3
|
+
|
4
|
+
class PDF
|
5
|
+
def initialize(options)
|
6
|
+
@options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.border_size
|
10
|
+
([ CROP_MARK_SIZE ] * 2).join('x')
|
11
|
+
end
|
12
|
+
|
13
|
+
def page_size_with_crop_marks
|
14
|
+
[ card_width * 3, card_height * 3 ].collect { |size| size + CROP_MARK_SIZE * 2 }.join('x')
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate_crop_mark_directives
|
18
|
+
(0..3).collect { |index|
|
19
|
+
pos_x = CROP_MARK_SIZE + index * card_width
|
20
|
+
pos_y = CROP_MARK_SIZE + index * card_height
|
21
|
+
|
22
|
+
[ [ 0 ], [ CROP_MARK_SIZE + page_height ] ].collect { |size|
|
23
|
+
[ pos_x ] + size + [ pos_x, size.first + CROP_MARK_SIZE ]
|
24
|
+
} +
|
25
|
+
[ [ 0 ], [ CROP_MARK_SIZE + page_width ] ].collect { |size|
|
26
|
+
size + [ pos_y ] + [ size.first + CROP_MARK_SIZE, pos_y ]
|
27
|
+
}
|
28
|
+
}.flatten(1).collect { |sx, sy, ex, ey| "#{sx},#{sy} #{ex},#{ey}" }
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate_crop_mark_draws
|
32
|
+
generate_crop_mark_directives.collect { |coords| %{-stroke black -strokewidth 3 -draw "line #{coords}"} }
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def card_width
|
37
|
+
card_size.first
|
38
|
+
end
|
39
|
+
|
40
|
+
def card_height
|
41
|
+
card_size.last
|
42
|
+
end
|
43
|
+
|
44
|
+
def page_height
|
45
|
+
card_height * 3
|
46
|
+
end
|
47
|
+
|
48
|
+
def page_width
|
49
|
+
card_width * 3
|
50
|
+
end
|
51
|
+
|
52
|
+
def card_size
|
53
|
+
@card_size ||= @options[:card_size].split('x').collect(&:to_i)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
data/lib/svggvs/version.rb
CHANGED
data/lib/svggvs.rb
CHANGED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'svggvs/pdf'
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
describe SVGGVS::PDF do
|
6
|
+
subject { SVGGVS::PDF.new(options) }
|
7
|
+
|
8
|
+
let(:options) {
|
9
|
+
{ card_size: '100x100' }
|
10
|
+
}
|
11
|
+
|
12
|
+
describe '#page_size_with_crop_marks' do
|
13
|
+
it "should have the right size" do
|
14
|
+
subject.page_size_with_crop_marks.should be == "340x340"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#generate_crop_mark_directives' do
|
19
|
+
let(:result) {
|
20
|
+
[
|
21
|
+
"20,0 20,20",
|
22
|
+
"20,320 20,340",
|
23
|
+
"120,0 120,20",
|
24
|
+
"120,320 120,340",
|
25
|
+
"220,0 220,20",
|
26
|
+
"220,320 220,340",
|
27
|
+
"320,0 320,20",
|
28
|
+
"320,20 340,20",
|
29
|
+
"320,120 340,120",
|
30
|
+
"320,220 340,220",
|
31
|
+
"320,320 320,340",
|
32
|
+
"320,320 340,320",
|
33
|
+
"0,20 20,20",
|
34
|
+
"0,120 20,120",
|
35
|
+
"0,220 20,220",
|
36
|
+
"0,320 20,320",
|
37
|
+
]
|
38
|
+
}
|
39
|
+
|
40
|
+
it 'should create correct definitions' do
|
41
|
+
subject.generate_crop_mark_directives.each { |coords|
|
42
|
+
result.should include(coords)
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/svggvs.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svggvs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
17
|
-
requirement: &
|
17
|
+
requirement: &77132620 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *77132620
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: thor
|
28
|
-
requirement: &
|
28
|
+
requirement: &77132410 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *77132410
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: parallel
|
39
|
-
requirement: &
|
39
|
+
requirement: &77132200 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *77132200
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: roo
|
50
|
-
requirement: &
|
50
|
+
requirement: &77131990 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *77131990
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: activesupport
|
61
|
-
requirement: &
|
61
|
+
requirement: &77131780 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,18 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *77131780
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: &77131570 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *77131570
|
70
81
|
description: Generate sets of card game cards using Inkscape templates and Ruby
|
71
82
|
email:
|
72
83
|
- john@coswellproductions.com
|
@@ -85,6 +96,7 @@ files:
|
|
85
96
|
- lib/svggvs/context.rb
|
86
97
|
- lib/svggvs/data_source.rb
|
87
98
|
- lib/svggvs/file.rb
|
99
|
+
- lib/svggvs/pdf.rb
|
88
100
|
- lib/svggvs/session.rb
|
89
101
|
- lib/svggvs/target.rb
|
90
102
|
- lib/svggvs/version.rb
|
@@ -94,6 +106,8 @@ files:
|
|
94
106
|
- skel/images/cat.png.jpg
|
95
107
|
- skel/images/dog.png.jpg
|
96
108
|
- skel/template.svg
|
109
|
+
- spec/spec_helper.rb
|
110
|
+
- spec/svggvs/pdf_spec.rb
|
97
111
|
- svggvs.gemspec
|
98
112
|
has_rdoc: true
|
99
113
|
homepage: ''
|
@@ -120,4 +134,6 @@ rubygems_version: 1.6.2
|
|
120
134
|
signing_key:
|
121
135
|
specification_version: 3
|
122
136
|
summary: Generate sets of card game cards using Inkscape templates and Ruby
|
123
|
-
test_files:
|
137
|
+
test_files:
|
138
|
+
- spec/spec_helper.rb
|
139
|
+
- spec/svggvs/pdf_spec.rb
|