walrus 0.2 → 0.3
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.
- data/bin/walrus +19 -12
- data/lib/walrus.rb +27 -70
- data/lib/walrus/additions/string.rb +21 -35
- data/lib/walrus/compile_error.rb +19 -16
- data/lib/walrus/compiler.rb +66 -55
- data/lib/walrus/contrib/spec/walruscloth_spec.rb +21 -17
- data/lib/walrus/contrib/walruscloth.rb +19 -11
- data/lib/walrus/document.rb +41 -33
- data/lib/walrus/grammar.rb +474 -162
- data/lib/walrus/grammar/assignment_expression.rb +33 -0
- data/lib/walrus/grammar/block_directive.rb +37 -0
- data/lib/walrus/grammar/comment.rb +33 -0
- data/lib/walrus/grammar/def_directive.rb +80 -0
- data/lib/walrus/grammar/echo_directive.rb +56 -0
- data/lib/walrus/grammar/escape_sequence.rb +33 -0
- data/lib/walrus/grammar/import_directive.rb +54 -0
- data/lib/walrus/grammar/include_directive.rb +36 -0
- data/lib/walrus/grammar/instance_variable.rb +33 -0
- data/lib/walrus/grammar/literal.rb +33 -0
- data/lib/walrus/grammar/message_expression.rb +34 -0
- data/lib/walrus/grammar/multiline_comment.rb +70 -0
- data/lib/walrus/grammar/placeholder.rb +47 -0
- data/lib/walrus/grammar/raw_directive.rb +50 -0
- data/lib/walrus/grammar/raw_text.rb +56 -0
- data/lib/walrus/grammar/ruby_directive.rb +41 -0
- data/lib/walrus/grammar/ruby_expression.rb +42 -0
- data/lib/walrus/grammar/set_directive.rb +34 -0
- data/lib/walrus/grammar/silent_directive.rb +51 -0
- data/lib/walrus/grammar/slurp_directive.rb +36 -0
- data/lib/walrus/grammar/super_directive.rb +34 -0
- data/lib/walrus/parser.rb +26 -408
- data/lib/walrus/runner.rb +37 -20
- data/lib/walrus/template.rb +34 -25
- data/lib/walrus/version.rb +24 -1
- metadata +57 -71
- data/ext/extconf.rb +0 -16
- data/ext/jindex.c +0 -92
- data/lib/walrus/diff.rb +0 -95
- data/lib/walrus/grammar/additions/proc.rb +0 -26
- data/lib/walrus/grammar/additions/regexp.rb +0 -27
- data/lib/walrus/grammar/additions/string.rb +0 -58
- data/lib/walrus/grammar/additions/symbol.rb +0 -49
- data/lib/walrus/grammar/and_predicate.rb +0 -46
- data/lib/walrus/grammar/array_result.rb +0 -25
- data/lib/walrus/grammar/continuation_wrapper_exception.rb +0 -34
- data/lib/walrus/grammar/left_recursion_exception.rb +0 -33
- data/lib/walrus/grammar/location_tracking.rb +0 -115
- data/lib/walrus/grammar/match_data_wrapper.rb +0 -71
- data/lib/walrus/grammar/memoizing.rb +0 -47
- data/lib/walrus/grammar/memoizing_cache.rb +0 -103
- data/lib/walrus/grammar/node.rb +0 -66
- data/lib/walrus/grammar/not_predicate.rb +0 -46
- data/lib/walrus/grammar/parse_error.rb +0 -45
- data/lib/walrus/grammar/parser_state.rb +0 -187
- data/lib/walrus/grammar/parslet.rb +0 -34
- data/lib/walrus/grammar/parslet_choice.rb +0 -128
- data/lib/walrus/grammar/parslet_combination.rb +0 -32
- data/lib/walrus/grammar/parslet_combining.rb +0 -160
- data/lib/walrus/grammar/parslet_merge.rb +0 -94
- data/lib/walrus/grammar/parslet_omission.rb +0 -63
- data/lib/walrus/grammar/parslet_repetition.rb +0 -106
- data/lib/walrus/grammar/parslet_repetition_default.rb +0 -64
- data/lib/walrus/grammar/parslet_sequence.rb +0 -214
- data/lib/walrus/grammar/predicate.rb +0 -63
- data/lib/walrus/grammar/proc_parslet.rb +0 -58
- data/lib/walrus/grammar/regexp_parslet.rb +0 -79
- data/lib/walrus/grammar/skipped_substring_exception.rb +0 -42
- data/lib/walrus/grammar/string_enumerator.rb +0 -53
- data/lib/walrus/grammar/string_parslet.rb +0 -81
- data/lib/walrus/grammar/string_result.rb +0 -30
- data/lib/walrus/grammar/symbol_parslet.rb +0 -69
- data/lib/walrus/no_parameter_marker.rb +0 -25
- data/lib/walrus/walrus_grammar/assignment_expression.rb +0 -30
- data/lib/walrus/walrus_grammar/block_directive.rb +0 -34
- data/lib/walrus/walrus_grammar/comment.rb +0 -30
- data/lib/walrus/walrus_grammar/def_directive.rb +0 -72
- data/lib/walrus/walrus_grammar/echo_directive.rb +0 -50
- data/lib/walrus/walrus_grammar/escape_sequence.rb +0 -30
- data/lib/walrus/walrus_grammar/import_directive.rb +0 -50
- data/lib/walrus/walrus_grammar/include_directive.rb +0 -33
- data/lib/walrus/walrus_grammar/instance_variable.rb +0 -30
- data/lib/walrus/walrus_grammar/literal.rb +0 -30
- data/lib/walrus/walrus_grammar/message_expression.rb +0 -31
- data/lib/walrus/walrus_grammar/multiline_comment.rb +0 -60
- data/lib/walrus/walrus_grammar/placeholder.rb +0 -46
- data/lib/walrus/walrus_grammar/raw_directive.rb +0 -48
- data/lib/walrus/walrus_grammar/raw_text.rb +0 -51
- data/lib/walrus/walrus_grammar/ruby_directive.rb +0 -35
- data/lib/walrus/walrus_grammar/ruby_expression.rb +0 -37
- data/lib/walrus/walrus_grammar/set_directive.rb +0 -30
- data/lib/walrus/walrus_grammar/silent_directive.rb +0 -50
- data/lib/walrus/walrus_grammar/slurp_directive.rb +0 -31
- data/lib/walrus/walrus_grammar/super_directive.rb +0 -33
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar/comment.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class MultilineComment < Comment
|
|
28
|
+
# Multiline comments may contain nested Comments/Multiline comments or
|
|
29
|
+
# normal text, so must compile recursively.
|
|
30
|
+
#
|
|
31
|
+
# TODO: anchor comments that appear immediately before #def and #block
|
|
32
|
+
# directives to their corresponding methods (for the timebeing should
|
|
33
|
+
# note in the documentation that if you want your comments to appear
|
|
34
|
+
# adjacent to the blocks which follow them then you must put your
|
|
35
|
+
# comments inside the blocks)
|
|
36
|
+
def compile options = {}
|
|
37
|
+
compiled = ''
|
|
38
|
+
if @content.respond_to? :each
|
|
39
|
+
@content.each do |item|
|
|
40
|
+
if item.kind_of? Comment
|
|
41
|
+
compiled << '# (nested) ' + item.compile
|
|
42
|
+
else
|
|
43
|
+
first = true
|
|
44
|
+
item.to_s.each do |line|
|
|
45
|
+
if first
|
|
46
|
+
first = false
|
|
47
|
+
compiled << '# MultilineComment:' + line.to_s.chomp + "\n"
|
|
48
|
+
else
|
|
49
|
+
compiled << '# MultilineComment (continued):' + line.to_s.chomp + "\n"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
# no nesting, just raw text, but still must check for multiple lines
|
|
56
|
+
first = true
|
|
57
|
+
@content.to_s.each do |line|
|
|
58
|
+
if first
|
|
59
|
+
first = false
|
|
60
|
+
compiled << '# MultilineComment:' + line.to_s.chomp + "\n"
|
|
61
|
+
else
|
|
62
|
+
compiled << '# MultilineComment (continued):' + line.to_s.chomp + "\n"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
compiled
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end # class Grammar
|
|
70
|
+
end # Walrus
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class Placeholder < Walrat::Node
|
|
28
|
+
def compile options = {}
|
|
29
|
+
if options[:nest_placeholders] == true
|
|
30
|
+
method_name = "lookup_and_return_placeholder" # placeholder nested inside another placeholder
|
|
31
|
+
else
|
|
32
|
+
method_name = "lookup_and_accumulate_placeholder" # placeholder used in a literal text stream
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if @params == []
|
|
36
|
+
"#{method_name}(#{@name.to_s.to_sym.inspect})\n"
|
|
37
|
+
else
|
|
38
|
+
options = options.clone
|
|
39
|
+
options[:nest_placeholders] = true
|
|
40
|
+
params = (@params.kind_of? Array) ? @params : [@params]
|
|
41
|
+
param_list = params.map { |param| param.compile(options) }.join(', ').chomp
|
|
42
|
+
"#{method_name}(#{@name.to_s.to_sym.inspect}, #{param_list})\n"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end # class Placeholder
|
|
46
|
+
end # class Grammar
|
|
47
|
+
end # Walrus
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class RawDirective < Directive
|
|
28
|
+
# Returns a string containing the compiled (Ruby) version of receiver.
|
|
29
|
+
def compile options = {}
|
|
30
|
+
compiled = []
|
|
31
|
+
first = true
|
|
32
|
+
@content.to_s.to_source_string.each do |line|
|
|
33
|
+
newline = ''
|
|
34
|
+
if line =~ /(\r\n|\r|\n)\z/ # check for literal newline at end of line
|
|
35
|
+
line.chomp! # get rid of it
|
|
36
|
+
newline = ' + ' + $~[0].dump # include non-literal newline instead
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if first
|
|
40
|
+
compiled << "accumulate('%s'%s) # RawDirective\n" % [ line, newline ]
|
|
41
|
+
first = false
|
|
42
|
+
else
|
|
43
|
+
compiled << "accumulate('%s'%s) # RawDirective (continued)\n" % [ line, newline ]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
compiled.join
|
|
47
|
+
end
|
|
48
|
+
end # class RawDirective
|
|
49
|
+
end # class Grammar
|
|
50
|
+
end # Walrus
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
require 'walrus/additions/string'
|
|
25
|
+
|
|
26
|
+
module Walrus
|
|
27
|
+
class Grammar
|
|
28
|
+
class RawText < Walrat::Node
|
|
29
|
+
# Returns a string containing the compiled (Ruby) version of receiver.
|
|
30
|
+
# If options[:slurping] is true, instructs the receiver to strip the
|
|
31
|
+
# leading carriage return/line feed from the @lexeme prior to emitting
|
|
32
|
+
# the compiled output.
|
|
33
|
+
def compile options = {}
|
|
34
|
+
lexeme = options[:slurping] ? @lexeme.to_s.sub(/\A(\r\n|\r|\n)/, '') : @lexeme.to_s
|
|
35
|
+
|
|
36
|
+
compiled = ''
|
|
37
|
+
first = true
|
|
38
|
+
lexeme.to_source_string.each do |line|
|
|
39
|
+
newline = ''
|
|
40
|
+
if line =~ /(\r\n|\r|\n)\z/ # check for literal newline at end of line
|
|
41
|
+
line.chomp! # get rid of it
|
|
42
|
+
newline = ' + ' + $~[0].dump # include non-literal newline instead
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if first
|
|
46
|
+
compiled << "accumulate('%s'%s) # RawText\n" % [ line, newline ]
|
|
47
|
+
first = false
|
|
48
|
+
else
|
|
49
|
+
compiled << "accumulate('%s'%s) # RawText (continued)\n" % [ line, newline ]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
compiled
|
|
53
|
+
end
|
|
54
|
+
end # class RawText
|
|
55
|
+
end # class Grammar
|
|
56
|
+
end # Walrus
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class RubyDirective < Directive
|
|
28
|
+
# TODO: could make a #rubyecho method that did an "accumulate do" instead
|
|
29
|
+
# of instance_eval
|
|
30
|
+
def compile options = {}
|
|
31
|
+
# possible problem here is that the compiler will indent each line for
|
|
32
|
+
# us, possibly breaking here docs etc
|
|
33
|
+
# seeing as it is going to be indented anyway, I add some additional
|
|
34
|
+
# indenting here for pretty printing purposes
|
|
35
|
+
compiled = "instance_eval do # Ruby directive\n"
|
|
36
|
+
@content.to_s.each { |line| compiled << ' ' + line }
|
|
37
|
+
compiled << "end\n"
|
|
38
|
+
end
|
|
39
|
+
end # class RawDirective
|
|
40
|
+
end # class Grammar
|
|
41
|
+
end # Walrus
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class RubyExpression < Walrat::Node
|
|
28
|
+
# Rather than just compiling Ruby expressions back to text in a generic
|
|
29
|
+
# fashion it is desirable to compile the pieces separately (for an
|
|
30
|
+
# example, see the AssignmentExpression class) because this allows us to
|
|
31
|
+
# handle placeholders embedded inside Ruby expressions.
|
|
32
|
+
#
|
|
33
|
+
# Nevertheless, at an abstract level we here supply a default compilation
|
|
34
|
+
# method which just returns the source text, suitable for evaluation.
|
|
35
|
+
# Subclasses can then override this as new cases are discovered which
|
|
36
|
+
# require piece-by-piece compilation.
|
|
37
|
+
def compile options = {}
|
|
38
|
+
source_text
|
|
39
|
+
end
|
|
40
|
+
end # class RubyExpression
|
|
41
|
+
end # class Grammar
|
|
42
|
+
end # Walrus
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class SetDirective < Directive
|
|
28
|
+
def compile options = {}
|
|
29
|
+
"set_value(%s, instance_eval { %s }) # Set directive \n" %
|
|
30
|
+
[ @placeholder.to_s.dump, @expression.compile ]
|
|
31
|
+
end
|
|
32
|
+
end # class SetDirective
|
|
33
|
+
end # class Grammar
|
|
34
|
+
end # Walrus
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class SilentDirective < Directive
|
|
28
|
+
def compile options = {}
|
|
29
|
+
if @expression.respond_to? :each
|
|
30
|
+
expression = @expression
|
|
31
|
+
else
|
|
32
|
+
expression = [@expression]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# TODO: potentially include line, col and file name info in the comments generated by the compiler
|
|
36
|
+
|
|
37
|
+
compiled = ''
|
|
38
|
+
first = true
|
|
39
|
+
expression.each do |expr|
|
|
40
|
+
if first
|
|
41
|
+
compiled << "instance_eval { %s } # Silent directive\n" % expr.compile
|
|
42
|
+
first = false
|
|
43
|
+
else
|
|
44
|
+
compiled << "instance_eval { %s } # Silent directive (continued)\n" % expr.compile
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
compiled
|
|
48
|
+
end
|
|
49
|
+
end # class SilentDirective
|
|
50
|
+
end # class Grammar
|
|
51
|
+
end # Walrus
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class SlurpDirective < Directive
|
|
28
|
+
# The slurp directive produces no meaningful output; but we leave a
|
|
29
|
+
# comment in the compiled template so that the location of the directive
|
|
30
|
+
# is visible in the source.
|
|
31
|
+
def compile options = {}
|
|
32
|
+
"# Slurp directive\n"
|
|
33
|
+
end
|
|
34
|
+
end # class SlurpDirective
|
|
35
|
+
end # class Grammar
|
|
36
|
+
end # Walrus
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
|
|
2
|
+
# Redistribution and use in source and binary forms, with or without
|
|
3
|
+
# modification, are permitted provided that the following conditions are met:
|
|
4
|
+
#
|
|
5
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
|
6
|
+
# this list of conditions and the following disclaimer.
|
|
7
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
8
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
9
|
+
# and/or other materials provided with the distribution.
|
|
10
|
+
#
|
|
11
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
12
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
13
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
14
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
|
15
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
16
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
17
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
18
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
19
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
20
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
21
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
22
|
+
|
|
23
|
+
require 'walrus/grammar.rb'
|
|
24
|
+
|
|
25
|
+
module Walrus
|
|
26
|
+
class Grammar
|
|
27
|
+
class SuperDirective < Directive
|
|
28
|
+
def compile options = {}
|
|
29
|
+
# basic case, no explicit parameters
|
|
30
|
+
"super # Super directive\n"
|
|
31
|
+
end
|
|
32
|
+
end # class SuperDirective
|
|
33
|
+
end # class Grammar
|
|
34
|
+
end # Walrus
|