cloudhead-less 1.2.3 → 1.2.4

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.
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,138 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class ParsingExpression < Runtime::SyntaxNode
4
- attr_reader :address, :builder, :subexpression_address, :var_symbols, :parent_expression
5
-
6
- def compile(address, builder, parent_expression)
7
- @address = address
8
- @builder = builder
9
- @parent_expression = parent_expression
10
- end
11
-
12
- def node_class_name
13
- parent_expression && parent_expression.node_class_name || 'SyntaxNode'
14
- end
15
-
16
- def declared_module_name
17
- parent_expression && parent_expression.node_class_name
18
- end
19
-
20
- def inline_module_name
21
- parent_expression && parent_expression.inline_module_name
22
- end
23
-
24
- def optional_arg(arg)
25
- if arg
26
- ", #{arg}"
27
- else
28
- ''
29
- end
30
- end
31
-
32
- def use_vars(*var_symbols)
33
- @var_symbols = var_symbols
34
- builder << var_initialization
35
- end
36
-
37
- def result_var
38
- var(:result)
39
- end
40
-
41
- def accumulator_var
42
- var(:accumulator)
43
- end
44
-
45
- def start_index_var
46
- var(:start_index)
47
- end
48
-
49
- def subexpression_result_var
50
- "r#{subexpression_address}"
51
- end
52
-
53
- def subexpression_success?
54
- subexpression_result_var
55
- end
56
-
57
- def obtain_new_subexpression_address
58
- @subexpression_address = builder.next_address
59
- end
60
-
61
- def accumulate_subexpression_result
62
- builder.accumulate accumulator_var, subexpression_result_var
63
- end
64
-
65
- def assign_result(value_ruby)
66
- builder.assign result_var, value_ruby
67
- end
68
-
69
- def extend_result(module_name)
70
- builder.extend result_var, module_name
71
- end
72
-
73
- def extend_result_with_declared_module
74
- extend_result declared_module_name if declared_module_name
75
- end
76
-
77
- def extend_result_with_inline_module
78
- extend_result inline_module_name if inline_module_name
79
- end
80
-
81
- def reset_index
82
- builder.assign '@index', start_index_var
83
- end
84
-
85
- def epsilon_node
86
- "instantiate_node(SyntaxNode,input, index...index)"
87
- end
88
-
89
- def assign_failure(start_index_var)
90
- assign_result("nil")
91
- end
92
-
93
- def var_initialization
94
- left, right = [], []
95
- var_symbols.each do |symbol|
96
- if init_value(symbol)
97
- left << var(symbol)
98
- right << init_value(symbol)
99
- end
100
- end
101
- if left.empty?
102
- ""
103
- else
104
- left.join(', ') + ' = ' + right.join(', ')
105
- end
106
- end
107
-
108
- def var(var_symbol)
109
- case var_symbol
110
- when :result then "r#{address}"
111
- when :accumulator then "s#{address}"
112
- when :start_index then "i#{address}"
113
- else raise "Unknown var symbol #{var_symbol}."
114
- end
115
- end
116
-
117
- def init_value(var_symbol)
118
- case var_symbol
119
- when :accumulator then '[]'
120
- when :start_index then 'index'
121
- else nil
122
- end
123
- end
124
-
125
- def begin_comment(expression)
126
- #builder << "# begin #{on_one_line(expression)}"
127
- end
128
-
129
- def end_comment(expression)
130
- #builder << "# end #{on_one_line(expression)}"
131
- end
132
-
133
- def on_one_line(expression)
134
- expression.text_value.tr("\n", ' ')
135
- end
136
- end
137
- end
138
- end
@@ -1,55 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class ParsingRule < Runtime::SyntaxNode
4
-
5
- def compile(builder)
6
- compile_inline_module_declarations(builder)
7
- generate_method_definition(builder)
8
- end
9
-
10
- def compile_inline_module_declarations(builder)
11
- parsing_expression.inline_modules.each_with_index do |inline_module, i|
12
- inline_module.compile(i, builder, self)
13
- builder.newline
14
- end
15
- end
16
-
17
- def generate_method_definition(builder)
18
- builder.reset_addresses
19
- expression_address = builder.next_address
20
- result_var = "r#{expression_address}"
21
-
22
- builder.method_declaration(method_name) do
23
- builder.assign 'start_index', 'index'
24
- generate_cache_lookup(builder)
25
- builder.newline
26
- parsing_expression.compile(expression_address, builder)
27
- builder.newline
28
- generate_cache_storage(builder, result_var)
29
- builder.newline
30
- builder << result_var
31
- end
32
- end
33
-
34
- def generate_cache_lookup(builder)
35
- builder.if_ "node_cache[:#{name}].has_key?(index)" do
36
- builder.assign 'cached', "node_cache[:#{name}][index]"
37
- builder << '@index = cached.interval.end if cached'
38
- builder << 'return cached'
39
- end
40
- end
41
-
42
- def generate_cache_storage(builder, result_var)
43
- builder.assign "node_cache[:#{name}][start_index]", result_var
44
- end
45
-
46
- def method_name
47
- "_nt_#{name}"
48
- end
49
-
50
- def name
51
- nonterminal.text_value
52
- end
53
- end
54
- end
55
- end
@@ -1,45 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class Predicate < ParsingExpression
4
- def compile(address, builder, parent_expression)
5
- super
6
- begin_comment(parent_expression)
7
- use_vars :result, :start_index
8
- obtain_new_subexpression_address
9
- parent_expression.prefixed_expression.compile(subexpression_address, builder)
10
- builder.if__(subexpression_success?) { when_success }
11
- builder.else_ { when_failure }
12
- end_comment(parent_expression)
13
- end
14
-
15
- def assign_failure
16
- super(start_index_var)
17
- end
18
-
19
- def assign_success
20
- reset_index
21
- assign_result epsilon_node
22
- end
23
- end
24
-
25
- class AndPredicate < Predicate
26
- def when_success
27
- assign_success
28
- end
29
-
30
- def when_failure
31
- assign_failure
32
- end
33
- end
34
-
35
- class NotPredicate < Predicate
36
- def when_success
37
- assign_failure
38
- end
39
-
40
- def when_failure
41
- assign_success
42
- end
43
- end
44
- end
45
- end
@@ -1,55 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class Repetition < ParsingExpression
4
- def compile(address, builder, parent_expression)
5
- super
6
- repeated_expression = parent_expression.atomic
7
- begin_comment(parent_expression)
8
- use_vars :result, :accumulator, :start_index
9
-
10
- builder.loop do
11
- obtain_new_subexpression_address
12
- repeated_expression.compile(subexpression_address, builder)
13
- builder.if__ subexpression_success? do
14
- accumulate_subexpression_result
15
- end
16
- builder.else_ do
17
- builder.break
18
- end
19
- end
20
- end
21
-
22
- def inline_module_name
23
- parent_expression.inline_module_name
24
- end
25
-
26
- def assign_and_extend_result
27
- assign_result "instantiate_node(#{node_class_name},input, #{start_index_var}...index, #{accumulator_var})"
28
- extend_result_with_inline_module
29
- end
30
- end
31
-
32
-
33
- class ZeroOrMore < Repetition
34
- def compile(address, builder, parent_expression)
35
- super
36
- assign_and_extend_result
37
- end_comment(parent_expression)
38
- end
39
- end
40
-
41
- class OneOrMore < Repetition
42
- def compile(address, builder, parent_expression)
43
- super
44
- builder.if__ "#{accumulator_var}.empty?" do
45
- reset_index
46
- assign_failure start_index_var
47
- end
48
- builder.else_ do
49
- assign_and_extend_result
50
- end
51
- end_comment(parent_expression)
52
- end
53
- end
54
- end
55
- end
@@ -1,68 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class Sequence < ParsingExpression
4
- def compile(address, builder, parent_expression = nil)
5
- super
6
- begin_comment(self)
7
- use_vars :result, :start_index, :accumulator
8
- compile_sequence_elements(sequence_elements)
9
- builder.if__ "#{accumulator_var}.last" do
10
- assign_result "instantiate_node(#{node_class_name},input, #{start_index_var}...index, #{accumulator_var})"
11
- extend_result sequence_element_accessor_module_name if sequence_element_accessor_module_name
12
- extend_result_with_inline_module
13
- end
14
- builder.else_ do
15
- reset_index
16
- assign_failure start_index_var
17
- end
18
- end_comment(self)
19
- end
20
-
21
- def node_class_name
22
- node_class_declarations.node_class_name || 'SyntaxNode'
23
- end
24
-
25
- def compile_sequence_elements(elements)
26
- obtain_new_subexpression_address
27
- elements.first.compile(subexpression_address, builder)
28
- accumulate_subexpression_result
29
- if elements.size > 1
30
- builder.if_ subexpression_success? do
31
- compile_sequence_elements(elements[1..-1])
32
- end
33
- end
34
- end
35
-
36
- def sequence_element_accessor_module
37
- @sequence_element_accessor_module ||= SequenceElementAccessorModule.new(sequence_elements)
38
- end
39
-
40
- def sequence_element_accessor_module_name
41
- sequence_element_accessor_module.module_name
42
- end
43
- end
44
-
45
- class SequenceElementAccessorModule
46
- include InlineModuleMixin
47
- attr_reader :sequence_elements
48
-
49
- def initialize(sequence_elements)
50
- @sequence_elements = sequence_elements
51
- end
52
-
53
- def compile(index, builder, rule)
54
- super
55
- builder.module_declaration(module_name) do
56
- sequence_elements.each_with_index do |element, index|
57
- if element.label_name
58
- builder.method_declaration(element.label_name) do
59
- builder << "elements[#{index}]"
60
- end
61
- builder.newline unless index == sequence_elements.size - 1
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
@@ -1,20 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class Terminal < AtomicExpression
4
- def compile(address, builder, parent_expression = nil)
5
- super
6
- string_length = eval(text_value).length
7
-
8
- builder.if__ "has_terminal?(#{text_value}, false, index)" do
9
- assign_result "instantiate_node(#{node_class_name},input, index...(index + #{string_length}))"
10
- extend_result_with_inline_module
11
- builder << "@index += #{string_length}"
12
- end
13
- builder.else_ do
14
- builder << "terminal_parse_failure(#{text_value})"
15
- assign_result 'nil'
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,9 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class TransientPrefix < ParsingExpression
4
- def compile(address, builder, parent_expression)
5
- parent_expression.prefixed_expression.compile(address, builder)
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class TreetopFile < Runtime::SyntaxNode
4
- def compile
5
- (elements.map {|elt| elt.compile}).join
6
- end
7
- end
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require File.join(dir, *%w[node_classes parsing_expression])
3
- require File.join(dir, *%w[node_classes atomic_expression])
4
- require File.join(dir, *%w[node_classes inline_module])
5
- require File.join(dir, *%w[node_classes treetop_file])
6
- require File.join(dir, *%w[node_classes grammar])
7
- require File.join(dir, *%w[node_classes declaration_sequence])
8
- require File.join(dir, *%w[node_classes parsing_rule])
9
- require File.join(dir, *%w[node_classes parenthesized_expression])
10
- require File.join(dir, *%w[node_classes nonterminal])
11
- require File.join(dir, *%w[node_classes terminal])
12
- require File.join(dir, *%w[node_classes anything_symbol])
13
- require File.join(dir, *%w[node_classes character_class])
14
- require File.join(dir, *%w[node_classes sequence])
15
- require File.join(dir, *%w[node_classes choice])
16
- require File.join(dir, *%w[node_classes repetition])
17
- require File.join(dir, *%w[node_classes optional])
18
- require File.join(dir, *%w[node_classes predicate])
19
- require File.join(dir, *%w[node_classes transient_prefix])
@@ -1,113 +0,0 @@
1
- module Treetop
2
- module Compiler
3
- class RubyBuilder
4
-
5
- attr_reader :level, :address_space, :ruby
6
-
7
- def initialize
8
- @level = 0
9
- @address_space = LexicalAddressSpace.new
10
- @ruby = ""
11
- end
12
-
13
- def <<(ruby_line)
14
- return if ruby_line.blank?
15
- ruby << ruby_line.tabto(level) << "\n"
16
- end
17
-
18
- def newline
19
- ruby << "\n"
20
- end
21
-
22
- def indented(depth = 2)
23
- self.in(depth)
24
- yield
25
- self.out(depth)
26
- end
27
-
28
- def class_declaration(name, &block)
29
- self << "class #{name}"
30
- indented(&block)
31
- self << "end"
32
- end
33
-
34
- def module_declaration(name, &block)
35
- self << "module #{name}"
36
- indented(&block)
37
- self << "end"
38
- end
39
-
40
- def method_declaration(name, &block)
41
- self << "def #{name}"
42
- indented(&block)
43
- self << "end"
44
- end
45
-
46
- def assign(left, right)
47
- if left.instance_of? Array
48
- self << "#{left.join(', ')} = #{right.join(', ')}"
49
- else
50
- self << "#{left} = #{right}"
51
- end
52
- end
53
-
54
- def extend(var, module_name)
55
- self << "#{var}.extend(#{module_name})"
56
- end
57
-
58
- def accumulate(left, right)
59
- self << "#{left} << #{right}"
60
- end
61
-
62
- def if__(condition, &block)
63
- self << "if #{condition}"
64
- indented(&block)
65
- end
66
-
67
- def if_(condition, &block)
68
- if__(condition, &block)
69
- self << 'end'
70
- end
71
-
72
- def else_(&block)
73
- self << 'else'
74
- indented(&block)
75
- self << 'end'
76
- end
77
-
78
- def loop(&block)
79
- self << 'loop do'
80
- indented(&block)
81
- self << 'end'
82
- end
83
-
84
- def break
85
- self << 'break'
86
- end
87
-
88
- def in(depth = 2)
89
- @level += depth
90
- self
91
- end
92
-
93
- def out(depth = 2)
94
- @level -= depth
95
- self
96
- end
97
-
98
- def next_address
99
- address_space.next_address
100
- end
101
-
102
- def reset_addresses
103
- address_space.reset_addresses
104
- end
105
-
106
- private
107
-
108
- def indent
109
- " " * level
110
- end
111
- end
112
- end
113
- end
@@ -1,6 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require File.join(dir, *%w[compiler lexical_address_space])
3
- require File.join(dir, *%w[compiler ruby_builder])
4
- require File.join(dir, *%w[compiler node_classes])
5
- require File.join(dir, *%w[compiler metagrammar]) unless $exclude_metagrammar
6
- require File.join(dir, *%w[compiler grammar_compiler])
@@ -1,42 +0,0 @@
1
- class String
2
- def column_of(index)
3
- return 1 if index == 0
4
- newline_index = rindex("\n", index - 1)
5
- if newline_index
6
- index - newline_index
7
- else
8
- index + 1
9
- end
10
- end
11
-
12
- def line_of(index)
13
- self[0...index].count("\n") + 1
14
- end
15
-
16
- unless method_defined?(:blank?)
17
- def blank?
18
- self == ""
19
- end
20
- end
21
-
22
- # The following methods are lifted from Facets 2.0.2
23
- def tabto(n)
24
- if self =~ /^( *)\S/
25
- indent(n - $1.length)
26
- else
27
- self
28
- end
29
- end
30
-
31
- def indent(n)
32
- if n >= 0
33
- gsub(/^/, ' ' * n)
34
- else
35
- gsub(/^ {0,#{-n}}/, "")
36
- end
37
- end
38
-
39
- def treetop_camelize
40
- to_s.gsub(/\/(.?)/){ "::" + $1.upcase }.gsub(/(^|_)(.)/){ $2.upcase }
41
- end
42
- end
@@ -1,2 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- require "#{dir}/ruby_extensions/string"
@@ -1,105 +0,0 @@
1
- module Treetop
2
- module Runtime
3
- class CompiledParser
4
- include Treetop::Runtime
5
-
6
- attr_reader :input, :index, :terminal_failures, :max_terminal_failure_index
7
- attr_writer :root
8
- attr_accessor :consume_all_input
9
- alias :consume_all_input? :consume_all_input
10
-
11
- def initialize
12
- self.consume_all_input = true
13
- end
14
-
15
- def parse(input, options = {})
16
- prepare_to_parse(input)
17
- @index = options[:index] if options[:index]
18
- result = send("_nt_#{root}")
19
- return nil if (consume_all_input? && index != input.size)
20
- return result
21
- end
22
-
23
- def failure_index
24
- max_terminal_failure_index
25
- end
26
-
27
- def failure_line
28
- terminal_failures && input.line_of(failure_index)
29
- end
30
-
31
- def failure_column
32
- terminal_failures && input.column_of(failure_index)
33
- end
34
-
35
- def failure_reason
36
- return nil unless (tf = terminal_failures) && tf.size > 0
37
- "Expected " +
38
- (tf.size == 1 ?
39
- tf[0].expected_string :
40
- "one of #{tf.map{|f| f.expected_string}.uniq*', '}"
41
- ) +
42
- " at line #{failure_line}, column #{failure_column} (byte #{failure_index+1})" +
43
- " after #{input[index...failure_index]}"
44
- end
45
-
46
-
47
- protected
48
-
49
- attr_reader :node_cache, :input_length
50
- attr_writer :index
51
-
52
- def prepare_to_parse(input)
53
- @input = input
54
- @input_length = input.length
55
- reset_index
56
- @node_cache = Hash.new {|hash, key| hash[key] = Hash.new}
57
- @regexps = {}
58
- @terminal_failures = []
59
- @max_terminal_failure_index = 0
60
- end
61
-
62
- def reset_index
63
- @index = 0
64
- end
65
-
66
- def parse_anything(node_class = SyntaxNode, inline_module = nil)
67
- if index < input.length
68
- result = instantiate_node(node_class,input, index...(index + 1))
69
- result.extend(inline_module) if inline_module
70
- @index += 1
71
- result
72
- else
73
- terminal_parse_failure("any character")
74
- end
75
- end
76
-
77
- def instantiate_node(node_type,*args)
78
- if node_type.respond_to? :new
79
- node_type.new(*args)
80
- else
81
- SyntaxNode.new(*args).extend(node_type)
82
- end
83
- end
84
-
85
- def has_terminal?(terminal, regex, index)
86
- if regex
87
- rx = @regexps[terminal] ||= Regexp.new(terminal)
88
- input.index(rx, index) == index
89
- else
90
- input[index, terminal.size] == terminal
91
- end
92
- end
93
-
94
- def terminal_parse_failure(expected_string)
95
- return nil if index < max_terminal_failure_index
96
- if index > max_terminal_failure_index
97
- @max_terminal_failure_index = index
98
- @terminal_failures = []
99
- end
100
- terminal_failures << TerminalParseFailure.new(index, expected_string)
101
- return nil
102
- end
103
- end
104
- end
105
- end