opulent 1.5.5 → 1.6.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +13 -0
  3. data/{LICENSE → LICENSE.md} +0 -0
  4. data/bin/opulent +0 -0
  5. data/lib/opulent.rb +10 -10
  6. data/lib/opulent/compiler.rb +15 -9
  7. data/lib/opulent/compiler/buffer.rb +123 -62
  8. data/lib/opulent/compiler/comment.rb +3 -4
  9. data/lib/opulent/compiler/control.rb +20 -26
  10. data/lib/opulent/compiler/define.rb +88 -36
  11. data/lib/opulent/compiler/doctype.rb +20 -22
  12. data/lib/opulent/compiler/eval.rb +23 -2
  13. data/lib/opulent/compiler/filter.rb +4 -5
  14. data/lib/opulent/compiler/node.rb +18 -12
  15. data/lib/opulent/compiler/root.rb +4 -5
  16. data/lib/opulent/compiler/text.rb +7 -2
  17. data/lib/opulent/compiler/yield.rb +2 -3
  18. data/lib/opulent/engine.rb +21 -20
  19. data/lib/opulent/exec.rb +21 -63
  20. data/lib/opulent/logger.rb +230 -3
  21. data/lib/opulent/parser.rb +14 -76
  22. data/lib/opulent/parser/comment.rb +45 -34
  23. data/lib/opulent/parser/control.rb +132 -111
  24. data/lib/opulent/parser/define.rb +15 -12
  25. data/lib/opulent/parser/doctype.rb +15 -15
  26. data/lib/opulent/parser/eval.rb +16 -6
  27. data/lib/opulent/parser/expression.rb +87 -84
  28. data/lib/opulent/parser/filter.rb +31 -25
  29. data/lib/opulent/parser/include.rb +38 -42
  30. data/lib/opulent/parser/node.rb +136 -118
  31. data/lib/opulent/parser/root.rb +24 -18
  32. data/lib/opulent/parser/text.rb +150 -123
  33. data/lib/opulent/parser/yield.rb +23 -23
  34. data/lib/opulent/settings.rb +70 -51
  35. data/lib/opulent/tokens.rb +17 -15
  36. data/lib/opulent/utils.rb +5 -4
  37. data/lib/opulent/version.rb +1 -1
  38. metadata +4 -43
  39. data/.libold/opulent.rb +0 -96
  40. data/.libold/opulent/context.rb +0 -80
  41. data/.libold/opulent/engine.rb +0 -88
  42. data/.libold/opulent/filter.rb +0 -101
  43. data/.libold/opulent/logger.rb +0 -67
  44. data/.libold/opulent/nodes.rb +0 -13
  45. data/.libold/opulent/nodes/block.rb +0 -29
  46. data/.libold/opulent/nodes/comment.rb +0 -35
  47. data/.libold/opulent/nodes/control.rb +0 -230
  48. data/.libold/opulent/nodes/define.rb +0 -42
  49. data/.libold/opulent/nodes/eval.rb +0 -41
  50. data/.libold/opulent/nodes/expression.rb +0 -28
  51. data/.libold/opulent/nodes/filter.rb +0 -70
  52. data/.libold/opulent/nodes/helper.rb +0 -69
  53. data/.libold/opulent/nodes/node.rb +0 -101
  54. data/.libold/opulent/nodes/root.rb +0 -62
  55. data/.libold/opulent/nodes/text.rb +0 -54
  56. data/.libold/opulent/nodes/theme.rb +0 -36
  57. data/.libold/opulent/parser.rb +0 -252
  58. data/.libold/opulent/parser/block.rb +0 -70
  59. data/.libold/opulent/parser/comment.rb +0 -32
  60. data/.libold/opulent/parser/control.rb +0 -83
  61. data/.libold/opulent/parser/define.rb +0 -39
  62. data/.libold/opulent/parser/eval.rb +0 -33
  63. data/.libold/opulent/parser/expression.rb +0 -350
  64. data/.libold/opulent/parser/filter.rb +0 -41
  65. data/.libold/opulent/parser/node.rb +0 -232
  66. data/.libold/opulent/parser/root.rb +0 -96
  67. data/.libold/opulent/parser/text.rb +0 -114
  68. data/.libold/opulent/parser/theme.rb +0 -36
  69. data/.libold/opulent/preprocessor.rb +0 -102
  70. data/.libold/opulent/runtime.rb +0 -144
  71. data/.libold/opulent/template.rb +0 -43
  72. data/.libold/opulent/tokens.rb +0 -276
  73. data/.libold/opulent/version.rb +0 -5
  74. data/.travis.yml +0 -4
  75. data/benchmark/benchmark.rb +0 -57
  76. data/benchmark/cases/node/node.haml +0 -7
  77. data/benchmark/cases/node/node.op +0 -7
  78. data/benchmark/cases/node/node.slim +0 -7
