Remarkably 0.4.0 → 0.5.0
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.
- data/lib/remarkably.rb +43 -70
- data/lib/remarkably/engines/css.rb +47 -0
- data/lib/remarkably/engines/css/helpers.rb +7 -0
- data/lib/remarkably/engines/html.rb +24 -0
- data/lib/remarkably/engines/xml.rb +33 -0
- metadata +10 -3
data/lib/remarkably.rb
CHANGED
@@ -1,89 +1,62 @@
|
|
1
1
|
module Remarkably
|
2
|
-
def method_missing(sym, *args, &block)
|
3
|
-
hash = args.last.is_a?(Hash) ? args.pop : {}
|
4
|
-
tag!(sym, args, hash, &block)
|
5
|
-
end
|
6
2
|
|
7
|
-
|
8
|
-
tag_attributes =
|
9
|
-
attributes.inject([]){|s,(k,v)| s << %{#{k.to_s.downcase}="#{v}"} }
|
3
|
+
module Base
|
10
4
|
|
11
|
-
|
5
|
+
class Engine
|
6
|
+
def initialize *args, &block
|
7
|
+
clear!
|
8
|
+
self.instance_eval( &block ) if block_given?
|
9
|
+
end
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
def missing_method(sym, context, *args, &block)
|
12
|
+
@context = context
|
13
|
+
hash = args.last.is_a?(Hash) ? args.pop : {}
|
14
|
+
if methods.index( sym.to_s )
|
15
|
+
self.send( sym, args, hash, &block )
|
16
|
+
else
|
17
|
+
method!(sym, args, hash, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing(sym, *args, &block)
|
22
|
+
missing_method( sym, self, *args, &block )
|
23
|
+
end
|
24
|
+
|
25
|
+
def clear!
|
26
|
+
@output = ''
|
27
|
+
end
|
28
|
+
|
29
|
+
def method! sym, args, hash, &block
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
result = @output
|
34
|
+
clear!
|
35
|
+
result
|
20
36
|
end
|
21
|
-
@remarkably << "#{inline.join}</#{tag}>"
|
22
|
-
else
|
23
|
-
@remarkably << "/>"
|
24
|
-
end
|
25
|
-
end
|
26
37
|
|
27
|
-
def tag_css!( tag, inline, attributes, &block )
|
28
|
-
@remarkably_method = :css_inner
|
29
|
-
if block_given?
|
30
|
-
@remarkably << "\n "
|
31
|
-
tag_css_inner!( tag, inline, attributes, &block )
|
32
|
-
@remarkably << "}"
|
33
38
|
end
|
34
|
-
@remarkably_method = :css
|
35
|
-
end
|
36
39
|
|
37
|
-
def inline_style &block
|
38
|
-
current_remarkably = @remarkably
|
39
|
-
@remarkably_method = :css_inner
|
40
|
-
@remarkably = ''
|
41
|
-
block.call if block_given?
|
42
|
-
result = @remarkably
|
43
|
-
@remarkably_method = :xml
|
44
|
-
@remarkably = current_remarkably
|
45
|
-
result
|
46
40
|
end
|
47
41
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@remarkably << "##{attributes[:id]}" if attributes.has_key?( :id )
|
54
|
-
@remarkably << ":#{attributes[:pseudo]}" if attributes.has_key?( :pseudo )
|
55
|
-
@remarkably << " {"
|
56
|
-
block.call
|
57
|
-
else
|
58
|
-
tag.gsub!('_','-')
|
59
|
-
@remarkably << "#{tag}:#{inline.join(' ')};"
|
42
|
+
module Common
|
43
|
+
|
44
|
+
def method_missing(sym, *args, &block)
|
45
|
+
@remarkably_engine ||= eval("Engines::#{Engines::constants[0]}.new")
|
46
|
+
@remarkably_engine.send( :missing_method, sym, self, *args, &block )
|
60
47
|
end
|
61
|
-
end
|
62
48
|
|
63
|
-
|
64
|
-
|
65
|
-
inline = [inline] if inline.class != Array
|
66
|
-
@remarkably ||= ''
|
67
|
-
@remarkably_method ||= :xml
|
68
|
-
|
69
|
-
case @remarkably_method
|
70
|
-
when :xml then tag_xml!( tag, inline, attributes, &block )
|
71
|
-
when :css then tag_css!( tag, inline, attributes, &block )
|
72
|
-
when :css_inner then tag_css_inner!( tag, inline, attributes, &block )
|
73
|
-
else raise "Unknown remarkably method type '#{@remarkably_method}'"
|
49
|
+
def remarkably_engine= engine
|
50
|
+
@remarkably_engine = engine
|
74
51
|
end
|
75
52
|
|
76
|
-
|
77
|
-
|
53
|
+
def remarkably_engine
|
54
|
+
@remarkably_engine
|
55
|
+
end
|
78
56
|
|
79
|
-
def text content
|
80
|
-
@remarkably << content
|
81
|
-
self
|
82
57
|
end
|
83
58
|
|
84
|
-
|
85
|
-
result = @remarkably
|
86
|
-
@remarkably = nil
|
87
|
-
result
|
59
|
+
module Engines
|
88
60
|
end
|
61
|
+
|
89
62
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "#{File::dirname(__FILE__)}/../../remarkably"
|
2
|
+
|
3
|
+
module Remarkably
|
4
|
+
module Engines
|
5
|
+
class CSS < Base::Engine
|
6
|
+
def method! sym, args, hash, &block
|
7
|
+
sym = sym.to_s.downcase
|
8
|
+
|
9
|
+
if block_given?
|
10
|
+
current_prefix = @css_prefix
|
11
|
+
@css_prefix = (@css_prefix+" #{sym}#{args.map{|a|a.to_s}.join}").strip
|
12
|
+
@css_depth+=1
|
13
|
+
@css_prefix_rendered=false
|
14
|
+
block.call
|
15
|
+
@css_depth-=1
|
16
|
+
@css_prefix = current_prefix
|
17
|
+
else
|
18
|
+
unless @css_prefix_rendered
|
19
|
+
unless @css_first_use
|
20
|
+
@output.chop!
|
21
|
+
@output << "}"
|
22
|
+
end
|
23
|
+
@output << "\n#{@css_prefix} {"
|
24
|
+
@css_prefix_rendered = true
|
25
|
+
@css_first_use = false
|
26
|
+
end
|
27
|
+
@output << "#{sym.gsub('_','-')}:#{args.map{|a|a.to_s}.join(' ')};"
|
28
|
+
end
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
"#{super.chop}}".strip+"\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
def clear!
|
37
|
+
super
|
38
|
+
@css_prefix=''
|
39
|
+
@css_depth=0
|
40
|
+
@css_prefix_rendered=false
|
41
|
+
@css_first_use=true
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "#{File::dirname(__FILE__)}/../../remarkably"
|
2
|
+
require "#{File::dirname(__FILE__)}/xml"
|
3
|
+
require "#{File::dirname(__FILE__)}/css"
|
4
|
+
|
5
|
+
module Remarkably
|
6
|
+
module Engines
|
7
|
+
class HTML < XML
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@css_engine = Engines::CSS.new
|
11
|
+
end
|
12
|
+
def style args, hash, &block
|
13
|
+
if block_given?
|
14
|
+
@css_engine.clear!
|
15
|
+
@context.remarkably_engine = @css_engine
|
16
|
+
block.call
|
17
|
+
@context.remarkably_engine = self
|
18
|
+
args = ["\n#{@css_engine}"]+args
|
19
|
+
end
|
20
|
+
method!( :style, args, hash )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "#{File::dirname(__FILE__)}/../../remarkably"
|
2
|
+
|
3
|
+
module Remarkably
|
4
|
+
module Engines
|
5
|
+
class XML < Base::Engine
|
6
|
+
|
7
|
+
def method! sym, args, hash, &block
|
8
|
+
sym = sym.to_s.downcase
|
9
|
+
|
10
|
+
tag_attributes =
|
11
|
+
hash.inject([]){|s,(k,v)| s << %{#{k.to_s.downcase}="#{v}"} }
|
12
|
+
|
13
|
+
@output << ["<#{sym}", tag_attributes].flatten.grep(/\S/).join(' ')
|
14
|
+
|
15
|
+
if block_given? or not args.empty?
|
16
|
+
@output << ">"
|
17
|
+
block.call if block_given?
|
18
|
+
@output << "#{args.join}</#{sym}>"
|
19
|
+
else
|
20
|
+
@output << "/>"
|
21
|
+
end
|
22
|
+
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def text args, hash, &block
|
27
|
+
@output << args.join
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.3
|
3
3
|
specification_version: 1
|
4
4
|
name: Remarkably
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-05-
|
6
|
+
version: 0.5.0
|
7
|
+
date: 2007-05-24 00:00:00 +02:00
|
8
8
|
summary: Remarkably is a very tiny Markaby-like XML builder
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,7 +29,14 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Clive Crous
|
31
31
|
files:
|
32
|
+
- lib/remarkably
|
32
33
|
- lib/remarkably.rb
|
34
|
+
- lib/remarkably/engines
|
35
|
+
- lib/remarkably/engines/css
|
36
|
+
- lib/remarkably/engines/xml.rb
|
37
|
+
- lib/remarkably/engines/html.rb
|
38
|
+
- lib/remarkably/engines/css.rb
|
39
|
+
- lib/remarkably/engines/css/helpers.rb
|
33
40
|
test_files: []
|
34
41
|
|
35
42
|
rdoc_options: []
|