fontcustom 1.1.0.pre → 1.1.0.pre2
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/TODO.md +20 -5
- data/lib/fontcustom.rb +42 -4
- data/lib/fontcustom/cli.rb +65 -25
- data/lib/fontcustom/generator/font.rb +26 -26
- data/lib/fontcustom/generator/template.rb +29 -30
- data/lib/fontcustom/options.rb +207 -23
- data/lib/fontcustom/templates/_fontcustom-bootstrap-ie7.scss +9 -9
- data/lib/fontcustom/templates/_fontcustom-bootstrap.scss +19 -19
- data/lib/fontcustom/templates/_fontcustom-rails.scss +28 -0
- data/lib/fontcustom/templates/_fontcustom.scss +11 -11
- data/lib/fontcustom/templates/fontcustom-bootstrap-ie7.css +9 -9
- data/lib/fontcustom/templates/fontcustom-bootstrap.css +19 -19
- data/lib/fontcustom/templates/fontcustom-preview.html +34 -7
- data/lib/fontcustom/templates/fontcustom.css +11 -11
- data/lib/fontcustom/templates/fontcustom.yml +11 -6
- data/lib/fontcustom/util.rb +38 -159
- data/lib/fontcustom/version.rb +1 -1
- data/lib/fontcustom/watcher.rb +16 -14
- data/spec/fixtures/generators/.fontcustom-data-corrupted +18 -0
- data/spec/fixtures/generators/fontcustom.yml +1 -0
- data/spec/fixtures/{util/fontcustom.yml → options/any-file-name.yml} +0 -0
- data/spec/fixtures/{util → options}/config-is-in-dir/fontcustom.yml +0 -0
- data/spec/fixtures/options/fontcustom-empty.yml +1 -0
- data/spec/fixtures/{util → options}/fontcustom-malformed.yml +0 -0
- data/spec/fixtures/options/fontcustom.yml +1 -0
- data/spec/fixtures/options/no-config-here/.gitkeep +0 -0
- data/spec/fixtures/{util → options}/rails-like/config/fontcustom.yml +0 -0
- data/spec/fontcustom/generator/font_spec.rb +31 -15
- data/spec/fontcustom/generator/template_spec.rb +20 -18
- data/spec/fontcustom/options_spec.rb +428 -0
- data/spec/fontcustom/util_spec.rb +38 -336
- data/spec/fontcustom/watcher_spec.rb +7 -2
- data/spec/spec_helper.rb +1 -2
- metadata +23 -13
- data/lib/fontcustom/actions.rb +0 -28
- data/spec/fontcustom/actions_spec.rb +0 -22
data/lib/fontcustom/options.rb
CHANGED
@@ -1,27 +1,211 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "thor/shell"
|
3
|
+
require "thor/shell/basic"
|
4
|
+
require "thor/shell/color"
|
1
5
|
require "thor/core_ext/hash_with_indifferent_access"
|
6
|
+
require "fontcustom/util"
|
2
7
|
|
3
8
|
module Fontcustom
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
:input
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
9
|
+
class Options
|
10
|
+
include Util
|
11
|
+
|
12
|
+
attr_reader :project_root, :input, :output, :config, :data_cache, :templates,
|
13
|
+
:font_name, :file_hash, :css_prefix, :preprocessor_path, :skip_first, :debug, :verbose
|
14
|
+
|
15
|
+
def initialize(options = {})
|
16
|
+
check_fontforge
|
17
|
+
|
18
|
+
# Overwrite example defaults (used in Thor's help) with real defaults, if unchanged
|
19
|
+
EXAMPLE_OPTIONS.keys.each do |key|
|
20
|
+
options.delete(key) if options[key] == EXAMPLE_OPTIONS[key]
|
21
|
+
end
|
22
|
+
@cli_options = DEFAULT_OPTIONS.dup.merge options
|
23
|
+
|
24
|
+
@shell = Thor::Shell::Color.new
|
25
|
+
set_options
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_options
|
31
|
+
set_config_path
|
32
|
+
load_config
|
33
|
+
merge_options
|
34
|
+
set_data_path
|
35
|
+
set_input_paths
|
36
|
+
set_output_paths
|
37
|
+
set_template_paths
|
38
|
+
end
|
39
|
+
|
40
|
+
def set_config_path
|
41
|
+
@config = if @cli_options[:config]
|
42
|
+
path = File.expand_path File.join(@cli_options[:project_root], @cli_options[:config])
|
43
|
+
|
44
|
+
# :config is the path to fontcustom.yml
|
45
|
+
if File.exists?(path) && ! File.directory?(path)
|
46
|
+
path
|
47
|
+
|
48
|
+
# :config is a dir containing fontcustom.yml
|
49
|
+
elsif File.exists? File.join(path, "fontcustom.yml")
|
50
|
+
File.join path, "fontcustom.yml"
|
51
|
+
|
52
|
+
else
|
53
|
+
raise Fontcustom::Error, "The configuration file was not found. Check #{relative_to_root(path)} and try again."
|
54
|
+
end
|
55
|
+
else
|
56
|
+
# fontcustom.yml is in the project_root
|
57
|
+
if File.exists? File.join(@cli_options[:project_root], "fontcustom.yml")
|
58
|
+
File.join @cli_options[:project_root], "fontcustom.yml"
|
59
|
+
|
60
|
+
# config/fontcustom.yml is in the project_root
|
61
|
+
elsif File.exists? File.join(@cli_options[:project_root], "config", "fontcustom.yml")
|
62
|
+
File.join @cli_options[:project_root], "config", "fontcustom.yml"
|
63
|
+
|
64
|
+
else
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_config
|
71
|
+
@config_options = {}
|
72
|
+
return unless @config
|
73
|
+
begin
|
74
|
+
config = YAML.load File.open(@config)
|
75
|
+
@config_options = config if config # empty file returns false
|
76
|
+
rescue Exception => e
|
77
|
+
raise Fontcustom::Error, "The configuration file failed to load. Message: #{e.message}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def merge_options
|
82
|
+
@cli_options.delete_if { |key, val| val == DEFAULT_OPTIONS[key] }
|
83
|
+
|
84
|
+
options = DEFAULT_OPTIONS.dup
|
85
|
+
options = options.merge @config_options
|
86
|
+
options = options.merge @cli_options
|
87
|
+
remove_instance_variable :@config_options
|
88
|
+
remove_instance_variable :@cli_options
|
89
|
+
|
90
|
+
# :config is excluded since it's already been set
|
91
|
+
keys = %w|project_root input output data_cache templates font_name file_hash css_prefix preprocessor_path skip_first debug verbose|
|
92
|
+
keys.each { |key| instance_variable_set("@#{key}", options[key]) }
|
93
|
+
|
94
|
+
@font_name = @font_name.strip.gsub(/\W/, '-')
|
95
|
+
end
|
96
|
+
|
97
|
+
def set_data_path
|
98
|
+
@data_cache = if ! @data_cache.nil?
|
99
|
+
File.expand_path File.join(@project_root, @data_cache)
|
100
|
+
elsif @config
|
101
|
+
File.join File.dirname(@config), '.fontcustom-data'
|
102
|
+
else
|
103
|
+
File.join @project_root, '.fontcustom-data'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def set_input_paths
|
108
|
+
if @input.is_a? Hash
|
109
|
+
@input = Thor::CoreExt::HashWithIndifferentAccess.new @input
|
110
|
+
|
111
|
+
if @input.has_key? "vectors"
|
112
|
+
@input[:vectors] = File.expand_path File.join(@project_root, @input[:vectors])
|
113
|
+
unless File.directory? input[:vectors]
|
114
|
+
raise Fontcustom::Error, "INPUT[\"vectors\"] should be a directory. Check #{relative_to_root(input[:vectors])} and try again."
|
115
|
+
end
|
116
|
+
else
|
117
|
+
raise Fontcustom::Error, "INPUT (as a hash) should contain a \"vectors\" key."
|
118
|
+
end
|
119
|
+
|
120
|
+
if @input.has_key? "templates"
|
121
|
+
@input[:templates] = File.expand_path File.join(@project_root, @input[:templates])
|
122
|
+
unless File.directory? @input[:templates]
|
123
|
+
raise Fontcustom::Error, "INPUT[\"templates\"] should be a directory. Check #{relative_to_root(input[:templates])} and try again."
|
124
|
+
end
|
125
|
+
else
|
126
|
+
@input[:templates] = @input[:vectors]
|
127
|
+
end
|
128
|
+
elsif @input.is_a? String
|
129
|
+
input = File.expand_path File.join(@project_root, @input)
|
130
|
+
unless File.directory? input
|
131
|
+
raise Fontcustom::Error, "INPUT (as a string) should be a directory. Check #{relative_to_root(input)} and try again."
|
132
|
+
end
|
133
|
+
@input = Thor::CoreExt::HashWithIndifferentAccess.new({
|
134
|
+
:vectors => input,
|
135
|
+
:templates => input
|
136
|
+
})
|
137
|
+
end
|
138
|
+
|
139
|
+
if Dir[File.join(@input[:vectors], "*.{svg,eps}")].empty?
|
140
|
+
raise Fontcustom::Error, "#{relative_to_root(@input[:vectors])} doesn't contain any vectors (*.svg or *.eps files)."
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def set_output_paths
|
145
|
+
if @output.is_a? Hash
|
146
|
+
@output = Thor::CoreExt::HashWithIndifferentAccess.new @output
|
147
|
+
raise Fontcustom::Error, "OUTPUT (as a hash) should contain a \"fonts\" key." unless @output.has_key? "fonts"
|
148
|
+
|
149
|
+
@output.each do |key, val|
|
150
|
+
@output[key] = File.expand_path File.join(@project_root, val)
|
151
|
+
if File.exists?(val) && ! File.directory?(val)
|
152
|
+
raise Fontcustom::Error, "OUTPUT[\"#{key}\"] should be a directory, not a file. Check #{relative_to_root(val)} and try again."
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
@output[:css] ||= @output[:fonts]
|
157
|
+
@output[:preview] ||= @output[:fonts]
|
158
|
+
else
|
159
|
+
if @output.is_a? String
|
160
|
+
output = File.expand_path File.join(@project_root, @output)
|
161
|
+
if File.exists?(output) && ! File.directory?(output)
|
162
|
+
raise Fontcustom::Error, "OUTPUT should be a directory, not a file. Check #{relative_to_root(output)} and try again."
|
163
|
+
end
|
164
|
+
else
|
165
|
+
output = File.join @project_root, @font_name
|
166
|
+
say_message :status, "All generated files will be added into `#{relative_to_root(output)}/` by default."
|
167
|
+
end
|
168
|
+
|
169
|
+
@output = Thor::CoreExt::HashWithIndifferentAccess.new({
|
170
|
+
:fonts => output,
|
171
|
+
:css => output,
|
172
|
+
:preview => output
|
173
|
+
})
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# Translates shorthand to full path of packages templates, otherwise,
|
178
|
+
# it checks input and pwd for the template.
|
179
|
+
#
|
180
|
+
# Could arguably belong in Generator::Template, however, it's nice to
|
181
|
+
# be able to catch template errors before any generator runs.
|
182
|
+
def set_template_paths
|
183
|
+
template_path = File.join Fontcustom.gem_lib, "templates"
|
184
|
+
|
185
|
+
@templates = @templates.map do |template|
|
186
|
+
case template
|
187
|
+
when "preview"
|
188
|
+
File.join template_path, "fontcustom-preview.html"
|
189
|
+
when "css"
|
190
|
+
File.join template_path, "fontcustom.css"
|
191
|
+
when "scss"
|
192
|
+
File.join template_path, "_fontcustom.scss"
|
193
|
+
when "scss-rails"
|
194
|
+
File.join template_path, "_fontcustom-rails.scss"
|
195
|
+
when "bootstrap"
|
196
|
+
File.join template_path, "fontcustom-bootstrap.css"
|
197
|
+
when "bootstrap-scss"
|
198
|
+
File.join template_path, "_fontcustom-bootstrap.scss"
|
199
|
+
when "bootstrap-ie7"
|
200
|
+
File.join template_path, "fontcustom-bootstrap-ie7.css"
|
201
|
+
when "bootstrap-ie7-scss"
|
202
|
+
File.join template_path, "_fontcustom-bootstrap-ie7.scss"
|
203
|
+
else
|
204
|
+
path = File.expand_path File.join(@input[:templates], template)
|
205
|
+
raise Fontcustom::Error, "The custom template at #{relative_to_root(path)} does not exist." unless File.exists? path
|
206
|
+
path
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
27
211
|
end
|
@@ -1,22 +1,22 @@
|
|
1
1
|
//
|
2
|
-
// Icon Font: <%= @opts
|
2
|
+
// Icon Font: <%= @opts.font_name %>
|
3
3
|
// Bootstrap IE7 Enabler
|
4
4
|
//
|
5
5
|
|
6
|
-
[class^="<%= @opts
|
7
|
-
[class*=" <%= @opts
|
8
|
-
font-family: "<%= @opts
|
6
|
+
[class^="<%= @opts.css_prefix %>"],
|
7
|
+
[class*=" <%= @opts.css_prefix %>"] {
|
8
|
+
font-family: "<%= @opts.font_name %>";
|
9
9
|
font-style: normal;
|
10
10
|
font-weight: normal;
|
11
11
|
}
|
12
12
|
|
13
|
-
.btn.dropdown-toggle [class^="<%= @opts
|
14
|
-
.btn.dropdown-toggle [class*=" <%= @opts
|
13
|
+
.btn.dropdown-toggle [class^="<%= @opts.css_prefix %>"],
|
14
|
+
.btn.dropdown-toggle [class*=" <%= @opts.css_prefix %>"] {
|
15
15
|
line-height: 1.4em;
|
16
16
|
}
|
17
17
|
|
18
|
-
.<%= @opts
|
18
|
+
.<%= @opts.css_prefix %>large {
|
19
19
|
font-size: 1.3333em;
|
20
20
|
}
|
21
|
-
<% @
|
22
|
-
.<%= @opts
|
21
|
+
<% @glyphs.each_with_index do |name, index| %>
|
22
|
+
.<%= @opts.css_prefix + name %> { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x<%= (61696+index).to_s(16) %>; '); }<% end %>
|
@@ -1,63 +1,63 @@
|
|
1
1
|
//
|
2
|
-
// Icon Font: <%= @opts
|
2
|
+
// Icon Font: <%= @opts.font_name %>
|
3
3
|
// Bootstrap Override
|
4
4
|
//
|
5
5
|
|
6
6
|
@font-face {
|
7
|
-
font-family: "<%= @opts
|
8
|
-
src: url("<%= @
|
9
|
-
src: url("<%= @
|
10
|
-
url("<%= @
|
11
|
-
url("<%= @
|
12
|
-
url("<%= @
|
7
|
+
font-family: "<%= @opts.font_name %>";
|
8
|
+
src: url("<%= @font_path_pre %>.eot");
|
9
|
+
src: url("<%= @font_path_pre %>.eot?#iefix") format("embedded-opentype"),
|
10
|
+
url("<%= @font_path_pre %>.woff") format("woff"),
|
11
|
+
url("<%= @font_path_pre %>.ttf") format("truetype"),
|
12
|
+
url("<%= @font_path_pre %>.svg#<%= @opts.font_name %>") format("svg");
|
13
13
|
font-weight: normal;
|
14
14
|
font-style: normal;
|
15
15
|
}
|
16
16
|
|
17
|
-
[class^="<%= @opts
|
18
|
-
font-family: "<%= @opts
|
17
|
+
[class^="<%= @opts.css_prefix %>"]:before, [class*=" <%= @opts.css_prefix %>"]:before {
|
18
|
+
font-family: "<%= @opts.font_name %>";
|
19
19
|
font-weight: normal;
|
20
20
|
font-style: normal;
|
21
21
|
display: inline-block;
|
22
22
|
text-decoration: inherit;
|
23
23
|
}
|
24
24
|
|
25
|
-
a [class^="<%= @opts
|
25
|
+
a [class^="<%= @opts.css_prefix %>"], a [class*=" <%= @opts.css_prefix %>"] {
|
26
26
|
display: inline-block;
|
27
27
|
text-decoration: inherit;
|
28
28
|
}
|
29
29
|
|
30
|
-
.<%= @opts
|
30
|
+
.<%= @opts.css_prefix %>large:before {
|
31
31
|
vertical-align: top;
|
32
32
|
font-size: 1.333em;
|
33
33
|
}
|
34
34
|
|
35
|
-
.btn [class^="<%= @opts
|
35
|
+
.btn [class^="<%= @opts.css_prefix %>"], .btn [class*=" <%= @opts.css_prefix %>"] {
|
36
36
|
line-height: 0.9em;
|
37
37
|
}
|
38
38
|
|
39
|
-
li [class^="<%= @opts
|
39
|
+
li [class^="<%= @opts.css_prefix %>"], li [class*=" <%= @opts.css_prefix %>"] {
|
40
40
|
display: inline-block;
|
41
41
|
width: 1.25em;
|
42
42
|
text-align: center;
|
43
43
|
}
|
44
44
|
|
45
|
-
li .<%= @opts
|
45
|
+
li .<%= @opts.css_prefix %>large[class^="<%= @opts.css_prefix %>"], li .<%= @opts.css_prefix %>large[class*=" <%= @opts.css_prefix %>"] {
|
46
46
|
width: 1.875em;
|
47
47
|
}
|
48
48
|
|
49
|
-
li[class^="<%= @opts
|
49
|
+
li[class^="<%= @opts.css_prefix %>"], li[class*=" <%= @opts.css_prefix %>"] {
|
50
50
|
margin-left: 0;
|
51
51
|
list-style-type: none;
|
52
52
|
}
|
53
53
|
|
54
|
-
li[class^="<%= @opts
|
54
|
+
li[class^="<%= @opts.css_prefix %>"]:before, li[class*=" <%= @opts.css_prefix %>"]:before {
|
55
55
|
text-indent: -2em;
|
56
56
|
text-align: center;
|
57
57
|
}
|
58
58
|
|
59
|
-
li[class^="<%= @opts
|
59
|
+
li[class^="<%= @opts.css_prefix %>"].<%= @opts.css_prefix %>large:before, li[class*=" <%= @opts.css_prefix %>"].<%= @opts.css_prefix %>large:before {
|
60
60
|
text-indent: -1.333em;
|
61
61
|
}
|
62
|
-
<% @
|
63
|
-
.<%= @opts
|
62
|
+
<% @glyphs.each_with_index do |name, index| %>
|
63
|
+
.<%= @opts.css_prefix + name %>:before { content: "\<%= (61696+index).to_s(16) %>"; }<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//
|
2
|
+
// Icon Font: <%= @opts.font_name %>
|
3
|
+
//
|
4
|
+
|
5
|
+
@font-face {
|
6
|
+
font-family: "<%= @opts.font_name %>";
|
7
|
+
src: font-url("<%= @font_path_pre %>.eot");
|
8
|
+
src: font-url("<%= @font_path_pre %>.eot?#iefix") format("embedded-opentype"),
|
9
|
+
font-url("<%= @font_path_pre %>.woff") format("woff"),
|
10
|
+
font-url("<%= @font_path_pre %>.ttf") format("truetype"),
|
11
|
+
font-url("<%= @font_path_pre %>.svg#<%= @opts.font_name %>") format("svg");
|
12
|
+
font-weight: normal;
|
13
|
+
font-style: normal;
|
14
|
+
}
|
15
|
+
|
16
|
+
<%= @glyphs.map {|name| ".#{@opts.css_prefix + name}:before"}.join(",\n") %> {
|
17
|
+
font-family: "<%= @opts.font_name %>";
|
18
|
+
font-style: normal;
|
19
|
+
font-weight: normal;
|
20
|
+
font-variant: normal;
|
21
|
+
text-transform: none;
|
22
|
+
line-height: 1;
|
23
|
+
-webkit-font-smoothing: antialiased;
|
24
|
+
display: inline-block;
|
25
|
+
text-decoration: inherit;
|
26
|
+
}
|
27
|
+
<% @glyphs.each_with_index do |name, index| %>
|
28
|
+
.<%= @opts.css_prefix + name %>:before { content: "\<%= (61696+index).to_s(16) %>"; }<% end %>
|
@@ -1,20 +1,20 @@
|
|
1
1
|
//
|
2
|
-
// Icon Font: <%= @opts
|
2
|
+
// Icon Font: <%= @opts.font_name %>
|
3
3
|
//
|
4
4
|
|
5
5
|
@font-face {
|
6
|
-
font-family: "<%= @opts
|
7
|
-
src: url("<%= @
|
8
|
-
src: url("<%= @
|
9
|
-
url("<%= @
|
10
|
-
url("<%= @
|
11
|
-
url("<%= @
|
6
|
+
font-family: "<%= @opts.font_name %>";
|
7
|
+
src: url("<%= @font_path_pre %>.eot");
|
8
|
+
src: url("<%= @font_path_pre %>.eot?#iefix") format("embedded-opentype"),
|
9
|
+
url("<%= @font_path_pre %>.woff") format("woff"),
|
10
|
+
url("<%= @font_path_pre %>.ttf") format("truetype"),
|
11
|
+
url("<%= @font_path_pre %>.svg#<%= @opts.font_name %>") format("svg");
|
12
12
|
font-weight: normal;
|
13
13
|
font-style: normal;
|
14
14
|
}
|
15
15
|
|
16
|
-
<%= @
|
17
|
-
font-family: "<%= @opts
|
16
|
+
<%= @glyphs.map {|name| ".#{@opts.css_prefix + name}:before"}.join(",\n") %> {
|
17
|
+
font-family: "<%= @opts.font_name %>";
|
18
18
|
font-style: normal;
|
19
19
|
font-weight: normal;
|
20
20
|
font-variant: normal;
|
@@ -24,5 +24,5 @@
|
|
24
24
|
display: inline-block;
|
25
25
|
text-decoration: inherit;
|
26
26
|
}
|
27
|
-
<% @
|
28
|
-
.<%= @opts
|
27
|
+
<% @glyphs.each_with_index do |name, index| %>
|
28
|
+
.<%= @opts.css_prefix + name %>:before { content: "\<%= (61696+index).to_s(16) %>"; }<% end %>
|
@@ -1,22 +1,22 @@
|
|
1
1
|
/*
|
2
|
-
Icon Font: <%= @opts
|
2
|
+
Icon Font: <%= @opts.font_name %>
|
3
3
|
Bootstrap IE7 Enabler
|
4
4
|
*/
|
5
5
|
|
6
|
-
[class^="<%= @opts
|
7
|
-
[class*=" <%= @opts
|
8
|
-
font-family: "<%= @opts
|
6
|
+
[class^="<%= @opts.css_prefix %>"],
|
7
|
+
[class*=" <%= @opts.css_prefix %>"] {
|
8
|
+
font-family: "<%= @opts.font_name %>";
|
9
9
|
font-style: normal;
|
10
10
|
font-weight: normal;
|
11
11
|
}
|
12
12
|
|
13
|
-
.btn.dropdown-toggle [class^="<%= @opts
|
14
|
-
.btn.dropdown-toggle [class*=" <%= @opts
|
13
|
+
.btn.dropdown-toggle [class^="<%= @opts.css_prefix %>"],
|
14
|
+
.btn.dropdown-toggle [class*=" <%= @opts.css_prefix %>"] {
|
15
15
|
line-height: 1.4em;
|
16
16
|
}
|
17
17
|
|
18
|
-
.<%= @opts
|
18
|
+
.<%= @opts.css_prefix %>large {
|
19
19
|
font-size: 1.3333em;
|
20
20
|
}
|
21
|
-
<% @
|
22
|
-
.<%= @opts
|
21
|
+
<% @glyphs.each_with_index do |name, index| %>
|
22
|
+
.<%= @opts.css_prefix + name %> { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x<%= (61696+index).to_s(16) %>; '); }<% end %>
|