@@ -6,9 +6,8 @@ module Opulent
6
6
  #
7
7
  # @param node [Array] Node code generation data
8
8
  # @param indent [Fixnum] Size of the indentation to be added
9
- # @param context [Context] Processing environment data
10
9
  #
11
- def if_node(node, indent, context)
10
+ def if_node(node, indent)
12
11
  # Check if we have any condition met, or an else branch
13
12
  node[@value].each_with_index do |value, index|
14
13
  # If we have a branch that meets the condition, generate code for the
@@ -21,7 +20,7 @@ module Opulent
21
20
 
22
21
  # Evaluate child nodes
23
22
  node[@children][index].each do |child|
24
- root child, indent, context
23
+ root child, indent
25
24
  end
26
25
  end
27
26
 
@@ -33,9 +32,8 @@ module Opulent
33
32
  #
34
33
  # @param node [Array] Node code generation data
35
34
  # @param indent [Fixnum] Size of the indentation to be added
36
- # @param context [Context] Processing environment data
37
35
  #
38
- def unless_node(node, indent, context)
36
+ def unless_node(node, indent)
39
37
  # Check if we have any condition met, or an else branch
40
38
  node[@value].each_with_index do |value, index|
41
39
  # If we have a branch that meets the condition, generate code for the
@@ -47,7 +45,7 @@ module Opulent
47
45
 
48
46
  # Evaluate child nodes
49
47
  node[@children][index].each do |child|
50
- root child, indent, context
48
+ root child, indent
51
49
  end
52
50
  end
53
51
 
@@ -59,9 +57,8 @@ module Opulent
59
57
  #
60
58
  # @param node [Array] Node code generation data
61
59
  # @param indent [Fixnum] Size of the indentation to be added
62
- # @param context [Context] Processing environment data
63
60
  #
64
- def case_node(node, indent, context)
61
+ def case_node(node, indent)
65
62
  # Evaluate the switching condition
66
63
  buffer_eval "case #{node[@options][:condition]}"
67
64
 
@@ -70,67 +67,64 @@ module Opulent
70
67
  # If we have a branch that meets the condition, generate code for the
71
68
  # children related to that specific branch
72
69
  case value
73
- when node[@value].last then buffer_eval "else"
70
+ when node[@value].last then buffer_eval 'else'
74
71
  else buffer_eval "when #{value}"
75
72
  end
76
73
 
77
74
  # Evaluate child nodes
78
75
  node[@children][index].each do |child|
79
- root child, indent, context
76
+ root child, indent
80
77
  end
81
78
  end
82
79
 
83
80
  # End
84
- buffer_eval "end"
81
+ buffer_eval 'end'
85
82
  end
86
83
 
87
84
  # Generate the code for a while control structure
88
85
  #
89
86
  # @param node [Array] Node code generation data
90
87
  # @param indent [Fixnum] Size of the indentation to be added
91
- # @param context [Context] Processing environment data
92
88
  #
93
- def while_node(node, indent, context)
89
+ def while_node(node, indent)
94
90
  # While we have a branch that meets the condition, generate code for the
