opulent 1.5.5 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +13 -0
- data/{LICENSE → LICENSE.md} +0 -0
- data/bin/opulent +0 -0
- data/lib/opulent.rb +10 -10
- data/lib/opulent/compiler.rb +15 -9
- data/lib/opulent/compiler/buffer.rb +123 -62
- data/lib/opulent/compiler/comment.rb +3 -4
- data/lib/opulent/compiler/control.rb +20 -26
- data/lib/opulent/compiler/define.rb +88 -36
- data/lib/opulent/compiler/doctype.rb +20 -22
- data/lib/opulent/compiler/eval.rb +23 -2
- data/lib/opulent/compiler/filter.rb +4 -5
- data/lib/opulent/compiler/node.rb +18 -12
- data/lib/opulent/compiler/root.rb +4 -5
- data/lib/opulent/compiler/text.rb +7 -2
- data/lib/opulent/compiler/yield.rb +2 -3
- data/lib/opulent/engine.rb +21 -20
- data/lib/opulent/exec.rb +21 -63
- data/lib/opulent/logger.rb +230 -3
- data/lib/opulent/parser.rb +14 -76
- data/lib/opulent/parser/comment.rb +45 -34
- data/lib/opulent/parser/control.rb +132 -111
- data/lib/opulent/parser/define.rb +15 -12
- data/lib/opulent/parser/doctype.rb +15 -15
- data/lib/opulent/parser/eval.rb +16 -6
- data/lib/opulent/parser/expression.rb +87 -84
- data/lib/opulent/parser/filter.rb +31 -25
- data/lib/opulent/parser/include.rb +38 -42
- data/lib/opulent/parser/node.rb +136 -118
- data/lib/opulent/parser/root.rb +24 -18
- data/lib/opulent/parser/text.rb +150 -123
- data/lib/opulent/parser/yield.rb +23 -23
- data/lib/opulent/settings.rb +70 -51
- data/lib/opulent/tokens.rb +17 -15
- data/lib/opulent/utils.rb +5 -4
- data/lib/opulent/version.rb +1 -1
- metadata +4 -43
- data/.libold/opulent.rb +0 -96
- data/.libold/opulent/context.rb +0 -80
- data/.libold/opulent/engine.rb +0 -88
- data/.libold/opulent/filter.rb +0 -101
- data/.libold/opulent/logger.rb +0 -67
- data/.libold/opulent/nodes.rb +0 -13
- data/.libold/opulent/nodes/block.rb +0 -29
- data/.libold/opulent/nodes/comment.rb +0 -35
- data/.libold/opulent/nodes/control.rb +0 -230
- data/.libold/opulent/nodes/define.rb +0 -42
- data/.libold/opulent/nodes/eval.rb +0 -41
- data/.libold/opulent/nodes/expression.rb +0 -28
- data/.libold/opulent/nodes/filter.rb +0 -70
- data/.libold/opulent/nodes/helper.rb +0 -69
- data/.libold/opulent/nodes/node.rb +0 -101
- data/.libold/opulent/nodes/root.rb +0 -62
- data/.libold/opulent/nodes/text.rb +0 -54
- data/.libold/opulent/nodes/theme.rb +0 -36
- data/.libold/opulent/parser.rb +0 -252
- data/.libold/opulent/parser/block.rb +0 -70
- data/.libold/opulent/parser/comment.rb +0 -32
- data/.libold/opulent/parser/control.rb +0 -83
- data/.libold/opulent/parser/define.rb +0 -39
- data/.libold/opulent/parser/eval.rb +0 -33
- data/.libold/opulent/parser/expression.rb +0 -350
- data/.libold/opulent/parser/filter.rb +0 -41
- data/.libold/opulent/parser/node.rb +0 -232
- data/.libold/opulent/parser/root.rb +0 -96
- data/.libold/opulent/parser/text.rb +0 -114
- data/.libold/opulent/parser/theme.rb +0 -36
- data/.libold/opulent/preprocessor.rb +0 -102
- data/.libold/opulent/runtime.rb +0 -144
- data/.libold/opulent/template.rb +0 -43
- data/.libold/opulent/tokens.rb +0 -276
- data/.libold/opulent/version.rb +0 -5
- data/.travis.yml +0 -4
- data/benchmark/benchmark.rb +0 -57
- data/benchmark/cases/node/node.haml +0 -7
- data/benchmark/cases/node/node.op +0 -7
- data/benchmark/cases/node/node.slim +0 -7
@@ -6,13 +6,12 @@ module Opulent
|
|
6
6
|
#
|
7
7
|
# @param current [Array] Current node data with options
|
8
8
|
# @param indent [Fixnum] Indentation size for current node
|
9
|
-
# @param context [Context] Context holding environment variables
|
10
9
|
#
|
11
|
-
def root(current, indent
|
10
|
+
def root(current, indent)
|
12
11
|
if KEYWORDS.include? current[@type]
|
13
|
-
send :"#{current[@type]}_node", current, indent
|
14
|
-
else
|
15
|
-
send current[@type], current, indent
|
12
|
+
send :"#{current[@type]}_node", current, indent
|
13
|
+
else
|
14
|
+
send current[@type], current, indent
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -6,11 +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 plain(node, indent
|
10
|
+
def plain(node, indent)
|
12
11
|
value = node[@options][:value]
|
13
12
|
|
13
|
+
# Leading whitespace
|
14
|
+
buffer_freeze ' ' if node[@options][:leading_whitespace]
|
15
|
+
|
14
16
|
# Evaluate text node if it's marked as such and print nodes in the
|
15
17
|
# current context
|
16
18
|
if node[@value] == :text
|
@@ -18,6 +20,9 @@ module Opulent
|
|
18
20
|
else
|
19
21
|
node[@options][:escaped] ? buffer_escape(value) : buffer(value)
|
20
22
|
end
|
23
|
+
|
24
|
+
# Trailing whitespace
|
25
|
+
buffer_freeze ' ' if node[@options][:trailing_whitespace]
|
21
26
|
end
|
22
27
|
end
|
23
28
|
end
|
@@ -6,10 +6,9 @@ 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 yield_node(node, indent
|
12
|
-
buffer_eval
|
10
|
+
def yield_node(node, indent)
|
11
|
+
buffer_eval 'yield if block_given?'
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
data/lib/opulent/engine.rb
CHANGED
@@ -21,36 +21,23 @@ module Opulent
|
|
21
21
|
# @param overwrite [Boolean] Write changes directly to the parent binding
|
22
22
|
#
|
23
23
|
def initialize(input, settings = {})
|
24
|
-
# Set def from other Opulent instances
|
25
|
-
@def = settings.delete(:def) || {}
|
26
|
-
|
27
24
|
# Update default settings with user settings
|
28
|
-
|
25
|
+
@settings = Settings.new
|
26
|
+
@settings.update_settings settings unless settings.empty?
|
29
27
|
|
30
28
|
# Read input parameter based on opening mode. If we have a file mode, we
|
31
29
|
# get its path and read the code. We need to reset the mode in case the
|
32
30
|
# next render call is on code, not on a file.
|
33
31
|
@code = read input
|
34
32
|
|
33
|
+
# Pass filename into settings for Parser and Compiler
|
34
|
+
@settings[:file] = @file
|
35
|
+
|
35
36
|
# Get the nodes tree
|
36
|
-
@nodes, @def = Parser.new(@
|
37
|
+
@nodes, @def = Parser.new(@settings).parse @code
|
37
38
|
|
38
39
|
# Compile our syntax tree using input context
|
39
|
-
@template = Compiler.new.compile @nodes
|
40
|
-
end
|
41
|
-
|
42
|
-
# Read input as file or string input
|
43
|
-
#
|
44
|
-
# @param input [Object]
|
45
|
-
#
|
46
|
-
def read(input)
|
47
|
-
if input.is_a? Symbol
|
48
|
-
@file = File.expand_path get_eval_file input
|
49
|
-
File.read @file
|
50
|
-
else
|
51
|
-
@file = File.expand_path __FILE__
|
52
|
-
input
|
53
|
-
end
|
40
|
+
@template = Compiler.new(@settings).compile @nodes, @def
|
54
41
|
end
|
55
42
|
|
56
43
|
# Avoid code duplication when layouting is set. When we have a layout, look
|
@@ -96,6 +83,20 @@ module Opulent
|
|
96
83
|
|
97
84
|
private
|
98
85
|
|
86
|
+
# Read input as file or string input
|
87
|
+
#
|
88
|
+
# @param input [Object]
|
89
|
+
#
|
90
|
+
def read(input)
|
91
|
+
if input.is_a? Symbol
|
92
|
+
@file = File.expand_path get_eval_file input
|
93
|
+
File.read @file
|
94
|
+
else
|
95
|
+
@file = File.expand_path __FILE__
|
96
|
+
input
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
99
100
|
# Add .op extension to input file if it isn't already set.
|
100
101
|
#
|
101
102
|
# @param input [Symbol] Input file
|
data/lib/opulent/exec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'yaml'
|
3
3
|
require 'opulent/version'
|
4
|
+
require 'opulent/logger'
|
4
5
|
|
5
6
|
# @Opulent
|
6
7
|
module Opulent
|
@@ -13,10 +14,6 @@ module Opulent
|
|
13
14
|
def initialize(arguments)
|
14
15
|
i = 0
|
15
16
|
|
16
|
-
layout_error = 'Missing input or incorrect file extension for ' \
|
17
|
-
'layout [-l] argument. '
|
18
|
-
layout_error += "Found #{arguments[i + 1]} instead." if arguments[i + 1]
|
19
|
-
|
20
17
|
while arguments[i]
|
21
18
|
case arguments[i]
|
22
19
|
|
@@ -33,20 +30,19 @@ module Opulent
|
|
33
30
|
if arguments[i + 1] =~ EXTENSION
|
34
31
|
@layout = arguments[(i += 1)]
|
35
32
|
else
|
36
|
-
error layout_error
|
33
|
+
Logger.error :exec, arguments[i + 1], :layout_error
|
37
34
|
end
|
38
35
|
|
39
36
|
# opulent -v
|
40
37
|
when '-v', 'version'
|
41
|
-
|
38
|
+
Logger.log :version
|
42
39
|
return
|
43
40
|
|
44
41
|
# opulent -c
|
45
42
|
when '-c', 'context', '-lc', 'locals'
|
46
43
|
@locals_file = arguments[(i += 1)]
|
47
44
|
unless File.file? @locals_file
|
48
|
-
error
|
49
|
-
' or an incorrect path has been specified.'
|
45
|
+
Logger.error :exec, @locals_file, :locals_file
|
50
46
|
end
|
51
47
|
|
52
48
|
if File.extname(@locals_file) == '.json'
|
@@ -54,16 +50,15 @@ module Opulent
|
|
54
50
|
elsif File.extname(@locals_file) == '.yml'
|
55
51
|
@locals = YAML.load_file @locals_file
|
56
52
|
else
|
57
|
-
error
|
58
|
-
' locals file. Please use JSON or YAML as input.'
|
53
|
+
Logger.error :exec, @locals_file, :locals_file_format
|
59
54
|
end
|
60
55
|
|
61
56
|
# opulent -h
|
62
57
|
when '-h', 'help'
|
63
|
-
|
58
|
+
Logger.log :help
|
64
59
|
return
|
65
60
|
else
|
66
|
-
error
|
61
|
+
Logger.error :exec, arguments[i], :input_arguments
|
67
62
|
end
|
68
63
|
|
69
64
|
i += 1
|
@@ -72,72 +67,35 @@ module Opulent
|
|
72
67
|
if @input
|
73
68
|
@locals ||= {}
|
74
69
|
|
75
|
-
unless File.file? @input
|
76
|
-
|
77
|
-
|
78
|
-
|
70
|
+
Logger.error :exec, @input, :input unless File.file? @input
|
71
|
+
|
72
|
+
opulent_layout = Opulent.new @layout
|
73
|
+
opulent_page = Opulent.new @input
|
74
|
+
scope = Object.new
|
79
75
|
|
80
|
-
message = ''
|
81
|
-
opulent = Opulent.new
|
82
76
|
if @layout
|
83
77
|
output = proc do
|
84
|
-
|
85
|
-
|
86
|
-
|
78
|
+
opulent_layout.render scope, @locals do
|
79
|
+
opulent_page.render scope, @locals do
|
80
|
+
end
|
81
|
+
end
|
87
82
|
end[]
|
88
83
|
else
|
89
84
|
output = proc do
|
90
|
-
|
85
|
+
opulent_page.render scope, @locals do
|
86
|
+
end
|
91
87
|
end[]
|
92
88
|
end
|
93
89
|
|
94
90
|
if @output
|
95
91
|
File.open(@output, 'w') { |file| file.write output }
|
96
|
-
|
97
|
-
"to #{@output.inspect}."
|
92
|
+
Logger.log :successful_render, @input, @output
|
98
93
|
else
|
99
|
-
|
100
|
-
message += 'No output file specified. Writing result to ' \
|
101
|
-
"terminal.\n\n#{output}"
|
94
|
+
Logger.log :successful_render_print, @input, output
|
102
95
|
end
|
103
|
-
|
104
|
-
write message
|
105
96
|
else
|
106
|
-
error
|
97
|
+
Logger.error :exec, :no_input
|
107
98
|
end
|
108
99
|
end
|
109
|
-
|
110
|
-
def help(_extra = '')
|
111
|
-
<<-HELP #{_extra} You can use the following commands with the Opulent
|
112
|
-
Command Line Interface: \n\n
|
113
|
-
opulent input.op output.op Render an input file and write the result to
|
114
|
-
the output file.\n
|
115
|
-
opulent layout [-l] layout.op Render an input file using given input
|
116
|
-
layout file.\n
|
117
|
-
opulent help [-h] Show available command line options.\n
|
118
|
-
opulent version [-v] Show installed version.\n"
|
119
|
-
HELP
|
120
|
-
end
|
121
|
-
|
122
|
-
# Give an explicit response for the given input arguments
|
123
|
-
#
|
124
|
-
# @param message [String] Response message to display to the user
|
125
|
-
#
|
126
|
-
def write(message)
|
127
|
-
# Reconstruct lines to display where errors occur
|
128
|
-
puts "\nOpulent " + Logger.green('[Engine]') +
|
129
|
-
"\n---\n#{message}\n\n\n"
|
130
|
-
end
|
131
|
-
|
132
|
-
# Give an explicit error report where an unexpected sequence of tokens
|
133
|
-
# appears and give indications on how to solve it
|
134
|
-
#
|
135
|
-
# @param message [String] Error message to display to the user
|
136
|
-
#
|
137
|
-
def error(message)
|
138
|
-
# Reconstruct lines to display where errors occur
|
139
|
-
fail "\nOpulent " + Logger.red('[Engine]') +
|
140
|
-
"\n---\n#{message}\n\n#{help}\n\n\n"
|
141
|
-
end
|
142
100
|
end
|
143
101
|
end
|
data/lib/opulent/logger.rb
CHANGED
@@ -55,17 +55,244 @@ module Opulent
|
|
55
55
|
# Require windows libraries for ANSI Console output
|
56
56
|
#
|
57
57
|
def require_windows_libs
|
58
|
+
return unless RUBY_PLATFORM =~ /win32/
|
59
|
+
|
58
60
|
begin
|
59
|
-
require 'Win32/Console/ANSI'
|
61
|
+
require 'Win32/Console/ANSI'
|
60
62
|
rescue LoadError
|
61
63
|
raise 'You must run "gem install win32console" to use Opulent\'s
|
62
64
|
error reporting on Windows.'
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
|
-
|
68
|
+
|
69
|
+
# Output an error message based on class context and input data
|
70
|
+
#
|
71
|
+
# @param message [Symbol] Message to be displayed
|
72
|
+
# @param data [Array] Data to be displayed with the message
|
73
|
+
#
|
74
|
+
def log(message, *data)
|
75
|
+
case error
|
76
|
+
when :version
|
77
|
+
title = 'Version'
|
78
|
+
message = <<-LOG
|
79
|
+
Version #{Opulent::VERSION} is currently installed.
|
80
|
+
LOG
|
81
|
+
when :successful_render
|
82
|
+
title = 'Render Complete'
|
83
|
+
message = <<-LOG
|
84
|
+
Successfully rendered #{data[0].inspect} to #{data[1].inspect}.
|
85
|
+
LOG
|
86
|
+
when :successful_render_print
|
87
|
+
title = 'Render Complete'
|
88
|
+
message = <<-LOG
|
89
|
+
Successfully rendered #{data[0].inspect}.
|
90
|
+
|
91
|
+
No output file specified. Writing result to terminal.
|
92
|
+
|
93
|
+
#{data[1]}"
|
94
|
+
|
95
|
+
LOG
|
96
|
+
when :help
|
97
|
+
title = 'Help'
|
98
|
+
message = <<-LOG
|
99
|
+
You can use the following commands with the Opulent Command Line Interface:
|
100
|
+
|
101
|
+
opulent input.op output.op Render an input file and write the result to
|
102
|
+
the output file.
|
103
|
+
opulent layout [-l] layout.op Render an input file using given input
|
104
|
+
layout file.
|
105
|
+
opulent help [-h] Show available command line options.
|
106
|
+
opulent version [-v] Show installed version.
|
107
|
+
LOG
|
108
|
+
end
|
109
|
+
|
110
|
+
puts <<-OPULENT_LOG
|
111
|
+
\n
|
112
|
+
[Opulent Engine] #{title}
|
113
|
+
|
114
|
+
#{message}
|
115
|
+
|
116
|
+
OPULENT_LOG
|
117
|
+
end
|
118
|
+
|
119
|
+
# Display an error message based on context
|
120
|
+
#
|
121
|
+
def error(type, *data)
|
122
|
+
case type
|
123
|
+
when :parse
|
124
|
+
parse_error data[0], data[1], data[2], data[3], data[4..-1]
|
125
|
+
when :compile
|
126
|
+
compile_error data[0], data[1], data[2..-1]
|
127
|
+
when :exec
|
128
|
+
exec_error data[0], data[1..-1]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
# Output an error message based on class context and input data
|
133
|
+
#
|
134
|
+
# @param klass [Symbol] Class in which the error happens
|
135
|
+
# @param error [Symbol] Error identification symbol
|
136
|
+
# @param data [Array] Data to be displayed with the error
|
137
|
+
#
|
138
|
+
def exec_error(error, *data)
|
139
|
+
case error
|
140
|
+
when :input
|
141
|
+
message = <<-ERROR
|
142
|
+
Given input file #{data[0].inspect} does not exist or an incorrect path
|
143
|
+
has been specified.
|
144
|
+
ERROR
|
145
|
+
when :layout_error
|
146
|
+
message = <<-ERROR
|
147
|
+
Missing input or incorrect file extension for layout [-l] argument.
|
148
|
+
Found #{data[0]} instead.
|
149
|
+
ERROR
|
150
|
+
when :locals_file
|
151
|
+
message = <<-ERROR
|
152
|
+
Given context file #{data[0].inspect} does not exist or
|
153
|
+
an incorrect path has been specified.
|
154
|
+
ERROR
|
155
|
+
when :locals_file_format
|
156
|
+
message = <<-ERROR
|
157
|
+
Unknown file extension #{data[0].inspect} given as locals file. Please use
|
158
|
+
JSON or YAML as input.
|
159
|
+
ERROR
|
160
|
+
when :input_arguments
|
161
|
+
message = <<-ERROR
|
162
|
+
Unknown input argument [#{data[0]}] has been encountered.
|
163
|
+
ERROR
|
164
|
+
when :no_input
|
165
|
+
message = <<-ERROR
|
166
|
+
You haven't specified an input file.
|
167
|
+
ERROR
|
168
|
+
end
|
169
|
+
|
170
|
+
fail <<-OPULENT_ERROR
|
171
|
+
\n
|
172
|
+
[Opulent Engine] Runtime Error
|
173
|
+
|
174
|
+
#{message}
|
175
|
+
|
176
|
+
OPULENT_ERROR
|
177
|
+
end
|
178
|
+
|
179
|
+
# Output an error message based on class context and input data
|
180
|
+
#
|
181
|
+
# @param klass [Symbol] Class in which the error happens
|
182
|
+
# @param error [Symbol] Error identification symbol
|
183
|
+
# @param data [Array] Data to be displayed with the error
|
184
|
+
#
|
185
|
+
def compile_error(template, error, *data)
|
186
|
+
case error
|
187
|
+
when :explicit_end
|
188
|
+
message = <<-ERROR
|
189
|
+
Explicit "end" evaluation nodes are not allowed. End expressions are
|
190
|
+
inserted automatically.
|
191
|
+
ERROR
|
192
|
+
end
|
193
|
+
|
194
|
+
fail <<-OPULENT_ERROR
|
195
|
+
\n
|
196
|
+
[Opulent Compiler] Runtime Error
|
197
|
+
|
198
|
+
#{message}
|
199
|
+
|
200
|
+
OPULENT_ERROR
|
201
|
+
end
|
202
|
+
|
203
|
+
# Output an error message based on class context and input data
|
204
|
+
#
|
205
|
+
# @param klass [Symbol] Class in which the error happens
|
206
|
+
# @param error [Symbol] Error identification symbol
|
207
|
+
# @param data [Array] Data to be displayed with the error
|
67
208
|
#
|
68
|
-
def
|
209
|
+
def parse_error(code, line, character, error, *data)
|
210
|
+
line += 1
|
211
|
+
|
212
|
+
case error
|
213
|
+
when :unknown_node_type
|
214
|
+
message = <<-ERROR
|
215
|
+
An unknown node type has been encountered.
|
216
|
+
ERROR
|
217
|
+
when :expected
|
218
|
+
if [:'(', :'{', :'[', :'<'].include? data[0]
|
219
|
+
data[0] = "#{Tokens.bracket data[0]}"
|
220
|
+
end
|
221
|
+
message = <<-ERROR
|
222
|
+
Expected to find a :#{data[0]} token on line #{line} of input.
|
223
|
+
ERROR
|
224
|
+
when :root
|
225
|
+
message = <<-ERROR
|
226
|
+
Unknown node type encountered on line #{line} of input.
|
227
|
+
ERROR
|
228
|
+
when :assignments_colon
|
229
|
+
message = <<-ERROR
|
230
|
+
Unexpected end of element attributes reached on line #{line}
|
231
|
+
of input.
|
232
|
+
ERROR
|
233
|
+
when :assignments_comma
|
234
|
+
message = <<-ERROR
|
235
|
+
Unexpected end of element attributes reached on line #{line}
|
236
|
+
of input. Expected to find an attribute value.
|
237
|
+
ERROR
|
238
|
+
when :expression
|
239
|
+
message = <<-ERROR
|
240
|
+
Unexpected end of expression reached on line #{line} of input.
|
241
|
+
Expected to find another expression term.
|
242
|
+
ERROR
|
243
|
+
when :control_child
|
244
|
+
message = <<-ERROR
|
245
|
+
Unexpected control structure child found on line #{line} of input.
|
246
|
+
Expected to find a parent #{data[0]} structure.
|
247
|
+
ERROR
|
248
|
+
when :whitespace_expression
|
249
|
+
message = <<-ERROR
|
250
|
+
Unexpected end of expression reached on line #{line} of input.
|
251
|
+
Please use paranthesis for method parameters
|
252
|
+
ERROR
|
253
|
+
when :definition
|
254
|
+
message = <<-ERROR
|
255
|
+
Unexpected start of definition on line #{line} of input.
|
256
|
+
Found a definition inside another definition or element.
|
257
|
+
ERROR
|
258
|
+
when :self_enclosing
|
259
|
+
message = <<-ERROR
|
260
|
+
Unexpected content found after self enclosing node on line
|
261
|
+
#{line} of input.
|
262
|
+
ERROR
|
263
|
+
when :self_enclosing_children
|
264
|
+
message = <<-ERROR
|
265
|
+
Unexpected child elements found for self enclosing node on line
|
266
|
+
#{data[0] + 1} of input.
|
267
|
+
ERROR
|
268
|
+
when :include
|
269
|
+
message = <<-ERROR
|
270
|
+
The included file #{data[0]} does not exist or an incorrect path
|
271
|
+
has been specified.
|
272
|
+
ERROR
|
273
|
+
when :include_dir
|
274
|
+
message = <<-ERROR
|
275
|
+
The included file path #{data[0]} is a directory.
|
276
|
+
ERROR
|
277
|
+
when :include_end
|
278
|
+
message = <<-ERROR
|
279
|
+
Missing argument for include on line #{line} of input.
|
280
|
+
ERROR
|
281
|
+
else
|
282
|
+
message = <<-ERROR
|
283
|
+
Unexpected syntax error on line #{line} of input.
|
284
|
+
ERROR
|
285
|
+
end
|
286
|
+
|
287
|
+
fail <<-OPULENT_ERROR
|
288
|
+
\n
|
289
|
+
[Opulent Parser] Runtime Error
|
290
|
+
|
291
|
+
#{message}
|
292
|
+
#{code[line - 1].chomp}
|
293
|
+
#{' ' * character}^
|
294
|
+
|
295
|
+
OPULENT_ERROR
|
69
296
|
end
|
70
297
|
end
|
71
298
|
end
|