haml 1.8.1 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/VERSION +1 -1
- data/lib/haml/engine.rb +4 -0
- data/lib/haml/helpers.rb +19 -10
- data/lib/haml/helpers/action_view_mods.rb +3 -3
- data/lib/haml/precompiler.rb +30 -15
- data/lib/haml/template/plugin.rb +10 -0
- data/lib/sass/engine.rb +1 -1
- data/lib/sass/plugin.rb +8 -0
- data/lib/sass/plugin/merb.rb +29 -6
- data/lib/sass/plugin/rails.rb +5 -1
- data/test/haml/engine_test.rb +16 -0
- data/test/haml/helper_test.rb +1 -1
- data/test/haml/templates/helpers.haml +9 -9
- data/test/sass/engine_test.rb +4 -0
- metadata +2 -5
- data/lib/haml/helpers/action_view_mods.rb.rej +0 -30
- data/lib/sass/constant.rb.rej +0 -42
- data/test/sass/engine_test.rb.rej +0 -18
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.8.
|
1
|
+
1.8.2
|
data/lib/haml/engine.rb
CHANGED
@@ -20,6 +20,10 @@ module Haml
|
|
20
20
|
# Allow reading and writing of the options hash
|
21
21
|
attr :options, true
|
22
22
|
|
23
|
+
# This string contains the source code that is evaluated
|
24
|
+
# to produce the Haml document.
|
25
|
+
attr :precompiled, true
|
26
|
+
|
23
27
|
# Creates a new instace of Haml::Engine that will compile the given
|
24
28
|
# template string when <tt>render</tt> is called.
|
25
29
|
# See README for available options.
|
data/lib/haml/helpers.rb
CHANGED
@@ -153,7 +153,7 @@ module Haml
|
|
153
153
|
# <strong>baz</strong>
|
154
154
|
#
|
155
155
|
def tab_up(i = 1)
|
156
|
-
|
156
|
+
haml_buffer.tabulation += i
|
157
157
|
end
|
158
158
|
|
159
159
|
# Increments the number of tabs the buffer automatically adds
|
@@ -161,7 +161,7 @@ module Haml
|
|
161
161
|
#
|
162
162
|
# See tab_up.
|
163
163
|
def tab_down(i = 1)
|
164
|
-
|
164
|
+
haml_buffer.tabulation -= i
|
165
165
|
end
|
166
166
|
|
167
167
|
# Surrounds the given block of Haml code with the given characters,
|
@@ -235,12 +235,12 @@ module Haml
|
|
235
235
|
# the local variable <tt>foo</tt> would be assigned to "<p>13</p>\n".
|
236
236
|
#
|
237
237
|
def capture_haml(*args, &block)
|
238
|
-
capture_haml_with_buffer(
|
238
|
+
capture_haml_with_buffer(haml_buffer.buffer, *args, &block)
|
239
239
|
end
|
240
240
|
|
241
241
|
# Outputs text directly to the Haml buffer, with the proper tabulation
|
242
242
|
def puts(text = "")
|
243
|
-
|
243
|
+
haml_buffer.buffer << (' ' * haml_buffer.tabulation) << text.to_s << "\n"
|
244
244
|
nil
|
245
245
|
end
|
246
246
|
|
@@ -285,7 +285,7 @@ module Haml
|
|
285
285
|
# </tr>
|
286
286
|
# </table>
|
287
287
|
#
|
288
|
-
def
|
288
|
+
def haml_tag(name, attributes = {}, alt_atts = {}, &block)
|
289
289
|
text = nil
|
290
290
|
if attributes.is_a? String
|
291
291
|
text = attributes
|
@@ -293,11 +293,11 @@ module Haml
|
|
293
293
|
end
|
294
294
|
|
295
295
|
if text.nil? && block.nil?
|
296
|
-
puts "<#{name}#{Haml::Precompiler.build_attributes(
|
296
|
+
puts "<#{name}#{Haml::Precompiler.build_attributes(haml_buffer.options[:attr_wrapper], attributes)} />"
|
297
297
|
return nil
|
298
298
|
end
|
299
299
|
|
300
|
-
puts "<#{name}#{Haml::Precompiler.build_attributes(
|
300
|
+
puts "<#{name}#{Haml::Precompiler.build_attributes(haml_buffer.options[:attr_wrapper], attributes)}>"
|
301
301
|
unless text && text.empty?
|
302
302
|
tab_up
|
303
303
|
# Print out either the text (using push_text) or call the block and add an endline
|
@@ -311,18 +311,27 @@ module Haml
|
|
311
311
|
puts "</#{name}>"
|
312
312
|
nil
|
313
313
|
end
|
314
|
+
|
315
|
+
def open(*args, &block)
|
316
|
+
warn <<END
|
317
|
+
DEPRECATION WARNING:
|
318
|
+
The Haml #open helper is deprecated and will be removed in version 2.0.
|
319
|
+
Use the #haml_tag method instead.
|
320
|
+
END
|
321
|
+
haml_tag(*args, &block)
|
322
|
+
end
|
314
323
|
|
315
324
|
private
|
316
325
|
|
317
326
|
# Gets a reference to the current Haml::Buffer object.
|
318
|
-
def
|
327
|
+
def haml_buffer
|
319
328
|
@haml_stack[-1]
|
320
329
|
end
|
321
330
|
|
322
331
|
# Gives a proc the same local "_hamlout" and "_erbout" variables
|
323
332
|
# that the current template has.
|
324
|
-
def
|
325
|
-
_hamlout =
|
333
|
+
def haml_bind_proc(&proc)
|
334
|
+
_hamlout = haml_buffer
|
326
335
|
_erbout = _hamlout.buffer
|
327
336
|
proc { |*args| proc.call(*args) }
|
328
337
|
end
|
@@ -31,7 +31,7 @@ if defined?(ActionView) and not defined?(Merb::Plugins)
|
|
31
31
|
module TextHelper
|
32
32
|
def concat_with_haml(string, binding = nil)
|
33
33
|
if is_haml?
|
34
|
-
|
34
|
+
haml_buffer.buffer.concat(string)
|
35
35
|
else
|
36
36
|
concat_without_haml(string, binding)
|
37
37
|
end
|
@@ -45,7 +45,7 @@ if defined?(ActionView) and not defined?(Merb::Plugins)
|
|
45
45
|
if is_haml?
|
46
46
|
if block_given?
|
47
47
|
oldproc = proc
|
48
|
-
proc =
|
48
|
+
proc = haml_bind_proc do |*args|
|
49
49
|
concat "\n"
|
50
50
|
tab_up
|
51
51
|
oldproc.call(*args)
|
@@ -67,7 +67,7 @@ if defined?(ActionView) and not defined?(Merb::Plugins)
|
|
67
67
|
def form_for_with_haml(object_name, *args, &proc)
|
68
68
|
if block_given? && is_haml?
|
69
69
|
oldproc = proc
|
70
|
-
proc =
|
70
|
+
proc = haml_bind_proc do |*args|
|
71
71
|
tab_up
|
72
72
|
oldproc.call(*args)
|
73
73
|
tab_down
|
data/lib/haml/precompiler.rb
CHANGED
@@ -122,7 +122,7 @@ END
|
|
122
122
|
@tab_change = 0
|
123
123
|
|
124
124
|
old_line = Line.new
|
125
|
-
(@template + "\n-#\n-#").split(
|
125
|
+
(@template + "\n-#\n-#").split(/\n?\r|\r?\n/).each_with_index do |text, index|
|
126
126
|
line = Line.new text.strip, text.lstrip.chomp, index
|
127
127
|
line.spaces, line.tabs = count_soft_tabs(text)
|
128
128
|
|
@@ -473,15 +473,29 @@ END
|
|
473
473
|
def prerender_tag(name, atomic, attributes)
|
474
474
|
"<#{name}#{Precompiler.build_attributes(@options[:attr_wrapper], attributes)}#{atomic ? ' />' : '>'}"
|
475
475
|
end
|
476
|
+
|
477
|
+
# Parses a line into tag_name, attributes, attributes_hash, object_ref, action, value
|
478
|
+
def parse_tag(line)
|
479
|
+
raise SyntaxError.new("Invalid tag: \"#{line}\"") unless match = line.scan(/[%]([-:\w]+)([-\w\.\#]*)(.*)/)[0]
|
480
|
+
tag_name, attributes, rest = match
|
481
|
+
if rest[0] == ?{
|
482
|
+
scanner = StringScanner.new(rest)
|
483
|
+
attributes_hash, rest = balance(scanner, ?{, ?})
|
484
|
+
attributes_hash = attributes_hash[1, attributes_hash.length - 2] if attributes_hash
|
485
|
+
end
|
486
|
+
if rest
|
487
|
+
object_ref, rest = balance(rest, ?[, ?]) if rest[0] == ?[
|
488
|
+
action, value = rest.scan(/([=\/\~]?)?(.*)?/)[0]
|
489
|
+
end
|
490
|
+
value = value.to_s.strip
|
491
|
+
[tag_name, attributes, attributes_hash, object_ref, action, value]
|
492
|
+
end
|
476
493
|
|
477
494
|
# Parses a line that will render as an XHTML tag, and adds the code that will
|
478
495
|
# render that tag to <tt>@precompiled</tt>.
|
479
496
|
def render_tag(line)
|
480
|
-
|
481
|
-
|
482
|
-
value = value.to_s.strip
|
483
|
-
attributes_hash = attributes_hash[1...-1] if attributes_hash
|
484
|
-
|
497
|
+
tag_name, attributes, attributes_hash, object_ref, action, value = parse_tag(line)
|
498
|
+
|
485
499
|
raise SyntaxError.new("Illegal element: classes and ids must have values.") if attributes =~ /[\.#](\.|#|\z)/
|
486
500
|
|
487
501
|
case action
|
@@ -505,7 +519,7 @@ END
|
|
505
519
|
Buffer.merge_attrs(attributes, static_attributes) if static_attributes
|
506
520
|
|
507
521
|
raise SyntaxError.new("Illegal Nesting: Nesting within an atomic tag is illegal.") if @block_opened && atomic
|
508
|
-
raise SyntaxError.new("Illegal Nesting:
|
522
|
+
raise SyntaxError.new("Illegal Nesting: Content can't be both given on the same line as %#{tag_name} and nested within it.") if @block_opened && !value.empty?
|
509
523
|
raise SyntaxError.new("Tag has no content.") if parse && value.empty?
|
510
524
|
raise SyntaxError.new("Atomic tags can't have content.") if atomic && !value.empty?
|
511
525
|
|
@@ -621,25 +635,26 @@ END
|
|
621
635
|
|
622
636
|
while scan.scan(/(.*?)\\\#\{/)
|
623
637
|
str << scan.matched[0...-3]
|
624
|
-
str << eval("\"\\\#{#{
|
638
|
+
str << eval("\"\\\#{#{balance(scan, ?{, ?}, 1)[0][0...-1]}}\"")
|
625
639
|
end
|
626
640
|
|
627
641
|
str + scan.rest
|
628
642
|
end
|
629
643
|
|
630
|
-
def
|
644
|
+
def balance(scanner, start, finish, count = 0)
|
631
645
|
str = ''
|
632
|
-
|
633
|
-
|
634
|
-
while scanner.scan(
|
646
|
+
scanner = StringScanner.new(scanner) unless scanner.is_a? StringScanner
|
647
|
+
regexp = Regexp.new("(.*?)[\\#{start.chr}\\#{finish.chr}]")
|
648
|
+
while scanner.scan(regexp)
|
635
649
|
str << scanner.matched
|
636
|
-
count += 1 if scanner.matched[-1] ==
|
637
|
-
count -= 1 if scanner.matched[-1] ==
|
638
|
-
return str
|
650
|
+
count += 1 if scanner.matched[-1] == start
|
651
|
+
count -= 1 if scanner.matched[-1] == finish
|
652
|
+
return [str.strip, scanner.rest] if count == 0
|
639
653
|
end
|
640
654
|
|
641
655
|
raise SyntaxError.new("Unbalanced brackets.")
|
642
656
|
end
|
657
|
+
|
643
658
|
|
644
659
|
# Counts the tabulation of a line.
|
645
660
|
def count_soft_tabs(line)
|
data/lib/haml/template/plugin.rb
CHANGED
@@ -26,6 +26,16 @@ module Haml
|
|
26
26
|
options = Haml::Template.options.dup
|
27
27
|
Haml::Engine.new(template, options).send(:precompiled_with_ambles, [])
|
28
28
|
end
|
29
|
+
|
30
|
+
def cache_fragment(block, name = {}, options = nil)
|
31
|
+
@view.fragment_for(block, name, options) do
|
32
|
+
eval("_hamlout.buffer", block.binding)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def read_template_file(template_path, extension)
|
37
|
+
File.read(template_path)
|
38
|
+
end
|
29
39
|
end
|
30
40
|
end
|
31
41
|
|
data/lib/sass/engine.rb
CHANGED
data/lib/sass/plugin.rb
CHANGED
@@ -13,6 +13,13 @@ module Sass
|
|
13
13
|
:always_check => true,
|
14
14
|
:full_exception => true
|
15
15
|
}
|
16
|
+
@@checked_for_updates = false
|
17
|
+
|
18
|
+
# Whether or not Sass has *ever* checked if the stylesheets need updates
|
19
|
+
# (in this Ruby instance).
|
20
|
+
def checked_for_updates
|
21
|
+
@@checked_for_updates
|
22
|
+
end
|
16
23
|
|
17
24
|
# Gets various options for Sass. See README for details.
|
18
25
|
#--
|
@@ -35,6 +42,7 @@ module Sass
|
|
35
42
|
def update_stylesheets
|
36
43
|
return if options[:never_update]
|
37
44
|
|
45
|
+
@@checked_for_updates = true
|
38
46
|
Dir.glob(File.join(options[:template_location], "**", "*.sass")).entries.each do |file|
|
39
47
|
|
40
48
|
# Get the relative path to the file with no extension
|
data/lib/sass/plugin/merb.rb
CHANGED
@@ -18,12 +18,35 @@ unless defined?(Sass::MERB_LOADED)
|
|
18
18
|
config.symbolize_keys!
|
19
19
|
Sass::Plugin.options.merge!(config)
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
if version[0] > 0 || version[1] >= 9
|
22
|
+
|
23
|
+
class Merb::Rack::Application # :nodoc:
|
24
|
+
def call_with_sass(env)
|
25
|
+
if !Sass::Plugin.checked_for_updates ||
|
26
|
+
Sass::Plugin.options[:always_update] || Sass::Plugin.options[:always_check]
|
27
|
+
Sass::Plugin.update_stylesheets
|
28
|
+
end
|
29
|
+
|
30
|
+
call_without_sass(env)
|
31
|
+
end
|
32
|
+
alias_method :call_without_sass, :call
|
33
|
+
alias_method :call, :call_with_sass
|
34
|
+
end
|
35
|
+
|
36
|
+
else
|
37
|
+
|
38
|
+
class MerbHandler # :nodoc:
|
39
|
+
def process_with_sass(request, response)
|
40
|
+
if !Sass::Plugin.checked_for_updates ||
|
41
|
+
Sass::Plugin.options[:always_update] || Sass::Plugin.options[:always_check]
|
42
|
+
Sass::Plugin.update_stylesheets
|
43
|
+
end
|
44
|
+
|
45
|
+
process_without_sass(request, response)
|
46
|
+
end
|
47
|
+
alias_method :process_without_sass, :process
|
48
|
+
alias_method :process, :process_with_sass
|
25
49
|
end
|
26
|
-
|
27
|
-
alias_method :process, :process_with_sass
|
50
|
+
|
28
51
|
end
|
29
52
|
end
|
data/lib/sass/plugin/rails.rb
CHANGED
@@ -11,7 +11,11 @@ unless defined?(Sass::RAILS_LOADED)
|
|
11
11
|
class Base
|
12
12
|
alias_method :sass_old_process, :process
|
13
13
|
def process(*args)
|
14
|
-
|
14
|
+
if !Sass::Plugin.checked_for_updates ||
|
15
|
+
Sass::Plugin.options[:always_update] || Sass::Plugin.options[:always_check]
|
16
|
+
Sass::Plugin.update_stylesheets
|
17
|
+
end
|
18
|
+
|
15
19
|
sass_old_process(*args)
|
16
20
|
end
|
17
21
|
end
|
data/test/haml/engine_test.rb
CHANGED
@@ -97,6 +97,10 @@ class EngineTest < Test::Unit::TestCase
|
|
97
97
|
assert_equal("<p>0</p>\n<p>1</p>\n<p>2</p>\n", render("- for i in (0...3)\n %p= |\n i |"))
|
98
98
|
end
|
99
99
|
|
100
|
+
def test_cr_newline
|
101
|
+
assert_equal("<p>foo</p>\n<p>bar</p>\n<p>baz</p>\n<p>boom</p>\n", render("%p foo\r%p bar\r\n%p baz\n\r%p boom"))
|
102
|
+
end
|
103
|
+
|
100
104
|
# Options tests
|
101
105
|
|
102
106
|
def test_stop_eval
|
@@ -129,6 +133,18 @@ class EngineTest < Test::Unit::TestCase
|
|
129
133
|
assert_equal("<p escaped='quo4te'>\n</p>\n", render("%p{ :escaped => \"quo\#{2 + 2}te\"}"))
|
130
134
|
end
|
131
135
|
|
136
|
+
def test_correct_parsing_with_brackets
|
137
|
+
assert_equal("<p class='foo'>{tada} foo</p>\n", render("%p{:class => 'foo'} {tada} foo"))
|
138
|
+
assert_equal("<p class='foo'>deep {nested { things }}</p>\n", render("%p{:class => 'foo'} deep {nested { things }}"))
|
139
|
+
assert_equal("<p class='bar foo'>{a { d</p>\n", render("%p{{:class => 'foo'}, :class => 'bar'} {a { d"))
|
140
|
+
assert_equal("<p foo='bar'>a}</p>\n", render("%p{:foo => 'bar'} a}"))
|
141
|
+
|
142
|
+
foo = []
|
143
|
+
foo[0] = Struct.new('Foo', :id).new
|
144
|
+
assert_equal("<p class='struct_foo' id='struct_foo_new'>New User]</p>\n",
|
145
|
+
render("%p[foo[0]] New User]", :locals => {:foo => foo}))
|
146
|
+
end
|
147
|
+
|
132
148
|
def test_empty_attrs
|
133
149
|
assert_equal("<p attr=''>empty</p>\n", render("%p{ :attr => '' } empty"))
|
134
150
|
assert_equal("<p attr=''>empty</p>\n", render("%p{ :attr => x } empty", :locals => {:x => ''}))
|
data/test/haml/helper_test.rb
CHANGED
@@ -31,10 +31,10 @@ click
|
|
31
31
|
= succeed '.' do
|
32
32
|
%a{:href=>"thing"} here
|
33
33
|
%p baz
|
34
|
-
-
|
34
|
+
- haml_buffer.tabulation = 10
|
35
35
|
%p boom
|
36
36
|
- concat "foo\n"
|
37
|
-
-
|
37
|
+
- haml_buffer.tabulation = 0
|
38
38
|
- def url_for(*stuff); stuff.join(' '); end
|
39
39
|
-# The form URLs must be empty
|
40
40
|
-# because of a weird bug that causes url_for to misbehave.
|
@@ -58,12 +58,12 @@ click
|
|
58
58
|
- puts "boom"
|
59
59
|
baz
|
60
60
|
- puts "boom, again"
|
61
|
-
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
61
|
+
- haml_tag :table do
|
62
|
+
- haml_tag :tr do
|
63
|
+
- haml_tag :td, {:class => 'cell'} do
|
64
|
+
- haml_tag :strong, "strong!"
|
65
65
|
- puts "data"
|
66
|
-
-
|
66
|
+
- haml_tag :td do
|
67
67
|
- puts "more_data"
|
68
|
-
-
|
69
|
-
-
|
68
|
+
- haml_tag :hr
|
69
|
+
- haml_tag :div, ''
|
data/test/sass/engine_test.rb
CHANGED
@@ -204,6 +204,10 @@ END
|
|
204
204
|
assert_equal(":focus {\n a: b; }\n", render("\\:focus\n a: b"))
|
205
205
|
assert_equal("a {\n b: c; }\n a :focus {\n d: e; }\n", render("\\a\n b: c\n \\:focus\n d: e"))
|
206
206
|
end
|
207
|
+
|
208
|
+
def test_cr_newline
|
209
|
+
assert_equal("foo {\n a: b;\n c: d;\n e: f; }\n", render("foo\r a: b\r\n c: d\n\r e: f"))
|
210
|
+
end
|
207
211
|
|
208
212
|
private
|
209
213
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: haml
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.8.
|
7
|
-
date: 2008-
|
6
|
+
version: 1.8.2
|
7
|
+
date: 2008-02-24 00:00:00 -08:00
|
8
8
|
summary: An elegant, structured XHTML/XML templating engine. Comes with Sass, a similar CSS templating engine.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -36,7 +36,6 @@ files:
|
|
36
36
|
- lib/sass/plugin
|
37
37
|
- lib/sass/plugin/rails.rb
|
38
38
|
- lib/sass/plugin/merb.rb
|
39
|
-
- lib/sass/constant.rb.rej
|
40
39
|
- lib/sass/error.rb
|
41
40
|
- lib/sass/tree
|
42
41
|
- lib/sass/tree/value_node.rb
|
@@ -71,7 +70,6 @@ files:
|
|
71
70
|
- lib/haml/precompiler.rb
|
72
71
|
- lib/haml/helpers
|
73
72
|
- lib/haml/helpers/action_view_extensions.rb
|
74
|
-
- lib/haml/helpers/action_view_mods.rb.rej
|
75
73
|
- lib/haml/helpers/action_view_mods.rb
|
76
74
|
- lib/haml.rb
|
77
75
|
- bin/css2sass
|
@@ -114,7 +112,6 @@ files:
|
|
114
112
|
- test/sass/results/compressed.css
|
115
113
|
- test/sass/results/parent_ref.css
|
116
114
|
- test/sass/results/basic.css
|
117
|
-
- test/sass/engine_test.rb.rej
|
118
115
|
- test/sass/engine_test.rb
|
119
116
|
- test/haml
|
120
117
|
- test/haml/mocks
|
@@ -1,30 +0,0 @@
|
|
1
|
-
***************
|
2
|
-
*** 1,11 ****
|
3
|
-
- begin
|
4
|
-
- require 'rubygems'
|
5
|
-
- require 'active_support'
|
6
|
-
- require 'action_controller'
|
7
|
-
- require 'action_view'
|
8
|
-
- action_view_included = true
|
9
|
-
- rescue LoadError
|
10
|
-
- action_view_included = false
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
--- 1,16 ----
|
15
|
-
+
|
16
|
-
+ # This obviously requires that ActiveSupport be present prior to Haml
|
17
|
-
+ # being loaded.
|
18
|
-
+ action_view_included = false
|
19
|
-
+ if defined?(ActiveSupport)
|
20
|
-
+ begin
|
21
|
-
+ require 'rubygems'
|
22
|
-
+ require 'active_support'
|
23
|
-
+ require 'action_controller'
|
24
|
-
+ require 'action_view'
|
25
|
-
+ action_view_included = true
|
26
|
-
+ rescue LoadError
|
27
|
-
+ end
|
28
|
-
end
|
29
|
-
|
30
|
-
|
data/lib/sass/constant.rb.rej
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
***************
|
2
|
-
*** 106,121 ****
|
3
|
-
end
|
4
|
-
|
5
|
-
# Time for a unary minus!
|
6
|
-
- if negative_okay && symbol == :minus
|
7
|
-
- negative_okay = true
|
8
|
-
to_return << :neg
|
9
|
-
next
|
10
|
-
end
|
11
|
-
|
12
|
-
# Are we looking at an operator?
|
13
|
-
if symbol && (str.empty? || symbol != :mod)
|
14
|
-
str = reset_str.call
|
15
|
-
- negative_okay = true
|
16
|
-
to_return << symbol
|
17
|
-
next
|
18
|
-
end
|
19
|
-
--- 107,129 ----
|
20
|
-
end
|
21
|
-
|
22
|
-
# Time for a unary minus!
|
23
|
-
+ if beginning_of_token && symbol == :minus
|
24
|
-
+ beginning_of_token = true
|
25
|
-
to_return << :neg
|
26
|
-
next
|
27
|
-
end
|
28
|
-
|
29
|
-
+ # Is this a constant?
|
30
|
-
+ if beginning_of_token && symbol == :const
|
31
|
-
+ beginning_of_token = true
|
32
|
-
+ to_return << :const
|
33
|
-
+ next
|
34
|
-
+ end
|
35
|
-
+
|
36
|
-
# Are we looking at an operator?
|
37
|
-
if symbol && (str.empty? || symbol != :mod)
|
38
|
-
str = reset_str.call
|
39
|
-
+ beginning_of_token = true
|
40
|
-
to_return << symbol
|
41
|
-
next
|
42
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
***************
|
2
|
-
*** 44,49 ****
|
3
|
-
"@import templates/basic\n foo" => "Illegal nesting: Nothing may be nested beneath import directives.",
|
4
|
-
"foo\n @import templates/basic" => "Import directives may only be used at the root of a document.",
|
5
|
-
"@foo bar boom" => "Unknown compiler directive: \"@foo bar boom\"",
|
6
|
-
}
|
7
|
-
|
8
|
-
def test_basic_render
|
9
|
-
--- 44,52 ----
|
10
|
-
"@import templates/basic\n foo" => "Illegal nesting: Nothing may be nested beneath import directives.",
|
11
|
-
"foo\n @import templates/basic" => "Import directives may only be used at the root of a document.",
|
12
|
-
"@foo bar boom" => "Unknown compiler directive: \"@foo bar boom\"",
|
13
|
-
+ "!foo = bar baz -" => "Unterminated unary minus.",
|
14
|
-
+ "!foo = bar baz !" => "Unterminated constant.",
|
15
|
-
+ "!foo = !(foo)" => "Invalid constant.",
|
16
|
-
}
|
17
|
-
|
18
|
-
def test_basic_render
|