fontcustom 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +1 -1
- data/TODO.md +6 -0
- data/lib/fontcustom.rb +1 -1
- data/lib/fontcustom/actions.rb +28 -0
- data/lib/fontcustom/cli.rb +16 -15
- data/lib/fontcustom/generator/font.rb +31 -35
- data/lib/fontcustom/generator/template.rb +49 -34
- data/lib/fontcustom/options.rb +17 -11
- data/lib/fontcustom/scripts/generate.py +1 -1
- data/lib/fontcustom/templates/_fontcustom-bootstrap-ie7.scss +4 -3
- data/lib/fontcustom/templates/_fontcustom-bootstrap.scss +9 -14
- data/lib/fontcustom/templates/_fontcustom.scss +8 -14
- data/lib/fontcustom/templates/fontcustom-bootstrap-ie7.css +3 -2
- data/lib/fontcustom/templates/fontcustom-bootstrap.css +9 -8
- data/lib/fontcustom/templates/fontcustom-preview.html +2 -3
- data/lib/fontcustom/templates/fontcustom.css +7 -7
- data/lib/fontcustom/templates/fontcustom.yml +25 -66
- data/lib/fontcustom/util.rb +108 -31
- data/lib/fontcustom/version.rb +1 -1
- data/lib/fontcustom/watcher.rb +24 -8
- data/spec/fixtures/{mixed-output → generators}/.fontcustom-data +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/another-font.ttf +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/dont-delete-me.bro +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/fontcustom.css +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf +0 -0
- data/spec/fixtures/{mixed-output → generators/mixed-output}/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff +0 -0
- data/spec/fixtures/{not-a-dir → shared/not-a-dir} +0 -0
- data/spec/fixtures/shared/templates/custom.css +1 -0
- data/spec/fixtures/shared/templates/regular.css +1 -0
- data/spec/fixtures/{empty → shared/vectors-empty}/no_vectors_here.txt +0 -0
- data/spec/fixtures/{vectors → shared/vectors}/C.svg +0 -0
- data/spec/fixtures/{vectors → shared/vectors}/D.svg +0 -0
- data/spec/fixtures/vectors/a_R3ally-eXotic f1Le Name.svg b/data/spec/fixtures/shared/vectors/a_R3ally-eXotic f1Le → Name.svg +0 -0
- data/spec/fixtures/util/config-is-in-dir/fontcustom.yml +1 -0
- data/spec/fixtures/util/fontcustom-malformed.yml +1 -0
- data/spec/fixtures/{fontcustom.yml → util/fontcustom.yml} +0 -0
- data/spec/fixtures/util/rails-like/config/fontcustom.yml +1 -0
- data/spec/fontcustom/actions_spec.rb +22 -0
- data/spec/fontcustom/generator/font_spec.rb +107 -62
- data/spec/fontcustom/generator/template_spec.rb +124 -29
- data/spec/fontcustom/util_spec.rb +299 -53
- data/spec/fontcustom/watcher_spec.rb +56 -10
- data/spec/spec_helper.rb +8 -3
- metadata +46 -34
- data/spec/fixtures/empty-data/.fontcustom-data +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d394a232cd9bca5b67961598fe0696c677241fdf
|
4
|
+
data.tar.gz: 33d86584a9255b4a937551c69342718bde7e7134
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f96ad328c2b67b55eb1379bb362ee42c6e2240a7566976dae7abb615b737da7d6c36d8f1fc23a13d6cb644e65ad8dab5b2d60a5a988c5e5776cc99c37bd0b667
|
7
|
+
data.tar.gz: c1126c9542867c77421d60c04afacf87eaa9844747d833e5b6dc74c23a312212dcf846560ed2282efdc0e1ea015706ff1da5f2acbbcaab5fa8e154c05d6b3268
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.0.1 (7/21/2013)
|
2
|
+
|
3
|
+
Various bugfixes.
|
4
|
+
|
5
|
+
* Set glyph widths automatically ([#95](https://github.com/FontCustom/fontcustom/issues/95))
|
6
|
+
* Fixes Ruby 1.8.7 syntax error ([#94](https://github.com/FontCustom/fontcustom/issues/94))
|
7
|
+
* More robust fontforge error handling ([#99](https://github.com/FontCustom/fontcustom/issues/99))
|
8
|
+
|
1
9
|
## 1.0.0 (4/18/2013)
|
2
10
|
|
3
11
|
Big changes, more flexibility, better workflow. Be sure to check out the [docs](http://fontcustom.com) to see how it all ties together.
|
data/README.md
CHANGED
data/TODO.md
ADDED
data/lib/fontcustom.rb
CHANGED
@@ -2,11 +2,11 @@ require "fontcustom/version"
|
|
2
2
|
require "fontcustom/options"
|
3
3
|
require "fontcustom/error"
|
4
4
|
require "fontcustom/util"
|
5
|
+
require "fontcustom/actions"
|
5
6
|
require "fontcustom/generator/font"
|
6
7
|
require "fontcustom/generator/template"
|
7
8
|
|
8
9
|
module Fontcustom
|
9
|
-
|
10
10
|
##
|
11
11
|
# Clean Ruby API to workaround Thor
|
12
12
|
def compile(options)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "thor/actions"
|
2
|
+
require "thor/shell"
|
3
|
+
require "thor/shell/basic"
|
4
|
+
require "thor/shell/color"
|
5
|
+
|
6
|
+
module Fontcustom
|
7
|
+
module Actions
|
8
|
+
def self.included(base)
|
9
|
+
base.send :include, Thor::Actions
|
10
|
+
end
|
11
|
+
|
12
|
+
# TODO Currently not sure how Thor classes inherit `say_status` from Thor::Shell.
|
13
|
+
# Using the instance variable as a workaround.
|
14
|
+
def say_changed(status, changed)
|
15
|
+
return unless opts[:verbose]
|
16
|
+
message = changed.map do |file|
|
17
|
+
file.gsub!(opts[:project_root], "")
|
18
|
+
file = file[1..-1] if file[0] == "/"
|
19
|
+
file
|
20
|
+
end
|
21
|
+
@shell.say_status status, message.join(" ")
|
22
|
+
end
|
23
|
+
|
24
|
+
def clear_file(file)
|
25
|
+
File.open(file, "w") {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/fontcustom/cli.rb
CHANGED
@@ -8,23 +8,24 @@ module Fontcustom
|
|
8
8
|
include Thor::Actions
|
9
9
|
|
10
10
|
# Actual defaults are stored in Fontcustom::DEFAULT_OPTIONS instead of Thor
|
11
|
-
class_option :
|
12
|
-
class_option :
|
13
|
-
class_option :
|
14
|
-
class_option :
|
15
|
-
class_option :
|
11
|
+
class_option :project_root, :aliases => "-r", :desc => "The base directory that all inputs and outputs are relative to. Default: working directory"
|
12
|
+
class_option :output, :aliases => "-o", :desc => "The output directory (will be created if it doesn't exist). Default: PROJECT_ROOT/FONT_NAME/"
|
13
|
+
class_option :config, :aliases => "-c", :desc => "Path to an optional configuration file. Files at PROJECT_ROOT/fontcustom.yml and PROJECT_ROOT/config/fontcustom.yml are loaded automatically."
|
14
|
+
class_option :templates, :aliases => "-t", :type => :array, :desc => "List of templates to compile alongside fonts. Accepts 'preview css scss bootstrap bootstrap-scss bootstrap-ie7 bootstrap-ie7-scss' or custom templates (advanced, run `fontcustom config` and read the example for more details). Default: 'css preview'"
|
15
|
+
class_option :font_name, :aliases => "-n", :desc => "The font name used in your templates. Also determines the default OUTPUT directory name. Default: 'fontcustom'"
|
16
|
+
class_option :file_hash, :aliases => "-h", :type => :boolean, :desc => "Option to generate font files with asset-busting hashes. Default: true"
|
16
17
|
class_option :css_prefix, :aliases => "-p", :desc => "The prefix for each glyph's CSS class. Default: 'icon-'"
|
17
|
-
class_option :
|
18
|
+
class_option :preprocessor_font_path, :alias => "-s", :desc => "The font path passed to CSS preprocessors (used instead of normal paths in preprocessed CSS templates). Default: none"
|
18
19
|
class_option :debug, :aliases => "-d", :type => :boolean, :desc => "Display debug messages from fontforge. Default: false"
|
19
|
-
class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "Display
|
20
|
+
class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "Display verbose messages. Default: true"
|
20
21
|
|
21
22
|
# Required for Thor::Actions#template
|
22
23
|
def self.source_root
|
23
24
|
File.join Fontcustom::Util.gem_lib_path, "templates"
|
24
25
|
end
|
25
26
|
|
26
|
-
desc "compile [INPUT]", "Generates webfonts and CSS from *.svg and *.eps files in INPUT."
|
27
|
-
def compile(input)
|
27
|
+
desc "compile [INPUT] [OPTIONS]", "Generates webfonts and CSS from *.svg and *.eps files in INPUT."
|
28
|
+
def compile(input = nil)
|
28
29
|
opts = options.merge :input => input
|
29
30
|
opts = Fontcustom::Util.collect_options opts
|
30
31
|
Fontcustom::Generator::Font.start [opts]
|
@@ -33,9 +34,9 @@ module Fontcustom
|
|
33
34
|
puts "ERROR: #{e.message}"
|
34
35
|
end
|
35
36
|
|
36
|
-
desc "watch [INPUT]", "Watches INPUT for changes and regenerates
|
37
|
-
method_option :skip_first, :aliases => "-s", :type => :boolean, :desc => "
|
38
|
-
def watch(input)
|
37
|
+
desc "watch [INPUT] [OPTIONS]", "Watches INPUT for changes and regenerates files automatically. Ctrl + C to stop."
|
38
|
+
method_option :skip_first, :aliases => "-s", :type => :boolean, :desc => "Skip the initial compile upon watching. Default: false"
|
39
|
+
def watch(input = nil)
|
39
40
|
opts = options.merge :input => input, :skip_first => !! options[:skip_first]
|
40
41
|
opts = Fontcustom::Util.collect_options opts
|
41
42
|
Fontcustom::Watcher.new(opts).watch
|
@@ -43,9 +44,9 @@ module Fontcustom
|
|
43
44
|
puts "ERROR: #{e.message}"
|
44
45
|
end
|
45
46
|
|
46
|
-
desc "config [
|
47
|
-
def config(
|
48
|
-
template "fontcustom.yml", File.join(
|
47
|
+
desc "config [DIR]", "Adds an annotated fontcustom.yml to DIR. Default: working directory"
|
48
|
+
def config(dir = Dir.pwd)
|
49
|
+
template "fontcustom.yml", File.join(dir, "fontcustom.yml")
|
49
50
|
end
|
50
51
|
|
51
52
|
desc "version", "Shows the version information."
|
@@ -1,59 +1,56 @@
|
|
1
1
|
require "json"
|
2
2
|
require "thor"
|
3
3
|
require "thor/group"
|
4
|
-
require "thor/
|
4
|
+
require "thor/core_ext/hash_with_indifferent_access"
|
5
5
|
|
6
6
|
module Fontcustom
|
7
7
|
module Generator
|
8
8
|
class Font < Thor::Group
|
9
|
-
include
|
9
|
+
include Actions
|
10
10
|
|
11
11
|
# Instead of passing each option individually we're passing the entire options hash as an argument.
|
12
12
|
# This is DRYier, easier to maintain.
|
13
13
|
argument :opts
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
def prepare_output_dirs
|
16
|
+
dirs = opts[:output].values.uniq
|
17
|
+
dirs.each do |dir|
|
18
|
+
unless File.directory? dir
|
19
|
+
empty_directory dir, :verbose => opts[:verbose]
|
20
|
+
end
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
def get_data
|
25
|
+
datafile = File.join opts[:project_root], ".fontcustom-data"
|
26
|
+
if File.exists? datafile
|
27
|
+
begin
|
28
|
+
data = File.read datafile
|
29
|
+
data = JSON.parse(data, :symbolize_names => true) unless data.empty?
|
30
|
+
@data = data.is_a?(Hash) ? Thor::CoreExt::HashWithIndifferentAccess.new(data) : Fontcustom::DATA_MODEL.dup
|
31
|
+
rescue JSON::ParserError
|
32
|
+
raise Fontcustom::Error, "The .fontcustom-data file at #{datafile} is corrupted. Fix the JSON or delete the file to start from scratch."
|
33
|
+
end
|
28
34
|
else
|
29
|
-
|
30
|
-
add_file File.join(opts[:output], ".fontcustom-data"), :verbose => opts[:verbose]
|
35
|
+
@data = Fontcustom::DATA_MODEL.dup
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
34
|
-
def get_data
|
35
|
-
# file has already been verified/created
|
36
|
-
data = File.read File.join(opts[:output], ".fontcustom-data")
|
37
|
-
data = JSON.parse(data, :symbolize_names => true) unless data.empty?
|
38
|
-
@data = data.is_a?(Hash) ? data : Fontcustom::DATA_MODEL.dup
|
39
|
-
rescue JSON::ParserError
|
40
|
-
raise Fontcustom::Error, "The .fontcustom-data file in #{opts[:output]} is corrupted. Fix the JSON or delete the file to start from scratch."
|
41
|
-
end
|
42
|
-
|
43
39
|
def reset_output
|
44
40
|
return if @data[:fonts].empty?
|
45
41
|
begin
|
46
42
|
deleted = []
|
47
43
|
@data[:fonts].each do |file|
|
48
|
-
remove_file
|
44
|
+
remove_file file, :verbose => false
|
49
45
|
deleted << file
|
50
46
|
end
|
51
47
|
ensure
|
52
48
|
@data[:fonts] = @data[:fonts] - deleted
|
53
49
|
json = JSON.pretty_generate @data
|
54
|
-
file = File.join(opts[:
|
55
|
-
|
56
|
-
append_to_file file, json, :verbose => false
|
50
|
+
file = File.join(opts[:project_root], ".fontcustom-data")
|
51
|
+
clear_file(file)
|
52
|
+
append_to_file file, json, :verbose => false
|
53
|
+
say_changed :removed, deleted
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
@@ -62,7 +59,7 @@ module Fontcustom
|
|
62
59
|
# TODO remove name arg if default is already set in python (or rm from python)
|
63
60
|
name = opts[:font_name] ? " --name " + opts[:font_name] : ""
|
64
61
|
hash = opts[:file_hash] ? "" : " --nohash"
|
65
|
-
cmd = "fontforge -script #{Fontcustom::Util.gem_lib_path}/scripts/generate.py #{opts[:input]} #{opts[:output] + name + hash} 2>&1"
|
62
|
+
cmd = "fontforge -script #{Fontcustom::Util.gem_lib_path}/scripts/generate.py #{opts[:input][:vectors]} #{opts[:output][:fonts] + name + hash} 2>&1"
|
66
63
|
|
67
64
|
output = `#{cmd}`.split("\n")
|
68
65
|
@json = output[3] # JSON
|
@@ -87,20 +84,19 @@ module Fontcustom
|
|
87
84
|
def collect_data
|
88
85
|
@json = JSON.parse(@json, :symbolize_names => true)
|
89
86
|
@data.merge! @json
|
90
|
-
@data[:glyphs].map! { |glyph| glyph.gsub(/\W/, "-")
|
87
|
+
@data[:glyphs].map! { |glyph| glyph.gsub(/\W/, "-") }
|
88
|
+
@data[:fonts].map! { |font| File.join(@opts[:output][:fonts], font) }
|
91
89
|
end
|
92
90
|
|
93
91
|
def announce_files
|
94
|
-
|
95
|
-
@data[:fonts].each { |file| shell.say_status(:create, File.join(opts[:output], file)) }
|
96
|
-
end
|
92
|
+
say_changed :created, @data[:fonts]
|
97
93
|
end
|
98
94
|
|
99
95
|
def save_data
|
100
96
|
json = JSON.pretty_generate @data
|
101
|
-
file = File.join(opts[:
|
102
|
-
|
103
|
-
append_to_file file, json, :verbose =>
|
97
|
+
file = File.join(opts[:project_root], ".fontcustom-data")
|
98
|
+
clear_file(file)
|
99
|
+
append_to_file file, json, :verbose => false
|
104
100
|
end
|
105
101
|
end
|
106
102
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require "json"
|
2
|
+
require "pathname"
|
2
3
|
require "thor"
|
3
4
|
require "thor/group"
|
4
|
-
require "thor/actions"
|
5
5
|
|
6
6
|
module Fontcustom
|
7
7
|
module Generator
|
8
8
|
class Template < Thor::Group
|
9
|
-
include
|
10
|
-
|
11
|
-
# Instead of passing each option individually we're passing the entire options hash as an argument.
|
9
|
+
include Actions
|
10
|
+
|
11
|
+
# Instead of passing each option individually we're passing the entire options hash as an argument.
|
12
12
|
# This is DRYier, easier to maintain.
|
13
|
-
argument :opts
|
13
|
+
argument :opts
|
14
14
|
|
15
15
|
# Required for Thor::Actions#template
|
16
16
|
def self.source_root
|
@@ -18,61 +18,76 @@ module Fontcustom
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get_data
|
21
|
-
data = File.join(opts[:
|
21
|
+
data = File.join(opts[:project_root], ".fontcustom-data")
|
22
22
|
if File.exists? data
|
23
|
-
@data = JSON.parse(File.read(data), :symbolize_names => true)
|
23
|
+
@data = JSON.parse(File.read(data), :symbolize_names => true)
|
24
24
|
else
|
25
|
-
raise Fontcustom::Error, "There's no .fontcustom-data file in #{opts[:
|
25
|
+
raise Fontcustom::Error, "There's no .fontcustom-data file in #{opts[:project_root]}. Try again?"
|
26
26
|
end
|
27
|
-
rescue JSON::ParserError
|
27
|
+
rescue JSON::ParserError
|
28
28
|
# Catches both empty and and malformed files
|
29
|
-
raise Fontcustom::Error, "The .fontcustom-data file in #{opts[:
|
30
|
-
end
|
31
|
-
|
32
|
-
def check_templates
|
33
|
-
if opts[:templates].empty?
|
34
|
-
raise Fontcustom::Error, "No templates were specified. Check your options and try again?"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def update_source_paths
|
39
|
-
source_paths # assigns @source_paths
|
40
|
-
@source_paths.unshift(opts[:input], Dir.pwd)
|
29
|
+
raise Fontcustom::Error, "The .fontcustom-data file in #{opts[:project_root]} is empty or corrupted. Try deleting the file and running Fontcustom::Generator::Font again to regenerate .fontcustom-data."
|
41
30
|
end
|
42
31
|
|
43
32
|
def reset_output
|
44
33
|
return if @data[:templates].empty?
|
45
34
|
begin
|
46
35
|
deleted = []
|
47
|
-
@data[:templates].each do |file|
|
48
|
-
remove_file
|
36
|
+
@data[:templates].each do |file|
|
37
|
+
remove_file file, :verbose => false
|
49
38
|
deleted << file
|
50
39
|
end
|
51
40
|
ensure
|
52
41
|
@data[:templates] = @data[:templates] - deleted
|
53
42
|
json = JSON.pretty_generate @data
|
54
|
-
file = File.join(opts[:
|
55
|
-
|
56
|
-
append_to_file file, json, :verbose => false
|
43
|
+
file = File.join(opts[:project_root], ".fontcustom-data")
|
44
|
+
clear_file(file)
|
45
|
+
append_to_file file, json, :verbose => false
|
46
|
+
say_changed :removed, deleted
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def make_relative_paths
|
51
|
+
name = File.basename @data[:fonts].first, File.extname(@data[:fonts].first)
|
52
|
+
fonts = Pathname.new opts[:output][:fonts]
|
53
|
+
css = Pathname.new opts[:output][:css]
|
54
|
+
preview = Pathname.new opts[:output][:preview]
|
55
|
+
@data[:paths][:css_to_fonts] = File.join fonts.relative_path_from(css).to_s, name
|
56
|
+
@data[:paths][:preview_to_css] = File.join css.relative_path_from(preview).to_s, "fontcustom.css"
|
57
|
+
@data[:paths][:preprocessor_to_fonts] = if opts[:preprocessor_font_path] != ""
|
58
|
+
File.join opts[:preprocessor_font_path], name
|
59
|
+
else
|
60
|
+
@data[:paths][:css_to_fonts]
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
60
64
|
def generate
|
61
65
|
@opts = opts # make available to templates
|
62
|
-
begin
|
66
|
+
begin
|
63
67
|
created = []
|
64
68
|
opts[:templates].each do |source|
|
65
69
|
name = File.basename source
|
66
|
-
|
67
|
-
|
68
|
-
|
70
|
+
ext = File.extname name
|
71
|
+
target = if opts[:output].keys.include? name
|
72
|
+
File.join opts[:output][name], name
|
73
|
+
elsif %w|.css .scss .sass .less .stylus|.include? ext
|
74
|
+
File.join opts[:output][:css], name
|
75
|
+
elsif name == "fontcustom-preview.html"
|
76
|
+
File.join opts[:output][:preview], name
|
77
|
+
else
|
78
|
+
File.join opts[:output][:fonts], name
|
79
|
+
end
|
80
|
+
|
81
|
+
template source, target, :verbose => false
|
82
|
+
created << target
|
69
83
|
end
|
70
84
|
ensure
|
71
|
-
@data[:templates] = (@data[:templates] + created).uniq
|
85
|
+
@data[:templates] = (@data[:templates] + created).uniq
|
72
86
|
json = JSON.pretty_generate @data
|
73
|
-
file = File.join(opts[:
|
74
|
-
|
75
|
-
append_to_file file, json, :verbose =>
|
87
|
+
file = File.join(opts[:project_root], ".fontcustom-data")
|
88
|
+
clear_file(file)
|
89
|
+
append_to_file file, json, :verbose => false
|
90
|
+
say_changed :created, created
|
76
91
|
end
|
77
92
|
end
|
78
93
|
end
|
data/lib/fontcustom/options.rb
CHANGED
@@ -1,21 +1,27 @@
|
|
1
|
+
require "thor/core_ext/hash_with_indifferent_access"
|
2
|
+
|
1
3
|
module Fontcustom
|
2
|
-
|
3
|
-
|
4
|
-
:
|
5
|
-
:
|
6
|
-
:templates => %w|css preview|,
|
4
|
+
# :output and :config are build from arguments
|
5
|
+
DEFAULT_OPTIONS = Thor::CoreExt::HashWithIndifferentAccess.new({
|
6
|
+
:project_root => Dir.pwd,
|
7
|
+
:input => "",
|
8
|
+
:templates => %w|css preview|,
|
7
9
|
:font_name => "fontcustom",
|
8
10
|
:file_hash => true,
|
9
11
|
:css_prefix => "icon-",
|
10
|
-
:
|
12
|
+
:preprocessor_font_path => "",
|
11
13
|
:debug => false,
|
12
14
|
:verbose => true
|
13
|
-
}
|
15
|
+
})
|
14
16
|
|
15
|
-
DATA_MODEL = {
|
17
|
+
DATA_MODEL = Thor::CoreExt::HashWithIndifferentAccess.new({
|
16
18
|
:fonts => [],
|
17
19
|
:templates => [],
|
18
|
-
:
|
19
|
-
:
|
20
|
-
|
20
|
+
:glyphs => [],
|
21
|
+
:paths => {
|
22
|
+
:css_to_fonts => "",
|
23
|
+
:preprocessor_to_fonts => "",
|
24
|
+
:preview_to_css => ""
|
25
|
+
}
|
26
|
+
})
|
21
27
|
end
|
@@ -126,4 +126,4 @@ subprocess.call('ttfautohint -s -n ' + fontfile + '.ttf ' + fontfile + '-hinted.
|
|
126
126
|
|
127
127
|
# Describe output in JSON
|
128
128
|
outname = os.path.basename(fontfile)
|
129
|
-
print json.dumps({'fonts': [outname + '.ttf', outname + '.woff', outname + '.eot', outname + '.svg'], 'glyphs': files
|
129
|
+
print json.dumps({'fonts': [outname + '.ttf', outname + '.woff', outname + '.eot', outname + '.svg'], 'glyphs': files})
|
@@ -1,20 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
@data[:file_name]
|
6
|
-
end
|
7
|
-
%>/*
|
8
|
-
* Font Custom: Bootstrap CSS
|
9
|
-
*/
|
1
|
+
//
|
2
|
+
// Icon Font: <%= @opts[:font_name] %>
|
3
|
+
// Bootstrap Override
|
4
|
+
//
|
10
5
|
|
11
6
|
@font-face {
|
12
7
|
font-family: "<%= @opts[:font_name] %>";
|
13
|
-
src: url("<%=
|
14
|
-
src: url("<%=
|
15
|
-
url("<%=
|
16
|
-
url("<%=
|
17
|
-
url("<%=
|
8
|
+
src: url("<%= @data[:paths][:preprocessor_to_fonts] %>.eot");
|
9
|
+
src: url("<%= @data[:paths][:preprocessor_to_fonts] %>.eot?#iefix") format("embedded-opentype"),
|
10
|
+
url("<%= @data[:paths][:preprocessor_to_fonts] %>.woff") format("woff"),
|
11
|
+
url("<%= @data[:paths][:preprocessor_to_fonts] %>.ttf") format("truetype"),
|
12
|
+
url("<%= @data[:paths][:preprocessor_to_fonts] %>.svg#<%= @opts[:font_name] %>") format("svg");
|
18
13
|
font-weight: normal;
|
19
14
|
font-style: normal;
|
20
15
|
}
|