fontcustom 1.3.0.beta → 1.3.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1abf5b322a257728ac1e293a8392f3592e9954b7
4
- data.tar.gz: cb6b2ca5e590ae76878050e2317ab7de0cd74041
3
+ metadata.gz: a89156ba7ef7d8a12424e06e6768e0973270b6cf
4
+ data.tar.gz: 83bbb3c5f0aa93ab04b089e642f1b57e3f9bc04d
5
5
  SHA512:
6
- metadata.gz: 0476cea6aef78118bf1fd85caa008d3de5b2ab465c92619a639eec104ec98178072d4f231a3d1ffee152031f28f9814ad3f2a51fc00c2c5a6a1f1312f2093be4
7
- data.tar.gz: 40046d513e692b44bf504969844f48fe905b79b67f7cb9c5b5fe4f5b8ef3a32cc6bde44d83f6173a876956a402d1be5c9fc637b059f532aa6803055c46360155
6
+ metadata.gz: 576122be6d77bcdf8fc9f4b577fc124b84efabd8370121404b9f137263f1d315f69e1a48d975a90cb37a1bb2be19af0655250ced8fb52d14d9f38c303f531c36
7
+ data.tar.gz: d1f6317e39596082c8c9ffe884f227a62867590140eb548cade80bf3f50d4dcd966296a29a4a62bd0ef7c0fa3a10a9ffe310ee9199a20020abb13e03f85dace1
data/CHANGELOG.md CHANGED
@@ -1,18 +1,18 @@
1
1
  ## 1.3.0.beta (11/25/2013)
2
2
 
3
- The big news: fixed glyph code points. Automatically assigned for now, but changing them by hand is just a matter of modifying the generated `.fontcustom-manifest.json`.
3
+ **Delete your old `.fontcustom-manifest.json` and output directories before using this version.**
4
4
 
5
- Lots of internal changes / streamlining on this one. A few breaking changes (`css_prefix`, custom template syntax, possibly others). Error messages and docs are still a bit sparse — my apologies in advance.
5
+ The big news: fixed glyph code points. Automatically assigned for now, but changing them by hand is just a matter of modifying the generated `.fontcustom-manifest.json`. A few breaking changes (`css_prefix`, custom template syntax, possibly others). Error messages and docs are currently sparse — my apologies in advance.
6
6
 
