fontcustom 1.1.0.pre2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/CONTRIBUTING.md +2 -3
- data/README.md +37 -12
- data/Rakefile +3 -3
- data/fontcustom.gemspec +11 -10
- data/lib/fontcustom.rb +18 -22
- data/lib/fontcustom/cli.rb +29 -30
- data/lib/fontcustom/generator/font.rb +23 -34
- data/lib/fontcustom/generator/template.rb +26 -24
- data/lib/fontcustom/options.rb +51 -48
- data/lib/fontcustom/scripts/generate.py +2 -2
- data/lib/fontcustom/templates/_fontcustom-bootstrap.scss +5 -5
- data/lib/fontcustom/templates/_fontcustom-rails.scss +5 -5
- data/lib/fontcustom/templates/_fontcustom.scss +8 -5
- data/lib/fontcustom/templates/fontcustom-bootstrap-ie7.css +1 -1
- data/lib/fontcustom/templates/fontcustom-bootstrap.css +1 -1
- data/lib/fontcustom/templates/fontcustom-preview.html +67 -22
- data/lib/fontcustom/templates/fontcustom.css +4 -1
- data/lib/fontcustom/templates/fontcustom.yml +14 -14
- data/lib/fontcustom/util.rb +18 -8
- data/lib/fontcustom/version.rb +1 -1
- data/lib/fontcustom/watcher.rb +24 -22
- data/spec/fixtures/shared/templates/custom.css +6 -0
- data/spec/fixtures/shared/templates/regular.css +3 -0
- data/spec/fontcustom/generator/font_spec.rb +14 -14
- data/spec/fontcustom/generator/template_spec.rb +34 -21
- data/spec/fontcustom/options_spec.rb +45 -69
- data/spec/fontcustom/util_spec.rb +26 -5
- data/spec/fontcustom/watcher_spec.rb +6 -6
- data/spec/spec_helper.rb +8 -8
- metadata +11 -11
- data/TODO.md +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c910ad06fd6a63497415cf449da20e6c72f3471
|
4
|
+
data.tar.gz: 85b86e23d8aed1278bacede23d4f9c8980408df6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e82e218abb14391f1c9c3f95e4da315417052ca6675604dbdc50eae9bac0df27c1d543131023d796db1a53b892d135b5854ad7e0bcc4cadc6e3baf3e8f4e98f
|
7
|
+
data.tar.gz: 7b73f06d71838bdb39064a1f8fdc628db26a99056150e363e105e1d308fbca274c5c14add4ee9855ac51885d41508c0bd3689710298650d68673c05ba6691087
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
## 1.1.0 (9/22/2013)
|
2
|
+
|
3
|
+
More customizable interface for vastly improved workflow.
|
4
|
+
|
5
|
+
* Specify where input vectors/templates are stored ([#89](https://github.com/FontCustom/fontcustom/issues/89))
|
6
|
+
* Specify where output fonts/templates are saved ([#89](https://github.com/FontCustom/fontcustom/issues/89))
|
7
|
+
* Stock templates are saved as `#{font_name}.css` instead of `_fontcustom.css`
|
8
|
+
* More robust path handling (relative paths, customizable `project_root`)
|
9
|
+
* User-friendly variables for usage in custom templates
|
10
|
+
* Rails-friendly template
|
11
|
+
* Enable HTML data-attributes usage ([#118](https://github.com/FontCustom/fontcustom/pull/118))
|
12
|
+
* Helper characters in preview ([#107](https://github.com/FontCustom/fontcustom/pull/107))
|
13
|
+
* More robust execution of fontforge command ([#114](https://github.com/FontCustom/fontcustom/pull/114))
|
14
|
+
* Allow captial letters in font names ([#92](https://github.com/FontCustom/fontcustom/issues/92))
|
15
|
+
* More helpful, colorful messages
|
16
|
+
* More intuitive flags (`--verbose=false` => `--quiet`, `--file-hash=false` => `--no-hash`)
|
17
|
+
* More intuitive version (`fontcustom version` => `fontcustom --version`) ([#115](https://github.com/FontCustom/fontcustom/issues/115))
|
18
|
+
|
1
19
|
## 1.0.1 (7/21/2013)
|
2
20
|
|
3
21
|
Various bugfixes.
|
data/CONTRIBUTING.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Contributor Guidelines
|
2
2
|
|
3
|
-
Thanks for helping make Font Custom better. This project was born out of an
|
3
|
+
Thanks for helping make Font Custom better. This project was born out of an overheard conversation between two devs in a NYC coffee shop — it's come a long ways thanks to the support of folks like you.
|
4
4
|
|
5
5
|
## Conventions
|
6
6
|
|
@@ -11,8 +11,7 @@ If you catch a typo or a particularly unsightly piece of code — please _do_ le
|
|
11
11
|
## Process
|
12
12
|
|
13
13
|
* Visit [issues](https://github.com/FontCustom/fontcustom/issues) for ideas.
|
14
|
-
* Fork the repo
|
15
|
-
* `master` == current stable release
|
14
|
+
* Fork the repo.
|
16
15
|
* Create a topic branch. `git checkout -b my_sweet_feature`
|
17
16
|
* Add your tests. Run tests with `rake`.
|
18
17
|
* Develop your feature.
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# FontCustom v1.0
|
1
|
+
# FontCustom v1.1.0
|
2
2
|
|
3
|
-
**Generate
|
3
|
+
**Generate icon webfonts from the comfort of the command line.**
|
4
4
|
|
5
5
|
[Full documentation](http://fontcustom.com)<br/>
|
6
6
|
[Changelog](https://github.com/FontCustom/fontcustom/blob/master/CHANGELOG.md)<br/>
|
@@ -17,21 +17,46 @@ gem install fontcustom
|
|
17
17
|
## Quick Start
|
18
18
|
|
19
19
|
```sh
|
20
|
-
fontcustom compile path/to/vectors
|
21
|
-
fontcustom
|
22
|
-
fontcustom watch path/to/vectors -t=scss preview # Compiles when vectors are changed/added/deleted
|
23
|
-
# and includes a scss partial and glyph preview
|
20
|
+
fontcustom compile path/to/vectors # Compiles icons into `fontcustom/`
|
21
|
+
fontcustom watch path/to/vectors # Compiles when vectors are changed/added/removed
|
24
22
|
|
25
|
-
fontcustom
|
23
|
+
fontcustom compile # Uses configuration options from `fontcustom.yml`
|
24
|
+
fontcustom watch # or `config/fontcustom.yml`
|
25
|
+
|
26
|
+
fontcustom help # See all options
|
26
27
|
```
|
27
28
|
|
28
|
-
##
|
29
|
+
## Configuration
|
29
30
|
|
30
|
-
To avoid finger-fatigue,
|
31
|
+
To avoid finger-fatigue, create a configuration file with `fontcustom config`. Typically, this should live in the directory where you plan on running `fontcustom` commands.
|
31
32
|
|
32
|
-
```
|
33
|
-
|
34
|
-
|
33
|
+
```yml
|
34
|
+
# Available Options (defaults shown)
|
35
|
+
font_name: fontcustom # Names the font (also sets name and directory of generated files)
|
36
|
+
project_root: (working dir) # Context for all relative paths
|
37
|
+
input: (project_root) # Where vectors and templates are located
|
38
|
+
output: (project_root)/(font name) # Where generated files will be saved
|
39
|
+
file_hash: true # Include an asset-busting hash
|
40
|
+
css_prefix: icon- # CSS class prefix
|
41
|
+
preprocessor_path: "" # Font path used in CSS proprocessor templates
|
42
|
+
data_cache: (same as fontcustom.yml) # Sets location of data file
|
43
|
+
debug: false # Output raw messages from fontforge
|
44
|
+
verbose: true # Set to false to silence
|
45
|
+
templates: [ css, preview ] # Templates to generate alongside fonts
|
46
|
+
# Possible values: preview, css, scss, scss-rails, bootstrap,
|
47
|
+
# bootstrap-scss, bootstrap-ie7, bootstrap-ie7-scss
|
48
|
+
|
49
|
+
# Advanced input/output
|
50
|
+
# Set input or output as a hash for more control
|
51
|
+
input:
|
52
|
+
vectors: path/to/vectors # required
|
53
|
+
templates: path/to/templates
|
54
|
+
|
55
|
+
output:
|
56
|
+
fonts: app/assets/fonts # required
|
57
|
+
css: app/assets/stylesheets
|
58
|
+
preview: app/views/styleguide
|
59
|
+
custom-template.yml: custom/path # set paths of custom templates by referencing their file name
|
35
60
|
```
|
36
61
|
|
37
62
|
---
|
data/Rakefile
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
require
|
2
|
+
require "rspec/core/rake_task"
|
3
3
|
|
4
|
-
RSpec::Core::RakeTask.new
|
5
|
-
s.rspec_opts =
|
4
|
+
RSpec::Core::RakeTask.new "spec" do |s|
|
5
|
+
s.rspec_opts = "--color --format documentation"
|
6
6
|
end
|
7
7
|
|
8
8
|
task :default => :spec
|
data/fontcustom.gemspec
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "fontcustom/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "fontcustom"
|
8
8
|
gem.version = Fontcustom::VERSION
|
9
9
|
gem.authors = ["Kai Zau", "Joshua Gross"]
|
10
10
|
gem.email = ["kai@kaizau.com", "joshua@gross.is"]
|
11
|
-
gem.summary =
|
12
|
-
gem.description =
|
11
|
+
gem.summary = "Generate icon webfonts from the comfort of the command line."
|
12
|
+
gem.description = "Transforms EPS and SVG vectors into icon webfonts. Generates CSS or other template files for your projects."
|
13
13
|
gem.homepage = "http://fontcustom.com"
|
14
|
+
gem.post_install_message = " >> Thanks for installing Font Custom! Please ensure that fontforge is installed before compiling any icons."
|
14
15
|
|
15
16
|
gem.files = `git ls-files`.split($/)
|
16
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
19
|
gem.require_paths = ["lib"]
|
19
20
|
|
20
|
-
gem.add_dependency
|
21
|
-
gem.add_dependency
|
22
|
-
gem.add_dependency
|
21
|
+
gem.add_dependency "json", "~>1.8.0"
|
22
|
+
gem.add_dependency "thor", "~>0.18.1"
|
23
|
+
gem.add_dependency "listen", "~>1.3.1"
|
23
24
|
|
24
|
-
gem.add_development_dependency
|
25
|
-
gem.add_development_dependency
|
26
|
-
gem.add_development_dependency
|
25
|
+
gem.add_development_dependency "rake"
|
26
|
+
gem.add_development_dependency "bundler"
|
27
|
+
gem.add_development_dependency "rspec"
|
27
28
|
end
|
data/lib/fontcustom.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
require "fontcustom/version"
|
2
2
|
require "fontcustom/error"
|
3
|
-
require "fontcustom/options"
|
4
3
|
require "fontcustom/util"
|
4
|
+
require "fontcustom/options"
|
5
5
|
require "fontcustom/generator/font"
|
6
6
|
require "fontcustom/generator/template"
|
7
|
-
require "thor/core_ext/hash_with_indifferent_access"
|
8
7
|
|
9
8
|
module Fontcustom
|
10
9
|
##
|
11
10
|
# Clean Ruby API to workaround Thor
|
12
11
|
def compile(options)
|
13
|
-
opts =
|
14
|
-
|
15
|
-
|
12
|
+
opts = Options.new options
|
13
|
+
Generator::Font.start [opts]
|
14
|
+
Generator::Template.start [opts]
|
16
15
|
rescue Fontcustom::Error => e
|
17
|
-
|
16
|
+
opts.say_message :error, e.message, :red
|
18
17
|
end
|
19
18
|
|
20
19
|
def gem_lib
|
@@ -27,33 +26,30 @@ module Fontcustom
|
|
27
26
|
# These are used in Thor CLI but overridden when the Options class is built
|
28
27
|
EXAMPLE_OPTIONS = {
|
29
28
|
:project_root => "`pwd`",
|
30
|
-
:output => "PROJECT_ROOT/FONT_NAME"
|
29
|
+
:output => "PROJECT_ROOT/FONT_NAME",
|
30
|
+
:config => "PROJECT_ROOT/fontcustom.yml OR PROJECT_ROOT/config/fontcustom.yml",
|
31
|
+
:templates => "css preview",
|
32
|
+
:data_cache => "CONFIG_DIR/.fontcustom-data OR at PROJECT_ROOT/.fontcustom-data"
|
31
33
|
}
|
32
34
|
|
33
|
-
|
34
|
-
#
|
35
|
-
DEFAULT_OPTIONS = Thor::CoreExt::HashWithIndifferentAccess.new({
|
35
|
+
DEFAULT_OPTIONS = {
|
36
36
|
:project_root => Dir.pwd,
|
37
37
|
:input => nil,
|
38
38
|
:output => nil,
|
39
39
|
:config => nil,
|
40
|
-
:data_cache => nil,
|
41
40
|
:templates => %w|css preview|,
|
42
41
|
:font_name => "fontcustom",
|
43
|
-
:file_hash => true,
|
44
42
|
:css_prefix => "icon-",
|
45
|
-
:
|
43
|
+
:data_cache => nil,
|
44
|
+
:preprocessor_path => nil,
|
45
|
+
:no_hash => false,
|
46
46
|
:debug => false,
|
47
|
-
:
|
48
|
-
}
|
47
|
+
:quiet => false
|
48
|
+
}
|
49
49
|
|
50
|
-
DATA_MODEL =
|
50
|
+
DATA_MODEL = {
|
51
51
|
:fonts => [],
|
52
52
|
:templates => [],
|
53
|
-
:glyphs => []
|
54
|
-
|
55
|
-
:css_to_fonts => "",
|
56
|
-
:preprocessor_to_fonts => ""
|
57
|
-
}
|
58
|
-
})
|
53
|
+
:glyphs => []
|
54
|
+
}
|
59
55
|
end
|
data/lib/fontcustom/cli.rb
CHANGED
@@ -5,52 +5,50 @@ require "fontcustom/watcher"
|
|
5
5
|
|
6
6
|
module Fontcustom
|
7
7
|
class CLI < Thor
|
8
|
-
include Actions
|
8
|
+
include Thor::Actions
|
9
9
|
|
10
10
|
default_task :show_help
|
11
11
|
|
12
12
|
class_option :project_root, :aliases => "-r", :type => :string,
|
13
|
-
:desc => "The root context for
|
13
|
+
:desc => "The root context for relative paths (INPUT, OUTPUT, CONFIG).",
|
14
14
|
:default => EXAMPLE_OPTIONS[:project_root]
|
15
15
|
|
16
16
|
class_option :output, :aliases => "-o", :type => :string,
|
17
|
-
:desc => "Where generated files are saved.
|
17
|
+
:desc => "Where generated files are saved. Set different locations for different file types via a configuration file.",
|
18
18
|
:default => EXAMPLE_OPTIONS[:output]
|
19
19
|
|
20
20
|
class_option :config, :aliases => "-c", :type => :string,
|
21
|
-
:desc => "Optional
|
22
|
-
|
23
|
-
class_option :data_cache, :aliases => "-d", :type => :string,
|
24
|
-
:desc => "Optional path to `.fontcustom-data`. Used for garbage collection."
|
21
|
+
:desc => "Optional path to a configuration file.",
|
22
|
+
:default => EXAMPLE_OPTIONS[:config]
|
25
23
|
|
26
24
|
class_option :templates, :aliases => "-t", :type => :array,
|
27
|
-
:desc => "Space-delinated
|
25
|
+
:desc => "Space-delinated list of templates to generate alongside fonts.",
|
28
26
|
:enum => %w|preview css scss scss-rails bootstrap bootstrap-scss bootstrap-ie7 bootstrap-ie7-scss|,
|
29
|
-
:default =>
|
27
|
+
:default => EXAMPLE_OPTIONS[:templates]
|
30
28
|
|
31
29
|
class_option :font_name, :aliases => "-f", :type => :string,
|
32
|
-
:desc => "
|
30
|
+
:desc => "The font's name. Also determines the file names of generated templates.",
|
33
31
|
:default => DEFAULT_OPTIONS[:font_name]
|
34
32
|
|
35
33
|
class_option :css_prefix, :aliases => "-p", :type => :string,
|
36
34
|
:desc => "Prefix for each glyph's CSS class.",
|
37
35
|
:default => DEFAULT_OPTIONS[:css_prefix]
|
38
36
|
|
37
|
+
class_option :data_cache, :aliases => "-d", :type => :string,
|
38
|
+
:desc => "Path to a manifest of generated files. Used for garbage collection.",
|
39
|
+
:default => EXAMPLE_OPTIONS[:data_cache]
|
40
|
+
|
39
41
|
class_option :preprocessor_path, :aliases => "-s", :type => :string,
|
40
|
-
:desc => "
|
42
|
+
:desc => "Optional font path for CSS proprocessor templates."
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
:desc => "Option to generate font files with asset-busting hashes.",
|
45
|
-
:default => DEFAULT_OPTIONS[:file_hash]
|
44
|
+
class_option :no_hash, :aliases => "-h", :type => :boolean,
|
45
|
+
:desc => "Generate fonts without asset-busting hashes."
|
46
46
|
|
47
|
-
class_option :debug, :type => :boolean,
|
48
|
-
:desc => "Display
|
49
|
-
:default => DEFAULT_OPTIONS[:debug]
|
47
|
+
class_option :debug, :aliases => "-g", :type => :boolean,
|
48
|
+
:desc => "Display debugging messages."
|
50
49
|
|
51
|
-
class_option :
|
52
|
-
:desc => "
|
53
|
-
:default => DEFAULT_OPTIONS[:verbose]
|
50
|
+
class_option :quiet, :aliases => "-q", :type => :boolean,
|
51
|
+
:desc => "Hide status messages."
|
54
52
|
|
55
53
|
# Required for Thor::Actions#template
|
56
54
|
def self.source_root
|
@@ -60,23 +58,24 @@ module Fontcustom
|
|
60
58
|
desc "compile [INPUT] [OPTIONS]", "Generates webfonts and templates from *.svg and *.eps files in INPUT. Default: `pwd`"
|
61
59
|
def compile(input = nil)
|
62
60
|
opts = options.merge :input => input
|
63
|
-
opts =
|
64
|
-
|
65
|
-
|
61
|
+
opts = Options.new(opts)
|
62
|
+
Generator::Font.start [opts]
|
63
|
+
Generator::Template.start [opts]
|
66
64
|
rescue Fontcustom::Error => e
|
67
|
-
|
65
|
+
opts.say_message :error, e.message, :red
|
68
66
|
end
|
69
67
|
|
70
68
|
desc "watch [INPUT] [OPTIONS]", "Watches INPUT for changes and regenerates files automatically. Ctrl + C to stop. Default: `pwd`"
|
71
|
-
method_option :skip_first, :type => :boolean,
|
69
|
+
method_option :skip_first, :type => :boolean,
|
72
70
|
:desc => "Skip the initial compile upon watching.",
|
73
71
|
:default => false
|
74
72
|
def watch(input = nil)
|
73
|
+
say "Font Custom is watching your icons. Press Ctrl + C to stop.", :yellow unless options[:quiet]
|
75
74
|
opts = options.merge :input => input, :skip_first => !! options[:skip_first]
|
76
|
-
opts =
|
77
|
-
|
75
|
+
opts = Options.new(opts)
|
76
|
+
Watcher.new(opts).watch
|
78
77
|
rescue Fontcustom::Error => e
|
79
|
-
|
78
|
+
opts.say_message :error, e.message, :red
|
80
79
|
end
|
81
80
|
|
82
81
|
desc "config [DIR]", "Generates an annotated configuration file (fontcustom.yml) in DIR. Default: `pwd`"
|
@@ -88,7 +87,7 @@ module Fontcustom
|
|
88
87
|
method_option :version, :aliases => "-v", :type => :boolean, :default => false
|
89
88
|
def show_help
|
90
89
|
if options[:version]
|
91
|
-
puts "fontcustom-#{
|
90
|
+
puts "fontcustom-#{VERSION}"
|
92
91
|
else
|
93
92
|
help
|
94
93
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "json"
|
2
|
+
require "open3"
|
2
3
|
require "thor"
|
3
4
|
require "thor/group"
|
4
5
|
require "thor/actions"
|
5
|
-
require "thor/core_ext/hash_with_indifferent_access"
|
6
6
|
|
7
7
|
module Fontcustom
|
8
8
|
module Generator
|
@@ -18,7 +18,7 @@ module Fontcustom
|
|
18
18
|
dirs = opts.output.values.uniq
|
19
19
|
dirs.each do |dir|
|
20
20
|
unless File.directory? dir
|
21
|
-
empty_directory dir, :verbose => opts.
|
21
|
+
empty_directory dir, :verbose => ! opts.quiet
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -28,9 +28,9 @@ module Fontcustom
|
|
28
28
|
begin
|
29
29
|
data = File.read opts.data_cache
|
30
30
|
data = JSON.parse(data, :symbolize_names => true) unless data.empty?
|
31
|
-
@data = data.is_a?(Hash) ?
|
32
|
-
rescue
|
33
|
-
raise Fontcustom::Error, "
|
31
|
+
@data = data.is_a?(Hash) ? symbolize_hash(data) : Fontcustom::DATA_MODEL.dup
|
32
|
+
rescue
|
33
|
+
raise Fontcustom::Error, "Couldn't parse `#{relative_to_root(opts.data_cache)}`. Delete it to start from scratch. Any previously generated files will need to be deleted manually."
|
34
34
|
end
|
35
35
|
else
|
36
36
|
@data = Fontcustom::DATA_MODEL.dup
|
@@ -54,38 +54,18 @@ module Fontcustom
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def generate
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@json = output[3] # JSON
|
65
|
-
|
66
|
-
# fontforge wrongly returns the following error message if only a single glyph.
|
67
|
-
# We can strip it out and ignore it.
|
68
|
-
if @json == 'Warning: Font contained no glyphs'
|
69
|
-
@json = output[4]
|
70
|
-
output = output[5..-1]
|
71
|
-
else
|
72
|
-
@json = output[3]
|
73
|
-
output = output[4..-1]
|
74
|
-
end
|
75
|
-
|
76
|
-
if opts.debug
|
77
|
-
shell.say "DEBUG: (raw output from fontforge)"
|
78
|
-
shell.say output
|
79
|
-
end
|
80
|
-
|
81
|
-
unless $?.success?
|
82
|
-
raise Fontcustom::Error, "Compilation failed unexpectedly. Check your options and try again with --debug get more details."
|
83
|
-
end
|
57
|
+
cmd = "fontforge -script #{Fontcustom.gem_lib}/scripts/generate.py #{opts.input[:vectors]} #{opts.output[:fonts]} --name #{opts.font_name}"
|
58
|
+
cmd += " --nohash" if opts.no_hash
|
59
|
+
cmd += " --debug" if opts.debug
|
60
|
+
output, err, status = execute_and_clean(cmd)
|
61
|
+
@json = output.delete_at(0)
|
62
|
+
say_status :debug, "#{err}\n#{' ' * 14}#{output}", :red if opts.debug
|
63
|
+
raise Fontcustom::Error, "`fontforge` compilation failed. Try again with --debug for more details." unless status.success?
|
84
64
|
end
|
85
65
|
|
86
66
|
def collect_data
|
87
|
-
|
88
|
-
@data.merge!
|
67
|
+
json = JSON.parse(@json, :symbolize_names => true)
|
68
|
+
@data.merge! json
|
89
69
|
@data[:glyphs].map! { |glyph| glyph.gsub(/\W/, "-") }
|
90
70
|
@data[:fonts].map! { |font| File.join(opts.output[:fonts], font) }
|
91
71
|
end
|
@@ -98,6 +78,15 @@ module Fontcustom
|
|
98
78
|
json = JSON.pretty_generate @data
|
99
79
|
overwrite_file opts.data_cache, json
|
100
80
|
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def execute_and_clean cmd
|
85
|
+
stdout, stderr, status = Open3::capture3(cmd)
|
86
|
+
stdout = stdout.split("\n")
|
87
|
+
stdout = stdout[1..-1] if stdout[0] == "CreateAllPyModules()"
|
88
|
+
[stdout, stderr, status]
|
89
|
+
end
|
101
90
|
end
|
102
91
|
end
|
103
92
|
end
|