fontcustom 0.1.4 → 1.0.0.pre
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/CHANGELOG.md +14 -0
- data/CONTRIBUTING.md +15 -8
- data/Rakefile +4 -6
- data/bin/fontcustom +1 -1
- data/fontcustom.gemspec +2 -7
- data/lib/fontcustom.rb +6 -21
- data/lib/fontcustom/cli.rb +46 -18
- data/lib/fontcustom/error.rb +4 -0
- data/lib/fontcustom/generator/font.rb +101 -0
- data/lib/fontcustom/generator/template.rb +80 -0
- data/lib/fontcustom/options.rb +20 -0
- data/lib/fontcustom/scripts/generate.py +22 -6
- data/lib/fontcustom/templates/_fontcustom.scss +72 -0
- data/lib/fontcustom/templates/fontcustom-ie7.css +10 -10
- data/lib/fontcustom/templates/fontcustom.css +19 -19
- data/lib/fontcustom/templates/fontcustom.html +119 -0
- data/lib/fontcustom/templates/fontcustom.yml +23 -0
- data/lib/fontcustom/util.rb +89 -0
- data/lib/fontcustom/version.rb +1 -1
- data/lib/fontcustom/watcher.rb +50 -25
- data/spec/fixtures/empty-data/.fontcustom-data +0 -0
- data/spec/fixtures/fontcustom.yml +1 -0
- data/spec/fixtures/mixed-output/.fontcustom-data +17 -0
- data/spec/fixtures/mixed-output/another-font.ttf +0 -0
- data/spec/fixtures/mixed-output/dont-delete-me.bro +0 -0
- data/spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot +0 -0
- data/spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg +102 -0
- data/spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf +0 -0
- data/spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff +0 -0
- data/spec/fixtures/mixed-output/fontcustom.css +108 -0
- data/spec/fixtures/not-a-dir +0 -0
- data/spec/fontcustom/generator/font_spec.rb +183 -0
- data/spec/fontcustom/generator/template_spec.rb +106 -0
- data/spec/fontcustom/util_spec.rb +109 -0
- data/spec/fontcustom/watcher_spec.rb +68 -0
- data/spec/spec_helper.rb +32 -22
- metadata +47 -100
- data/lib/fontcustom/generator.rb +0 -105
- data/lib/fontcustom/templates/test.html +0 -100
- data/spec/fontcustom/fontcustom_spec.rb +0 -42
- data/spec/fontcustom/generator_spec.rb +0 -75
- data/spec/fontcustom/watcher_spec.rb.off +0 -34
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fontcustom::Util do
|
4
|
+
def util
|
5
|
+
Fontcustom::Util
|
6
|
+
end
|
7
|
+
|
8
|
+
context ".check_fontforge" do
|
9
|
+
it "should raise error if fontforge isn't installed" do
|
10
|
+
util.stub(:"`").and_return("")
|
11
|
+
expect { util.check_fontforge }.to raise_error Fontcustom::Error, /install fontforge/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context ".collect_options" do
|
16
|
+
it "should return defaults when called without arguments" do
|
17
|
+
options = util.collect_options
|
18
|
+
defaults = Fontcustom::DEFAULT_OPTIONS.dup
|
19
|
+
|
20
|
+
# ignore :templates and :output since they're generated
|
21
|
+
options.delete(:templates)
|
22
|
+
defaults.delete(:templates)
|
23
|
+
options.delete(:output)
|
24
|
+
defaults.delete(:output)
|
25
|
+
|
26
|
+
options.should == defaults
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should overwrite defaults with config file" do
|
30
|
+
options = util.collect_options :config => fixture("fontcustom.yml")
|
31
|
+
options[:font_name].should == "custom-name-from-config"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should overwrite config file and defaults with CLI options" do
|
35
|
+
options = util.collect_options :config => fixture("fontcustom.yml"), :font_name => "custom-name-from-cli"
|
36
|
+
options[:font_name].should == "custom-name-from-cli"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should normalize file name" do
|
40
|
+
options = util.collect_options :font_name => " A_stR4nG3 nAm3 "
|
41
|
+
options[:font_name].should == "a_str4ng3-nam3"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context ".get_config_path" do
|
46
|
+
it "should search for fontcustom.yml if options[:config] is a dir" do
|
47
|
+
options = { :config => fixture("") }
|
48
|
+
util.get_config_path(options).should == fixture("fontcustom.yml")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should search use options[:config] if it's a file" do
|
52
|
+
options = { :config => fixture("fontcustom.yml") }
|
53
|
+
util.get_config_path(options).should == fixture("fontcustom.yml")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should search in input dir if no options[:config] is given" do
|
57
|
+
options = { :input => fixture("") }
|
58
|
+
util.get_config_path(options).should == fixture("fontcustom.yml")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should return false if neither exist" do
|
62
|
+
options = { :input => fixture("vectors") }
|
63
|
+
util.get_config_path(options).should be_false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context ".get_template_paths" do
|
68
|
+
it "should ensure that 'css' is included with 'preview'" do
|
69
|
+
lib = util.gem_lib_path
|
70
|
+
options = { :input => fixture("vectors"), :templates => %W|preview| }
|
71
|
+
templates = util.get_template_paths options
|
72
|
+
templates.should =~ [
|
73
|
+
File.join(lib, "templates", "fontcustom.css"),
|
74
|
+
File.join(lib, "templates", "fontcustom.html")
|
75
|
+
]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should expand shorthand for packaged templates" do
|
79
|
+
lib = util.gem_lib_path
|
80
|
+
options = { :input => fixture("vectors"), :templates => %W|css scss preview| }
|
81
|
+
templates = util.get_template_paths options
|
82
|
+
templates.should =~ [
|
83
|
+
File.join(lib, "templates", "fontcustom.css"),
|
84
|
+
File.join(lib, "templates", "_fontcustom.scss"),
|
85
|
+
File.join(lib, "templates", "fontcustom.html")
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should search in Dir.pwd first" do
|
90
|
+
Dir.chdir fixture("")
|
91
|
+
options = { :templates => %W|not-a-dir| }
|
92
|
+
templates = util.get_template_paths options
|
93
|
+
templates.should =~ ["not-a-dir"]
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should search in options[:input] second" do
|
97
|
+
options = { :input => fixture("empty"), :templates => %W|no_vectors_here.txt| }
|
98
|
+
templates = util.get_template_paths options
|
99
|
+
templates.should =~ [fixture("empty/no_vectors_here.txt")]
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should raise an error if a template does not exist" do
|
103
|
+
options = { :input => fixture("vectors"), :templates => %W|css #{fixture("fake-template")}| }
|
104
|
+
expect { util.get_template_paths options }.to raise_error(
|
105
|
+
Fontcustom::Error, /couldn't find.+#{fixture("fake-template")}/
|
106
|
+
)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "fileutils"
|
3
|
+
require "fontcustom/watcher"
|
4
|
+
|
5
|
+
describe Fontcustom::Watcher do
|
6
|
+
def watcher(options)
|
7
|
+
Fontcustom::Generator::Font.stub :start
|
8
|
+
Fontcustom::Generator::Template.stub :start
|
9
|
+
opts = Fontcustom::Util.collect_options options
|
10
|
+
opts[:blocking] = false # undocumented — non-blocking use of watcher
|
11
|
+
Fontcustom::Watcher.new opts
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#watch" do
|
15
|
+
it "should call generators on init" do
|
16
|
+
Fontcustom::Generator::Font.should_receive(:start).once
|
17
|
+
Fontcustom::Generator::Template.should_receive(:start).once
|
18
|
+
w = watcher :input => fixture("vectors"), :output => fixture("watcher-test")
|
19
|
+
# silence output
|
20
|
+
capture(:stdout) do
|
21
|
+
w.watch
|
22
|
+
w.stop
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not call generators on init if options[:skip_first] is passed" do
|
27
|
+
Fontcustom::Generator::Font.should_not_receive(:start)
|
28
|
+
Fontcustom::Generator::Template.should_not_receive(:start)
|
29
|
+
w = watcher :input => fixture("vectors"), :output => fixture("watcher-test"), :skip_first => true
|
30
|
+
capture(:stdout) do
|
31
|
+
w.watch
|
32
|
+
w.stop
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should call generators when vectors change" do
|
37
|
+
Fontcustom::Generator::Font.should_receive(:start).once
|
38
|
+
Fontcustom::Generator::Template.should_receive(:start).once
|
39
|
+
w = watcher :input => fixture("vectors"), :output => fixture("watcher-test"), :skip_first => true
|
40
|
+
capture(:stdout) do
|
41
|
+
begin
|
42
|
+
w.watch
|
43
|
+
FileUtils.cp fixture("vectors/C.svg"), fixture("vectors/test.svg")
|
44
|
+
ensure
|
45
|
+
w.stop
|
46
|
+
new = fixture("vectors/test.svg")
|
47
|
+
FileUtils.rm(new) if File.exists?(new)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should do nothing when non-vectors change" do
|
53
|
+
Fontcustom::Generator::Font.should_not_receive(:start)
|
54
|
+
Fontcustom::Generator::Template.should_not_receive(:start)
|
55
|
+
w = watcher :input => fixture("vectors"), :output => fixture("watcher-test"), :skip_first => true
|
56
|
+
capture(:stdout) do
|
57
|
+
begin
|
58
|
+
w.watch
|
59
|
+
FileUtils.touch fixture("vectors/non-vector-file")
|
60
|
+
ensure
|
61
|
+
w.stop
|
62
|
+
new = fixture("vectors/non-vector-file")
|
63
|
+
FileUtils.rm(new) if File.exists?(new)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,29 +1,39 @@
|
|
1
|
-
require '
|
1
|
+
require 'rspec'
|
2
|
+
require 'json'
|
3
|
+
require File.expand_path('../../lib/fontcustom.rb', __FILE__)
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
RSpec.configure do |c|
|
6
|
+
def fixture(path)
|
7
|
+
File.join(File.expand_path('../fixtures', __FILE__), path)
|
8
|
+
end
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
def data_file_contents
|
11
|
+
{
|
12
|
+
:fonts => %w|
|
13
|
+
fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff
|
14
|
+
fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf
|
15
|
+
fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot
|
16
|
+
fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg
|
17
|
+
|,
|
18
|
+
:templates => %w|fontcustom.css|,
|
19
|
+
:file_name => "fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e",
|
20
|
+
:glyphs => %w|a_r3ally-exotic-f1le-name c d|
|
21
|
+
}
|
22
|
+
end
|
11
23
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
eval "$#{stream} = StringIO.new"
|
16
|
-
yield
|
17
|
-
result = eval("$#{stream}").string
|
18
|
-
ensure
|
19
|
-
eval("$#{stream} = #{stream.upcase}")
|
20
|
-
end
|
24
|
+
def fontforge_output
|
25
|
+
"Copyright (c) 2000-2012 by George Williams.\n Executable based on sources from 14:57 GMT 31-Jul-2012-D.\n Library based on sources from 14:57 GMT 31-Jul-2012.\n#{data_file_contents.to_json}"
|
26
|
+
end
|
21
27
|
|
22
|
-
|
28
|
+
def capture(stream)
|
29
|
+
begin
|
30
|
+
stream = stream.to_s
|
31
|
+
eval "$#{stream} = StringIO.new"
|
32
|
+
yield
|
33
|
+
result = eval("$#{stream}").string
|
34
|
+
ensure
|
35
|
+
eval("$#{stream} = #{stream.upcase}")
|
23
36
|
end
|
37
|
+
result
|
24
38
|
end
|
25
39
|
end
|
26
|
-
|
27
|
-
Spork.each_run do
|
28
|
-
require File.expand_path('../../lib/fontcustom.rb', __FILE__)
|
29
|
-
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fontcustom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0.pre
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Yifei Zhang
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-04-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -108,88 +108,8 @@ dependencies:
|
|
108
108
|
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
|
112
|
-
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
|
-
requirements:
|
116
|
-
- - ! '>='
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
|
-
requirements:
|
124
|
-
- - ! '>='
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: spork
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
|
-
requirements:
|
132
|
-
- - ! '>='
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version: '0'
|
135
|
-
type: :development
|
136
|
-
prerelease: false
|
137
|
-
version_requirements: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
|
-
requirements:
|
140
|
-
- - ! '>='
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: '0'
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: guard-spork
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
|
-
requirements:
|
148
|
-
- - ! '>='
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: '0'
|
151
|
-
type: :development
|
152
|
-
prerelease: false
|
153
|
-
version_requirements: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ! '>='
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '0'
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: guard-rspec
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
|
-
requirements:
|
164
|
-
- - ! '>='
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
|
-
requirements:
|
172
|
-
- - ! '>='
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: '0'
|
175
|
-
- !ruby/object:Gem::Dependency
|
176
|
-
name: rb-fsevent
|
177
|
-
requirement: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
|
-
requirements:
|
180
|
-
- - ~>
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 0.9.1
|
183
|
-
type: :development
|
184
|
-
prerelease: false
|
185
|
-
version_requirements: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
|
-
requirements:
|
188
|
-
- - ~>
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
version: 0.9.1
|
191
|
-
description: Transforms EPS and SVG vectors into icon webfonts. Generates Bootstrap
|
192
|
-
compatible CSS for easy inclusion in your projects.
|
111
|
+
description: Transforms EPS and SVG vectors into icon webfonts. Generates CSS (or
|
112
|
+
your preferred alternative) for easy inclusion in your projects.
|
193
113
|
email:
|
194
114
|
- yz@yifei.co
|
195
115
|
- joshua@gross.is
|
@@ -210,24 +130,42 @@ files:
|
|
210
130
|
- fontcustom.gemspec
|
211
131
|
- lib/fontcustom.rb
|
212
132
|
- lib/fontcustom/cli.rb
|
213
|
-
- lib/fontcustom/
|
133
|
+
- lib/fontcustom/error.rb
|
134
|
+
- lib/fontcustom/generator/font.rb
|
135
|
+
- lib/fontcustom/generator/template.rb
|
136
|
+
- lib/fontcustom/options.rb
|
214
137
|
- lib/fontcustom/scripts/eotlitetool.py
|
215
138
|
- lib/fontcustom/scripts/generate.py
|
216
139
|
- lib/fontcustom/scripts/sfnt2woff
|
140
|
+
- lib/fontcustom/templates/_fontcustom.scss
|
217
141
|
- lib/fontcustom/templates/fontcustom-ie7.css
|
218
142
|
- lib/fontcustom/templates/fontcustom.css
|
219
|
-
- lib/fontcustom/templates/
|
143
|
+
- lib/fontcustom/templates/fontcustom.html
|
144
|
+
- lib/fontcustom/templates/fontcustom.yml
|
145
|
+
- lib/fontcustom/util.rb
|
220
146
|
- lib/fontcustom/version.rb
|
221
147
|
- lib/fontcustom/watcher.rb
|
148
|
+
- spec/fixtures/empty-data/.fontcustom-data
|
222
149
|
- spec/fixtures/empty/no_vectors_here.txt
|
150
|
+
- spec/fixtures/fontcustom.yml
|
151
|
+
- spec/fixtures/mixed-output/.fontcustom-data
|
152
|
+
- spec/fixtures/mixed-output/another-font.ttf
|
153
|
+
- spec/fixtures/mixed-output/dont-delete-me.bro
|
154
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot
|
155
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg
|
156
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf
|
157
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff
|
158
|
+
- spec/fixtures/mixed-output/fontcustom.css
|
159
|
+
- spec/fixtures/not-a-dir
|
223
160
|
- spec/fixtures/vectors/C.svg
|
224
161
|
- spec/fixtures/vectors/D.svg
|
225
162
|
- spec/fixtures/vectors/a_R3ally-eXotic f1Le Name.svg
|
226
|
-
- spec/fontcustom/
|
227
|
-
- spec/fontcustom/
|
228
|
-
- spec/fontcustom/
|
163
|
+
- spec/fontcustom/generator/font_spec.rb
|
164
|
+
- spec/fontcustom/generator/template_spec.rb
|
165
|
+
- spec/fontcustom/util_spec.rb
|
166
|
+
- spec/fontcustom/watcher_spec.rb
|
229
167
|
- spec/spec_helper.rb
|
230
|
-
homepage: http://
|
168
|
+
homepage: http://fontcustom.com
|
231
169
|
licenses: []
|
232
170
|
post_install_message:
|
233
171
|
rdoc_options: []
|
@@ -241,16 +179,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
241
179
|
version: '0'
|
242
180
|
segments:
|
243
181
|
- 0
|
244
|
-
hash:
|
182
|
+
hash: -3519366396623315767
|
245
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
184
|
none: false
|
247
185
|
requirements:
|
248
|
-
- - ! '
|
186
|
+
- - ! '>'
|
249
187
|
- !ruby/object:Gem::Version
|
250
|
-
version:
|
251
|
-
segments:
|
252
|
-
- 0
|
253
|
-
hash: 2717137854162198806
|
188
|
+
version: 1.3.1
|
254
189
|
requirements: []
|
255
190
|
rubyforge_project:
|
256
191
|
rubygems_version: 1.8.24
|
@@ -258,11 +193,23 @@ signing_key:
|
|
258
193
|
specification_version: 3
|
259
194
|
summary: Generate custom icon webfonts from the comfort of the command line.
|
260
195
|
test_files:
|
196
|
+
- spec/fixtures/empty-data/.fontcustom-data
|
261
197
|
- spec/fixtures/empty/no_vectors_here.txt
|
198
|
+
- spec/fixtures/fontcustom.yml
|
199
|
+
- spec/fixtures/mixed-output/.fontcustom-data
|
200
|
+
- spec/fixtures/mixed-output/another-font.ttf
|
201
|
+
- spec/fixtures/mixed-output/dont-delete-me.bro
|
202
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot
|
203
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg
|
204
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf
|
205
|
+
- spec/fixtures/mixed-output/fontcustom-cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff
|
206
|
+
- spec/fixtures/mixed-output/fontcustom.css
|
207
|
+
- spec/fixtures/not-a-dir
|
262
208
|
- spec/fixtures/vectors/C.svg
|
263
209
|
- spec/fixtures/vectors/D.svg
|
264
210
|
- spec/fixtures/vectors/a_R3ally-eXotic f1Le Name.svg
|
265
|
-
- spec/fontcustom/
|
266
|
-
- spec/fontcustom/
|
267
|
-
- spec/fontcustom/
|
211
|
+
- spec/fontcustom/generator/font_spec.rb
|
212
|
+
- spec/fontcustom/generator/template_spec.rb
|
213
|
+
- spec/fontcustom/util_spec.rb
|
214
|
+
- spec/fontcustom/watcher_spec.rb
|
268
215
|
- spec/spec_helper.rb
|
data/lib/fontcustom/generator.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'thor/group'
|
3
|
-
|
4
|
-
module Fontcustom
|
5
|
-
class Generator < Thor::Group
|
6
|
-
include Thor::Actions
|
7
|
-
|
8
|
-
desc 'Generates webfonts from given directory of vectors.'
|
9
|
-
|
10
|
-
argument :input, :type => :string
|
11
|
-
class_option :output, :aliases => '-o'
|
12
|
-
class_option :name, :aliases => '-n'
|
13
|
-
class_option :font_path, :aliases => '-f'
|
14
|
-
class_option :nohash, :type => :boolean, :default => false
|
15
|
-
class_option :debug, :type => :boolean, :default => false
|
16
|
-
class_option :html, :type => :boolean, :default => false
|
17
|
-
|
18
|
-
def self.source_root
|
19
|
-
File.dirname(__FILE__)
|
20
|
-
end
|
21
|
-
|
22
|
-
def verify_fontforge
|
23
|
-
if `which fontforge` == ''
|
24
|
-
raise Thor::Error, 'Please install fontforge first.'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def verify_input_dir
|
29
|
-
if ! File.directory?(input)
|
30
|
-
raise Thor::Error, "#{input} doesn't exist or isn't a directory."
|
31
|
-
elsif Dir[File.join(input, '*.{svg,eps}')].empty?
|
32
|
-
raise Thor::Error, "#{input} doesn't contain any vectors (*.svg or *.eps files)."
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def verify_or_create_output_dir
|
37
|
-
@output = options.output.nil? ? File.join(File.dirname(input), 'fontcustom') : options.output
|
38
|
-
empty_directory(@output) unless File.directory?(@output)
|
39
|
-
end
|
40
|
-
|
41
|
-
def normalize_name
|
42
|
-
@name = if options.name
|
43
|
-
options.name.gsub(/\W/, '-').downcase
|
44
|
-
else
|
45
|
-
'fontcustom'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def cleanup_output_dir
|
50
|
-
css = File.join(@output, 'fontcustom.css')
|
51
|
-
css_ie7 = File.join(@output, 'fontcustom-ie7.css')
|
52
|
-
test_html = File.join(@output, 'test.html')
|
53
|
-
old_name = if File.exists? css
|
54
|
-
line = IO.readlines(css)[5] # font-family: "Example Font";
|
55
|
-
line.scan(/".+"/)[0][1..-2].gsub(/\W/, '-').downcase # => 'example-font'
|
56
|
-
else
|
57
|
-
'fontcustom'
|
58
|
-
end
|
59
|
-
|
60
|
-
old_files = Dir[File.join(@output, old_name + '-*.{woff,ttf,eot,svg}')]
|
61
|
-
old_files << css if File.exists?(css)
|
62
|
-
old_files << css_ie7 if File.exists?(css_ie7)
|
63
|
-
old_files << test_html if File.exists?(test_html)
|
64
|
-
old_files.each {|file| remove_file file }
|
65
|
-
end
|
66
|
-
|
67
|
-
def generate
|
68
|
-
gem_file_path = File.expand_path(File.join(File.dirname(__FILE__)))
|
69
|
-
name = options.name ? ' --name ' + @name : ''
|
70
|
-
nohash = options.nohash ? ' --nohash' : ''
|
71
|
-
|
72
|
-
# suppress fontforge message
|
73
|
-
# TODO get font name and classes from script (without showing fontforge message)
|
74
|
-
cmd = "fontforge -script #{gem_file_path}/scripts/generate.py #{input} #{@output + name + nohash}"
|
75
|
-
unless options.debug
|
76
|
-
cmd += " > /dev/null 2>&1"
|
77
|
-
end
|
78
|
-
`#{cmd}`
|
79
|
-
end
|
80
|
-
|
81
|
-
def show_paths
|
82
|
-
file = Dir[File.join(@output, @name + '*.ttf')].first
|
83
|
-
@path = file.chomp('.ttf')
|
84
|
-
|
85
|
-
['woff','ttf','eot','svg'].each do |type|
|
86
|
-
say_status(:create, @path + '.' + type)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def create_stylesheet
|
91
|
-
files = Dir[File.join(input, '*.{svg,eps}')]
|
92
|
-
@classes = files.map {|file| File.basename(file)[0..-5].gsub(/\W/, '-').downcase }
|
93
|
-
if(!options.font_path.nil?)
|
94
|
-
font_path = (options.font_path) ? options.font_path : ''
|
95
|
-
@path = File.join(font_path, File.basename(@path))
|
96
|
-
else
|
97
|
-
@path = File.basename(@path)
|
98
|
-
end
|
99
|
-
|
100
|
-
template('templates/fontcustom.css', File.join(@output, 'fontcustom.css'))
|
101
|
-
template('templates/fontcustom-ie7.css', File.join(@output, 'fontcustom-ie7.css'))
|
102
|
-
template('templates/test.html', File.join(@output, 'test.html')) if options.html
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|