7
7
  * Fixed glyph code points ([#56](https://github.com/FontCustom/fontcustom/issues/56))
8
8
  * Changes `css_prefix` to `css_selector` to allow greater flexibility ([#126](https://github.com/FontCustom/fontcustom/pull/126))
9
9
  * Skips compilation if inputs have not changed (and `force` option to bypass checks)
10
10
  * Adds CSS template helpers for convenience and DRYness
11
- * Drops bootstrap templates (maintaince overhead, unsure if anyone was using them)
11
+ * Drops bootstrap templates (maintenance overhead, unsure if anyone was using them)
12
12
 
13
13
  Next up:
14
14
 
15
- * Storing relative paths in the manifest for collaborative editing ([#149](https://github.com/FontCustom/fontcustom/pull/149))
15
+ * Storing relative paths for collaborative editing ([#149](https://github.com/FontCustom/fontcustom/pull/149))
16
16
 
17
17
  ## 1.2.0 (11/2/2013)
18
18
 
data/README.md CHANGED
@@ -6,12 +6,10 @@
6
6
 
7
7
  **Icon fonts from the command line.**
8
8
 
9
- Generate cross-browser compatible icon fonts and supporting files (e.g.
10
- @font-face CSS) from a collection of SVGs.
9
+ Generate cross-browser icon fonts and supporting files (@font-face CSS, etc.) from a collection of SVGs.
11
10
 
12
- [Documentation](http://fontcustom.com)<br/>
13
- [Changelog](https://github.com/FontCustom/fontcustom/blob/master/CHANGELOG.md)<br/>
14
- [Support](https://github.com/FontCustom/fontcustom/issues)<br/>
11
+ [Changelog](https://github.com/FontCustom/fontcustom/blob/master/CHANGELOG.md)<br>
12
+ [Bugs/Support](https://github.com/FontCustom/fontcustom/issues)<br>
15
13
  [Contribute!](https://github.com/FontCustom/fontcustom/blob/master/CONTRIBUTING.md)
16
14
 
17
15
  ### Installation
@@ -35,10 +33,8 @@ gem install fontcustom
35
33
  ```sh
36
34
  fontcustom compile path/to/vectors # Compiles icons into `fontcustom/`
37
35
  fontcustom watch path/to/vectors # Compiles when vectors are changed/added/removed
38
-
39
- fontcustom compile # Uses configuration options from `fontcustom.yml`
40
- fontcustom watch
41
-
36
+ fontcustom compile # Uses configuration file at `fontcustom.yml`
37
+ # or `config/fontcustom.yml`
42
38
  fontcustom config # Generate a blank a configuration file
43
39
  fontcustom help # See all options
44
40
  ```
@@ -47,10 +43,11 @@ fontcustom help # See all options
47
43
 
48
44
  To preserve options between compiles, create a configuration file with
49
45
  `fontcustom config`. This should live in the directory where you plan on
50
- running `fontcustom` commands.
46
+ running `fontcustom` commands. Most of the following can also be used as
47
+ command line flags (`--css-selector`, etc.).
51
48
 
52
49
  ```yml
53
- # General Options (defaults shown)
50
+ # (defaults shown)
54
51
  font_name: fontcustom # Names the font and sets the name and directory
55
52
  # of generated files
56
53
  project_root: (pwd) # Context for all relative paths
@@ -58,16 +55,15 @@ input: (project_root) # Where vectors and templates are located
58
55
  output: (project_root)/(font name) # Where generated files will be saved
59
56
  config: (pwd)/fontcustom.yml # Optional path to a configuration file
60
57
  templates: [ css, preview ] # Templates to generate alongside fonts
61
- # Possible values: preview, css, scss,
62
- # scss-rails, bootstrap, bootstrap-scss,
63
- # bootstrap-ie7, bootstrap-ie7-scss
64
- css_prefix: icon- # CSS class prefix
65
- no_hash: false # Don't add asset-busting hashes
66
- preprocessor_path: "" # Font path used in CSS proprocessor templates
58
+ # Possible values: preview, css, scss, scss-rails
59
+ css_selector: .icon-{{glyph}} # Template for CSS classes
60
+ 6
61
+ preprocessor_path: "" # Font path used in proprocessor templates (Sass, etc.)
62
+ no_hash: false # Don't add asset-busting hashes to font files
67
63
  autowidth: false # Automatically size glyphs based on the width of
68
64
  # their individual vectors
69
65
  debug: false # Output raw messages from fontforge
70
- quiet: false # Silence all output messages
66
+ quiet: false # Silence all messages except errors
71
67
 
72
68
  # For more control over file locations,
73
69
  # set input and output as Yaml hashes
@@ -79,21 +75,18 @@ output:
79
75
  fonts: app/assets/fonts # required
80
76
  css: app/assets/stylesheets
81
77
  preview: app/views/styleguide
82
- custom-template.yml: custom/path
78
+ 6
83
79
  ```
84
80
 
85
- ### SVG Recommendations
86
-
87
- All vectors are imported as a single layer with colors and strokes ignored. If
88
- you run into trouble, try combining your paths and ensuring that you don't have
89
- any white fills (which show up as colored).
90
-
91
- By default, Font Custom scales each vector to fit a 512x512 canvas with a
92
- baseline at 448. In practice, that means as long as your SVG `viewBox` is
93
- square, icons will look exactly like your SVGs.
81
+ ### SVG Guidelines
94
82
 
95
- If you set the `autowidth` option, Font Custom will trim the widths of each
96
- glyph to the vector width. Heights are unaffected.
83
+ * All colors will be rendered identically including white fills.
84
+ * Make transparent colors solid. SVGs with transparency will be skipped.
85
+ * For greater precision, prefer fills to strokes (especially if your icon includes curves).
86
+ * Keep your icon within a square `viewBox`. Font Custom scales each SVG to fit
87
+ a 512x512 canvas with a baseline at 448.
88
+ * Setting `autowidth` to true trims horizontal white space from each glyph. This can be much easier
89
+ than centering dozens of SVGs by hand.
97
90
 
98
91
  ---
99
92
 
data/TODO.md CHANGED
@@ -2,15 +2,20 @@
2
2
 
3
3
  ### 1.3.0
4
4
 
5
- * tests, error messages, and docs for generate.py / SVG bugs
6
5
  * tests, error messages, and docs for template generator
7
6
  * store relative paths in manifest (rebuild in generator/util)
7
+
8
+ * Detect old manifest / show error message
9
+ * In template/fontcustom.yml, clarify that input/output can be hashes
10
+
11
+ * Add more travis CLI rubies / thor versions?
8
12
  * documentation for template helpers
9
13
  * redirect fontcustom.com to github repo (use wiki for documentation)
10
14
 
11
- ### Low Priority
15
+ ### Future
12
16
 
13
17
  * conserve code points: http://stackoverflow.com/questions/8794430/ruby-finding-lowest-free-id-in-an-id-array
18
+ * strip /fill: rgba(...)/ from SVGs so that transparent SVGs don't fail
14
19
  * more flexible input/ouput hashes (regex or file extensions)
15
20
  * sass template with variables
16
21
  * less template with variables
@@ -61,7 +61,7 @@ module Fontcustom
61
61
  File.join Fontcustom.gem_lib, "templates"
62
62
  end
63
63
 
64
- desc "compile [INPUT] [OPTIONS]", "Generates webfonts and templates from *.svg and *.eps files in INPUT. Default: `pwd`"
64
+ desc "compile [INPUT] [OPTIONS]", "Generates webfonts and templates from *.svg files in INPUT. Default: `pwd`"
65
65
  def compile(input = nil)
66
66
  Base.new(options.merge(:input => input)).compile
67
67
  rescue Fontcustom::Error => e
@@ -47,7 +47,7 @@ module Fontcustom
47
47
  glyphs = {}
48
48
  files.each do |file|
49
49
  name = File.basename file, ".svg"
50
- name = name.strip.gsub(/\W/, "-").downcase
50
+ name = name.strip.gsub(/\W/, "-")
51
51
  glyphs[name.to_sym] = { :source => file }
52
52
  end
53
53
 
@@ -73,9 +73,13 @@ module Fontcustom
73
73
  stdout = stdout.split("\n")
74
74
  stdout = stdout[1..-1] if stdout[0] == "CreateAllPyModules()"
75
75
 
76
+ if stderr.include? "Failed to parse color rgba("
77
+ say_message :warn, "Transparent glyphs are not supported. Check your SVGs."
78
+ end
79
+
76
80
  debug_msg = " Try again with --debug for more details."
77
81
  if @options[:debug]
78
- say_message :debug, "#{stderr}\n#{' ' * 14}#{stdout}", :red
82
+ say_message :debug, "#{stderr}\n#{' ' * 14}#{stdout}"
79
83
  debug_msg = ""
80
84
  end
81
85
 
@@ -19,6 +19,7 @@ module Fontcustom
19
19
  load_config
20
20
  merge_options
21
21
  clean_font_name
22
+ clean_css_selector
22
23
  set_manifest_path
23
24
  set_input_paths
24
25
  set_output_paths
@@ -92,6 +93,14 @@ module Fontcustom
92
93
  @options[:font_name] = @options[:font_name].strip.gsub(/\W/, "-")
93
94
  end
94
95
 
96
+ def clean_css_selector
97
+ unless @options[:css_selector].include? "{{glyph}}"
98
+ raise Fontcustom::Error,
99
+ "CSS selector `#{@options[:css_selector]}` should contain the \"{{glyph}}\" placeholder."
100
+ end
101
+ @options[:css_selector] = @options[:css_selector].strip.gsub(/[^\{\}\w]/, "-")
102
+ end
103
+
95
104
  def set_manifest_path
96
105
  @options[:manifest] = if ! @options[:manifest].nil?
97
106
  expand_path @options[:manifest]
@@ -107,35 +116,21 @@ module Fontcustom
107
116
  @options[:input] = symbolize_hash(@options[:input])
108
117
  if @options[:input].has_key? :vectors
109
118
  @options[:input][:vectors] = expand_path @options[:input][:vectors]
110
- unless File.directory? @options[:input][:vectors]
111
- raise Fontcustom::Error,
112
- "INPUT[:vectors] (`#{relative_to_root(@options[:input][:vectors])}`) should be "\
113
- "a directory. Check `#{relative_to_root(@options[:config])}` or your CLI options."
114
- end
119
+ check_input @options[:input][:vectors]
115
120
  else
116
- raise Fontcustom::Error,
117
- "INPUT should have a :vectors key. Check `#{relative_to_root(@options[:config])}` "\
118
- "or your CLI options."
121
+ raise Fontcustom::Error,
122
+ "Input paths (assigned as a hash) should have a :vectors key. Check your options."
119
123
  end
120
124
 
121
125
  if @options[:input].has_key? :templates
122
126
  @options[:input][:templates] = expand_path @options[:input][:templates]
123
- unless File.directory? @options[:input][:templates]
124
- raise Fontcustom::Error,
125
- "INPUT[:templates] (`#{relative_to_root(@options[:input][:templates])}`) "\
126
- "should be a directory. Check `#{relative_to_root(@options[:config])}` or "\
127
- "your CLI options."
128
- end
127
+ check_input @options[:input][:templates]
129
128
  else
130
129
  @options[:input][:templates] = @options[:input][:vectors]
131
130
  end
132
131
  else
133
132
  input = @options[:input] ? expand_path(@options[:input]) : @options[:project_root]
134
- unless File.directory? input
135
- raise Fontcustom::Error,
136
- "INPUT (`#{relative_to_root(input)}`) should be a directory. Check "\
137
- "`#{relative_to_root(@options[:config])}` or your CLI options."
138
- end
133
+ check_input input
139
134
  @options[:input] = { :vectors => input, :templates => input }
140
135
  end
141
136
 
@@ -148,17 +143,15 @@ module Fontcustom
148
143
  if @options[:output].is_a? Hash
149
144
  @options[:output] = symbolize_hash(@options[:output])
150
145
  unless @options[:output].has_key? :fonts
151
- raise Fontcustom::Error,
152
- "OUTPUT should have a :fonts key. Check `#{relative_to_root(@options[:config])}` "\
153
- "or your CLI options."
146
+ raise Fontcustom::Error,
147
+ "Output paths (assigned as a hash) should have a :fonts key. Check your options."
154
148
  end
155
149
 
156
150
  @options[:output].each do |key, val|
157
151
  @options[:output][key] = expand_path val
158
152
  if File.exists?(val) && ! File.directory?(val)
159
- raise Fontcustom::Error,
160
- "OUTPUT[:#{key.to_s}] (`#{relative_to_root(@options[:output][key])}`) should be "\
161
- "a directory. Check `#{relative_to_root(@options[:config])}` or your CLI options."
153
+ raise Fontcustom::Error,
154
+ "Output `#{relative_to_root(@options[:output][key])}` exists but isn't a directory. Check your options."
162
155
  end
163
156
  end
164
157
 
@@ -168,9 +161,8 @@ module Fontcustom
168
161
  if @options[:output].is_a? String
169
162
  output = expand_path @options[:output]
170
163
  if File.exists?(output) && ! File.directory?(output)
171
- raise Fontcustom::Error,
172
- "OUTPUT (`#{relative_to_root(output)}`) should be a directory. Check "\
173
- "`#{relative_to_root(@options[:config])}` or your CLI options."
164
+ raise Fontcustom::Error,
165
+ "Output `#{relative_to_root(output)}` exists but isn't a directory. Check your options."
174
166
  end
175
167
  else
176
168
  output = File.join @options[:project_root], @options[:font_name]
@@ -214,14 +206,22 @@ module Fontcustom
214
206
  else
215
207
  template = File.expand_path File.join(@options[:input][:templates], template) unless template[0] == "/"
216
208
  unless File.exists? template
217
- config = @options[:config] ? " `#{relative_to_root(@options[:config])}` or" : ""
218
209
  raise Fontcustom::Error,
219
- "Custom template `#{relative_to_root(template)}` doesn't exist. "\
220
- "Check#{config} your CLI options."
210
+ "Custom template `#{relative_to_root(template)}` doesn't exist. Check your options."
221
211
  end
222
212
  template
223
213
  end
224
214
  end
225
215
  end
216
+
217
+ def check_input(dir)
218
+ if ! File.exists? dir
219
+ raise Fontcustom::Error,
220
+ "Input `#{relative_to_root(dir)}` doesn't exist. Check your options."
221
+ elsif ! File.directory? dir
222
+ raise Fontcustom::Error,
223
+ "Input `#{relative_to_root(dir)}` isn't a directory. Check your options."
224
+ end
225
+ end
226
226
  end
227
227
  end
@@ -125,8 +125,9 @@ module Fontcustom
125
125
  # Messages
126
126
  #
127
127
 
128
- def say_message(status, message, color = :yellow)
128
+ def say_message(status, message, color = nil)
129
129
  return if _options[:quiet] && status != :error
130
+ color = :red if [:error, :debug, :warn].include?(status)
130
131
  say_status status, message, color
131
132
  end
132
133
 
@@ -1,3 +1,3 @@
1
1
  module Fontcustom
2
- VERSION = "1.3.0.beta"
2
+ VERSION = "1.3.0.beta2"
3
3
  end
@@ -62,7 +62,7 @@ module Fontcustom
62
62
  changed = modified + added + removed
63
63
  compile unless changed.empty?
64
64
  rescue Fontcustom::Error => e
65
- say_message :error, e.message, :red
65
+ say_message :error, e.message
66
66
  end
67
67
  end
68
68
  end
@@ -13,7 +13,7 @@ describe Fontcustom::Generator::Font do
13
13
  gen = Fontcustom::Generator::Font.new manifest
14
14
  gen.stub :create_fonts
15
15
  gen.generate
16
- File.read(manifest).should match(/"glyphs":.+"c":/m)
16
+ File.read(manifest).should match(/"glyphs":.+"C":/m)
17
17
  end
18
18
  end
19
19
 
@@ -50,22 +50,22 @@ describe Fontcustom::Generator::Font do
50
50
  gen.should_receive(:save_manifest)
51
51
  gen.send :set_glyph_info
52
52
  manifest = gen.instance_variable_get(:@manifest)
53
- manifest[:glyphs][:"a_r3ally-exotic-f1le-name"].should include(:codepoint => 61696)
54
- manifest[:glyphs][:c].should include(:codepoint => 61697)
55
- manifest[:glyphs][:d].should include(:codepoint => 61698)
53
+ manifest[:glyphs][:C].should include(:codepoint => 61696)
54
+ manifest[:glyphs][:D].should include(:codepoint => 61697)
55
+ manifest[:glyphs][:"a_R3ally-eXotic-f1Le-Name"].should include(:codepoint => 61698)
56
56
  end
57
57
 
58
58
  it "should not change codepoints of existing glyphs" do
59
59
  gen = generator
60
60
  gen.instance_variable_set :@options, :input => {:vectors => fixture("shared/vectors")}
61
- gen.instance_variable_set :@manifest, :glyphs => {:c => {:source => "foo", :codepoint => 61699}}
61
+ gen.instance_variable_set :@manifest, :glyphs => {:C => {:source => "foo", :codepoint => 61699}}
62
62
 
63
63
  gen.should_receive(:save_manifest)
64
64
  gen.send :set_glyph_info
65
65
  manifest = gen.instance_variable_get(:@manifest)
66
- manifest[:glyphs][:"a_r3ally-exotic-f1le-name"].should include(:codepoint => 61700)
67
- manifest[:glyphs][:c].should include(:codepoint => 61699)
68
- manifest[:glyphs][:d].should include(:codepoint => 61701)
66
+ manifest[:glyphs][:C].should include(:codepoint => 61699)
67
+ manifest[:glyphs][:D].should include(:codepoint => 61700)
68
+ manifest[:glyphs][:"a_R3ally-eXotic-f1Le-Name"].should include(:codepoint => 61701)
69
69
  end
70
70
  end
71
71
 
@@ -207,7 +207,7 @@ describe Fontcustom::Options do
207
207
  :config => "fontcustom.yml",
208
208
  :input => { :vectors => "shared/not-a-dir" }
209
209
  }
210
- expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /should be a directory/
210
+ expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /isn't a directory/
211
211
  end
212
212
  end
213
213
 
@@ -240,7 +240,7 @@ describe Fontcustom::Options do
240
240
  :config => "fontcustom.yml",
241
241
  :input => "shared/not-a-dir"
242
242
  }
243
- expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /should be a directory/
243
+ expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /isn't a directory/
244
244
  end
245
245
  end
246
246
  end
@@ -354,7 +354,7 @@ describe Fontcustom::Options do
354
354
  :config => "fontcustom.yml",
355
355
  :output => "shared/not-a-dir"
356
356
  }
357
- expect { o.send :set_output_paths }.to raise_error Fontcustom::Error, /should be a directory/
357
+ expect { o.send :set_output_paths }.to raise_error Fontcustom::Error, /isn't a directory/
358
358
  end
359
359
  end
360
360
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontcustom
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.beta
4
+ version: 1.3.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Zau
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-25 00:00:00.000000000 Z
12
+ date: 2013-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json