archetype 0.0.1.pre.3.f9dde24 → 0.0.1.pre.3.90263a7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/archetype +3 -0
- data/lib/archetype/actions/help.rb +16 -0
- data/lib/archetype/actions/theme.rb +73 -0
- data/lib/archetype/executor.rb +27 -0
- data/lib/archetype/functions/helpers.rb +49 -9
- data/lib/archetype/functions/styleguide_memoizer.rb +9 -1
- data/lib/archetype/sass_extensions.rb +1 -0
- data/lib/archetype/sass_extensions/functions/styleguide.rb +104 -27
- data/lib/archetype/sass_extensions/monkey_patches.rb +3 -0
- data/lib/archetype/sass_extensions/monkey_patches/handle_include_loop.rb +41 -0
- data/stylesheets/archetype/_base.scss +3 -0
- data/stylesheets/archetype/_config.scss +5 -1
- data/stylesheets/archetype/_hacks.scss +24 -4
- data/stylesheets/archetype/_ui.scss +23 -2
- data/stylesheets/archetype/base/_h5bp.scss +12 -12
- data/stylesheets/archetype/base/_normalize.scss +178 -139
- data/stylesheets/archetype/styleguide/_helpers.scss +1 -4
- data/stylesheets/archetype/styleguide/components/_alerts.scss +1 -1
- data/stylesheets/archetype/styleguide/components/_buttons.scss +6 -6
- data/stylesheets/archetype/styleguide/components/_closes.scss +2 -2
- data/stylesheets/archetype/util/_styles.scss +18 -3
- data/stylesheets/archetype/util/_targeting.scss +2 -0
- data/templates/_theme/_components.scss +3 -0
- data/templates/_theme/_config.scss +1 -0
- data/templates/_theme/_core.scss +13 -0
- data/templates/_theme/_helpers.scss +1 -0
- data/templates/_theme/_primitives.scss +3 -0
- data/templates/_theme/components/README +1 -0
- data/templates/_theme/primitives/README +1 -0
- data/test/fixtures/stylesheets/archetype/expected/styleguide/alerts.css +675 -0
- data/test/fixtures/stylesheets/archetype/expected/styleguide/buttons.css +18 -18
- data/test/fixtures/stylesheets/archetype/expected/styleguide/drop.css +63 -0
- data/test/fixtures/stylesheets/archetype/expected/styleguide/invalid_structures.css +21 -0
- data/test/fixtures/stylesheets/archetype/expected/styleguide/multi_value.css +13 -0
- data/test/fixtures/stylesheets/archetype/expected/ui/glyph_icon.css +52 -9
- data/test/fixtures/stylesheets/archetype/expected/utilities/targeting/target-browser.css +5 -0
- data/test/fixtures/stylesheets/archetype/source/styleguide/alerts.scss +21 -0
- data/test/fixtures/stylesheets/archetype/source/styleguide/buttons.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/styleguide/drop.scss +101 -0
- data/test/fixtures/stylesheets/archetype/source/styleguide/fallback_styles.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/styleguide/invalid_structures.scss +85 -0
- data/test/fixtures/stylesheets/archetype/source/styleguide/multi_value.scss +18 -0
- data/test/fixtures/stylesheets/archetype/source/styleguide/nested_styleguides.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/styleguide/selective_state.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/ui/glyph_icon.scss +10 -0
- data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-browser.scss +8 -1
- metadata +33 -5
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders-s7889ccc8c1.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79510cfaba6afef89a552a3ac086173c80c73822
|
4
|
+
data.tar.gz: 2214d9ff17d64a4fab9829e870ac8849e952cec4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90fd7abc4d5707b492d987a3e0870b911f27d08e1baec5a16bee065f101927ce44a443727cb0b3640a2a0fa509cac2c9f4ce29a34709645f6637f12214bee1f3
|
7
|
+
data.tar.gz: 95fa9484e95e38ad062889e68bb11aa2d7d21a4edbb2c1e9db8be53b729ba1d795d9a1ca67e8586526493486770d51a976a593937218166c4e38637e00a271b6
|
data/bin/archetype
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
description = "Get help on an Archetype action"
|
2
|
+
if @description.nil?
|
3
|
+
# do stuff...
|
4
|
+
@help = true
|
5
|
+
|
6
|
+
if not ARGV[1].nil? and ARGV[1] != 'help'
|
7
|
+
action = File.join(@actions_path, ARGV[1])
|
8
|
+
begin
|
9
|
+
load "#{action}.rb"
|
10
|
+
rescue
|
11
|
+
puts "unknown action: #{ARGV[1]}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
else
|
15
|
+
@description = description
|
16
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
description = "Generate a new Archetype theme"
|
3
|
+
|
4
|
+
if @description.nil?
|
5
|
+
options = {
|
6
|
+
:extends => 'archetype'
|
7
|
+
}
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = description
|
10
|
+
opts.define_head "Usage: archetype theme [path] [options]"
|
11
|
+
opts.separator ""
|
12
|
+
opts.separator "Example usage:"
|
13
|
+
opts.separator " archetype theme /path/to/scss/ --name=myCustomTheme"
|
14
|
+
opts.separator " archetype theme --name=themes/myExtendedTheme --extends=themes/myBaseTheme"
|
15
|
+
|
16
|
+
opts.on('-n', '--name THEME', 'theme name') do |v|
|
17
|
+
options[:theme] = v
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on('-x', '--extends THEME', 'theme name to extend') do |v|
|
21
|
+
options[:extends] = v
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on('-h', '--help', 'shows this help message') do
|
25
|
+
puts opts
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
|
29
|
+
if not @help.nil?
|
30
|
+
puts opts
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end.parse!
|
34
|
+
|
35
|
+
if not options[:theme].nil?
|
36
|
+
base = ARGV[1] || '.'
|
37
|
+
tmp = '/tmp/theme_' + rand(36**8).to_s(36)
|
38
|
+
theme_template = File.join(File.dirname(__FILE__), '../../../templates/_theme/')
|
39
|
+
theme_path = File.join(base, options[:theme])
|
40
|
+
extends = "#{options[:extends]}"
|
41
|
+
if options[:extends] != 'archetype'
|
42
|
+
extends = "#{extends}/core"
|
43
|
+
end
|
44
|
+
theme_name = File.basename(options[:theme])
|
45
|
+
# copy template files to tmp dir
|
46
|
+
FileUtils.mkdir_p(tmp)
|
47
|
+
FileUtils.cp_r(Dir["#{theme_template}/**"], tmp)
|
48
|
+
|
49
|
+
puts "Creating theme '#{theme_name}' in #{File.expand_path(theme_path)}..."
|
50
|
+
puts "extending from #{options[:extends]}" if options[:extends] != 'archetype'
|
51
|
+
|
52
|
+
# update all placeholders in template files
|
53
|
+
Dir.glob("#{tmp}/**/*.scss") do |filename|
|
54
|
+
out = File.read(filename).gsub(/__THEME_NAME__/, theme_name).gsub(/__THEME_EXTENDS__/, extends)
|
55
|
+
File.open(filename, "w") { |file| file.puts out }
|
56
|
+
end
|
57
|
+
|
58
|
+
# now move all the theme files to their destination
|
59
|
+
FileUtils.mkdir_p(theme_path)
|
60
|
+
FileUtils.cp_r(Dir["#{tmp}/**"], theme_path)
|
61
|
+
|
62
|
+
# create convenience file _<theme>.scss ...
|
63
|
+
File.open(File.join(File.dirname(theme_path), "_#{theme_name}.scss"), "w") { |file| file.puts "// #{theme_name} theme\n@import \"#{theme_name}/core\";\n" }
|
64
|
+
|
65
|
+
# remove tmp dir
|
66
|
+
FileUtils.rm_rf(tmp)
|
67
|
+
puts "Congratulations! Your new theme has been created!"
|
68
|
+
puts "Use @import \"#{options[:theme]}\" in your scss files."
|
69
|
+
exit
|
70
|
+
end
|
71
|
+
else
|
72
|
+
@description = description
|
73
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
@actions_path = File.join(File.dirname(__FILE__), 'actions')
|
4
|
+
|
5
|
+
if not ARGV[0].nil? and not ARGV[0].empty?
|
6
|
+
action_name = ARGV[0]
|
7
|
+
action = File.join(@actions_path, action_name)
|
8
|
+
begin
|
9
|
+
require action
|
10
|
+
rescue
|
11
|
+
puts "unknown action: #{action_name}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# if we got here, there was either no action, or the action was invalid
|
16
|
+
OptionParser.new do |opts|
|
17
|
+
opts.banner = "Archetype command line actions\n\n"
|
18
|
+
opts.define_head "Usage: archetype <action> [options]"
|
19
|
+
opts.separator ""
|
20
|
+
opts.separator "Available Actions:"
|
21
|
+
Dir.glob("#{@actions_path}/*.rb") do |action|
|
22
|
+
@description = true
|
23
|
+
load action
|
24
|
+
opts.separator " * #{File.basename(action, '.rb')}\t- #{@description}"
|
25
|
+
end
|
26
|
+
puts opts
|
27
|
+
end.parse!
|
@@ -55,30 +55,66 @@ private
|
|
55
55
|
#
|
56
56
|
def self.list_to_hash(list, depth = 0, nest = [], additives = [])
|
57
57
|
list = list.to_a
|
58
|
+
previous = nil
|
58
59
|
hsh = Archetype::Hash.new
|
59
60
|
list.each do |item|
|
60
61
|
item = item.to_a
|
62
|
+
|
63
|
+
# if a 3rd item exists, we probably forgot a comma or parens somewhere
|
64
|
+
if previous.nil? and not item[2].nil?
|
65
|
+
msg = "you're likely missing a comma or parens in your data structure"
|
66
|
+
begin
|
67
|
+
logger.record(:warning, "#{msg}: #{item}")
|
68
|
+
rescue
|
69
|
+
logger.record(:warning, msg)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
61
73
|
# convert the key to a string and strip off quotes
|
62
74
|
key = to_str(item[0], ' ' , :quotes)
|
75
|
+
# capture the value
|
63
76
|
value = item[1]
|
77
|
+
|
64
78
|
if key != 'nil'
|
79
|
+
if is_value(value, :blank)
|
80
|
+
if previous.nil?
|
81
|
+
previous = key
|
82
|
+
next
|
83
|
+
else
|
84
|
+
value = item[0]
|
85
|
+
key = previous
|
86
|
+
previous = nil
|
87
|
+
end
|
88
|
+
elsif not previous.nil?
|
89
|
+
# if we got here, something is wrong with the structure
|
90
|
+
list.shift if to_str(list[0]) == previous # remove the first item if it's the previous key, which is now the parent key
|
91
|
+
list = list[0].to_a # now the remaining items were munged, so split them out
|
92
|
+
hsh = Archetype::Hash.new
|
93
|
+
hsh[previous] = list_to_hash(list, depth - 1, nest, additives)
|
94
|
+
return hsh
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# update the hash if we have a valid key and hash
|
99
|
+
if key != 'nil' and not is_value(value, :blank)
|
65
100
|
# check if if it's a nesting hash
|
66
101
|
nested = nest.include?(key)
|
67
102
|
# if it's nested or we haven't reached out depth, recurse
|
68
103
|
if nested or depth > 0
|
69
104
|
value = list_to_hash(value, nested ? depth + 1 : depth - 1, nest, additives)
|
70
105
|
end
|
71
|
-
|
72
|
-
if
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
hsh[key] = value
|
78
|
-
end
|
106
|
+
|
107
|
+
if additives.include?(key)
|
108
|
+
hsh[key] ||= []
|
109
|
+
hsh[key].push(value)
|
110
|
+
else
|
111
|
+
hsh[key] = value
|
79
112
|
end
|
80
113
|
end
|
81
114
|
end
|
115
|
+
|
116
|
+
logger.record(:warning, "one of your data structures is ambiguous, please double check near `#{previous}`") if not previous.nil?
|
117
|
+
|
82
118
|
return hsh
|
83
119
|
end
|
84
120
|
|
@@ -92,7 +128,9 @@ private
|
|
92
128
|
# - {String} the converted String
|
93
129
|
#
|
94
130
|
def self.to_str(value, separator = ' ', strip = nil)
|
95
|
-
|
131
|
+
if not value.is_a?(String)
|
132
|
+
value = ((value.to_a).each{ |i| i.nil? ? 'nil' : (i.is_a?(String) ? i : i.value) }).join(separator || '')
|
133
|
+
end
|
96
134
|
strip = /\A"|"\Z/ if strip == :quotes
|
97
135
|
return strip.nil? ? value : value.gsub(strip, '')
|
98
136
|
end
|
@@ -112,11 +150,13 @@ private
|
|
112
150
|
when :blank
|
113
151
|
is_it = false
|
114
152
|
value = value.value if value.is_a?(Sass::Script::String)
|
153
|
+
is_it = value.nil?
|
115
154
|
is_it = value.empty? if value.is_a?(String)
|
116
155
|
is_it = value.to_a.empty? if value.is_a?(Sass::Script::List) or value.is_a?(Array)
|
117
156
|
when :nil
|
118
157
|
is_it = false
|
119
158
|
value = value.value if value.is_a?(Sass::Script::String)
|
159
|
+
is_it = value.nil?
|
120
160
|
is_it = value == 'nil' if value.is_a?(String)
|
121
161
|
is_it = to_str(value) == 'nil' if value.is_a?(Sass::Script::List) or value.is_a?(Array)
|
122
162
|
end
|
@@ -50,7 +50,7 @@ private
|
|
50
50
|
end
|
51
51
|
|
52
52
|
#
|
53
|
-
# invalidate the
|
53
|
+
# invalidate the memoizer for the theme
|
54
54
|
#
|
55
55
|
# *Parameters*:
|
56
56
|
# - <tt>theme</tt> {String} the theme name
|
@@ -58,4 +58,12 @@ private
|
|
58
58
|
def self.clear(theme)
|
59
59
|
@components[theme] = {}
|
60
60
|
end
|
61
|
+
|
62
|
+
|
63
|
+
#
|
64
|
+
# resets the entire memoizer
|
65
|
+
#
|
66
|
+
def self.reset!
|
67
|
+
@components = {}
|
68
|
+
end
|
61
69
|
end
|
@@ -15,10 +15,13 @@ module Archetype::SassExtensions::Styleguide
|
|
15
15
|
DEFAULT = 'default'
|
16
16
|
REGEX = 'regex'
|
17
17
|
SPECIAL = %w(states selectors)
|
18
|
+
DROPALL = %w(all true)
|
18
19
|
# these are unique CSS keys that can be exploited to provide fallback functionality by providing a second value
|
19
20
|
# e.g color: red; color: rgba(255,0,0, 0.8);
|
20
21
|
FALLBACKS = %w(background background-image background-color border border-bottom border-bottom-color border-color border-left border-left-color border-right border-right-color border-top border-top-color clip color layer-background-color outline outline-color white-space extend)
|
21
|
-
|
22
|
+
# these are mixins that make sense to run multiple times within a block
|
23
|
+
MULTIMIXINS = %w(target-browser)
|
24
|
+
ADDITIVES = FALLBACKS + [DROP, INHERIT, STYLEGUIDE] + MULTIMIXINS
|
22
25
|
@@archetype_styleguide_mutex = Mutex.new
|
23
26
|
# :startdoc:
|
24
27
|
|
@@ -246,7 +249,11 @@ private
|
|
246
249
|
modifier.each { |i| match = false if not modifiers.include?(i) }
|
247
250
|
end
|
248
251
|
# if it matched, process it
|
249
|
-
|
252
|
+
if match
|
253
|
+
tmp = resolve_dependents(id, definition[1], theme[:name], nil, out)
|
254
|
+
out, tmp = post_resolve_drops(out, tmp)
|
255
|
+
out = out.rmerge(tmp)
|
256
|
+
end
|
250
257
|
end
|
251
258
|
end
|
252
259
|
end
|
@@ -254,15 +261,19 @@ private
|
|
254
261
|
# this lets us define special states and elements
|
255
262
|
SPECIAL.each do |special_key|
|
256
263
|
if out.is_a? Hash
|
257
|
-
special = out[special_key]
|
258
|
-
|
259
|
-
|
260
|
-
|
264
|
+
special = out[special_key] || Archetype::Hash.new
|
265
|
+
if special == 'nil'
|
266
|
+
out[special_key] = Archetype::Hash.new
|
267
|
+
else
|
268
|
+
tmp = Archetype::Hash.new
|
269
|
+
special.each { |key, value| tmp[key] = extract_styles(key, key, true, theme[:name], special) }
|
270
|
+
out[special_key] = tmp if not tmp.empty?
|
271
|
+
end
|
261
272
|
end
|
262
273
|
end
|
263
274
|
# check for nested styleguides
|
264
275
|
styleguide = out[STYLEGUIDE]
|
265
|
-
if styleguide
|
276
|
+
if not (styleguide.nil? or styleguide.empty?)
|
266
277
|
styles = get_styles(styleguide, theme[:name])
|
267
278
|
out.delete(STYLEGUIDE)
|
268
279
|
out = styles.rmerge(out)
|
@@ -270,6 +281,87 @@ private
|
|
270
281
|
return out
|
271
282
|
end
|
272
283
|
|
284
|
+
#
|
285
|
+
# given two objects, resolve the chain of dropped styles
|
286
|
+
# this runs after having already resolved the dropped styles and merged
|
287
|
+
#
|
288
|
+
# *Parameters*:
|
289
|
+
# - <tt>obj</tt> {Hash} the source object
|
290
|
+
# - <tt>merger</tt> {Hash} the object to be merged in
|
291
|
+
# *Returns*:
|
292
|
+
# - {Array.<Hash>} the resulting `obj` and `merger` objects
|
293
|
+
#
|
294
|
+
def post_resolve_drops(obj, merger)
|
295
|
+
return [obj, merger] if obj.nil? or merger.nil?
|
296
|
+
drop = merger[DROP]
|
297
|
+
keys = obj.keys
|
298
|
+
if not drop.nil?
|
299
|
+
drop.to_a.each do |key|
|
300
|
+
key = helpers.to_str(key)
|
301
|
+
obj.delete(key) if not SPECIAL.include?(key)
|
302
|
+
end
|
303
|
+
merger.delete(DROP)
|
304
|
+
else
|
305
|
+
end
|
306
|
+
SPECIAL.each do |special|
|
307
|
+
if obj[special].is_a?(Hash) and merger[special].is_a?(Hash)
|
308
|
+
obj[special], merger[special] = post_resolve_drops(obj[special], merger[special])
|
309
|
+
end
|
310
|
+
end
|
311
|
+
return [obj, merger]
|
312
|
+
end
|
313
|
+
|
314
|
+
#
|
315
|
+
# given two objects, resolve the chain of dropped styles
|
316
|
+
#
|
317
|
+
# *Parameters*:
|
318
|
+
# - <tt>value</tt> {Hash} the source object
|
319
|
+
# - <tt>obj</tt> {Hash} the object to be merged in
|
320
|
+
# - <tt>is_special</tt> {Boolean} whether this is from a SPECIAL branch of a Hash
|
321
|
+
# *Returns*:
|
322
|
+
# - {Array.<Hash>} the resulting value
|
323
|
+
#
|
324
|
+
def resolve_drops(value, obj, is_special = false)
|
325
|
+
return value if not (value.is_a?(Hash) and obj.is_a?(Hash))
|
326
|
+
keys = obj.keys
|
327
|
+
drop = value[DROP]
|
328
|
+
if not drop.nil?
|
329
|
+
tmp = Archetype::Hash.new
|
330
|
+
if DROPALL.include?(helpers.to_str(drop))
|
331
|
+
if not keys.nil?
|
332
|
+
keys.each do |key|
|
333
|
+
if SPECIAL.include?(key)
|
334
|
+
if not (obj[key].nil? or obj[key].empty?)
|
335
|
+
tmp[key] = Archetype::Hash.new
|
336
|
+
tmp[key][DROP] = obj[key].keys
|
337
|
+
end
|
338
|
+
else
|
339
|
+
tmp[key] = 'nil'
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
else
|
344
|
+
drop.to_a.each do |key|
|
345
|
+
key = helpers.to_str(key)
|
346
|
+
if SPECIAL.include?(key)
|
347
|
+
if not (obj[key].nil? or obj[key].empty?)
|
348
|
+
tmp[key] = Archetype::Hash.new
|
349
|
+
tmp[key][DROP] = obj[key].keys
|
350
|
+
end
|
351
|
+
else
|
352
|
+
tmp[key] = 'nil'
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
value.delete(DROP) if not is_special
|
357
|
+
value = tmp.rmerge(value)
|
358
|
+
end
|
359
|
+
value.each do |key|
|
360
|
+
value[key] = resolve_drops(value[key], obj[key], key, SPECIAL.include?(key)) if not value[key].nil?
|
361
|
+
end
|
362
|
+
return value
|
363
|
+
end
|
364
|
+
|
273
365
|
#
|
274
366
|
# resolve any dependent references from the component
|
275
367
|
#
|
@@ -282,31 +374,17 @@ private
|
|
282
374
|
# *Returns*:
|
283
375
|
# - {Hash} a hash of the resolved styles
|
284
376
|
#
|
285
|
-
def resolve_dependents(id, value, theme = nil, context = nil,
|
377
|
+
def resolve_dependents(id, value, theme = nil, context = nil, obj = nil)
|
286
378
|
# we have to create a clone here as the passed in value is volatile and we're performing destructive changes
|
287
379
|
value = value.clone
|
288
380
|
# check that we're dealing with a hash
|
289
381
|
if value.is_a?(Hash)
|
290
382
|
# check for dropped styles
|
291
|
-
|
292
|
-
|
293
|
-
tmp = Archetype::Hash.new
|
294
|
-
if %w(all true).include?(helpers.to_str(drop)) and not keys.nil? and not keys.empty?
|
295
|
-
keys.each do |key|
|
296
|
-
tmp[key] = 'nil'
|
297
|
-
end
|
298
|
-
else
|
299
|
-
drop = drop.to_a
|
300
|
-
drop.each do |key|
|
301
|
-
tmp[helpers.to_str(key)] = 'nil'
|
302
|
-
end
|
303
|
-
end
|
304
|
-
value.delete(DROP)
|
305
|
-
value = tmp.rmerge(value)
|
306
|
-
end
|
383
|
+
value = resolve_drops(value, obj)
|
384
|
+
|
307
385
|
# check for inheritance
|
308
386
|
inherit = value[INHERIT]
|
309
|
-
if inherit
|
387
|
+
if not (inherit.nil? or inherit.empty?)
|
310
388
|
# create a temporary object and extract the nested styles
|
311
389
|
tmp = Archetype::Hash.new
|
312
390
|
inherit.each { |related| tmp = tmp.rmerge(extract_styles(id, related, true, theme, context)) }
|
@@ -349,9 +427,8 @@ private
|
|
349
427
|
#
|
350
428
|
def get_styles(description, theme = nil, state = 'false')
|
351
429
|
state = helpers.to_str(state)
|
352
|
-
description = description.to_a
|
353
430
|
styles = Archetype::Hash.new
|
354
|
-
description.each do |sentence|
|
431
|
+
description.to_a.each do |sentence|
|
355
432
|
# get the grammar from the sentence
|
356
433
|
id, modifiers, token = grammar(sentence, theme, state)
|
357
434
|
if id
|