95
91
  # children related to that specific branch
96
92
  buffer_eval "while #{node[@value]}"
97
93
 
98
94
  # Evaluate child nodes
99
95
  node[@children].each do |child|
100
- root child, indent, context
96
+ root child, indent
101
97
  end
102
98
 
103
99
  #End
104
- buffer_eval "end"
100
+ buffer_eval 'end'
105
101
  end
106
102
 
107
103
  # Generate the code for a while control structure
108
104
  #
109
105
  # @param node [Array] Node code generation data
110
106
  # @param indent [Fixnum] Size of the indentation to be added
111
- # @param context [Context] Processing environment data
112
107
  #
113
- def until_node(node, indent, context)
108
+ def until_node(node, indent)
114
109
  # Until we have a branch that doesn't meet the condition, generate code for the
115
110
  # children related to that specific branch
116
111
  buffer_eval "until #{node[@value]}"
117
112
 
118
113
  # Evaluate child nodes
119
114
  node[@children].each do |child|
120
- root child, indent, context
115
+ root child, indent
121
116
  end
122
117
 
123
118
  # End
124
- buffer_eval "end"
119
+ buffer_eval 'end'
125
120
  end
126
121
 
127
122
  # Generate the code for a while control structure
128
123
  #
129
124
  # @param node [Array] Node code generation data
130
125
  # @param indent [Fixnum] Size of the indentation to be added
131
- # @param context [Context] Processing environment data
132
126
  #
133
- def each_node(node, indent, context)
127
+ def each_node(node, indent)
134
128
  # Process named variables for each structure
135
129
  variables = node[@value][1].clone
136
130
 
@@ -143,12 +137,12 @@ module Opulent
143
137
 
144
138
  # Value argument name provided only
145
139
  if variables.length == 1
146
- variables.unshift Settings::DefaultEachKey
140
+ variables.unshift Settings::DEFAULT_EACH_KEY
147
141
 
148
142
  # Missing key and value arguments
149
143
  elsif variables.empty?
150
- variables[0] = Settings::DefaultEachKey
151
- variables[1] = Settings::DefaultEachValue
144
+ variables[0] = Settings::DEFAULT_EACH_KEY
145
+ variables[1] = Settings::DEFAULT_EACH_VALUE
152
146
  end
153
147
 
154
148
  # Choose whether to apply each with index (Arrays) or each (Hashes) methods
@@ -162,11 +156,11 @@ module Opulent
162
156
 
163
157
  # Evaluate child nodes
164
158
  node[@children].each do |child|
165
- root child, indent, context
159
+ root child, indent
166
160
  end
167
161
 
168
162
  # End
169
- buffer_eval "end"
163
+ buffer_eval 'end'
170
164
  end
171
165
  end
172
166
  end
@@ -2,71 +2,123 @@
2
2
  module Opulent
3
3
  # @Compiler
4
4
  class Compiler
5
+ # Write out definition node using ruby def
6
+ #
7
+ # @param node [Node] Current node data with options
8
+ #
9
+ def define(node)
10
+ # Write out def method_name
11
+ definition = "def _opulent_definition_#{node[@value].to_s.tr '-', '_'}"
12
+
13
+ # Node attributes
14
+ parameters = []
15
+ node[@options][:parameters].each do |key, value|
16
+ parameters << "#{key} = #{value[@value]}"
17
+ end
18
+ parameters << 'attributes = {}'
19
+ parameters << '&block'
20
+ definition += '(' + parameters.join(', ') + ')'
21
+
22
+ buffer_eval 'instance_eval do'
23
+ buffer_eval definition
24
+
25
+ node[@children].each do |child|
26
+ root child, 0
27
+ end
28
+
29
+ buffer_eval 'end'
30
+ buffer_eval 'end'
31
+ end
32
+
5
33
  # Generate code for all nodes by calling the method with their type name
6
34
  #
7
35
  # @param current [Array] Current node data with options
