fontprocessor 27.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rbenv-version +1 -0
- data/.rspec +0 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +64 -0
- data/CHANGELOG_FPV14.md +20 -0
- data/Dockerfile +3 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +156 -0
- data/Guardfile +5 -0
- data/README.md +6 -0
- data/Rakefile +53 -0
- data/Rakefile.base +57 -0
- data/bin/process-file +41 -0
- data/config/development.yml +5 -0
- data/config/production.yml +3 -0
- data/config/staging.yml +3 -0
- data/config/test.yml +5 -0
- data/fontprocessor.gemspec +37 -0
- data/lib/fontprocessor/config.rb +85 -0
- data/lib/fontprocessor/external/batik/batik-ttf2svg.jar +0 -0
- data/lib/fontprocessor/external/batik/lib/batik-svggen.jar +0 -0
- data/lib/fontprocessor/external/batik/lib/batik-util.jar +0 -0
- data/lib/fontprocessor/external/fontforge/subset.py +30 -0
- data/lib/fontprocessor/external/fontforge/utils.py +66 -0
- data/lib/fontprocessor/external_execution.rb +117 -0
- data/lib/fontprocessor/font_file.rb +149 -0
- data/lib/fontprocessor/font_file_naming_strategy.rb +63 -0
- data/lib/fontprocessor/font_format.rb +29 -0
- data/lib/fontprocessor/process_font_job.rb +227 -0
- data/lib/fontprocessor/processed_font_iterator.rb +89 -0
- data/lib/fontprocessor/processor.rb +790 -0
- data/lib/fontprocessor/version.rb +3 -0
- data/lib/fontprocessor.rb +16 -0
- data/scripts/build_and_test.sh +15 -0
- data/scripts/get_production_source_map.rb +53 -0
- data/spec/fixtures/bad_os2_width_class.otf +0 -0
- data/spec/fixtures/extra_language_names.otf +0 -0
- data/spec/fixtures/fixtures.rb +35 -0
- data/spec/fixtures/locked.otf +0 -0
- data/spec/fixtures/op_size.otf +0 -0
- data/spec/fixtures/ots_failure_font.otf +0 -0
- data/spec/fixtures/postscript.otf +0 -0
- data/spec/fixtures/stat_font.otf +0 -0
- data/spec/fixtures/truetype.otf +0 -0
- data/spec/lib/fontprocessor/config_spec.rb +38 -0
- data/spec/lib/fontprocessor/external_execution_spec.rb +33 -0
- data/spec/lib/fontprocessor/font_file_naming_strategy_spec.rb +13 -0
- data/spec/lib/fontprocessor/font_file_spec.rb +110 -0
- data/spec/lib/fontprocessor/process_font_job_spec.rb +317 -0
- data/spec/lib/fontprocessor/processed_font_iterator_spec.rb +128 -0
- data/spec/lib/fontprocessor/processor_spec.rb +466 -0
- data/spec/spec_helper.rb +4 -0
- data/tasks/fonts.rake +30 -0
- data/worker.rb +23 -0
- metadata +312 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2f00e8cc724ccbc7a45cffb34e2bf8a66b735f5c137b402ca3bd704cc0567f9f
|
4
|
+
data.tar.gz: 85d6cc0dc242dd53c51d1d83a7948bbcc810d24531e098661d7c01b334f19cb3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fd635a9a6303e3e10c88bb249e5c6f5a6081dba525310e86fe66eaa1fa159e51d175cbcb98d936226f8796684d88d99eaba12b79309a2781e71bbe4372643eaf
|
7
|
+
data.tar.gz: b11e19ff372e117489946607754c9d631ee8baedb6e12c59a2c33c9257703bc66866abc5cfca5c74d544d691e916500577fb8aa54ca2c1be5a601d5f7f3ab7d4
|
data/.gitignore
ADDED
data/.rbenv-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.1
|
data/.rspec
ADDED
File without changes
|
data/.travis.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
services:
|
2
|
+
- redis-server
|
3
|
+
script:
|
4
|
+
- bundle install
|
5
|
+
- bundle exec rspec
|
6
|
+
language: ruby
|
7
|
+
rvm:
|
8
|
+
- 2.1.1
|
9
|
+
|
10
|
+
before_install:
|
11
|
+
- sudo apt-get install software-properties-common python-software-properties -y
|
12
|
+
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
13
|
+
- sudo apt-get update
|
14
|
+
- sudo apt-get install gcc-6 g++-6 -y
|
15
|
+
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6
|
16
|
+
- sudo update-alternatives --set gcc /usr/bin/gcc-6
|
17
|
+
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
v27.1.2 / 2018-07-26
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Skytype bugfix to ignore `mort` table https://git.corp.adobe.com/typekit/skytype/pull/185
|
5
|
+
|
6
|
+
v27.1.1 / 2018-07-26
|
7
|
+
==================
|
8
|
+
|
9
|
+
* Skytype bugfix for SIDs in CFFTopDict table https://git.corp.adobe.com/typekit/skytype/pull/182
|
10
|
+
|
11
|
+
v27.1.0 / 2018-07-20
|
12
|
+
==================
|
13
|
+
|
14
|
+
* Upgrade Skytype and FontProcessor to Ruby 2.5.1
|
15
|
+
|
16
|
+
|
17
|
+
v27.0.7 / 2017-10-17
|
18
|
+
==================
|
19
|
+
|
20
|
+
* Skytype to handle required STAT string. Handle ASCII text in name table UTF-16 spaces.
|
21
|
+
|
22
|
+
|
23
|
+
v27.0.6 / 2017-08-29
|
24
|
+
==================
|
25
|
+
|
26
|
+
* Skytype fix to properly handle SID reassignment when FontDict Indexes change size.
|
27
|
+
|
28
|
+
v27.0.5 / 2017-07-13
|
29
|
+
==================
|
30
|
+
|
31
|
+
* Failed to update Gemfile.lock in prior version. No other material changes.
|
32
|
+
|
33
|
+
v27.0.4 / 2017-07-10
|
34
|
+
==================
|
35
|
+
|
36
|
+
* Update Skytype to drop non-Unicode cmap tables.
|
37
|
+
|
38
|
+
v27.0.2 / 2015-06-05
|
39
|
+
==================
|
40
|
+
|
41
|
+
* Update Skytype to ignore BAT and BATF tables.
|
42
|
+
|
43
|
+
v26.0.1 / 2015-06-05
|
44
|
+
==================
|
45
|
+
|
46
|
+
* handle suppression of TTF output
|
47
|
+
|
48
|
+
v0.2.0 / 2012-02-08
|
49
|
+
==================
|
50
|
+
|
51
|
+
* Update rspec to a newer version.
|
52
|
+
* Revert "Remove SVGs."
|
53
|
+
* Switch to gembase
|
54
|
+
|
55
|
+
v0.1.2 / 2010-10-05
|
56
|
+
==================
|
57
|
+
|
58
|
+
* Minor fix, I called the method on the wrong object. Test case added.
|
59
|
+
|
60
|
+
v0.1.1 / 2010-10-05
|
61
|
+
==================
|
62
|
+
|
63
|
+
* Fix bad os2 weight and width class values in fonts
|
64
|
+
* Copy spaces to non-breaking spaces in fonts missing non-breaking spaces
|
data/CHANGELOG_FPV14.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Changes in FPV 14
|
2
|
+
|
3
|
+
This document covers the functional changes introduced in FPV 14 vs. 13.
|
4
|
+
These changes fall into two categories: 1) changes to existing behavior
|
5
|
+
2) new functionality.
|
6
|
+
|
7
|
+
## Changes to existing behavior
|
8
|
+
|
9
|
+
* Changes inversion of max_descent to use values passed out from Skytype. Original code
|
10
|
+
inverted the value such that a negative value became positive. Change is in Skytype
|
11
|
+
source and not in fontprocessor repo.
|
12
|
+
* Changes return value of FontFile.glyphs to return only the Unicode values in the font. Original code
|
13
|
+
returned all entries in the font, sorted by glyph ID, and listed by Unicode value. GlyphIDs which did
|
14
|
+
not have Unicode mapping previously had an entry value of -1.
|
15
|
+
* Replaces all calls into FontParser and FontForge with calls into Skytype.
|
16
|
+
|
17
|
+
## New functionality
|
18
|
+
|
19
|
+
(none yet)
|
20
|
+
|
data/Dockerfile
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
gem "safe_yaml"
|
6
|
+
|
7
|
+
gem "fontbase", :git => "git@git.corp.adobe.com:typekit/fontbase.git", :tag => "v0.3.1"
|
8
|
+
gem "skytype", :git => "git@git.corp.adobe.com:typekit/skytype.git", :tag => "v2.7.4"
|
9
|
+
gem "ots-ruby", :git => "git@git.corp.adobe.com:typekit/ots-ruby.git", :tag => "v0.1.3"
|
10
|
+
gem "wofferizer", :git => "git@git.corp.adobe.com:typekit/wofferizer.git", :tag => "v0.2.0"
|
11
|
+
gem "aws-sdk", "~> 2"
|
12
|
+
|
13
|
+
gem "redis", "~>3.3.3"
|
14
|
+
gem "resque", "~>1.25.2"
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git@git.corp.adobe.com:typekit/fontbase.git
|
3
|
+
revision: 37778f190a1b3ace8aab7b8109127cf61b232f28
|
4
|
+
tag: v0.3.1
|
5
|
+
specs:
|
6
|
+
fontbase (0.3.1)
|
7
|
+
aws-sdk (~> 2)
|
8
|
+
bson_ext (~> 1.5.2)
|
9
|
+
mongo (~> 1.5.2)
|
10
|
+
|
11
|
+
GIT
|
12
|
+
remote: git@git.corp.adobe.com:typekit/ots-ruby.git
|
13
|
+
revision: 6758632d0ddb465e29fcd355b5831eff8fd7ebf5
|
14
|
+
tag: v0.1.3
|
15
|
+
specs:
|
16
|
+
ots-ruby (0.1.3)
|
17
|
+
ffi
|
18
|
+
json
|
19
|
+
|
20
|
+
GIT
|
21
|
+
remote: git@git.corp.adobe.com:typekit/skytype.git
|
22
|
+
revision: a4fda8825b6d532940e2f01716ba7504b8904de3
|
23
|
+
tag: v2.7.4
|
24
|
+
specs:
|
25
|
+
skytype (2.7.4)
|
26
|
+
ffi (= 1.9.25)
|
27
|
+
|
28
|
+
GIT
|
29
|
+
remote: git@git.corp.adobe.com:typekit/wofferizer.git
|
30
|
+
revision: 0182269a8bca4cb429e7e34182f46540b47cbcab
|
31
|
+
tag: v0.2.0
|
32
|
+
specs:
|
33
|
+
wofferizer (0.2.0)
|
34
|
+
ffi
|
35
|
+
|
36
|
+
PATH
|
37
|
+
remote: .
|
38
|
+
specs:
|
39
|
+
fontprocessor (27.1.3)
|
40
|
+
activesupport (~> 4.2.10)
|
41
|
+
airbrake (~> 3.0.9)
|
42
|
+
aws-s3 (~> 0.6.2)
|
43
|
+
fontbase (~> 0.3.0)
|
44
|
+
i18n (~> 0.8.0)
|
45
|
+
json (= 1.8.6)
|
46
|
+
open4 (= 0.9.6)
|
47
|
+
ots-ruby (>= 0.0.3)
|
48
|
+
resque (>= 1.19.0)
|
49
|
+
skytype (>= 2.0.0)
|
50
|
+
|
51
|
+
GEM
|
52
|
+
remote: https://rubygems.org/
|
53
|
+
specs:
|
54
|
+
activesupport (4.2.10)
|
55
|
+
i18n (~> 0.7)
|
56
|
+
minitest (~> 5.1)
|
57
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
58
|
+
tzinfo (~> 1.1)
|
59
|
+
airbrake (3.0.9)
|
60
|
+
activesupport
|
61
|
+
builder
|
62
|
+
aws-s3 (0.6.3)
|
63
|
+
builder
|
64
|
+
mime-types
|
65
|
+
xml-simple
|
66
|
+
aws-sdk (2.10.111)
|
67
|
+
aws-sdk-resources (= 2.10.111)
|
68
|
+
aws-sdk-core (2.10.111)
|
69
|
+
aws-sigv4 (~> 1.0)
|
70
|
+
jmespath (~> 1.0)
|
71
|
+
aws-sdk-resources (2.10.111)
|
72
|
+
aws-sdk-core (= 2.10.111)
|
73
|
+
aws-sigv4 (1.0.2)
|
74
|
+
bson (1.5.2)
|
75
|
+
bson_ext (1.5.2)
|
76
|
+
bson (= 1.5.2)
|
77
|
+
builder (3.2.3)
|
78
|
+
diff-lcs (1.2.5)
|
79
|
+
ffi (1.9.25)
|
80
|
+
guard (1.0.3)
|
81
|
+
ffi (>= 0.5.0)
|
82
|
+
thor (>= 0.14.6)
|
83
|
+
guard-rspec (0.6.0)
|
84
|
+
guard (>= 0.10.0)
|
85
|
+
i18n (0.8.6)
|
86
|
+
jmespath (1.3.1)
|
87
|
+
json (1.8.6)
|
88
|
+
mime-types (3.2.2)
|
89
|
+
mime-types-data (~> 3.2015)
|
90
|
+
mime-types-data (3.2018.0812)
|
91
|
+
minitest (5.11.3)
|
92
|
+
mongo (1.5.2)
|
93
|
+
bson (= 1.5.2)
|
94
|
+
mono_logger (1.1.0)
|
95
|
+
multi_json (1.12.1)
|
96
|
+
open4 (0.9.6)
|
97
|
+
rack (1.6.8)
|
98
|
+
rack-protection (1.5.3)
|
99
|
+
rack
|
100
|
+
rake (12.3.1)
|
101
|
+
redis (3.3.5)
|
102
|
+
redis-namespace (1.5.3)
|
103
|
+
redis (~> 3.0, >= 3.0.4)
|
104
|
+
resque (1.25.2)
|
105
|
+
mono_logger (~> 1.0)
|
106
|
+
multi_json (~> 1.0)
|
107
|
+
redis-namespace (~> 1.3)
|
108
|
+
sinatra (>= 0.9.2)
|
109
|
+
vegas (~> 0.1.2)
|
110
|
+
rspec (3.2.0)
|
111
|
+
rspec-core (~> 3.2.0)
|
112
|
+
rspec-expectations (~> 3.2.0)
|
113
|
+
rspec-mocks (~> 3.2.0)
|
114
|
+
rspec-core (3.2.2)
|
115
|
+
rspec-support (~> 3.2.0)
|
116
|
+
rspec-expectations (3.2.0)
|
117
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
118
|
+
rspec-support (~> 3.2.0)
|
119
|
+
rspec-mocks (3.2.1)
|
120
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
121
|
+
rspec-support (~> 3.2.0)
|
122
|
+
rspec-support (3.2.2)
|
123
|
+
safe_yaml (1.0.4)
|
124
|
+
sinatra (1.4.8)
|
125
|
+
rack (~> 1.5)
|
126
|
+
rack-protection (~> 1.4)
|
127
|
+
tilt (>= 1.3, < 3)
|
128
|
+
thor (0.19.1)
|
129
|
+
thread_safe (0.3.6)
|
130
|
+
tilt (2.0.7)
|
131
|
+
tzinfo (1.2.5)
|
132
|
+
thread_safe (~> 0.1)
|
133
|
+
vegas (0.1.11)
|
134
|
+
rack (>= 1.0.0)
|
135
|
+
xml-simple (1.1.5)
|
136
|
+
|
137
|
+
PLATFORMS
|
138
|
+
ruby
|
139
|
+
|
140
|
+
DEPENDENCIES
|
141
|
+
aws-sdk (~> 2)
|
142
|
+
fontbase!
|
143
|
+
fontprocessor!
|
144
|
+
guard (~> 1.0.0)
|
145
|
+
guard-rspec (~> 0.6.0)
|
146
|
+
ots-ruby!
|
147
|
+
rake (~> 12.3.1)
|
148
|
+
redis (~> 3.3.3)
|
149
|
+
resque (~> 1.25.2)
|
150
|
+
rspec (~> 3.2.0)
|
151
|
+
safe_yaml
|
152
|
+
skytype!
|
153
|
+
wofferizer!
|
154
|
+
|
155
|
+
BUNDLED WITH
|
156
|
+
1.16.2
|
data/Guardfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
load "Rakefile.base"
|
2
|
+
|
3
|
+
desc "Run the tests"
|
4
|
+
task :test => :spec
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
RSpec::Core::RakeTask.new
|
9
|
+
rescue
|
10
|
+
puts 'WARNING: rspec tasks not loaded"'
|
11
|
+
end
|
12
|
+
|
13
|
+
task :environment do
|
14
|
+
require 'rubygems'
|
15
|
+
require 'bundler'
|
16
|
+
Bundler.require
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Get all dem fonts"
|
20
|
+
task :get_dem_fonts, [:src_csv_path, :storage_path] => [:environment] do |t, args|
|
21
|
+
require 'csv'
|
22
|
+
csv_file_path = args[:src_csv_path]
|
23
|
+
storage_path = args[:storage_path]
|
24
|
+
csv = CSV.read(csv_file_path)
|
25
|
+
csv_rows = csv[0..-1]
|
26
|
+
row_count = csv_rows.size
|
27
|
+
index = 20530
|
28
|
+
csv_rows = csv[index..-1]
|
29
|
+
#TypeTogether,Givry,Givry,Regular,000000000000000000018a8a,c6ae973aa7e2fa4f36e10594d052a885
|
30
|
+
#row_count = csv_rows.size
|
31
|
+
csv_rows.each do |csv_row|
|
32
|
+
raise if csv_row.size != 6
|
33
|
+
index += 1
|
34
|
+
vendor = csv_row[0]
|
35
|
+
vendor_name = vendor.gsub("/", " ")
|
36
|
+
vendor_name.gsub!("'", "")
|
37
|
+
vendor_name.gsub!("(","")
|
38
|
+
vendor_name.gsub!(")","")
|
39
|
+
vendor_dir = Pathname.new(storage_path) + vendor_name
|
40
|
+
vendor_dir.mkdir unless vendor_dir.exist?
|
41
|
+
fam_name = csv_row[1]
|
42
|
+
fam_dir = vendor_dir + fam_name
|
43
|
+
fam_dir.mkdir unless fam_dir.exist?
|
44
|
+
file = fam_dir + "#{csv_row[2]}#{csv_row[3]}.otf"
|
45
|
+
next if file.exist?
|
46
|
+
# out_name = csv_row[columns[:out_name]]
|
47
|
+
# out_file = File.join(storage_path, out_name)
|
48
|
+
puts "#{index.to_s} of #{row_count.to_s}) Fetching s3://typekit-production-source-fonts/#{csv_row[5]} and storing it in #{file.expand_path}"
|
49
|
+
path_as_str = file.expand_path.to_s.gsub(" ", "\\ ")
|
50
|
+
`aws s3 cp s3://typekit-production-source-fonts/#{csv_row[5]} #{path_as_str}`
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/Rakefile.base
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
module Bundler
|
5
|
+
class GemHelper
|
6
|
+
# Override Bundler's concept of release.
|
7
|
+
def release_gem
|
8
|
+
with_fixed_editor {
|
9
|
+
guard_on_master_branch
|
10
|
+
guard_already_tagged
|
11
|
+
build_gem
|
12
|
+
edit_changelog
|
13
|
+
sh "git commit --allow-empty -a -m 'Release #{version_tag}'"
|
14
|
+
tag_version {
|
15
|
+
# Bundler's git_push pushes all branches. Let's restrict it
|
16
|
+
# to only the master branch since we also ensure that you
|
17
|
+
# always release from the master branch.
|
18
|
+
perform_git_push "origin master --tags"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
def with_fixed_editor
|
23
|
+
editor = ENV['EDITOR'] || ""
|
24
|
+
abort "You must set an EDITOR to edit the changelog" if editor.empty?
|
25
|
+
swaps = {
|
26
|
+
"mate" => "mate -w",
|
27
|
+
"subl" => "subl -w"
|
28
|
+
}
|
29
|
+
begin
|
30
|
+
ENV['EDITOR'] = swaps.fetch(editor, editor)
|
31
|
+
yield
|
32
|
+
ensure
|
33
|
+
ENV['EDITOR'] = editor
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def guard_on_master_branch
|
37
|
+
unless `git branch` =~ /^\* master$/
|
38
|
+
abort "You must be on the master branch to release."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
def edit_changelog
|
42
|
+
unless `which git-changelog`.empty?
|
43
|
+
sh "git-changelog"
|
44
|
+
else
|
45
|
+
abort "git-changelog isn't found. Install it with `brew install git-extras`"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Run all tests"
|
52
|
+
task :default => :test
|
53
|
+
|
54
|
+
desc "Update Rakefile.base"
|
55
|
+
task :selfupdate do
|
56
|
+
sh "curl -sO https://raw.github.com/rcarver/gembase/master/Rakefile.base"
|
57
|
+
end
|
data/bin/process-file
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
4
|
+
require 'fontprocessor'
|
5
|
+
require 'optparse'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
options = {
|
9
|
+
:characters => -1..1000,
|
10
|
+
:character_set_name => "1",
|
11
|
+
:license_url => "http://localhost",
|
12
|
+
}
|
13
|
+
|
14
|
+
opts = OptionParser.new do |opts|
|
15
|
+
opts.on("-n", "--char-set-name NAME", "name of the character set (default: #{options[:character_set_name]})") { |name|
|
16
|
+
options[:character_set_name] = name
|
17
|
+
}
|
18
|
+
opts.on("-c", "--characters N..N", "range of characters to include (default: #{options[:glyphs]})") { |characters|
|
19
|
+
options[:characters] = eval(characters)
|
20
|
+
}
|
21
|
+
opts.on_tail("-h", "--help", "Show help") {
|
22
|
+
puts opts
|
23
|
+
exit
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
if not ARGV.length == 1
|
28
|
+
puts "USAGE: process <filename.otf>"
|
29
|
+
exit 0
|
30
|
+
end
|
31
|
+
filename = ARGV.first
|
32
|
+
basename = File.basename(ARGV.first).gsub('..', '').split('.')[0]
|
33
|
+
|
34
|
+
FileUtils.mkdir_p(basename)
|
35
|
+
FileUtils.cp(filename, File.join(basename, "#{basename}.otf"))
|
36
|
+
naming_strategy = FontProcessor::FontFileNamingStrategy.new("#{basename}.otf", basename)
|
37
|
+
|
38
|
+
char_set = FontProcessor::CharSet.new(options[:character_set_name], :characters => [options[:characters]])
|
39
|
+
processor = FontProcessor::Processor.new(naming_strategy, options[:license_url], "01")
|
40
|
+
processor.preprocess
|
41
|
+
processor.generate_char_set(char_set, 400, :normal)
|
data/config/staging.yml
ADDED
data/config/test.yml
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "fontprocessor/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "fontprocessor"
|
7
|
+
s.version = FontProcessor::VERSION
|
8
|
+
s.authors = ["Matt Colyer"]
|
9
|
+
s.email = ["matt@typekit.com"]
|
10
|
+
s.homepage = "http://github.com/typekit/fontprocessor/"
|
11
|
+
s.summary = %q{High level interface for creating web fonts.}
|
12
|
+
s.description = %q{A nice wrapper for fontparser}
|
13
|
+
|
14
|
+
s.rubyforge_project = "fontprocessor"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency('activesupport', ["~> 4.2.10"])
|
22
|
+
s.add_dependency('json', ["= 1.8.6"])
|
23
|
+
s.add_dependency('fontbase', ["~> 0.3.0"])
|
24
|
+
s.add_dependency('open4', ["= 0.9.6"])
|
25
|
+
s.add_dependency('resque', [">= 1.19.0"])
|
26
|
+
s.add_dependency('skytype', [">= 2.0.0"])
|
27
|
+
s.add_dependency('ots-ruby', [">= 0.0.3"])
|
28
|
+
|
29
|
+
s.add_dependency('aws-s3', ["~> 0.6.2"])
|
30
|
+
s.add_dependency('airbrake', ["~> 3.0.9"])
|
31
|
+
s.add_dependency('i18n', ["~> 0.8.0"])
|
32
|
+
|
33
|
+
s.add_development_dependency('rake', ["~> 12.3.1"])
|
34
|
+
s.add_development_dependency('rspec', ["~> 3.2.0"])
|
35
|
+
s.add_development_dependency('guard', ["~> 1.0.0"])
|
36
|
+
s.add_development_dependency('guard-rspec', ["~> 0.6.0"])
|
37
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'safe_yaml'
|
3
|
+
|
4
|
+
module FontProcessor
|
5
|
+
class Config
|
6
|
+
class << self
|
7
|
+
SafeYAML::OPTIONS[:default_mode] = :safe
|
8
|
+
|
9
|
+
# Public: The redis server and port. typekit.yml will override
|
10
|
+
# config/environment.yml
|
11
|
+
def redis_server
|
12
|
+
typekit_config['redis_server'] || config['redis_server']
|
13
|
+
end
|
14
|
+
|
15
|
+
# Public: The mongo server. typekit.yml will override
|
16
|
+
# config/environment.yml
|
17
|
+
def mongo_host
|
18
|
+
typekit_config['mongo_host'] || config['mongo_host']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: The mongo database name from config/environment.yml
|
22
|
+
def mongo_db
|
23
|
+
typekit_config['mongo_db'] || config['mongo_db']
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: The S3 source font file bucket from config/environment.yml
|
27
|
+
def s3_source_bucket
|
28
|
+
typekit_config['s3_source_bucket'] || config['s3_source_bucket']
|
29
|
+
end
|
30
|
+
|
31
|
+
# Public: The S3 processed font file bucket from config/environment.yml
|
32
|
+
def s3_processed_bucket
|
33
|
+
typekit_config['s3_processed_bucket'] || config['s3_processed_bucket']
|
34
|
+
end
|
35
|
+
|
36
|
+
# Public: The Airbrake API key from from
|
37
|
+
# /etc/typekit.yml
|
38
|
+
def airbrake_api_key
|
39
|
+
config["airbrake_api_key"]
|
40
|
+
end
|
41
|
+
|
42
|
+
# Public: The environment fontprocessor is running in. One of "development",
|
43
|
+
# "test", "staging" or "production"
|
44
|
+
def environment
|
45
|
+
ENV['ENV'] || 'development'
|
46
|
+
end
|
47
|
+
|
48
|
+
# Public: The environment fontprocessor is running in. One of "development",
|
49
|
+
# "test", "staging" or "production"
|
50
|
+
def flex_sdk_path
|
51
|
+
ENV['FLEX_SDK_HOME'] or raise "Environment variable 'FLEX_SDK_HOME' is undefined but is required."
|
52
|
+
end
|
53
|
+
|
54
|
+
def s3_client
|
55
|
+
@s3_client ||= Aws::S3::Client.new(region: 'us-east-1')
|
56
|
+
end
|
57
|
+
|
58
|
+
# Public: The logger to write messages to. In production and development
|
59
|
+
# it's STDOUT and during testing its an in memory buffer.
|
60
|
+
def logger
|
61
|
+
if defined? RSpec
|
62
|
+
StringIO.new
|
63
|
+
else
|
64
|
+
STDOUT
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
# Returns a Hash of configuration values from config/environment.yml
|
70
|
+
def config
|
71
|
+
@config ||= YAML.load_file(File.join(File.dirname(__FILE__), "..", "..", "config", "#{environment}.yml"))
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns a Hash of global typekit configuration values while in production and
|
75
|
+
# an empty Hash otherwise.
|
76
|
+
def typekit_config
|
77
|
+
begin
|
78
|
+
@typekit_config ||= YAML.load_file(File.join("/", "etc", "typekit.yml"))
|
79
|
+
rescue
|
80
|
+
{}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/python
|
2
|
+
import fontforge
|
3
|
+
import utils
|
4
|
+
|
5
|
+
SPACE_UNICODE_ID = 0x20
|
6
|
+
NB_SPACE_UNICODE_ID = 0xA0
|
7
|
+
NB_SPACE_NAME = "uni00A0"
|
8
|
+
|
9
|
+
parsed = utils.parse_input()
|
10
|
+
assert parsed.has_key('input_filename'), "Input Filename Required"
|
11
|
+
assert parsed.has_key('output_filename'), "Output Filename Required"
|
12
|
+
|
13
|
+
|
14
|
+
# Iterate over every gylph in the font and remove it if it's not in the
|
15
|
+
# included list. This is done because we can preserve the other information in
|
16
|
+
# the font such as ligatures and kerning (without doing complicated things like
|
17
|
+
# copying).
|
18
|
+
try:
|
19
|
+
source = fontforge.open(parsed['input_filename'])
|
20
|
+
original_metrics = utils.original_metrics(source)
|
21
|
+
glyphs = {}
|
22
|
+
for glyph in source.glyphs():
|
23
|
+
glyphs[glyph.unicode] = glyph
|
24
|
+
utils.lossless_save(original_metrics, source, parsed["output_filename"])
|
25
|
+
except EnvironmentError, e:
|
26
|
+
# Apparently font forge chokes on some fonts, fun
|
27
|
+
utils.complete({'status' : 'Failure', 'message' : str(e)})
|
28
|
+
else:
|
29
|
+
# Tells ruby we are finished
|
30
|
+
utils.complete({'status' : 'Success'})
|