haml2erb 0.3.0.pre → 0.3.0.pre.2
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/haml2erb/attributes_parser.rb +77 -0
- data/lib/haml2erb/engine.rb +102 -3
- data/lib/haml2erb/version.rb +1 -1
- data/spec/haml2erb_spec.rb +4 -4
- metadata +6 -4
@@ -0,0 +1,77 @@
|
|
1
|
+
module Haml2Erb
|
2
|
+
class AttributesParser
|
3
|
+
class DynamicAttributes < StandardError
|
4
|
+
end
|
5
|
+
|
6
|
+
def initialize attributes
|
7
|
+
@attributes = attributes
|
8
|
+
@pairs = []
|
9
|
+
end
|
10
|
+
attr_reader :pairs, :attributes
|
11
|
+
|
12
|
+
CONTENTS = /^, \{(.*)\}$/
|
13
|
+
ROCKET = '\=\>'
|
14
|
+
|
15
|
+
SYMBOL_TEXT = '[\w_]+'
|
16
|
+
STRING_TEXT = '[\w_-]+'
|
17
|
+
|
18
|
+
SYMBOL_KEY = /^(?:\:(#{SYMBOL_TEXT})\s*#{ROCKET}|(#{SYMBOL_TEXT}):)\s*/
|
19
|
+
STRING_KEY = /^(?:'(#{STRING_TEXT})'|"(#{STRING_TEXT})")\s*#{ROCKET}\s*/
|
20
|
+
|
21
|
+
STRING_VALUE = /^:(#{SYMBOL_TEXT})\s*/
|
22
|
+
SYMBOL_VALUE = /^(?:"([^"]+)"|'([^']+)')\s*/
|
23
|
+
|
24
|
+
def parse!
|
25
|
+
rest = attributes.strip.scan(CONTENTS).flatten.first
|
26
|
+
|
27
|
+
begin
|
28
|
+
while not rest.empty?
|
29
|
+
if rest =~ SYMBOL_KEY
|
30
|
+
key = $1 || $2
|
31
|
+
rest.gsub! SYMBOL_KEY, ''
|
32
|
+
elsif rest =~ STRING_KEY
|
33
|
+
key = $1 || $2
|
34
|
+
rest.gsub! STRING_KEY, ''
|
35
|
+
else
|
36
|
+
raise DynamicAttributes
|
37
|
+
end
|
38
|
+
|
39
|
+
if rest =~ STRING_VALUE
|
40
|
+
value = $1
|
41
|
+
elsif rest =~ SYMBOL_VALUE
|
42
|
+
value = $1 || $2
|
43
|
+
else
|
44
|
+
raise DynamicAttributes
|
45
|
+
end
|
46
|
+
|
47
|
+
pairs << [key, value]
|
48
|
+
end
|
49
|
+
rescue DynamicAttributes
|
50
|
+
@dynamic = true
|
51
|
+
return
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def dynamic?
|
56
|
+
@dynamic
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_html
|
60
|
+
if attributes.strip.empty?
|
61
|
+
return ''
|
62
|
+
else
|
63
|
+
parse!
|
64
|
+
if dynamic?
|
65
|
+
hash = attributes.scan(CONTENTS).flatten.first
|
66
|
+
hash.strip!
|
67
|
+
hash.gsub! /\s*,$/, ''
|
68
|
+
" <%= tag_options({#{hash}}, false) %>"
|
69
|
+
else
|
70
|
+
' ' << pairs.map do |(key, value)|
|
71
|
+
"#{key}='#{value.gsub("'", ''')}'"
|
72
|
+
end.join(' ')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/haml2erb/engine.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'haml'
|
2
|
+
require 'haml2erb/attributes_parser'
|
2
3
|
|
3
4
|
module Haml2Erb
|
5
|
+
class Engine < Haml::Engine
|
4
6
|
|
5
|
-
# puts RUBY_VERSION
|
6
7
|
|
7
|
-
class Engine < Haml::Engine
|
8
8
|
def push_silent(text, can_suppress = false)
|
9
9
|
flush_merged_text
|
10
10
|
return if can_suppress && options[:suppress_eval]
|
@@ -140,6 +140,105 @@ module Haml2Erb
|
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
|
-
|
143
|
+
def compile_tag
|
144
|
+
t = @node.value
|
145
|
+
|
146
|
+
# Get rid of whitespace outside of the tag if we need to
|
147
|
+
rstrip_buffer! if t[:nuke_outer_whitespace]
|
148
|
+
|
149
|
+
dont_indent_next_line =
|
150
|
+
(t[:nuke_outer_whitespace] && !block_given?) ||
|
151
|
+
(t[:nuke_inner_whitespace] && block_given?)
|
152
|
+
|
153
|
+
if @options[:suppress_eval]
|
154
|
+
object_ref = "nil"
|
155
|
+
parse = false
|
156
|
+
value = t[:parse] ? nil : t[:value]
|
157
|
+
attributes_hashes = {}
|
158
|
+
preserve_script = false
|
159
|
+
else
|
160
|
+
object_ref = t[:object_ref]
|
161
|
+
parse = t[:parse]
|
162
|
+
value = t[:value]
|
163
|
+
attributes_hashes = t[:attributes_hashes]
|
164
|
+
preserve_script = t[:preserve_script]
|
165
|
+
end
|
166
|
+
|
167
|
+
# Check if we can render the tag directly to text and not process it in the buffer
|
168
|
+
if object_ref == "nil" && attributes_hashes.empty? && !preserve_script
|
169
|
+
tag_closed = !block_given? && !t[:self_closing] && !parse
|
170
|
+
|
171
|
+
open_tag = prerender_tag(t[:name], t[:self_closing], t[:attributes])
|
172
|
+
if tag_closed
|
173
|
+
open_tag << "#{value}</#{t[:name]}>"
|
174
|
+
open_tag << "\n" unless t[:nuke_outer_whitespace]
|
175
|
+
elsif !(parse || t[:nuke_inner_whitespace] ||
|
176
|
+
(t[:self_closing] && t[:nuke_outer_whitespace]))
|
177
|
+
open_tag << "\n"
|
178
|
+
end
|
179
|
+
|
180
|
+
push_merged_text(open_tag,
|
181
|
+
tag_closed || t[:self_closing] || t[:nuke_inner_whitespace] ? 0 : 1,
|
182
|
+
!t[:nuke_outer_whitespace])
|
183
|
+
|
184
|
+
@dont_indent_next_line = dont_indent_next_line
|
185
|
+
return if tag_closed
|
186
|
+
else
|
187
|
+
# raise attributes_hashes.inspect unless attributes_hashes.empty?
|
188
|
+
if attributes_hashes.empty?
|
189
|
+
attributes_hashes = ''
|
190
|
+
elsif attributes_hashes.size == 1
|
191
|
+
attributes_hashes = ", #{attributes_hashes.first}"
|
192
|
+
else
|
193
|
+
attributes_hashes = ", (#{attributes_hashes.join(").merge(")})"
|
194
|
+
end
|
195
|
+
|
196
|
+
push_merged_text "<#{t[:name]}", 0, !t[:nuke_outer_whitespace]
|
197
|
+
|
198
|
+
# WAS:
|
199
|
+
# push_generated_script(
|
200
|
+
# "_hamlout.attributes(#{inspect_obj(t[:attributes])}, #{object_ref}#{attributes_hashes})")
|
201
|
+
# NOW: attempt a simplistic parse of the attributes
|
202
|
+
concat_merged_text AttributesParser.new(attributes_hashes).to_html
|
203
|
+
|
204
|
+
concat_merged_text(
|
205
|
+
if t[:self_closing] && xhtml?
|
206
|
+
" />" + (t[:nuke_outer_whitespace] ? "" : "\n")
|
207
|
+
else
|
208
|
+
">" + ((if t[:self_closing] && html?
|
209
|
+
t[:nuke_outer_whitespace]
|
210
|
+
else
|
211
|
+
!block_given? || t[:preserve_tag] || t[:nuke_inner_whitespace]
|
212
|
+
end) ? "" : "\n")
|
213
|
+
end)
|
214
|
+
|
215
|
+
if value && !parse
|
216
|
+
concat_merged_text("#{value}</#{t[:name]}>#{t[:nuke_outer_whitespace] ? "" : "\n"}")
|
217
|
+
else
|
218
|
+
@to_merge << [:text, '', 1] unless t[:nuke_inner_whitespace]
|
219
|
+
end
|
144
220
|
|
221
|
+
@dont_indent_next_line = dont_indent_next_line
|
222
|
+
end
|
223
|
+
|
224
|
+
return if t[:self_closing]
|
225
|
+
|
226
|
+
if value.nil?
|
227
|
+
@output_tabs += 1 unless t[:nuke_inner_whitespace]
|
228
|
+
yield if block_given?
|
229
|
+
@output_tabs -= 1 unless t[:nuke_inner_whitespace]
|
230
|
+
rstrip_buffer! if t[:nuke_inner_whitespace]
|
231
|
+
push_merged_text("</#{t[:name]}>" + (t[:nuke_outer_whitespace] ? "" : "\n"),
|
232
|
+
t[:nuke_inner_whitespace] ? 0 : -1, !t[:nuke_inner_whitespace])
|
233
|
+
@dont_indent_next_line = t[:nuke_outer_whitespace]
|
234
|
+
return
|
235
|
+
end
|
236
|
+
|
237
|
+
if parse
|
238
|
+
push_script(value, t.merge(:in_tag => true))
|
239
|
+
concat_merged_text("</#{t[:name]}>" + (t[:nuke_outer_whitespace] ? "" : "\n"))
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
145
244
|
end
|
data/lib/haml2erb/version.rb
CHANGED
data/spec/haml2erb_spec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
haml = %{
|
3
|
+
haml = %q{
|
4
4
|
!!!
|
5
5
|
%html(lang="en")
|
6
|
-
%head
|
6
|
+
%head(dynamic="#{attribute}")
|
7
7
|
- ciao
|
8
8
|
- if 3
|
9
9
|
= pippo
|
@@ -37,9 +37,9 @@ haml = %{
|
|
37
37
|
%section#hammurabi
|
38
38
|
}
|
39
39
|
|
40
|
-
erb = %{<!DOCTYPE html>
|
40
|
+
erb = %q{<!DOCTYPE html>
|
41
41
|
<html lang='en'>
|
42
|
-
<head
|
42
|
+
<head <%= tag_options({"dynamic" => "#{attribute}"}, false) %>>
|
43
43
|
<% ciao %>
|
44
44
|
<% if 3 %>
|
45
45
|
<%= pippo %>
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haml2erb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1923831965
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
9
|
- 0
|
10
10
|
- pre
|
11
|
-
|
11
|
+
- 2
|
12
|
+
version: 0.3.0.pre.2
|
12
13
|
platform: ruby
|
13
14
|
authors:
|
14
15
|
- Elia Schito
|
@@ -16,7 +17,7 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2011-11-
|
20
|
+
date: 2011-11-15 00:00:00 Z
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
23
|
type: :runtime
|
@@ -81,6 +82,7 @@ files:
|
|
81
82
|
- bin/haml2erb
|
82
83
|
- haml2erb.gemspec
|
83
84
|
- lib/haml2erb.rb
|
85
|
+
- lib/haml2erb/attributes_parser.rb
|
84
86
|
- lib/haml2erb/engine.rb
|
85
87
|
- lib/haml2erb/version.rb
|
86
88
|
- spec/haml2erb_spec.rb
|
@@ -116,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
118
|
requirements: []
|
117
119
|
|
118
120
|
rubyforge_project: haml2erb
|
119
|
-
rubygems_version: 1.8.
|
121
|
+
rubygems_version: 1.8.11
|
120
122
|
signing_key:
|
121
123
|
specification_version: 3
|
122
124
|
summary: Convert Haml templates to Erb!
|