8
36
  # @param indent [Fixnum] Indentation size for current node
9
- # @param context [Context] Context holding environment variables
10
37
  #
11
- def def_node(node, indent, context)
38
+ def def_node(node, indent)
12
39
  # Set a namespace for the current node definition and make it a valid ruby
13
40
  # method name
14
- key = "_opulent_definition_#{node[@value]}_#{@current_definition += 1}".gsub '-', '_'
41
+ key = "_opulent_definition_#{node[@value].to_s.tr '-', '_'}"
15
42
 
16
43
  # Set call variable
17
44
  call_node = node[@options][:call]
18
45
 
19
- # Create the definition
20
- buffer_eval "instance_eval do"
21
- buffer_eval "def #{key}(attributes = {}, &block)"
22
-
23
- # Set each parameter as a local variable
24
- node[@options][:parameters].each do |parameter, value|
25
- set_argument_code = "#{parameter} = attributes.delete(:#{parameter})"
26
- set_argument_code += " || #{value[@value]}" if value[@value]
27
- buffer_eval set_argument_code
28
- end
29
-
30
- # Evaluate definition child elements
31
- node[@children].each do |child|
32
- root child, indent + Settings[:indent], context
33
- end
34
-
35
- # End
36
- buffer_eval "end"
37
- buffer_eval "end"
38
-
39
46
  # If we have attributes set for our defined node, we will need to create
40
47
  # an extension parameter which will be o
41
48
  if call_node[@options][:attributes].empty?
42
49
  # Call method without any extension
43
- buffer_eval "#{key}() do"
50
+ method_call = "#{key}"
51
+
52
+ # Call arguments set to true, in correct order
53
+ arguments = []
54
+ @definitions[call_node[@value]][@options][:parameters].keys.each do
55
+ arguments << 'true'
56
+ end
57
+ arguments << '{}'
58
+
59
+ method_call += '(' + arguments.join(', ') + ')'
60
+ method_call += ' do' unless call_node[@children].empty?
61
+
62
+ buffer_eval method_call
44
63
  else
45
- call_attributes_code = buffer_attributes_to_hash call_node[@options][:attributes]
64
+ arguments = []
46
65
 
47
- # Set call node parameters
48
- call_attributes = buffer_set_variable :call_attributes, call_attributes_code
66
+ # Extract node definition arguments in the correct order. If the given
67
+ # key does not exist, set the value to default or true
68
+ @definitions[
69
+ call_node[@value]
70
+ ][@options][:parameters].keys.each do |k|
71
+ if call_node[@options][:attributes].keys.include? k
72
+ arguments << call_node[@options][:attributes].delete(k)[@value]
73
+ else
74
+ arguments << @definitions[
75
+ call_node[@value]
76
+ ][@options][:parameters][k][@value]
77
+ end
78
+ end
79
+
80
+ call_attributes = buffer_attributes_to_hash(
81
+ call_node[@options][:attributes]
82
+ )
49
83
 
50
- # If the call node is extended as well, merge the call attributes hash with
51
- # the extension hash
84
+ # If the call node is extended as well, merge the call attributes hash
85
+ # with the extension hash
52
86
  if call_node[@options][:extension]
53
- extension_attributes = buffer_set_variable :extension, call_node[@options][:extension][@value]
54
- buffer_eval "#{call_attributes}.merge!(#{extension_attributes}) do |#{OPULENT_KEY}, #{OPULENT_VALUE}1, #{OPULENT_VALUE}2|"
55
- buffer_eval "#{OPULENT_KEY} == :class ? (#{OPULENT_VALUE}1 += #{OPULENT_VALUE}2) : (#{OPULENT_VALUE}2)"
56
- buffer_eval "end"
87
+ # .merge!(var_name)
88
+ call_attributes += '.merge!(' \
89
+ "#{call_node[@options][:extension][@value]}" \
90
+ ')'
91
+
92
+ # { |key, value1, value2|
93
+ call_attributes += " { |#{OPULENT_KEY}, " \
94
+ "#{OPULENT_VALUE}1, #{OPULENT_VALUE}2|"
95
+
96
+ # class ? value1 + value2 : value2
97
+ call_attributes += "#{OPULENT_KEY} == :class ? (" \
98
+ "#{OPULENT_VALUE}1 += " \
99
+ "#{OPULENT_VALUE}2) : (#{OPULENT_VALUE}2" \
100
+ ')'
101
+
102
+ # }
103
+ call_attributes += '}'
57
104
  end
