opulent 1.5.5 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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