slight-lang 1.1.0 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,18 @@
1
- $:.unshift File.expand_path('../../lib', __FILE__)
2
- require 'slight/tilt'
3
-
4
- script = %q{
5
- div "btn btn-succes #{btn_size}" do
6
- @btn_txt
7
- end
8
- }
9
-
10
- @btn_txt = 'Pls,Click-Me.'
11
- body = Proc.new { script }
12
-
13
- template = Tilt.new('tilt_example.rb', 5, {}, &body)
14
- puts template.render(self, :btn_size => "btn-lg")
15
-
16
- # <div class="btn btn-succes btn-lg">
17
- # Pls,Click-Me.
18
- # </div>
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'slight/tilt'
3
+
4
+ script = %q{
5
+ div "btn btn-succes #{btn_size}" do
6
+ @btn_txt
7
+ end
8
+ }
9
+
10
+ @btn_txt = 'Pls,Click-Me.'
11
+ body = Proc.new { script }
12
+
13
+ template = Tilt.new('tilt_example.rb', 5, {}, &body)
14
+ puts template.render(self, :btn_size => "btn-lg")
15
+
16
+ # <div class="btn btn-succes btn-lg">
17
+ # Pls,Click-Me.
18
+ # </div>
data/lib/slight/config.rb CHANGED
@@ -1,39 +1,39 @@
1
- module Slight
2
- class Configuration
3
- def initialize(options = {}, &blk)
4
- @options = options
5
- @options[:cus] ||= {}
6
- @options[:shortcutA] ||= {}
7
- @options[:shortcutT] ||= {}
8
- @options[:blinding] ||= {}
9
- @options[:before_filter] ||= []
10
- @options[:after_filter] ||= []
11
- blk.call self
12
- @options
13
- end
14
-
15
- def set(k, v); @options[:cus][k] = v; end
16
- def get(k); @options[:cus][k]; end
17
- def setIO(io_out); @options[:io_out] = io_out; end
18
- def use(t, flag = :before)
19
- if flag == :before then
20
- @options[:before_filter].push(t)
21
- else
22
- @options[:after_filter].push(t)
23
- end
24
- end
25
-
26
- def shortcut(type, pattern, replacement)
27
- case(type)
28
- when :A
29
- @options[:shortcutA][pattern.to_sym] = replacement
30
- when :T
31
- @options[:shortcutT][pattern.to_sym] = replacement
32
- end
33
- end
34
-
35
- def blinding(*system_fun)
36
- @options[:blinding] = system_fun.map(&:to_sym)
37
- end
38
- end
39
- end
1
+ module Slight
2
+ class Configuration
3
+ def initialize(options = {}, &blk)
4
+ @options = options
5
+ @options[:cus] ||= {}
6
+ @options[:shortcutA] ||= {}
7
+ @options[:shortcutT] ||= {}
8
+ @options[:blinding] ||= {}
9
+ @options[:before_filter] ||= []
10
+ @options[:after_filter] ||= []
11
+ blk.call self
12
+ @options
13
+ end
14
+
15
+ def set(k, v); @options[:cus][k] = v; end
16
+ def get(k); @options[:cus][k]; end
17
+ def setIO(io_out); @options[:io_out] = io_out; end
18
+ def use(t, flag = :before)
19
+ if flag == :before then
20
+ @options[:before_filter].push(t)
21
+ else
22
+ @options[:after_filter].push(t)
23
+ end
24
+ end
25
+
26
+ def shortcut(type, pattern, replacement)
27
+ case(type)
28
+ when :A
29
+ @options[:shortcutA][pattern.to_sym] = replacement
30
+ when :T
31
+ @options[:shortcutT][pattern.to_sym] = replacement
32
+ end
33
+ end
34
+
35
+ def blinding(*system_fun)
36
+ @options[:blinding] = system_fun.map(&:to_sym)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,13 @@
1
+ VUEJS_DEV="https://vuejs.org/js/vue.js"
2
+ VUEJS="https://vuejs.org/js/vue.min.js"
3
+ BOOTSTRAPJS="https://bootswatch.com/_vendor/bootstrap/dist/js/bootstrap.min.js"
4
+ BOOTSTRAPJS_DEV="https://bootswatch.com/_vendor/bootstrap/dist/js/bootstrap.js"
5
+ JQUERY="https://bootswatch.com/_vendor/jquery/dist/jquery.min.js"
6
+
7
+ BOOTSTRAP_FLATY="https://bootswatch.com/4/flatly/bootstrap.min.css"
8
+ BOOTSTRAP_UNITED="https://bootswatch.com/4/united/bootstrap.min.css"
9
+ BOOTSTRAP="https://bootswatch.com/_vendor/bootstrap/dist/css/bootstrap.min.css"
10
+ BOOTSTRAP_LUX="https://bootswatch.com/4/lux/bootstrap.min.css"
11
+ BOOTSTRAP_SANDSTONE="https://bootswatch.com/4/sandstone/bootstrap.min.css"
12
+ BOOTSTRAP_SLATE="https://bootswatch.com/4/slate/bootstrap.min.css"
13
+
data/lib/slight/dsl.rb CHANGED
@@ -1,169 +1,168 @@
1
- require 'slight/utils'
2
-
3
- module Slight
4
- module DSLEssential
5
- def br; echo "<br/>\n"; end
6
-
7
- def hr; echo "<hr/>\n"; end
8
-
9
- def title(str); echo "<title>#{str}</title>\n"; end
10
-
11
- def js(str)
12
- echo "<script language=\"javascript\">\n#{str}\n</script>\n"
13
- end
14
-
15
- def doctype(type)
16
- case type
17
- when :html, :h5
18
- echo "<!DOCTYPE html>\n"
19
- when :h11
20
- echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">] + "\n"
21
- when :strict
22
- echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">] + "\n"
23
- when :frameset
24
- echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">] + "\n"
25
- when :mobile
26
- echo %q[<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">] + "\n"
27
- when :basic
28
- echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">] + "\n"
29
- when :transitional
30
- echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">] + "\n"
31
- when :xml
32
- echo %q[<?xml version="1.0" encoding="utf-8" ?>] + "\n"
33
- end
34
-
35
- end
36
-
37
- def use(uri, type=nil)
38
- case type ||= uri.split('.')[-1]
39
- when "js"
40
- echo "<script type=\"text/javascript\" src=\"#{uri}\"></script>\n"
41
- when "css"
42
- echo "<link rel=\"stylesheet\" href=\"#{uri}\"></link>\n"
43
- end
44
-
45
- end
46
-
47
- # load another page into current page
48
- def layout_yield(target_src)
49
- #eval(File.new(target_src).read, binding_scope, target_src, __LINE__ - 48)
50
- @load_history ||= [] # prevernt recursive page load
51
- #unless @load_history[target_src] then
52
- @load_history.push target_src
53
- unless @load_history.count(target_src) == 2
54
- self.instance_eval(File.new(target_src).read, target_src, __LINE__ - 48)
55
- else
56
- echo "<!--recursive page loading deteced, ignore.-->"
57
- end
58
- @load_history.pop
59
- nil
60
- end
61
-
62
- # set the placeholder in current page
63
- #def layout_placeholder(ph_alias="default")
64
- # echo "<!--######|PLACEHOLDER-#{ph_alias}|######-->"
65
- #end
66
-
67
- # attach itself to the placeholder in anther page
68
- #def layout_attach(page, ph_alias="default")
69
- #end
70
-
71
- end
72
-
73
- class DSLException < ScriptError ; end
74
-
75
- class DSL
76
- include DSLEssential
77
- include Utils
78
- undef :p, :select
79
-
80
- def initialize(io)
81
- @output_buffer = io
82
- #@root = page_node.new("root")
83
- end
84
-
85
- def puts(str); @output_buffer << html_escape(str); nil; end
86
-
87
- def echo(str); @output_buffer << str; nil; end
88
-
89
- def method_missing(fun, *param, &block)
90
- __dsl__define(fun)
91
- self.send(fun, *param, &block)
92
- end
93
-
94
- def binding_scope
95
- binding
96
- end
97
-
98
- def resolve_shortcutA(shortcutA)
99
- @__dsl__attr_replacements = shortcutA
100
- end
101
-
102
- def resolve_shortcutT(shortcutT)
103
- @__dsl__tag_replacements = shortcutT
104
- end
105
-
106
- def resolve_blinding(blinding)
107
- blinding.each do |m|
108
- undef_method m
109
- end
110
- end
111
-
112
- def resolve_local(var,val)
113
- self.singleton_class.class_eval do
114
- define_method(var.to_sym){
115
- return val
116
- }
117
- end
118
- end
119
-
120
- private
121
- def __dsl__define(tag)
122
- self.singleton_class.class_eval do
123
- define_method(tag){|*at, &block|
124
- __dsl__packup(tag.to_s, *at, &block)
125
- }
126
- end
127
- end
128
-
129
- def __dsl__packup(tag, *at)
130
- attr_replacements = @__dsl__attr_replacements||{}
131
- tag_replacements = @__dsl__tag_replacements||{}
132
- attrs=[]
133
-
134
- if self_close = tag.end_with?("!") then
135
- tag = tag[0..-2]
136
- end
137
-
138
- at.each do |var|
139
- if var.class == Hash then
140
- var.each_pair do |a, v|
141
- unless a.to_sym == :_ then
142
- at_new = attr_replacements.fetch(a, a)
143
- at_new = v.class == String ? "#{at_new}=\"#{v}\"" : "#{at_new}=#{v.to_s}"
144
- else
145
- at_new = "#{v}"
146
- end
147
- attrs.push at_new
148
- end
149
- elsif var.class == String
150
- attrs.push "class=\"#{var}\""
151
- end
152
- end
153
-
154
- s_tag = tag_replacements.fetch(tag.to_sym, tag)
155
- e_tag = s_tag.split(" ")[0]
156
-
157
- space = attrs.length > 0 ? " " : ""
158
- echo "<#{s_tag}#{space}#{attrs.join(" ")}"
159
- if self_close then
160
- echo "/>\n"
161
- else
162
- echo ">\n"
163
- puts yield.to_s if block_given?
164
- echo "</#{e_tag}>\n"
165
- end
166
-
167
- end
168
- end
169
- end
1
+ require 'slight/utils'
2
+
3
+ module Slight
4
+ module DSLEssential
5
+ def br; echo "<br/>\n"; end
6
+
7
+ def hr; echo "<hr/>\n"; end
8
+
9
+ def title(str); echo "<title>#{str}</title>\n"; end
10
+
11
+ def js(str)
12
+ echo "<script language=\"javascript\">\n#{str}\n</script>\n"
13
+ end
14
+
15
+ def doctype(type)
16
+ case type
17
+ when :html, :h5
18
+ echo "<!DOCTYPE html>\n"
19
+ when :h11
20
+ echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">] + "\n"
21
+ when :strict
22
+ echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">] + "\n"
23
+ when :frameset
24
+ echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">] + "\n"
25
+ when :mobile
26
+ echo %q[<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">] + "\n"
27
+ when :basic
28
+ echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">] + "\n"
29
+ when :transitional
30
+ echo %q[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">] + "\n"
31
+ when :xml
32
+ echo %q[<?xml version="1.0" encoding="utf-8" ?>] + "\n"
33
+ end
34
+
35
+ end
36
+
37
+ def use(uri, type=nil)
38
+ case type ||= uri.split('.')[-1]
39
+ when "js",:js
40
+ echo "<script type=\"text/javascript\" src=\"#{uri}\"></script>\n"
41
+ when "css",:css
42
+ echo "<link rel=\"stylesheet\" href=\"#{uri}\"></link>\n"
43
+ end
44
+ end
45
+
46
+ # load another page into current page
47
+ def layout_yield(target_src)
48
+ #eval(File.new(target_src).read, binding_scope, target_src, __LINE__ - 48)
49
+ @load_history ||= [] # prevernt recursive page load
50
+ #unless @load_history[target_src] then
51
+ @load_history.push target_src
52
+ unless @load_history.count(target_src) == 2
53
+ self.instance_eval(File.new(target_src).read, target_src, __LINE__ - 48)
54
+ else
55
+ echo "<!--recursive page loading deteced, ignore.-->"
56
+ end
57
+ @load_history.pop
58
+ nil
59
+ end
60
+
61
+ # set the placeholder in current page
62
+ #def layout_placeholder(ph_alias="default")
63
+ # echo "<!--######|PLACEHOLDER-#{ph_alias}|######-->"
64
+ #end
65
+
66
+ # attach itself to the placeholder in anther page
67
+ #def layout_attach(page, ph_alias="default")
68
+ #end
69
+
70
+ end
71
+
72
+ class DSLException < ScriptError ; end
73
+
74
+ class DSL
75
+ include DSLEssential
76
+ include Utils
77
+ undef :p, :select
78
+
79
+ def initialize(io)
80
+ @output_buffer = io
81
+ #@root = page_node.new("root")
82
+ end
83
+
84
+ def puts(str); @output_buffer << html_escape(str); nil; end
85
+
86
+ def echo(str); @output_buffer << str; nil; end
87
+
88
+ def method_missing(fun, *param, &block)
89
+ __dsl__define(fun)
90
+ self.send(fun, *param, &block)
91
+ end
92
+
93
+ def binding_scope
94
+ binding
95
+ end
96
+
97
+ def resolve_shortcutA(shortcutA)
98
+ @__dsl__attr_replacements = shortcutA
99
+ end
100
+
101
+ def resolve_shortcutT(shortcutT)
102
+ @__dsl__tag_replacements = shortcutT
103
+ end
104
+
105
+ def resolve_blinding(blinding)
106
+ blinding.each do |m|
107
+ undef_method m
108
+ end
109
+ end
110
+
111
+ def resolve_local(var,val)
112
+ self.singleton_class.class_eval do
113
+ define_method(var.to_sym){
114
+ return val
115
+ }
116
+ end
117
+ end
118
+
119
+ private
120
+ def __dsl__define(tag)
121
+ self.singleton_class.class_eval do
122
+ define_method(tag){|*at, &block|
123
+ __dsl__packup(tag.to_s, *at, &block)
124
+ }
125
+ end
126
+ end
127
+
128
+ def __dsl__packup(tag, *at)
129
+ attr_replacements = @__dsl__attr_replacements||{}
130
+ tag_replacements = @__dsl__tag_replacements||{}
131
+ attrs=[]
132
+
133
+ if self_close = tag.end_with?("!") then
134
+ tag = tag[0..-2]
135
+ end
136
+
137
+ at.each do |var|
138
+ if var.class == Hash then
139
+ var.each_pair do |a, v|
140
+ unless a.to_sym == :_ then
141
+ at_new = attr_replacements.fetch(a, a)
142
+ at_new = v.class == String ? "#{at_new}=\"#{v}\"" : "#{at_new}=#{v.to_s}"
143
+ else
144
+ at_new = "#{v}"
145
+ end
146
+ attrs.push at_new
147
+ end
148
+ elsif var.class == String
149
+ attrs.push "class=\"#{var}\""
150
+ end
151
+ end
152
+
153
+ s_tag = tag_replacements.fetch(tag.to_sym, tag)
154
+ e_tag = s_tag.split(" ")[0]
155
+
156
+ space = attrs.length > 0 ? " " : ""
157
+ echo "<#{s_tag}#{space}#{attrs.join(" ")}"
158
+ if self_close then
159
+ echo "/>\n"
160
+ else
161
+ echo ">\n"
162
+ puts yield.to_s if block_given?
163
+ echo "</#{e_tag}>\n"
164
+ end
165
+
166
+ end
167
+ end
168
+ end
data/lib/slight/engine.rb CHANGED
@@ -1,45 +1,45 @@
1
- require 'slight/config'
2
- require 'slight/template'
3
- module Slight
4
- class Filter; def self.do(src_data); return src_data; end; end
5
- class Engine
6
- def initialize(options = {})
7
- @options = options
8
- Configuration.new(@options) do |c|
9
- c.shortcut :A, :css, "style"
10
- c.shortcut :A, :ln, "href"
11
- c.shortcut :A, :url, "href"
12
- c.shortcut :A, :char, "charset"
13
- c.shortcut :A, :fn, "src"
14
- c.shortcut :A, :lang, "language"
15
- c.shortcut :A, :xn, "xmlns"
16
- c.shortcut :A, :mf, "manifest"
17
- c.shortcut :T, "_", "div"
18
- #c.shortcut :T, "js", %q[script language="javascript"]
19
- #c.use PrettyHtmlOutput, :after if c.get(:pretty_html)
20
- end
21
- @template = Template.new(@options)
22
- end
23
-
24
- def render(src_file, src_data = nil, local_vars={})
25
- # src file name is mainly using for identify issues for debugging
26
- # if data not given then read data from src file
27
-
28
- # Data > File
29
-
30
- #src_data = script.call if block_given?
31
- src_data ||= File.new(src_file).read
32
-
33
- @options[:before_filter].each do |f|
34
- src_data = f.do(src_data)
35
- end
36
-
37
- src_data = @template.render(src_data, src_file, local_vars)
38
-
39
- @options[:after_filter].each do |f|
40
- src_data = f.do(src_data)
41
- end
42
- src_data
43
- end
44
- end
45
- end
1
+ require 'slight/config'
2
+ require 'slight/template'
3
+ module Slight
4
+ class Filter; def self.do(src_data); return src_data; end; end
5
+ class Engine
6
+ def initialize(options = {})
7
+ @options = options
8
+ Configuration.new(@options) do |c|
9
+ c.shortcut :A, :css, "style"
10
+ c.shortcut :A, :ln, "href"
11
+ c.shortcut :A, :url, "href"
12
+ c.shortcut :A, :char, "charset"
13
+ c.shortcut :A, :fn, "src"
14
+ c.shortcut :A, :lang, "language"
15
+ c.shortcut :A, :xn, "xmlns"
16
+ c.shortcut :A, :mf, "manifest"
17
+ c.shortcut :T, "_", "div"
18
+ #c.shortcut :T, "js", %q[script language="javascript"]
19
+ #c.use PrettyHtmlOutput, :after if c.get(:pretty_html)
20
+ end
21
+ @template = Template.new(@options)
22
+ end
23
+
24
+ def render(src_file, src_data = nil, local_vars={})
25
+ # src file name is mainly using for identify issues for debugging
26
+ # if data not given then read data from src file
27
+
28
+ # Data > File
29
+
30
+ #src_data = script.call if block_given?
31
+ src_data ||= File.new(src_file).read
32
+
33
+ @options[:before_filter].each do |f|
34
+ src_data = f.do(src_data)
35
+ end
36
+
37
+ src_data = @template.render(src_data, src_file, local_vars)
38
+
39
+ @options[:after_filter].each do |f|
40
+ src_data = f.do(src_data)
41
+ end
42
+ src_data
43
+ end
44
+ end
45
+ end
@@ -1,38 +1,38 @@
1
- require 'slight/dsl'
2
-
3
- module Slight
4
- class Template
5
- def initialize(options = {})
6
- @options = options
7
- @output_buffer = @options[:io_out] || ""
8
- @dsl = DSL.new(@output_buffer)
9
-
10
- @dsl.resolve_shortcutA(@options[:shortcutA])
11
- @dsl.resolve_shortcutT(@options[:shortcutT])
12
- @dsl.resolve_blinding(@options[:blinding])
13
- end
14
-
15
- def render(src_data, src_file, local_vars = {})
16
- @output_buffer.clear
17
-
18
- local_vars.each_pair do |key, value|
19
- if key == :__scope then
20
- scope = value
21
- scope_vars = scope.instance_variables
22
- scope_vars.each do |var|
23
- @dsl.instance_variable_set(var, scope.instance_variable_get(var))
24
- end
25
- else
26
- @dsl.resolve_local(key, value)
27
- end
28
- end
29
-
30
- begin
31
- @dsl.instance_eval(src_data, src_file, __LINE__ - 20)
32
- rescue => ex
33
- raise DSLException.new(ex.message)
34
- end
35
- @output_buffer
36
- end
37
- end
38
- end
1
+ require 'slight/dsl'
2
+
3
+ module Slight
4
+ class Template
5
+ def initialize(options = {})
6
+ @options = options
7
+ @output_buffer = @options[:io_out] || ""
8
+ @dsl = DSL.new(@output_buffer)
9
+
10
+ @dsl.resolve_shortcutA(@options[:shortcutA])
11
+ @dsl.resolve_shortcutT(@options[:shortcutT])
12
+ @dsl.resolve_blinding(@options[:blinding])
13
+ end
14
+
15
+ def render(src_data, src_file, local_vars = {})
16
+ @output_buffer.clear
17
+
18
+ local_vars.each_pair do |key, value|
19
+ if key == :__scope then
20
+ scope = value
21
+ scope_vars = scope.instance_variables
22
+ scope_vars.each do |var|
23
+ @dsl.instance_variable_set(var, scope.instance_variable_get(var))
24
+ end
25
+ else
26
+ @dsl.resolve_local(key, value)
27
+ end
28
+ end
29
+
30
+ begin
31
+ @dsl.instance_eval(src_data, src_file, __LINE__ - 20)
32
+ rescue => ex
33
+ raise DSLException.new(ex.message)
34
+ end
35
+ @output_buffer
36
+ end
37
+ end
38
+ end