58
105
 
59
- buffer_eval "#{key}(#{call_attributes}) do"
106
+ arguments << call_attributes
107
+
108
+ call = "#{key}(#{arguments.join ', '})"
109
+ call += ' do' unless call_node[@children].empty?
110
+
111
+ buffer_eval call
60
112
  end
61
113
 
62
114
  # Set call node children as block evaluation. Very useful for
63
115
  # performance and evaluating them in the parent context
64
116
  call_node[@children].each do |child|
65
- root child, indent + Settings[:indent], context
117
+ root child, indent + @settings[:indent]
66
118
  end
67
119
 
68
120
  # End block
69
- buffer_eval "end"
121
+ buffer_eval 'end' unless call_node[@children].empty?
70
122
  end
71
123
  end
72
124
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # @Opulent
3
2
  module Opulent
4
3
  # @Compiler
@@ -7,29 +6,28 @@ module Opulent
7
6
  #
8
7
  # @param node [Array] Node code generation data
9
8
  # @param indent [Fixnum] Size of the indentation to be added
10
- # @param context [Context] Processing environment data
11
9
  #
12
- def doctype_node(node, indent, context)
10
+ def doctype_node(node, indent)
13
11
  value = case node[@value]
14
- when :"", :"html", :"5"
15
- "!DOCTYPE html"
16
- when :"1.1"
17
- '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"'
18
- when :strict
19
- '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"'
20
- when :frameset
21
- '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"'
22
- when :mobile
23
- '!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"'
24
- when :basic
25
- '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'
26
- when :transitional
27
- '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'
28
- when :xml
29
- '?xml version="1.0" encoding="utf-8" ?'
30
- when :'xml ISO-8859-1'
31
- '?xml version="1.0" encoding="iso-8859-1" ?'
32
- end
12
+ when :"", :html, :"5"
13
+ '!DOCTYPE html'
14
+ when :"1.1"
15
+ '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"'
16
+ when :strict
17
+ '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"'
18
+ when :frameset
19
+ '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"'
20
+ when :mobile
21
+ '!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"'
22
+ when :basic
23
+ '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'
24
+ when :transitional
25
+ '!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'
26
+ when :xml
27
+ '?xml version="1.0" encoding="utf-8" ?'
28
+ when :'xml ISO-8859-1'
29
+ '?xml version="1.0" encoding="iso-8859-1" ?'
30
+ end
33
31
 
34
32
  @node_stack << :doctype
35
33
  buffer_freeze "<#{value}>"
@@ -6,10 +6,31 @@ module Opulent
6
6
  #
7
7
  # @param node [Array] Node code generation data
8
8
  # @param indent [Fixnum] Size of the indentation to be added
9
- # @param context [Context] Processing environment data
10
9
  #
11
- def evaluate(node, indent, context)
10
+ def evaluate(node, indent)
11
+ # Check if this is a substructure of a control block and remove the last
12
+ # end evaluation if it is
13
+ if node[@value] =~ Settings::END_REMOVAL
14
+ @template.pop if @template[-1] == [:eval, 'end']
15
+ end
16
+
17
+ # Check for explicit end node
18
+ if node[@value] =~ Settings::END_EXPLICIT
19
+ Logger.error :compile, @template, :explicit_end, node
20
+ end
21
+
22
+ # Evaluate the current expression
12
23
  buffer_eval node[@value]
