cloudhead-less 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/Rakefile +2 -0
  2. data/VERSION +1 -1
  3. data/bin/lessc +8 -2
  4. data/less.gemspec +8 -92
  5. data/lib/ext.rb +8 -7
  6. data/lib/less/command.rb +12 -15
  7. data/lib/less/engine/grammar/less.tt +7 -3
  8. data/lib/less/engine.rb +3 -2
  9. data/lib/less.rb +2 -2
  10. data/spec/css/css-3.css +1 -0
  11. data/spec/less/css-3.less +4 -0
  12. data/spec/less/import.less +1 -0
  13. metadata +23 -94
  14. data/lib/vendor/treetop/.gitignore +0 -7
  15. data/lib/vendor/treetop/LICENSE +0 -19
  16. data/lib/vendor/treetop/README +0 -164
  17. data/lib/vendor/treetop/Rakefile +0 -19
  18. data/lib/vendor/treetop/benchmark/seqpar.gnuplot +0 -15
  19. data/lib/vendor/treetop/benchmark/seqpar.treetop +0 -16
  20. data/lib/vendor/treetop/benchmark/seqpar_benchmark.rb +0 -107
  21. data/lib/vendor/treetop/bin/tt +0 -28
  22. data/lib/vendor/treetop/lib/treetop/bootstrap_gen_1_metagrammar.rb +0 -45
  23. data/lib/vendor/treetop/lib/treetop/compiler/grammar_compiler.rb +0 -42
  24. data/lib/vendor/treetop/lib/treetop/compiler/lexical_address_space.rb +0 -17
  25. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.rb +0 -3097
  26. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.treetop +0 -408
  27. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/anything_symbol.rb +0 -18
  28. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/atomic_expression.rb +0 -14
  29. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +0 -24
  30. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/choice.rb +0 -31
  31. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/declaration_sequence.rb +0 -24
  32. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/grammar.rb +0 -28
  33. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/inline_module.rb +0 -27
  34. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/nonterminal.rb +0 -13
  35. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/optional.rb +0 -19
  36. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parenthesized_expression.rb +0 -9
  37. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +0 -138
  38. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_rule.rb +0 -55
  39. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/predicate.rb +0 -45
  40. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/repetition.rb +0 -55
  41. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/sequence.rb +0 -68
  42. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/terminal.rb +0 -20
  43. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/transient_prefix.rb +0 -9
  44. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/treetop_file.rb +0 -9
  45. data/lib/vendor/treetop/lib/treetop/compiler/node_classes.rb +0 -19
  46. data/lib/vendor/treetop/lib/treetop/compiler/ruby_builder.rb +0 -113
  47. data/lib/vendor/treetop/lib/treetop/compiler.rb +0 -6
  48. data/lib/vendor/treetop/lib/treetop/ruby_extensions/string.rb +0 -42
  49. data/lib/vendor/treetop/lib/treetop/ruby_extensions.rb +0 -2
  50. data/lib/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +0 -105
  51. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/head_node.rb +0 -15
  52. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/interval_skip_list.rb +0 -200
  53. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/node.rb +0 -164
  54. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list.rb +0 -4
  55. data/lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb +0 -72
  56. data/lib/vendor/treetop/lib/treetop/runtime/terminal_parse_failure.rb +0 -16
  57. data/lib/vendor/treetop/lib/treetop/runtime/terminal_syntax_node.rb +0 -17
  58. data/lib/vendor/treetop/lib/treetop/runtime.rb +0 -5
  59. data/lib/vendor/treetop/lib/treetop/version.rb +0 -9
  60. data/lib/vendor/treetop/lib/treetop.rb +0 -8
  61. data/lib/vendor/treetop/spec/compiler/and_predicate_spec.rb +0 -36
  62. data/lib/vendor/treetop/spec/compiler/anything_symbol_spec.rb +0 -44
  63. data/lib/vendor/treetop/spec/compiler/character_class_spec.rb +0 -182
  64. data/lib/vendor/treetop/spec/compiler/choice_spec.rb +0 -80
  65. data/lib/vendor/treetop/spec/compiler/circular_compilation_spec.rb +0 -28
  66. data/lib/vendor/treetop/spec/compiler/failure_propagation_functional_spec.rb +0 -21
  67. data/lib/vendor/treetop/spec/compiler/grammar_compiler_spec.rb +0 -84
  68. data/lib/vendor/treetop/spec/compiler/grammar_spec.rb +0 -41
  69. data/lib/vendor/treetop/spec/compiler/nonterminal_symbol_spec.rb +0 -40
  70. data/lib/vendor/treetop/spec/compiler/not_predicate_spec.rb +0 -38
  71. data/lib/vendor/treetop/spec/compiler/one_or_more_spec.rb +0 -35
  72. data/lib/vendor/treetop/spec/compiler/optional_spec.rb +0 -37
  73. data/lib/vendor/treetop/spec/compiler/parenthesized_expression_spec.rb +0 -19
  74. data/lib/vendor/treetop/spec/compiler/parsing_rule_spec.rb +0 -32
  75. data/lib/vendor/treetop/spec/compiler/sequence_spec.rb +0 -115
  76. data/lib/vendor/treetop/spec/compiler/terminal_spec.rb +0 -81
  77. data/lib/vendor/treetop/spec/compiler/terminal_symbol_spec.rb +0 -37
  78. data/lib/vendor/treetop/spec/compiler/test_grammar.treetop +0 -7
  79. data/lib/vendor/treetop/spec/compiler/test_grammar.tt +0 -7
  80. data/lib/vendor/treetop/spec/compiler/test_grammar_do.treetop +0 -7
  81. data/lib/vendor/treetop/spec/compiler/zero_or_more_spec.rb +0 -56
  82. data/lib/vendor/treetop/spec/composition/a.treetop +0 -11
  83. data/lib/vendor/treetop/spec/composition/b.treetop +0 -11
  84. data/lib/vendor/treetop/spec/composition/c.treetop +0 -10
  85. data/lib/vendor/treetop/spec/composition/d.treetop +0 -10
  86. data/lib/vendor/treetop/spec/composition/f.treetop +0 -17
  87. data/lib/vendor/treetop/spec/composition/grammar_composition_spec.rb +0 -40
  88. data/lib/vendor/treetop/spec/composition/subfolder/e_includes_c.treetop +0 -15
  89. data/lib/vendor/treetop/spec/ruby_extensions/string_spec.rb +0 -32
  90. data/lib/vendor/treetop/spec/runtime/compiled_parser_spec.rb +0 -101
  91. data/lib/vendor/treetop/spec/runtime/interval_skip_list/delete_spec.rb +0 -147
  92. data/lib/vendor/treetop/spec/runtime/interval_skip_list/expire_range_spec.rb +0 -349
  93. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_and_delete_node.rb +0 -385
  94. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_spec.rb +0 -660
  95. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +0 -6175
  96. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +0 -58
  97. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture.rb +0 -23
  98. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +0 -164
  99. data/lib/vendor/treetop/spec/runtime/interval_skip_list/spec_helper.rb +0 -84
  100. data/lib/vendor/treetop/spec/runtime/syntax_node_spec.rb +0 -53
  101. data/lib/vendor/treetop/spec/spec_helper.rb +0 -106
  102. data/lib/vendor/treetop/spec/spec_suite.rb +0 -4
  103. data/lib/vendor/treetop/treetop.gemspec +0 -17
