aml 0.0.8 → 0.0.9
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/lib/aml.rb +24 -20
- data/lib/aml/compile.rb +18 -9
- data/lib/aml/definition.rb +1 -1
- data/lib/aml/error.rb +18 -5
- data/lib/aml/make.rb +1 -1
- data/lib/aml/parse.rb +11 -1
- data/lib/aml/watch.rb +10 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 269daf118df596cb722b1e749453e59a03c24fd7
|
4
|
+
data.tar.gz: 21f56707e802f9a1f8183b1abc65d3aee99f76b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d3fc6f980e8141150b6d496840d1e71c82287eb16506aca3192c401b09b808593658be1e2ec358473dfbae3d381fd01e503ae9319931d9a39ad8a716f2166dd
|
7
|
+
data.tar.gz: 1995da921b1f8e4822575c52b375ca5b535648a5421f140df37334c72ee6e231620a1cc6358696517a54e278b8ddae868f1abfccd1937b60ff87e178f9aa3fe5
|
data/lib/aml.rb
CHANGED
@@ -27,7 +27,7 @@ module AbstractMarkupLanguage
|
|
27
27
|
@basePath = basePath
|
28
28
|
watchFile = File.basename(argument.read('watch'))
|
29
29
|
@watchFile = watchFile
|
30
|
-
#
|
30
|
+
#Arguments from aml-config
|
31
31
|
configFile = File.join(basePath,'aml-config')
|
32
32
|
argument.parse(File.read(configFile)) if File.exist?(configFile)
|
33
33
|
#Arguments
|
@@ -35,20 +35,25 @@ module AbstractMarkupLanguage
|
|
35
35
|
argument.create_if_empty('basePath',basePath)
|
36
36
|
argument.create_if_empty('fileExtension','html')
|
37
37
|
argument.create_if_empty('fileOutput',"#{File.basename(argument.read('watch'), ".*")}.#{argument.read('fileExtension')}")
|
38
|
-
argument.create_if_empty('selfClosing',"area,base,basefont,bgsound,br,col,frame,hr,img,isindex,input,keygen,link,meta,param,source,track,wbr")
|
39
|
-
argument.create_if_empty('sortAttribute','true')
|
40
|
-
argument.create_if_empty('singleQuote','false')
|
41
|
-
argument.create_if_empty('errorLimit','5')
|
42
38
|
argument.create_if_empty('aml-watch-instance', "#{instance}")
|
39
|
+
|
40
|
+
argument.create_if_empty('selfClosing',"area,base,basefont,bgsound,br,col,frame,hr,img,isindex,input,keygen,link,meta,param,source,track,wbr")
|
43
41
|
|
44
42
|
parse = Parse.new(argument.read('basePath'), argument.read('watch'))
|
45
43
|
files = []
|
46
44
|
|
45
|
+
#Watch Partials
|
47
46
|
parse.watch.each do |this|
|
48
47
|
file = File.join(basePath, this[:bundle] ? File.join(this[:bundle],'partial') : this[:partial] ? 'partial' : '' , this[:file])
|
49
48
|
files << file
|
50
49
|
end
|
51
50
|
|
51
|
+
#Watch Mixins
|
52
|
+
parse.mixin.each do |this|
|
53
|
+
file = File.join(basePath, this[:bundle] ? File.join(this[:bundle]) : this[:partial] ? 'partial' : '' , this[:file]) if this[:bundle] != false
|
54
|
+
files << file if file != nil
|
55
|
+
end
|
56
|
+
|
52
57
|
#Define Core Bundle's Methods, Mixins, & Variables...
|
53
58
|
core_definition = false
|
54
59
|
if(File.exists?(File.join(File.dirname(File.expand_path(__FILE__)),'aml','core','mixin.aml')))
|
@@ -58,6 +63,7 @@ module AbstractMarkupLanguage
|
|
58
63
|
else
|
59
64
|
error.log('core',false,'mixin.aml',false,'file does not exist')
|
60
65
|
end
|
66
|
+
|
61
67
|
if(File.exists?(File.join(File.dirname(File.expand_path(__FILE__)),'aml','core','method.rb')))
|
62
68
|
begin
|
63
69
|
class_eval File.read(File.join(File.dirname(File.expand_path(__FILE__)),'aml','core','method.rb'))
|
@@ -102,29 +108,27 @@ module AbstractMarkupLanguage
|
|
102
108
|
end
|
103
109
|
end
|
104
110
|
|
111
|
+
#Watch or Build
|
105
112
|
@makeFile = argument.read('fileOutput')
|
106
113
|
compile = Compile.new(parse,argument,definition,error)
|
107
|
-
if
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
print "\r\b\e[
|
112
|
-
watch = Watch.new(files, arguments, argument.read('aml-watch-instance').to_i+1, argument.read('build'))
|
114
|
+
error.log_delete if error.count == 0
|
115
|
+
error.log_create if error.count > 0
|
116
|
+
if argument.read('build') == 'false'
|
117
|
+
if(error.count == 0)
|
118
|
+
print "\r\b\e[0KWatching #{files.count} file#{files.count != 1 ? "s" : ""}"" for updates... "
|
113
119
|
else
|
114
|
-
|
120
|
+
print "\r\b\e[0KPlease resolve all issues found in aml-error... "
|
115
121
|
end
|
122
|
+
watch = Watch.new(files, arguments, argument.read('aml-watch-instance').to_i+1, argument.read('build'))
|
116
123
|
else
|
117
|
-
|
118
|
-
|
119
|
-
error.log_delete
|
120
|
-
puts error.output
|
124
|
+
if(error.count == 0)
|
125
|
+
puts "Build complete."
|
121
126
|
else
|
122
|
-
error.
|
123
|
-
|
124
|
-
end
|
127
|
+
puts "Please resolve all issues found in aml-error."
|
128
|
+
end
|
125
129
|
end
|
126
130
|
else
|
127
|
-
puts "Please define the --watch or --build argument."
|
131
|
+
puts argument.read('watch').to_s.length == 0 ? "Please define the --watch or --build argument." : "File not found."
|
128
132
|
end
|
129
133
|
end
|
130
134
|
|
data/lib/aml/compile.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
class Compile
|
2
2
|
|
3
3
|
@@structure = []
|
4
|
-
|
4
|
+
@@selfClosing = []
|
5
|
+
|
5
6
|
def initialize(parse,argument,definition,error)
|
7
|
+
@@selfClosing = argument.read('selfClosing').split(',')
|
6
8
|
error.compile(parse,definition,error)
|
7
9
|
if(error.count == 0)
|
8
10
|
prepare_line_variable(parse.file[:line],definition)
|
@@ -19,7 +21,7 @@ class Compile
|
|
19
21
|
|
20
22
|
structure = prepare_structure(parse.file[:line])
|
21
23
|
structure.each do |group|
|
22
|
-
recursive_close(group)
|
24
|
+
recursive_close(group,0,definition)
|
23
25
|
end
|
24
26
|
make = Make.new(@@structure)
|
25
27
|
end
|
@@ -202,7 +204,7 @@ class Compile
|
|
202
204
|
pstruct[:children]
|
203
205
|
end
|
204
206
|
|
205
|
-
def recursive_close(struct,index=0)
|
207
|
+
def recursive_close(struct,index=0,definition)
|
206
208
|
next_index = struct.key?(:line) ? index+1 : index
|
207
209
|
tab_index = "\t" * index
|
208
210
|
opening_tag_attributes = ""
|
@@ -216,7 +218,10 @@ class Compile
|
|
216
218
|
|
217
219
|
#TAG
|
218
220
|
if(struct[:line][:type]==:tag)
|
219
|
-
|
221
|
+
|
222
|
+
struct[:line][:close] = 'self' if @@selfClosing.include? struct[:line][:name]
|
223
|
+
|
224
|
+
opening_tag_attributes = tag_line_attributes(struct[:line],"",definition)
|
220
225
|
opening_tag = "<#{struct[:line][:name]}#{opening_tag_attributes}>"
|
221
226
|
closing_tag = "</#{struct[:line][:name]}>"
|
222
227
|
if struct.key?(:line)
|
@@ -234,7 +239,7 @@ class Compile
|
|
234
239
|
tag_text = "\r\n#{tab_index}\t#{tag_text}" if tag_text.to_s.length > 0
|
235
240
|
@@structure << "#{tab_index}#{opening_tag}#{tag_text}" if struct.key?(:line)
|
236
241
|
struct[:children].each do |struct_children|
|
237
|
-
recursive_close(struct_children,next_index)
|
242
|
+
recursive_close(struct_children,next_index,definition)
|
238
243
|
end
|
239
244
|
@@structure << "#{tab_index}#{closing_tag}" if struct.key?(:line)
|
240
245
|
else
|
@@ -243,23 +248,27 @@ class Compile
|
|
243
248
|
|
244
249
|
end
|
245
250
|
|
246
|
-
def tag_line_attributes(line,base="")
|
251
|
+
def tag_line_attributes(line,base="",definition)
|
247
252
|
if line[:type] == :tag
|
248
253
|
line[:attributes][:id] = line[:id] if line[:id].to_s.length > 0 and line[:attributes][:id].to_s.length == 0
|
249
254
|
line[:attributes][:class] = line[:class] if line[:class].to_s.length > 0 and line[:attributes][:class].to_s.length == 0
|
250
|
-
attributes = hash_to_attribute_build(line[:attributes])
|
255
|
+
attributes = hash_to_attribute_build(line[:attributes],"",definition,line)
|
251
256
|
attributes = " #{attributes}" if(attributes.length > 0)
|
252
257
|
end
|
253
258
|
end
|
254
259
|
|
255
|
-
def hash_to_attribute_build(hash,base="")
|
260
|
+
def hash_to_attribute_build(hash,base="",definition,line)
|
256
261
|
hash = hash.sort_by{|key, value| key}
|
257
262
|
string = ""
|
258
263
|
hash.each do |key, value|
|
259
264
|
if(value.is_a?(Hash))
|
260
265
|
value.sort_by{|key, value| key}
|
261
|
-
string << "#{hash_to_attribute_build(value,"#{base}#{key}-")} "
|
266
|
+
string << "#{hash_to_attribute_build(value,"#{base}#{key}-",definition,line)} "
|
262
267
|
else
|
268
|
+
#if key == :id
|
269
|
+
# regex = /\@\(((?<bundle>[\w|\-]+)\.)?(?<name>[\w|\-]+)\)/
|
270
|
+
# value = value.to_s.gsub(regex){definition.variable($2,line[:number],$1.to_s.length > 0 ? $1 : false).to_s} if value.to_s.length > 0
|
271
|
+
#end
|
263
272
|
string << "#{base}#{key}=\"#{value}\" "
|
264
273
|
end
|
265
274
|
end
|
data/lib/aml/definition.rb
CHANGED
@@ -17,7 +17,7 @@ class Definition
|
|
17
17
|
end
|
18
18
|
def add(parse,scope=false,add_bundle=true,add_mixin=true,add_variable=true)
|
19
19
|
#define bundles
|
20
|
-
parse[:line].select{|k,v| k[:type] == :method or k[:type] == :partial}.each do |bundle|
|
20
|
+
parse[:line].select{|k,v| k[:type] == :method or k[:type] == :partial or k[:type] == :mixin}.each do |bundle|
|
21
21
|
@bundle[bundle[:bundle]] = camelCase(bundle[:bundle]) if @bundle.has_key?(bundle[:bundle]) == false and bundle[:bundle] != false
|
22
22
|
end if add_bundle
|
23
23
|
#define mixins
|
data/lib/aml/error.rb
CHANGED
@@ -1,29 +1,42 @@
|
|
1
1
|
class Error
|
2
2
|
@errors
|
3
|
+
@warnings
|
3
4
|
def initialize
|
4
5
|
@errors = []
|
6
|
+
@warnings = []
|
5
7
|
end
|
6
|
-
def
|
8
|
+
def warnings
|
9
|
+
@warnings
|
10
|
+
end
|
11
|
+
def log(bundle,partial,file,line,message,warning=false)
|
7
12
|
file = "partial/#{file}" if partial != false
|
8
13
|
file = "#{bundle}/#{file}" if bundle != false
|
9
14
|
line = line ? "::#{line}" : nil
|
10
|
-
|
15
|
+
text = "#{file}#{line} #{message}"
|
16
|
+
if warning
|
17
|
+
@warnings << text
|
18
|
+
else
|
19
|
+
@errors << text
|
20
|
+
end
|
11
21
|
end
|
12
22
|
def count
|
13
23
|
@errors.count
|
14
24
|
end
|
15
25
|
def log_delete
|
16
26
|
begin
|
17
|
-
File.delete(File.join(AbstractMarkupLanguage::Base.basePath,'
|
27
|
+
File.delete(File.join(AbstractMarkupLanguage::Base.basePath,'aml-log'))
|
18
28
|
rescue Exception => e
|
19
29
|
end
|
20
30
|
end
|
21
31
|
def log_create
|
22
32
|
error_output = ""
|
23
33
|
@errors.each do |error|
|
24
|
-
error_output += "#{error}\r\n"
|
34
|
+
error_output += "Error: #{error}\r\n"
|
35
|
+
end
|
36
|
+
@warnings.each do |warning|
|
37
|
+
error_output += "Warning: #{warning}\r\n"
|
25
38
|
end
|
26
|
-
File.write(File.join(AbstractMarkupLanguage::Base.basePath,'
|
39
|
+
File.write(File.join(AbstractMarkupLanguage::Base.basePath,'aml-log'),error_output)
|
27
40
|
end
|
28
41
|
def output
|
29
42
|
@errors.each do |error|
|
data/lib/aml/make.rb
CHANGED
@@ -4,7 +4,7 @@ class Make
|
|
4
4
|
File.open(makeFile, 'w'){|file|
|
5
5
|
struct_count = structure.count-1
|
6
6
|
structure.each_with_index do |line,index|
|
7
|
-
new_line = (index < struct_count) ?
|
7
|
+
new_line = (index < struct_count) ? $/ : ""
|
8
8
|
file.write(line+new_line) if line.strip.length > 0
|
9
9
|
end
|
10
10
|
}
|
data/lib/aml/parse.rb
CHANGED
@@ -5,6 +5,9 @@ class Parse
|
|
5
5
|
def watch
|
6
6
|
return @watch
|
7
7
|
end
|
8
|
+
def mixin
|
9
|
+
return @mixin
|
10
|
+
end
|
8
11
|
def initialize(path, file, partial=false, bundle=false)
|
9
12
|
@path = path
|
10
13
|
@regex = {
|
@@ -19,13 +22,14 @@ class Parse
|
|
19
22
|
:mixin_def => LineType.new(/^%%(?<name>[\w|\-]+)(\((?<attributes>.+?)\))?{/),
|
20
23
|
:mixin_end => LineType.new(/^\}$/),
|
21
24
|
:partial => LineType.new(/^(\s{1,})?%\(\~((?<bundle>[\w|\-]+)\.)?(?<name>[\w|\-]+)\)(\{(?<attributes>.+)\}[^\{]?)?$/),
|
22
|
-
:tag => LineType.new(/^(\s{1,})?(?<!%)%(?<close>\/{0,2})?(?<name>[\w|\-]+)(\#(?<id_first>[\w|\-]+))?(?<class>(\.[\w|\-]+)?{1,})?(\#(?<id_last>[\w|\-]+))?(\{(?<attributes>.+)\})?(?<text>.+)?/),
|
25
|
+
:tag => LineType.new(/^(\s{1,})?(?<!%)%(?<close>\/{0,2})?(?<name>[\w|\-]+)(\#(?<id_first>(\@\(([\w|-]+\.)?)?[\w|\-]+(\))?))?(?<class>(\.[\w|\-]+)?{1,})?(\#(?<id_last>[\w|\-]+))?(\{(?<attributes>.+)\})?(?<text>.+)?/),
|
23
26
|
:empty => LineType.new(/^$/),
|
24
27
|
:eval => LineType.new(/^(\s{1,})?==(\s{1,})(?<value>.+)?/),
|
25
28
|
:string => LineType.new(/(\s{1,})?(?<value>.+)?/)
|
26
29
|
}
|
27
30
|
@file = {}
|
28
31
|
@watch = []
|
32
|
+
@mixin = []
|
29
33
|
read(file, partial, bundle)
|
30
34
|
end
|
31
35
|
def read(file, partial, bundle)
|
@@ -62,10 +66,16 @@ class Parse
|
|
62
66
|
@file = {:name => file, :line => line_struct}
|
63
67
|
@watch << {:file => file, :bundle => false, :partial => false}
|
64
68
|
partial_watch(line_struct)
|
69
|
+
mixin_watch(line_struct)
|
65
70
|
end
|
66
71
|
def partial_watch(struct)
|
67
72
|
struct.reject{|k,v| k[:type] != :partial}.each do |partial|
|
68
73
|
@watch << {:file => "#{partial[:name]}.aml", :bundle=> partial[:bundle], :partial => true}
|
69
74
|
end
|
70
75
|
end
|
76
|
+
def mixin_watch(struct)
|
77
|
+
struct.reject{|k,v| k[:type] != :mixin}.each do |partial|
|
78
|
+
@mixin << {:file => "mixin.aml", :bundle=> partial[:bundle], :partial => false} if partial[:bundle] != 'core'
|
79
|
+
end
|
80
|
+
end
|
71
81
|
end
|
data/lib/aml/watch.rb
CHANGED
@@ -5,7 +5,7 @@ class Watch
|
|
5
5
|
filenames = [filenames] if(filenames.kind_of?String)
|
6
6
|
@last_mtimes = {}
|
7
7
|
filenames.each do |filename|
|
8
|
-
@last_mtimes[filename] = File.stat(filename).mtime
|
8
|
+
@last_mtimes[filename] = File.stat(filename).mtime if File.exists?(filename)
|
9
9
|
end
|
10
10
|
@filenames = filenames
|
11
11
|
watch
|
@@ -22,13 +22,15 @@ class Watch
|
|
22
22
|
end
|
23
23
|
def file_updated?
|
24
24
|
@filenames.each do |filename|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
if File.exists?(filename)
|
26
|
+
mtime = File.stat(filename).mtime
|
27
|
+
updated = @last_mtimes[filename] < mtime
|
28
|
+
@last_mtimes[filename] = mtime
|
29
|
+
if(updated)
|
30
|
+
exec("aml #{@arguments} --aml-watch-instance #{@instance}")
|
31
|
+
Kernel.exit!
|
32
|
+
return true
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
return false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Esquivias
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Abstract Markup Language is a robust and feature rich markup language
|
14
14
|
designed to avoid repetition and promote clear, well-indented markup.
|