24
+
25
+ # If the node has children, evaluate each one of them
26
+ if node[@children]
27
+ node[@children].each do |child|
28
+ root child, indent + @settings[:indent]
29
+ end
30
+ end
31
+
32
+ # Check if the node is actually a block expression
33
+ buffer_eval 'end' if node[@value] =~ Settings::END_INSERTION
13
34
  end
14
35
  end
15
36
  end
@@ -6,14 +6,13 @@ module Opulent
6
6
  #
7
7
  # @param node [Array] Node code generation data
8
8
  # @param indent [Fixnum] Size of the indentation to be added
9
- # @param context [Context] Processing environment data
10
9
  #
11
- def filter(node, indent, context)
10
+ def filter(node, indent)
12
11
  # Evaluate and generate node attributes, then process each one to
13
12
  # by generating the required attribute code
14
13
  attributes = {}
15
14
  node[@options].each do |key, attribute|
16
- attributes[key] = map_attribute key, attribute, context
15
+ attributes[key] = map_attribute key, attribute
17
16
  end
18
17
 
19
18
  # Get registered filter name
@@ -44,10 +43,10 @@ module Opulent
44
43
  wrapper_node = [:node, wrapper_tag, {attributes: atts}, [text_node], indent]
45
44
 
46
45
  # Begin code generation from the wrapper node
47
- root wrapper_node, indent, context
46
+ root wrapper_node, indent
48
47
  else
49
48
  # Generate code for output text node
50
- root text_node, indent, context
49
+ root text_node, indent
51
50
  end
52
51
  end
53
52
  end
@@ -7,43 +7,49 @@ module Opulent
7
7
  #
8
8
  # @param node [Array] Node code generation data
9
9
  # @param indent [Fixnum] Size of the indentation to be added
10
- # @param context [Context] Processing environment data
11
10
  #
12
- def node(node, indent, context)
13
- indentation = " " * indent
11
+ def node(node, indent)
12
+ indentation = ' ' * indent
14
13
 
15
14
  # Add the tag opening, with leading whitespace to the code buffer
16
- buffer_freeze " " if node[@options][:leading_whitespace]
15
+ buffer_freeze ' ' if node[@options][:leading_whitespace]
17
16
  buffer_freeze "<#{node[@value]}"
18
17
 
19
18
  # Evaluate node extension in the current context
20
- extension = if node[@options][:extension]
21
- buffer_set_variable :extension, node[@options][:extension][@value]
19
+ if node[@options][:extension]
20
+ extension_name = buffer_set_variable :extension,
21
+ node[@options][:extension][@value]
22
+
23
+ extension = {
24
+ name: extension_name,
25
+ escaped: node[@options][:extension][@options][:escaped]
26
+ }
22
27
  end
23
28
 
24
29
  # Evaluate and generate node attributes, then process each one to
25
30
  # by generating the required attribute code
26
- attributes = {}
27
- buffer_attributes node[@options][:attributes], extension
31
+ # attributes = {}
32
+ buffer_attributes node[@options][:attributes],
33
+ extension
28
34
 
29
35
 
30
36
  # Check if the current node is self enclosing. Self enclosing nodes
31
37
  # do not have any child elements
32
38
  if node[@options][:self_enclosing]
33
39
  # If the tag is self enclosing, it cannot have any child elements.
34
- buffer_freeze ">"
40
+ buffer_freeze '>'
35
41
  else
36
42
  # Set tag ending code
37
- buffer_freeze ">"
43
+ buffer_freeze '>'
38
44
 
39
45
  # Process each child element recursively, increasing indentation
40
46
  node[@children].each do |child|
41
- root child, indent + Settings[:indent], context
47
+ root child, indent + @settings[:indent]
42
48
  end
43
49
 
44
50
  # Set tag closing code
45
51
  buffer_freeze "</#{node[@value]}>"
46
- buffer_freeze " " if node[@options][:trailing_whitespace]
52
+ buffer_freeze ' ' if node[@options][:trailing_whitespace]
47
53
  end
48
54
  end
49
55
  end