@@ -1,15 +0,0 @@
1
- class IntervalSkipList
2
- class HeadNode
3
- attr_reader :height, :forward, :forward_markers
4
-
5
- def initialize(height)
6
- @height = height
7
- @forward = Array.new(height, nil)
8
- @forward_markers = Array.new(height) {|i| []}
9
- end
10
-
11
- def top_level
12
- height - 1
13
- end
14
- end
15
- end
@@ -1,200 +0,0 @@
1
- class IntervalSkipList
2
- attr_reader :probability
3
-
4
- def initialize
5
- @head = HeadNode.new(max_height)
6
- @ranges = {}
7
- @probability = 0.5
8
- end
9
-
10
- def max_height
11
- 3
12
- end
13
-
14
- def empty?
15
- head.forward[0].nil?
16
- end
17
-
18
- def expire(range, length_change)
19
- expired_markers, first_node_after_range = overlapping(range)
20
- expired_markers.each { |marker| delete(marker) }
21
- first_node_after_range.propagate_length_change(length_change)
22
- end
23
-
24
- def overlapping(range)
25
- markers, first_node = containing_with_node(range.first)
26
-
27
- cur_node = first_node
28
- begin
29
- markers.concat(cur_node.forward_markers.flatten)
30
- cur_node = cur_node.forward[0]
31
- end while cur_node.key < range.last
32
-
33
- return markers.uniq, cur_node
34
- end
35
-
36
- def containing(n)
37
- containing_with_node(n).first
38
- end
39
-
40
- def insert(range, marker)
41
- ranges[marker] = range
42
- first_node = insert_node(range.first)
43
- first_node.endpoint_of.push(marker)
44
- last_node = insert_node(range.last)
45
- last_node.endpoint_of.push(marker)
46
-
47
- cur_node = first_node
48
- cur_level = first_node.top_level
49
- while next_node_at_level_inside_range?(cur_node, cur_level, range)
50
- while can_ascend_from?(cur_node, cur_level) && next_node_at_level_inside_range?(cur_node, cur_level + 1, range)
51
- cur_level += 1
52
- end
53
- cur_node = mark_forward_path_at_level(cur_node, cur_level, marker)
54
- end
55
-
56
- while node_inside_range?(cur_node, range)
57
- while can_descend_from?(cur_level) && next_node_at_level_outside_range?(cur_node, cur_level, range)
58
- cur_level -= 1
59
- end
60
- cur_node = mark_forward_path_at_level(cur_node, cur_level, marker)
61
- end
62
- end
63
-
64
- def delete(marker)
65
- range = ranges[marker]
66
- path_to_first_node = make_path
67
- first_node = find(range.first, path_to_first_node)
68
-
69
- cur_node = first_node
70
- cur_level = first_node.top_level
71
- while next_node_at_level_inside_range?(cur_node, cur_level, range)
72
- while can_ascend_from?(cur_node, cur_level) && next_node_at_level_inside_range?(cur_node, cur_level + 1, range)
73
- cur_level += 1
74
- end
75
- cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker)
76
- end
77
-
78
- while node_inside_range?(cur_node, range)
79
- while can_descend_from?(cur_level) && next_node_at_level_outside_range?(cur_node, cur_level, range)
80
- cur_level -= 1
81
- end
82
- cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker)
83
- end
84
- last_node = cur_node
85
-
86
- first_node.endpoint_of.delete(marker)
87
- if first_node.endpoint_of.empty?
88
- first_node.delete(path_to_first_node)
89
- end
90
-
91
- last_node.endpoint_of.delete(marker)
92
- if last_node.endpoint_of.empty?
93
- path_to_last_node = make_path
94
- find(range.last, path_to_last_node)
95
- last_node.delete(path_to_last_node)
96
- end
97
- end
98
-
99
- protected
100
- attr_reader :head, :ranges
101
-
102
- def insert_node(key)
103
- path = make_path
104
- found_node = find(key, path)
105
- if found_node && found_node.key == key
106
- return found_node
107
- else
108
- return Node.new(key, next_node_height, path)
109
- end
110
- end
111
-
112
- def containing_with_node(n)
113
- containing = []
114
- cur_node = head
115
- (max_height - 1).downto(0) do |cur_level|
116
- while (next_node = cur_node.forward[cur_level]) && next_node.key <= n
117
- cur_node = next_node
118
- if cur_node.key == n
119
- return containing + (cur_node.markers - cur_node.endpoint_of), cur_node
120
- end
121
- end
122
- containing.concat(cur_node.forward_markers[cur_level])
123
- end
124
-
125
- return containing, cur_node
126
- end
127
-
128
- def delete_node(key)
129
- path = make_path
130
- found_node = find(key, path)
131
- found_node.delete(path) if found_node.key == key
132
- end
133
-
134
- def find(key, path)
135
- cur_node = head
136
- (max_height - 1).downto(0) do |cur_level|
137
- while (next_node = cur_node.forward[cur_level]) && next_node.key < key
138
- cur_node = next_node
139
- end
140
- path[cur_level] = cur_node
141
- end
142
- cur_node.forward[0]
143
- end
144
-
145
- def make_path
146
- Array.new(max_height, nil)
147
- end
148
-
149
- def next_node_height
150
- height = 1
151
- while rand < probability && height < max_height
152
- height += 1
153
- end
154
- height
155
- end
156
-
157
- def can_ascend_from?(node, level)
158
- level < node.top_level
159
- end
160
-
161
- def can_descend_from?(level)
162
- level > 0
163
- end
164
-
165
- def node_inside_range?(node, range)
166
- node.key < range.last
167
- end
168
-
169
- def next_node_at_level_inside_range?(node, level, range)
170
- node.forward[level] && node.forward[level].key <= range.last
171
- end
172
-
173
- def next_node_at_level_outside_range?(node, level, range)
174
- (node.forward[level].nil? || node.forward[level].key > range.last)
175
- end
176
-
177
- def mark_forward_path_at_level(node, level, marker)
178
- node.forward_markers[level].push(marker)
179
- next_node = node.forward[level]
180
- next_node.markers.push(marker)
181
- node = next_node
182
- end
183
-
184
- def unmark_forward_path_at_level(node, level, marker)
185
- node.forward_markers[level].delete(marker)
186
- next_node = node.forward[level]
187
- next_node.markers.delete(marker)
188
- node = next_node
189
- end
190
-
191
- def nodes
192
- nodes = []
193
- cur_node = head.forward[0]
194
- until cur_node.nil?
195
- nodes << cur_node
196
- cur_node = cur_node.forward[0]
197
- end
198
- nodes
199
- end
200
- end
@@ -1,164 +0,0 @@
1
- class IntervalSkipList
2
- class Node < HeadNode
3
- attr_accessor :key
4
- attr_reader :markers, :endpoint_of
5
-
6
- def initialize(key, height, path)
7
- super(height)
8
- @key = key
9
- @markers = []
10
- @endpoint_of = []
11
- update_forward_pointers(path)
12
- promote_markers(path)
13
- end
14
-
15
- def all_forward_markers
16
- markers.flatten
17
- end
18
-
19
- def delete(path)
20
- 0.upto(top_level) do |i|
21
- path[i].forward[i] = forward[i]
22
- end
23
- demote_markers(path)
24
- end
25
-
26
- def propagate_length_change(length_change)
27
- cur_node = self
28
- while cur_node do
29
- cur_node.key += length_change
30
- cur_node = cur_node.forward[0]
31
- end
32
- end
33
-
34
- protected
35
-
36
- def update_forward_pointers(path)
37
- 0.upto(top_level) do |i|
38
- forward[i] = path[i].forward[i]
39
- path[i].forward[i] = self
40
- end
41
- end
42
-
43
- def promote_markers(path)
44
- promoted = []
45
- new_promoted = []
46
- 0.upto(top_level) do |i|
47
- incoming_markers = path[i].forward_markers[i]
48
- markers.concat(incoming_markers)
49
-
50
- incoming_markers.each do |marker|
51
- if can_be_promoted_higher?(marker, i)
52
- new_promoted.push(marker)
53
- forward[i].delete_marker_from_path(marker, i, forward[i+1])
54
- else
55
- forward_markers[i].push(marker)
56
- end
57
- end
58
-
59
- promoted.each do |marker|
60
- if can_be_promoted_higher?(marker, i)
61
- new_promoted.push(marker)
62
- forward[i].delete_marker_from_path(marker, i, forward[i+1])
63
- else
64
- forward_markers[i].push(marker)
65
- end
66
- end
67
-
68
- promoted = new_promoted
69
- new_promoted = []
70
- end
71
- end
72
-
73
-
74
- def can_be_promoted_higher?(marker, level)
75
- level < top_level && forward[level + 1] && forward[level + 1].markers.include?(marker)
76
- end
77
-
78
- def delete_marker_from_path(marker, level, terminus)
79
- cur_node = self
80
- until cur_node == terminus
81
- cur_node.forward_markers[level].delete(marker)
82
- cur_node.markers.delete(marker)
83
- cur_node = cur_node.forward[level]
84
- end
85
- end
86
-
87
- def demote_markers(path)
88
- demote_inbound_markers(path)
89
- demote_outbound_markers(path)
90
- end
91
-
92
- def demote_inbound_markers(path)
93
- demoted = []
94
- new_demoted = []
95
-
96
- top_level.downto(0) do |i|
97
- incoming_markers = path[i].forward_markers[i].dup
98
- incoming_markers.each do |marker|
99
- unless forward_node_with_marker_at_or_above_level?(marker, i)
100
- path[i].forward_markers[i].delete(marker)
101
- new_demoted.push(marker)
102
- end
103
- end
104
-
105
- demoted.each do |marker|
106
- path[i + 1].place_marker_on_inbound_path(marker, i, path[i])
107
-
108
- if forward[i].markers.include?(marker)
109
- path[i].forward_markers[i].push(marker)
110
- else
111
- new_demoted.push(marker)
112
- end
113
- end
114
-
115
- demoted = new_demoted
116
- new_demoted = []
117
- end
118
- end
119
-
120
- def demote_outbound_markers(path)
121
- demoted = []
122
- new_demoted = []
123
-
124
- top_level.downto(0) do |i|
125
- forward_markers[i].each do |marker|
126
- new_demoted.push(marker) unless path[i].forward_markers[i].include?(marker)
127
- end
128
-
129
- demoted.each do |marker|
130
- forward[i].place_marker_on_outbound_path(marker, i, forward[i + 1])
131
- new_demoted.push(marker) unless path[i].forward_markers[i].include?(marker)
132
- end
133
-
134
- demoted = new_demoted
135
- new_demoted = []
136
- end
137
- end
138
-
139
- def forward_node_with_marker_at_or_above_level?(marker, level)
140
- level.upto(top_level) do |i|
141
- return true if forward[i].markers.include?(marker)
142
- end
143
- false
144
- end
145
-
146
- def place_marker_on_outbound_path(marker, level, terminus)
147
- cur_node = self
148
- until cur_node == terminus
149
- cur_node.forward_markers[level].push(marker)
150
- cur_node.markers.push(marker)
151
- cur_node = cur_node.forward[level]
152
- end
153
- end
154
-
155
- def place_marker_on_inbound_path(marker, level, terminus)
156
- cur_node = self
157
- until cur_node == terminus
158
- cur_node.forward_markers[level].push(marker)
159
- cur_node = cur_node.forward[level]
160
- cur_node.markers.push(marker)
161
- end
162
- end
163
- end
164
- end
@@ -1,4 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require "#{dir}/interval_skip_list/interval_skip_list.rb"
3
- require "#{dir}/interval_skip_list/head_node.rb"
4
- require "#{dir}/interval_skip_list/node.rb"
@@ -1,72 +0,0 @@
1
- module Treetop
2
- module Runtime
3
- class SyntaxNode
4
- attr_reader :input, :interval, :elements
5
- attr_accessor :parent
6
-
7
- def initialize(input, interval, elements = nil)
8
- @input = input
9
- @interval = interval
10
- if @elements = elements
11
- elements.each do |element|
12
- element.parent = self
13
- end
14
- end
15
- end
16
-
17
- def terminal?
18
- @elements.nil?
19
- end
20
-
21
- def nonterminal?
22
- !terminal?
23
- end
24
-
25
- def text_value
26
- input[interval]
27
- end
28
-
29
- def empty?
30
- interval.first == interval.last && interval.exclude_end?
31
- end
32
-
33
- def extension_modules
34
- local_extensions =
35
- class <<self
36
- included_modules-Object.included_modules
37
- end
38
- if local_extensions.size > 0
39
- local_extensions
40
- else
41
- [] # There weren't any; must be a literal node
42
- end
43
- end
44
-
45
- def inspect(indent="")
46
- em = extension_modules
47
- interesting_methods = methods-[em.last ? em.last.methods : nil]-self.class.instance_methods
48
- im = interesting_methods.size > 0 ? " (#{interesting_methods.join(",")})" : ""
49
- tv = text_value
50
- tv = "...#{tv[-20..-1]}" if tv.size > 20
51
-
52
- indent +
53
- self.class.to_s.sub(/.*:/,'') +
54
- em.map{|m| "+"+m.to_s.sub(/.*:/,'')}*"" +
55
- " offset=#{interval.first}" +
56
- ", #{tv.inspect}" +
57
- im +
58
- (elements && elements.size > 0 ?
59
- ":" +
60
- (@elements||[]).map{|e|
61
- begin
62
- "\n"+e.inspect(indent+" ")
63
- rescue # Defend against inspect not taking a parameter
64
- "\n"+indent+" "+e.inspect
65
- end
66
- }.join("") :
67
- ""
68
- )
69
- end
70
- end
71
- end
72
- end
@@ -1,16 +0,0 @@
1
- module Treetop
2
- module Runtime
3
- class TerminalParseFailure
4
- attr_reader :index, :expected_string
5
-
6
- def initialize(index, expected_string)
7
- @index = index
8
- @expected_string = expected_string
9
- end
10
-
11
- def to_s
12
- "String matching #{expected_string} expected."
13
- end
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- module Treetop
2
- module Runtime
3
- class TerminalSyntaxNode < SyntaxNode
4
-
5
- def initialize(input, interval)
6
- super(input, interval, [])
7
- end
8
-
9
- def inspect(indent="")
10
- indent+
11
- self.class.to_s.sub(/.*:/,'') +
12
- " offset=#{interval.first}" +
13
- " #{text_value.inspect}"
14
- end
15
- end
16
- end
17
- end
@@ -1,5 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require "#{dir}/runtime/compiled_parser"
3
- require "#{dir}/runtime/syntax_node"
4
- require "#{dir}/runtime/terminal_parse_failure"
5
- require "#{dir}/runtime/interval_skip_list"
@@ -1,9 +0,0 @@
1
- module Treetop #:nodoc:
2
- module VERSION #:nodoc:
3
- MAJOR = 1
4
- MINOR = 3
5
- TINY = 0
6
-
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
- end
9
- end
@@ -1,8 +0,0 @@
1
- require 'rubygems'
2
-
3
- dir = File.dirname(__FILE__)
4
-
5
- TREETOP_ROOT = File.join(dir, 'treetop')
6
- require File.join(TREETOP_ROOT, "ruby_extensions")
7
- require File.join(TREETOP_ROOT, "runtime")
8
- require File.join(TREETOP_ROOT, "compiler")
@@ -1,36 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
2
-
3
- module AndPredicateSpec
4
- describe "An &-predicated terminal symbol" do
5
- testing_expression '&"foo"'
6
-
7
- it "successfully parses input matching the terminal symbol, returning an epsilon syntax node" do
8
- parse('foo', :consume_all_input => false) do |result|
9
- result.should_not be_nil
10
- result.interval.should == (0...0)
11
- end
12
- end
13
- end
14
-
15
- describe "A sequence of a terminal and an and another &-predicated terminal" do
16
- testing_expression '"foo" &"bar"'
17
-
18
- it "matches input matching both terminals, but only consumes the first" do
19
- parse('foobar', :consume_all_input => false) do |result|
20
- result.should_not be_nil
21
- result.text_value.should == 'foo'
22
- end
23
- end
24
-
25
- it "fails to parse input matching only the first terminal, with a terminal failure recorded at index 3" do
26
- parse('foo') do |result|
27
- result.should be_nil
28
- terminal_failures = parser.terminal_failures
29
- terminal_failures.size.should == 1
30
- failure = terminal_failures[0]
31
- failure.index.should == 3
32
- failure.expected_string.should == 'bar'
33
- end
34
- end
35
- end
36
- end
@@ -1,44 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
2
-
3
- module AnythingSymbolSpec
4
- class Foo < Treetop::Runtime::SyntaxNode
5
- end
6
-
7
- describe "an anything symbol followed by a node class declaration and a block" do
8
- testing_expression '. <AnythingSymbolSpec::Foo> { def a_method; end }'
9
-
10
- it "matches any single character in a big range, returning an instance of the declared node class that responds to methods defined in the inline module" do
11
- (33..127).each do |digit|
12
- parse(digit.chr) do |result|
13
- result.should_not be_nil
14
- result.should be_an_instance_of(Foo)
15
- result.should respond_to(:a_method)
16
- result.interval.should == (0...1)
17
- end
18
- end
19
- end
20
-
21
- it "fails to parse epsilon" do
22
- parse('').should be_nil
23
- end
24
- end
25
-
26
- module ModFoo
27
- end
28
-
29
- describe "an anything symbol followed by a module declaration and a block" do
30
- testing_expression '. <AnythingSymbolSpec::ModFoo> { def a_method; end }'
31
-
32
- it "matches any single character in a big range, returning an instance of SyntaxNode extended by the declared module that responds to methods defined in the inline module" do
33
- (33..127).each do |digit|
34
- parse(digit.chr) do |result|
35
- result.should_not be_nil
36
- result.should be_an_instance_of(Treetop::Runtime::SyntaxNode)
37
- result.should be_a_kind_of(ModFoo)
38
- result.should respond_to(:a_method)
39
- result.interval.should == (0...1)
40
- end
41
- end
42
- end
43
- end
44
- end