fontcustom 1.3.0.beta2 → 1.3.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +38 -17
- data/TODO.md +1 -2
- data/lib/fontcustom/generator/font.rb +5 -5
- data/lib/fontcustom/generator/template.rb +27 -21
- data/lib/fontcustom/options.rb +12 -12
- data/lib/fontcustom/templates/fontcustom.yml +22 -13
- data/lib/fontcustom/utility.rb +10 -5
- data/lib/fontcustom/version.rb +1 -1
- data/spec/fontcustom/utility_spec.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a863f3b75e4669343c50c8f137aaae1c5c5df1fd
|
4
|
+
data.tar.gz: 4997708bd8b627e3ec060c32fa0c06a7a6de4835
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3743b80862699178d2c6754a198af545c38358db18563d3ffe5110b777c7350e47a1e505720e14a8620b1ae03f048e34dc091ad60ec15f224b934b56ef2368f6
|
7
|
+
data.tar.gz: 8f977e595ebf6232b06d7e69b2aead55be38727c104092340fcf20617b3b691d1f6bdf6a31d6c3a1c37a6c3080467eceb4e2f7524509c5c35a4c9d3ba643950e
|
data/README.md
CHANGED
@@ -42,31 +42,22 @@ fontcustom help # See all options
|
|
42
42
|
### Configuration
|
43
43
|
|
44
44
|
To preserve options between compiles, create a configuration file with
|
45
|
-
`fontcustom config`. This should live in the directory where you
|
46
|
-
|
47
|
-
|
45
|
+
`fontcustom config`. This should live in the directory where you run
|
46
|
+
all `fontcustom` commands. Each of the following has its own command
|
47
|
+
line flag (`--css-selector`, etc.). Defaults values are shown.
|
48
|
+
|
49
|
+
**Basics**
|
48
50
|
|
49
51
|
```yml
|
50
|
-
# (defaults shown)
|
51
|
-
font_name: fontcustom # Names the font and sets the name and directory
|
52
|
-
# of generated files
|
53
52
|
project_root: (pwd) # Context for all relative paths
|
54
53
|
input: (project_root) # Where vectors and templates are located
|
55
54
|
output: (project_root)/(font name) # Where generated files will be saved
|
56
55
|
config: (pwd)/fontcustom.yml # Optional path to a configuration file
|
57
|
-
templates: [ css, preview ] # Templates to generate alongside fonts
|
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
|
63
|
-
autowidth: false # Automatically size glyphs based on the width of
|
64
|
-
# their individual vectors
|
65
56
|
debug: false # Output raw messages from fontforge
|
66
57
|
quiet: false # Silence all messages except errors
|
67
58
|
|
68
|
-
# For more control over file locations,
|
69
|
-
#
|
59
|
+
# For more control over file locations, set
|
60
|
+
# input and output as hashes instead of strings
|
70
61
|
input:
|
71
62
|
vectors: path/to/vectors # required
|
72
63
|
templates: path/to/templates
|
@@ -75,9 +66,39 @@ output:
|
|
75
66
|
fonts: app/assets/fonts # required
|
76
67
|
css: app/assets/stylesheets
|
77
68
|
preview: app/views/styleguide
|
78
|
-
6
|
79
69
|
```
|
80
70
|
|
71
|
+
**Fonts**
|
72
|
+
|
73
|
+
```yml
|
74
|
+
font_name: fontcustom # Also sets the default output directory and
|
75
|
+
# the name of generated stock templates
|
76
|
+
no_hash: false # Don't add asset-busting hashes to font files
|
77
|
+
autowidth: false # Automatically size glyphs based on the width of
|
78
|
+
# their individual vectors
|
79
|
+
```
|
80
|
+
|
81
|
+
**Templates**
|
82
|
+
|
83
|
+
```yml
|
84
|
+
templates: [ css, preview ] # List of templates to generate alongside fonts
|
85
|
+
# Possible values: preview, css, scss, scss-rails
|
86
|
+
css_selector: .icon-{{glyph}} # CSS selector format (`{{glyph}}` is replaced)
|
87
|
+
preprocessor_path: "" # Font path used in CSS proprocessor templates
|
88
|
+
|
89
|
+
# Custom templates should live in the `input`
|
90
|
+
# or `input[:templates]` directory and be added
|
91
|
+
# to `templates` as their basename:
|
92
|
+
templates: [ preview, VectorIcons.less ]
|
93
|
+
```
|
94
|
+
|
95
|
+
Custom templates have access to `@options`, `@manifest`, and the following ERB helpers:
|
96
|
+
|
97
|
+
* `font_name`
|
98
|
+
* `font_face`: FontSpring's [Bulletproof @font-face syntax](http://www.fontspring.com/blog/further-hardening-of-the-bulletproof-syntax)
|
99
|
+
* `glyph_selectors`: comma-separated list of all selectors
|
100
|
+
* `glyphs`: all selectors and their codepoint assignments (`.icon-example:before { content: "\f103"; }`)
|
101
|
+
|
81
102
|
### SVG Guidelines
|
82
103
|
|
83
104
|
* All colors will be rendered identically — including white fills.
|
data/TODO.md
CHANGED
@@ -2,11 +2,10 @@
|
|
2
2
|
|
3
3
|
### 1.3.0
|
4
4
|
|
5
|
-
* tests, error messages, and docs for template generator
|
6
5
|
* store relative paths in manifest (rebuild in generator/util)
|
7
6
|
|
7
|
+
* reactivate watcher
|
8
8
|
* Detect old manifest / show error message
|
9
|
-
* In template/fontcustom.yml, clarify that input/output can be hashes
|
10
9
|
|
11
10
|
* Add more travis CLI rubies / thor versions?
|
12
11
|
* documentation for template helpers
|
@@ -49,6 +49,9 @@ module Fontcustom
|
|
49
49
|
name = File.basename file, ".svg"
|
50
50
|
name = name.strip.gsub(/\W/, "-")
|
51
51
|
glyphs[name.to_sym] = { :source => file }
|
52
|
+
if File.read(file).include? "rgba"
|
53
|
+
say_message :warn, "`#{relative_path(file)}` contains transparency and will be skipped."
|
54
|
+
end
|
52
55
|
end
|
53
56
|
|
54
57
|
# Dir.glob returns a different order depending on ruby
|
@@ -73,13 +76,10 @@ module Fontcustom
|
|
73
76
|
stdout = stdout.split("\n")
|
74
77
|
stdout = stdout[1..-1] if stdout[0] == "CreateAllPyModules()"
|
75
78
|
|
76
|
-
if stderr.include? "Failed to parse color rgba("
|
77
|
-
say_message :warn, "Transparent glyphs are not supported. Check your SVGs."
|
78
|
-
end
|
79
|
-
|
80
79
|
debug_msg = " Try again with --debug for more details."
|
81
80
|
if @options[:debug]
|
82
|
-
|
81
|
+
messages = stderr.split("\n") + stdout
|
82
|
+
say_message :debug, messages.join(line_break)
|
83
83
|
debug_msg = ""
|
84
84
|
end
|
85
85
|
|
@@ -42,30 +42,14 @@ module Fontcustom
|
|
42
42
|
def create_files
|
43
43
|
@glyphs = @manifest[:glyphs]
|
44
44
|
created = []
|
45
|
-
packaged = %w|fontcustom-bootstrap-ie7.css fontcustom.css _fontcustom-bootstrap-ie7.scss _fontcustom-rails.scss
|
46
|
-
fontcustom-bootstrap.css fontcustom-preview.html _fontcustom-bootstrap.scss _fontcustom.scss|
|
47
|
-
css_exts = %w|.css .scss .sass .less .stylus|
|
48
45
|
begin
|
49
46
|
@options[:templates].each do |source|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
target.sub! DEFAULT_OPTIONS[:font_name], @options[:font_name]
|
56
|
-
end
|
57
|
-
|
58
|
-
target = if @options[:output].keys.include? name.to_sym
|
59
|
-
File.join @options[:output][name.to_sym], target
|
60
|
-
elsif css_exts.include? ext
|
61
|
-
File.join @options[:output][:css], target
|
62
|
-
elsif name == "fontcustom-preview.html"
|
63
|
-
File.join @options[:output][:preview], target
|
64
|
-
else
|
65
|
-
File.join @options[:output][:fonts], target
|
47
|
+
begin
|
48
|
+
target = template_target source
|
49
|
+
template source, target, :verbose => false, :force => true
|
50
|
+
rescue => e
|
51
|
+
raise Fontcustom::Error, "Could not generate template `#{relative_path(source)}`:#{line_break + e.message}"
|
66
52
|
end
|
67
|
-
|
68
|
-
template source, target, :verbose => false, :force => true
|
69
53
|
created << target
|
70
54
|
end
|
71
55
|
ensure
|
@@ -75,6 +59,28 @@ module Fontcustom
|
|
75
59
|
end
|
76
60
|
end
|
77
61
|
|
62
|
+
def template_target(source)
|
63
|
+
packaged = %w|fontcustom.css _fontcustom.scss _fontcustom-rails.scss fontcustom-preview.html|
|
64
|
+
css_exts = %w|.css .scss .sass .less .stylus|
|
65
|
+
name = File.basename source
|
66
|
+
ext = File.extname source
|
67
|
+
target = name.dup
|
68
|
+
|
69
|
+
if packaged.include?(name) && @options[:font_name] != DEFAULT_OPTIONS[:font_name]
|
70
|
+
target.sub! DEFAULT_OPTIONS[:font_name], @options[:font_name]
|
71
|
+
end
|
72
|
+
|
73
|
+
if @options[:output].keys.include? name.to_sym
|
74
|
+
File.join @options[:output][name.to_sym], target
|
75
|
+
elsif css_exts.include? ext
|
76
|
+
File.join @options[:output][:css], target
|
77
|
+
elsif name == "fontcustom-preview.html"
|
78
|
+
File.join @options[:output][:preview], target
|
79
|
+
else
|
80
|
+
File.join @options[:output][:fonts], target
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
78
84
|
#
|
79
85
|
# Template Helpers
|
80
86
|
#
|
data/lib/fontcustom/options.rb
CHANGED
@@ -50,7 +50,7 @@ module Fontcustom
|
|
50
50
|
File.join path, "fontcustom.yml"
|
51
51
|
|
52
52
|
else
|
53
|
-
raise Fontcustom::Error, "No configuration file found at `#{
|
53
|
+
raise Fontcustom::Error, "No configuration file found at `#{relative_path(path)}`."
|
54
54
|
end
|
55
55
|
else
|
56
56
|
# fontcustom.yml is in the project_root
|
@@ -70,16 +70,16 @@ module Fontcustom
|
|
70
70
|
def load_config
|
71
71
|
@config_options = {}
|
72
72
|
if @cli_options[:config]
|
73
|
-
say_message :debug, "Using settings from `#{
|
73
|
+
say_message :debug, "Using settings from `#{relative_path(@cli_options[:config])}`." if @cli_options[:debug]
|
74
74
|
begin
|
75
75
|
config = YAML.load File.open(@cli_options[:config])
|
76
76
|
if config # empty YAML returns false
|
77
77
|
@config_options = symbolize_hash(config)
|
78
78
|
else
|
79
|
-
say_message :warn, "`#{
|
79
|
+
say_message :warn, "`#{relative_path(@cli_options[:config])}` was empty. Using defaults."
|
80
80
|
end
|
81
81
|
rescue Exception => e
|
82
|
-
raise Fontcustom::Error, "Error parsing `#{
|
82
|
+
raise Fontcustom::Error, "Error parsing `#{relative_path(@cli_options[:config])}`:\n#{e.message}"
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -98,7 +98,7 @@ module Fontcustom
|
|
98
98
|
raise Fontcustom::Error,
|
99
99
|
"CSS selector `#{@options[:css_selector]}` should contain the \"{{glyph}}\" placeholder."
|
100
100
|
end
|
101
|
-
@options[:css_selector] = @options[:css_selector].strip.gsub(/[
|
101
|
+
@options[:css_selector] = @options[:css_selector].strip.gsub(/[^\.#\{\}\w]/, "-")
|
102
102
|
end
|
103
103
|
|
104
104
|
def set_manifest_path
|
@@ -135,7 +135,7 @@ module Fontcustom
|
|
135
135
|
end
|
136
136
|
|
137
137
|
if Dir[File.join(@options[:input][:vectors], "*.svg")].empty?
|
138
|
-
raise Fontcustom::Error, "`#{
|
138
|
+
raise Fontcustom::Error, "`#{relative_path(@options[:input][:vectors])}` doesn't contain any SVGs."
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
@@ -151,7 +151,7 @@ module Fontcustom
|
|
151
151
|
@options[:output][key] = expand_path val
|
152
152
|
if File.exists?(val) && ! File.directory?(val)
|
153
153
|
raise Fontcustom::Error,
|
154
|
-
"Output `#{
|
154
|
+
"Output `#{relative_path(@options[:output][key])}` exists but isn't a directory. Check your options."
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
@@ -162,11 +162,11 @@ module Fontcustom
|
|
162
162
|
output = expand_path @options[:output]
|
163
163
|
if File.exists?(output) && ! File.directory?(output)
|
164
164
|
raise Fontcustom::Error,
|
165
|
-
"Output `#{
|
165
|
+
"Output `#{relative_path(output)}` exists but isn't a directory. Check your options."
|
166
166
|
end
|
167
167
|
else
|
168
168
|
output = File.join @options[:project_root], @options[:font_name]
|
169
|
-
say_message :debug, "Generated files will be saved to `#{
|
169
|
+
say_message :debug, "Generated files will be saved to `#{relative_path(output)}/`." if @options[:debug]
|
170
170
|
end
|
171
171
|
|
172
172
|
@options[:output] = {
|
@@ -207,7 +207,7 @@ module Fontcustom
|
|
207
207
|
template = File.expand_path File.join(@options[:input][:templates], template) unless template[0] == "/"
|
208
208
|
unless File.exists? template
|
209
209
|
raise Fontcustom::Error,
|
210
|
-
"Custom template `#{
|
210
|
+
"Custom template `#{relative_path(template)}` doesn't exist. Check your options."
|
211
211
|
end
|
212
212
|
template
|
213
213
|
end
|
@@ -217,10 +217,10 @@ module Fontcustom
|
|
217
217
|
def check_input(dir)
|
218
218
|
if ! File.exists? dir
|
219
219
|
raise Fontcustom::Error,
|
220
|
-
"Input `#{
|
220
|
+
"Input `#{relative_path(dir)}` doesn't exist. Check your options."
|
221
221
|
elsif ! File.directory? dir
|
222
222
|
raise Fontcustom::Error,
|
223
|
-
"Input `#{
|
223
|
+
"Input `#{relative_path(dir)}` isn't a directory. Check your options."
|
224
224
|
end
|
225
225
|
end
|
226
226
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# --------------------------------------------------------------------------- #
|
2
2
|
# Project Info
|
3
|
-
#
|
3
|
+
# Defaults shown. Learn more about these options by running
|
4
4
|
# `fontcustom help` or visiting <http://fontcustom.com>.
|
5
5
|
# --------------------------------------------------------------------------- #
|
6
6
|
|
@@ -15,20 +15,27 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
# --------------------------------------------------------------------------- #
|
18
|
-
#
|
19
|
-
# Relative paths are expanded from PROJECT_ROOT (defaults to the directory
|
20
|
-
# where the fontcustom command is run). INPUT and OUTPUT can be strings or
|
21
|
-
# hashes or file types / names.
|
18
|
+
# Input Paths
|
22
19
|
# --------------------------------------------------------------------------- #
|
23
20
|
|
24
|
-
#
|
25
|
-
#manifest: tmp/fontcustom
|
21
|
+
#input: assets/fonts/fontcustom/source # as a string
|
26
22
|
|
27
|
-
#
|
23
|
+
# OR
|
24
|
+
|
25
|
+
#input: # as a hash
|
28
26
|
# vectors: app/assets/fonts/fontcustom/vectors # required
|
29
27
|
# templates: app/assets/fonts/fontcustom/templates
|
30
28
|
|
31
|
-
|
29
|
+
|
30
|
+
# --------------------------------------------------------------------------- #
|
31
|
+
# Output Paths
|
32
|
+
# --------------------------------------------------------------------------- #
|
33
|
+
|
34
|
+
#output: assets/fonts/fontcustom # as a string
|
35
|
+
|
36
|
+
# OR
|
37
|
+
|
38
|
+
#output: # as a hash
|
32
39
|
# fonts: app/assets/fonts # required
|
33
40
|
# css: app/assets/stylesheets
|
34
41
|
# preview: app/views/styleguide
|
@@ -37,10 +44,12 @@
|
|
37
44
|
|
38
45
|
# --------------------------------------------------------------------------- #
|
39
46
|
# Templates
|
40
|
-
# Included in Font Custom:
|
41
|
-
# preview, css, scss, scss-rails
|
47
|
+
# Included in Font Custom: preview, css, scss, scss-rails
|
42
48
|
# Custom templates should be saved in the INPUT[:templates] directory and
|
43
|
-
# referenced by their
|
49
|
+
# referenced by their baserame.
|
44
50
|
# --------------------------------------------------------------------------- #
|
45
51
|
|
46
|
-
#templates:
|
52
|
+
#templates:
|
53
|
+
# - scss
|
54
|
+
# - preview
|
55
|
+
# - my-custom-template.yml
|
data/lib/fontcustom/utility.rb
CHANGED
@@ -70,7 +70,7 @@ module Fontcustom
|
|
70
70
|
end
|
71
71
|
|
72
72
|
# TODO Is this robust enough?
|
73
|
-
def
|
73
|
+
def relative_path(path)
|
74
74
|
path = path.sub(_options[:project_root], "")
|
75
75
|
path = path[1..-1] if path[0] == "/"
|
76
76
|
path = "." if path.empty?
|
@@ -84,7 +84,7 @@ module Fontcustom
|
|
84
84
|
def write_file(file, content = "", message = nil, message_body = nil)
|
85
85
|
File.open(file, "w") { |f| f.write(content) }
|
86
86
|
if message
|
87
|
-
body = message_body ||
|
87
|
+
body = message_body || relative_path(file)
|
88
88
|
say_message message, body
|
89
89
|
end
|
90
90
|
end
|
@@ -95,7 +95,7 @@ module Fontcustom
|
|
95
95
|
JSON.parse(json, :symbolize_names => true)
|
96
96
|
rescue JSON::ParserError
|
97
97
|
raise Fontcustom::Error,
|
98
|
-
"Couldn't parse `#{
|
98
|
+
"Couldn't parse `#{relative_path file}`. Fix the invalid "\
|
99
99
|
"JSON or delete the file to start from scratch."
|
100
100
|
end
|
101
101
|
end
|
@@ -133,8 +133,13 @@ module Fontcustom
|
|
133
133
|
|
134
134
|
def say_changed(status, changed)
|
135
135
|
return if _options[:quiet]
|
136
|
-
message = changed.map { |file|
|
137
|
-
say_status status, message.join(
|
136
|
+
message = changed.map { |file| relative_path(file) }
|
137
|
+
say_status status, message.join(line_break)
|
138
|
+
end
|
139
|
+
|
140
|
+
# magic number for Thor say_status line breaks
|
141
|
+
def line_break
|
142
|
+
"\n#{" " * 14}"
|
138
143
|
end
|
139
144
|
|
140
145
|
private
|
data/lib/fontcustom/version.rb
CHANGED
@@ -118,16 +118,16 @@ describe Fontcustom::Utility do
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
context "#
|
121
|
+
context "#relative_path" do
|
122
122
|
it "should trim project root from paths" do
|
123
123
|
gen = Generator.new
|
124
|
-
path = gen.
|
124
|
+
path = gen.relative_path fixture "test/path"
|
125
125
|
path.should == "test/path"
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should trim beginning slash" do
|
129
129
|
gen = Generator.new
|
130
|
-
path = gen.
|
130
|
+
path = gen.relative_path "/test/path"
|
131
131
|
path.should == "test/path"
|
132
132
|
end
|
133
133
|
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.
|
4
|
+
version: 1.3.0.beta3
|
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-
|
12
|
+
date: 2013-12-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|