mail 2.1.3 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of mail might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +37 -0
- data/README.rdoc +1 -1
- data/Rakefile +2 -3
- data/TODO.rdoc +2 -12
- data/lib/mail.rb +7 -4
- data/lib/mail/attachments_list.rb +28 -10
- data/lib/mail/body.rb +44 -15
- data/lib/mail/core_extensions/string.rb +4 -0
- data/lib/mail/elements/content_transfer_encoding_element.rb +4 -1
- data/lib/mail/encodings/7bit.rb +29 -0
- data/lib/mail/encodings/8bit.rb +29 -0
- data/lib/mail/encodings/base64.rb +18 -5
- data/lib/mail/encodings/binary.rb +29 -0
- data/lib/mail/encodings/encodings.rb +22 -6
- data/lib/mail/encodings/quoted_printable.rb +27 -4
- data/lib/mail/encodings/transfer_encoding.rb +58 -0
- data/lib/mail/field.rb +4 -2
- data/lib/mail/fields/common/parameter_hash.rb +12 -3
- data/lib/mail/fields/content_disposition_field.rb +12 -2
- data/lib/mail/fields/content_location_field.rb +2 -2
- data/lib/mail/fields/content_transfer_encoding_field.rb +5 -3
- data/lib/mail/fields/content_type_field.rb +14 -4
- data/lib/mail/fields/mime_version_field.rb +2 -2
- data/lib/mail/fields/received_field.rb +8 -4
- data/lib/mail/fields/structured_field.rb +4 -0
- data/lib/mail/fields/unstructured_field.rb +5 -0
- data/lib/mail/header.rb +13 -6
- data/lib/mail/mail.rb +1 -1
- data/lib/mail/message.rb +100 -28
- data/lib/mail/network/delivery_methods/smtp.rb +1 -1
- data/lib/mail/parsers/address_lists.rb +4 -1
- data/lib/mail/parsers/content_disposition.rb +24 -6
- data/lib/mail/parsers/content_location.rb +8 -2
- data/lib/mail/parsers/content_transfer_encoding.rb +73 -83
- data/lib/mail/parsers/content_transfer_encoding.treetop +5 -10
- data/lib/mail/parsers/content_type.rb +36 -9
- data/lib/mail/parsers/date_time.rb +4 -1
- data/lib/mail/parsers/envelope_from.rb +8 -2
- data/lib/mail/parsers/message_ids.rb +4 -1
- data/lib/mail/parsers/mime_version.rb +4 -1
- data/lib/mail/parsers/phrase_lists.rb +4 -1
- data/lib/mail/parsers/received.rb +4 -1
- data/lib/mail/parsers/rfc2045.rb +75 -17
- data/lib/mail/parsers/rfc2045.treetop +2 -1
- data/lib/mail/parsers/rfc2822.rb +316 -79
- data/lib/mail/parsers/rfc2822_obsolete.rb +200 -50
- data/lib/mail/part.rb +21 -6
- data/lib/mail/patterns.rb +3 -3
- data/lib/mail/utilities.rb +4 -4
- data/lib/mail/vendor/treetop-1.4.3/Or +0 -0
- data/lib/mail/vendor/treetop-1.4.3/Rakefile +11 -6
- data/lib/mail/vendor/treetop-1.4.3/Treetop.tmbundle/Preferences/Comments.tmPreferences +22 -0
- data/lib/mail/vendor/treetop-1.4.3/Treetop.tmbundle/Syntaxes/Treetop Grammar.tmLanguage +28 -1
- data/lib/mail/vendor/treetop-1.4.3/bin/tt +5 -5
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop.rb +3 -19
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/bootstrap_gen_1_metagrammar.rb +4 -7
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler.rb +7 -6
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler/metagrammar.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler/node_classes.rb +19 -20
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/polyglot.rb +9 -0
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/ruby_extensions.rb +1 -2
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime.rb +6 -5
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime/interval_skip_list.rb +3 -4
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime/syntax_node.rb +7 -7
- data/lib/mail/vendor/treetop-1.4.3/lib/treetop/version.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/script/generate_metagrammar.rb +3 -4
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/and_predicate_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/anything_symbol_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/character_class_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/choice_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/circular_compilation_spec.rb +3 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/failure_propagation_functional_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/grammar_compiler_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/grammar_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/multibyte_chars_spec.rb +1 -9
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/nonterminal_symbol_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/not_predicate_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/one_or_more_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/optional_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/parenthesized_expression_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/parsing_rule_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/repeated_subrule_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/semantic_predicate_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/sequence_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/terminal_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/terminal_symbol_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/tt_compiler_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/compiler/zero_or_more_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/composition/grammar_composition_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/ruby_extensions/string_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/compiled_parser_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/delete_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/expire_range_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/insert_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +2 -3
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/spec_helper.rb +2 -2
- data/lib/mail/vendor/treetop-1.4.3/spec/runtime/syntax_node_spec.rb +1 -1
- data/lib/mail/vendor/treetop-1.4.3/spec/spec_helper.rb +4 -5
- data/lib/mail/vendor/treetop-1.4.3/treetop.gemspec +2 -2
- data/lib/mail/version.rb +1 -1
- data/lib/mail/version_specific/ruby_1_8.rb +1 -3
- data/lib/mail/version_specific/ruby_1_9.rb +1 -2
- data/lib/tasks/treetop.rake +1 -1
- metadata +33 -14
- data/lib/mail/vendor/treetop-1.4.3/spec/spec_suite.rb +0 -4
data/lib/mail/part.rb
CHANGED
@@ -32,27 +32,34 @@ module Mail
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def bounced?
|
35
|
-
|
35
|
+
if action.is_a?(Array)
|
36
|
+
!!(action.first =~ /failed/i)
|
37
|
+
else
|
38
|
+
!!(action =~ /failed/i)
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
42
|
+
|
43
|
+
# Either returns the action if the message has just a single report, or an
|
44
|
+
# array of all the actions, one for each report
|
38
45
|
def action
|
39
|
-
|
46
|
+
get_return_values('action')
|
40
47
|
end
|
41
48
|
|
42
49
|
def final_recipient
|
43
|
-
|
50
|
+
get_return_values('final-recipient')
|
44
51
|
end
|
45
52
|
|
46
53
|
def error_status
|
47
|
-
|
54
|
+
get_return_values('status')
|
48
55
|
end
|
49
56
|
|
50
57
|
def diagnostic_code
|
51
|
-
|
58
|
+
get_return_values('diagnostic-code')
|
52
59
|
end
|
53
60
|
|
54
61
|
def remote_mta
|
55
|
-
|
62
|
+
get_return_values('remote-mta')
|
56
63
|
end
|
57
64
|
|
58
65
|
def retryable?
|
@@ -61,6 +68,14 @@ module Mail
|
|
61
68
|
|
62
69
|
private
|
63
70
|
|
71
|
+
def get_return_values(key)
|
72
|
+
if delivery_status_data[key].is_a?(Array)
|
73
|
+
delivery_status_data[key].map { |a| a.value }
|
74
|
+
else
|
75
|
+
delivery_status_data[key].value
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
64
79
|
# A part may not have a header.... so, just init a body if no header
|
65
80
|
def parse_message
|
66
81
|
header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}/m, 2)
|
data/lib/mail/patterns.rb
CHANGED
@@ -6,8 +6,8 @@ module Mail
|
|
6
6
|
field_name = %Q|\x21-\x39\x3b-\x7e|
|
7
7
|
field_body = text
|
8
8
|
|
9
|
-
aspecial = %Q|()<>[]
|
10
|
-
tspecial = %Q|()
|
9
|
+
aspecial = %Q|()<>[]:;@\\,."| # RFC5322
|
10
|
+
tspecial = %Q|()<>@,;:\\"/[]?=| # RFC2045
|
11
11
|
lwsp = %Q| \t\r\n|
|
12
12
|
control = %Q|\x00-\x1f\x7f-\xff|
|
13
13
|
|
@@ -40,4 +40,4 @@ module Mail
|
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
43
|
-
end
|
43
|
+
end
|
data/lib/mail/utilities.rb
CHANGED
@@ -137,12 +137,12 @@ module Mail
|
|
137
137
|
# Example:
|
138
138
|
#
|
139
139
|
# string = :resent_from_field
|
140
|
-
# dasherize ( string ) #=> '
|
140
|
+
# dasherize ( string ) #=> 'resent-from-field'
|
141
141
|
def dasherize( str )
|
142
|
-
str.to_s.
|
142
|
+
str.to_s.gsub('_', '-')
|
143
143
|
end
|
144
144
|
|
145
|
-
# Swaps out all
|
145
|
+
# Swaps out all hyphens (-) for underscores (_) good for stringing to symbols
|
146
146
|
# a field name.
|
147
147
|
#
|
148
148
|
# Example:
|
@@ -160,4 +160,4 @@ module Mail
|
|
160
160
|
receiver.send :include, InstanceMethods
|
161
161
|
end
|
162
162
|
end
|
163
|
-
end
|
163
|
+
end
|
File without changes
|
@@ -1,23 +1,28 @@
|
|
1
|
-
dir = File.dirname(__FILE__)
|
2
1
|
require 'rubygems'
|
3
2
|
require 'rake'
|
4
|
-
$LOAD_PATH.unshift(File.join(dir, 'vendor', 'rspec', 'lib'))
|
5
|
-
require 'spec/rake/spectask'
|
6
|
-
|
7
3
|
require 'rake/gempackagetask'
|
4
|
+
require 'spec/rake/spectask'
|
8
5
|
|
9
6
|
task :default => :spec
|
10
|
-
|
11
7
|
Spec::Rake::SpecTask.new do |t|
|
12
8
|
t.pattern = 'spec/**/*spec.rb'
|
9
|
+
t.libs << 'spec'
|
13
10
|
end
|
14
11
|
|
15
12
|
load "./treetop.gemspec"
|
16
|
-
|
17
13
|
Rake::GemPackageTask.new($gemspec) do |pkg|
|
18
14
|
pkg.need_tar = true
|
19
15
|
end
|
20
16
|
|
17
|
+
task :spec => 'lib/treetop/compiler/metagrammar.treetop'
|
18
|
+
file 'lib/treetop/compiler/metagrammar.treetop' do |t|
|
19
|
+
unless $bootstrapped_gen_1_metagrammar
|
20
|
+
load File.expand_path('../lib/treetop/bootstrap_gen_1_metagrammar.rb', __FILE__)
|
21
|
+
end
|
22
|
+
|
23
|
+
Treetop::Compiler::GrammarCompiler.new.compile(METAGRAMMAR_PATH)
|
24
|
+
end
|
25
|
+
|
21
26
|
task :version do
|
22
27
|
puts RUBY_VERSION
|
23
28
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>name</key>
|
6
|
+
<string>Comments</string>
|
7
|
+
<key>settings</key>
|
8
|
+
<dict>
|
9
|
+
<key>shellVariables</key>
|
10
|
+
<array>
|
11
|
+
<dict>
|
12
|
+
<key>name</key>
|
13
|
+
<string>TM_COMMENT_START</string>
|
14
|
+
<key>value</key>
|
15
|
+
<string># </string>
|
16
|
+
</dict>
|
17
|
+
</array>
|
18
|
+
</dict>
|
19
|
+
<key>uuid</key>
|
20
|
+
<string>1BC307B6-CE08-449E-9074-1AEAA5CE99F4</string>
|
21
|
+
</dict>
|
22
|
+
</plist>
|
@@ -16,6 +16,10 @@
|
|
16
16
|
<string>Treetop Grammar</string>
|
17
17
|
<key>patterns</key>
|
18
18
|
<array>
|
19
|
+
<dict>
|
20
|
+
<key>include</key>
|
21
|
+
<string>#comment</string>
|
22
|
+
</dict>
|
19
23
|
<dict>
|
20
24
|
<key>begin</key>
|
21
25
|
<string>^(grammar) ([A-Z]\w+)</string>
|
@@ -46,9 +50,13 @@
|
|
46
50
|
<string>meta.grammar.treetop</string>
|
47
51
|
<key>patterns</key>
|
48
52
|
<array>
|
53
|
+
<dict>
|
54
|
+
<key>include</key>
|
55
|
+
<string>#comment</string>
|
56
|
+
</dict>
|
49
57
|
<dict>
|
50
58
|
<key>begin</key>
|
51
|
-
<string>\b(rule)\b (
|
59
|
+
<string>\b(rule)\b (\w+)</string>
|
52
60
|
<key>beginCaptures</key>
|
53
61
|
<dict>
|
54
62
|
<key>1</key>
|
@@ -76,6 +84,10 @@
|
|
76
84
|
<string>meta.rule.treetop</string>
|
77
85
|
<key>patterns</key>
|
78
86
|
<array>
|
87
|
+
<dict>
|
88
|
+
<key>include</key>
|
89
|
+
<string>#comment</string>
|
90
|
+
</dict>
|
79
91
|
<dict>
|
80
92
|
<key>include</key>
|
81
93
|
<string>#strings</string>
|
@@ -203,6 +215,21 @@
|
|
203
215
|
</dict>
|
204
216
|
</array>
|
205
217
|
</dict>
|
218
|
+
<key>comment</key>
|
219
|
+
<dict>
|
220
|
+
<key>captures</key>
|
221
|
+
<dict>
|
222
|
+
<key>1</key>
|
223
|
+
<dict>
|
224
|
+
<key>name</key>
|
225
|
+
<string>punctuation.definition.comment.treetop</string>
|
226
|
+
</dict>
|
227
|
+
</dict>
|
228
|
+
<key>match</key>
|
229
|
+
<string>(#).*$\n?</string>
|
230
|
+
<key>name</key>
|
231
|
+
<string>comment.line.number-sign.treetop</string>
|
232
|
+
</dict>
|
206
233
|
<key>strings</key>
|
207
234
|
<dict>
|
208
235
|
<key>patterns</key>
|
@@ -1,15 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'optparse'
|
3
3
|
require 'rubygems'
|
4
|
-
require 'treetop'
|
5
4
|
|
6
5
|
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
|
7
6
|
require 'treetop'
|
8
7
|
require 'treetop/version'
|
8
|
+
require 'treetop/polyglot'
|
9
9
|
|
10
10
|
options = {}
|
11
11
|
parser = OptionParser.new do |opts|
|
12
|
-
exts = Treetop::VALID_GRAMMAR_EXT.collect { |i| '.' + i }
|
12
|
+
exts = Treetop::Polyglot::VALID_GRAMMAR_EXT.collect { |i| '.' + i }
|
13
13
|
|
14
14
|
opts.banner = "Treetop Parsing Expression Grammar (PEG) Comand Line Compiler"
|
15
15
|
opts.define_head "Usage: tt [options] grammar_file[#{exts.join('|')}] ..."
|
@@ -58,7 +58,7 @@ end
|
|
58
58
|
|
59
59
|
def grammar_exist?(filename)
|
60
60
|
if File.extname(filename).empty?
|
61
|
-
Treetop::VALID_GRAMMAR_EXT.each do |ext|
|
61
|
+
Treetop::Polyglot::VALID_GRAMMAR_EXT.each do |ext|
|
62
62
|
fn_ext = "#{filename}.#{ext}"
|
63
63
|
return true if File.exist?(fn_ext) && !File.zero?(fn_ext)
|
64
64
|
end
|
@@ -68,7 +68,7 @@ end
|
|
68
68
|
|
69
69
|
def full_grammar_filename(filename)
|
70
70
|
return filename if !File.extname(filename).empty?
|
71
|
-
Treetop::VALID_GRAMMAR_EXT.each do |ext|
|
71
|
+
Treetop::Polyglot::VALID_GRAMMAR_EXT.each do |ext|
|
72
72
|
fn_ext = "#{filename}.#{ext}"
|
73
73
|
return fn_ext if File.exist?(fn_ext) && !File.zero?(fn_ext)
|
74
74
|
end
|
@@ -97,7 +97,7 @@ while !file_list.empty?
|
|
97
97
|
|
98
98
|
# try to compile
|
99
99
|
treetop_file = full_grammar_filename(treetop_file)
|
100
|
-
std_output_file = treetop_file.gsub(Treetop::VALID_GRAMMAR_EXT_REGEXP, '.rb')
|
100
|
+
std_output_file = treetop_file.gsub(Treetop::Polyglot::VALID_GRAMMAR_EXT_REGEXP, '.rb')
|
101
101
|
|
102
102
|
if options[:out_file]
|
103
103
|
# explicit output file name option; never overwrite unless forced
|
@@ -1,19 +1,3 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
VALID_GRAMMAR_EXT = ['treetop', 'tt']
|
5
|
-
VALID_GRAMMAR_EXT_REGEXP = /\.(#{VALID_GRAMMAR_EXT.join('|')})\Z/o
|
6
|
-
end
|
7
|
-
|
8
|
-
dir = File.dirname(__FILE__)
|
9
|
-
|
10
|
-
TREETOP_ROOT = File.join(dir, 'treetop')
|
11
|
-
require File.join(TREETOP_ROOT, "ruby_extensions")
|
12
|
-
require File.join(TREETOP_ROOT, "runtime")
|
13
|
-
require File.join(TREETOP_ROOT, "compiler")
|
14
|
-
|
15
|
-
# To have Polyglot extensions loaded, you need to require 'polyglot'
|
16
|
-
# before you require 'treetop'
|
17
|
-
if defined?(Polyglot)
|
18
|
-
Polyglot.register(Treetop::VALID_GRAMMAR_EXT, Treetop)
|
19
|
-
end
|
1
|
+
require 'treetop/runtime'
|
2
|
+
require 'treetop/compiler'
|
3
|
+
# require 'treetop/polyglot'
|
@@ -2,28 +2,25 @@
|
|
2
2
|
# into the environment by compiling the current metagrammar.treetop using a trusted version of Treetop.
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
|
-
dir = File.dirname(__FILE__)
|
6
5
|
|
7
6
|
TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP = '>= 1.1.5'
|
8
7
|
|
9
8
|
# Loading trusted version of Treetop to compile the compiler
|
10
9
|
gem_spec = Gem.source_index.find_name('treetop', TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP).last
|
11
10
|
raise "Install a Treetop Gem version #{TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP} to bootstrap." unless gem_spec
|
12
|
-
|
13
|
-
require File.join(trusted_treetop_path, 'lib', 'treetop')
|
11
|
+
require "#{gem_spec.full_gem_path}/lib/treetop"
|
14
12
|
|
15
13
|
# Relocating trusted version of Treetop to Trusted::Treetop
|
16
14
|
Trusted = Module.new
|
17
15
|
Trusted::Treetop = Treetop
|
18
16
|
Object.send(:remove_const, :Treetop)
|
19
|
-
Object.send(:remove_const, :TREETOP_ROOT)
|
20
17
|
|
21
18
|
# Requiring version of Treetop that is under test
|
22
19
|
$exclude_metagrammar = true
|
23
|
-
require File.expand_path(
|
20
|
+
require File.expand_path('../treetop')
|
24
21
|
|
25
22
|
# Compile and evaluate freshly generated metagrammar source
|
26
|
-
METAGRAMMAR_PATH = File.
|
23
|
+
METAGRAMMAR_PATH = File.expand_path('../compiler/metagrammar.treetop', __FILE__)
|
27
24
|
compiled_metagrammar_source = Trusted::Treetop::Compiler::GrammarCompiler.new.ruby_source(METAGRAMMAR_PATH)
|
28
25
|
Object.class_eval(compiled_metagrammar_source)
|
29
26
|
|
@@ -42,4 +39,4 @@ Object.class_eval(compiled_metagrammar_source)
|
|
42
39
|
# include Trusted::Treetop::Runtime
|
43
40
|
# end
|
44
41
|
|
45
|
-
$bootstrapped_gen_1_metagrammar = true
|
42
|
+
$bootstrapped_gen_1_metagrammar = true
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
1
|
+
require 'treetop/ruby_extensions'
|
2
|
+
|
3
|
+
require 'treetop/compiler/lexical_address_space'
|
4
|
+
require 'treetop/compiler/ruby_builder'
|
5
|
+
require 'treetop/compiler/node_classes'
|
6
|
+
require 'treetop/compiler/metagrammar' unless defined?($exclude_metagrammar)
|
7
|
+
require 'treetop/compiler/grammar_compiler'
|
@@ -1,20 +1,19 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require File.join(dir, *%w[node_classes transient_prefix])
|
1
|
+
require 'treetop/compiler/node_classes/parsing_expression'
|
2
|
+
require 'treetop/compiler/node_classes/atomic_expression'
|
3
|
+
require 'treetop/compiler/node_classes/inline_module'
|
4
|
+
require 'treetop/compiler/node_classes/predicate_block'
|
5
|
+
require 'treetop/compiler/node_classes/treetop_file'
|
6
|
+
require 'treetop/compiler/node_classes/grammar'
|
7
|
+
require 'treetop/compiler/node_classes/declaration_sequence'
|
8
|
+
require 'treetop/compiler/node_classes/parsing_rule'
|
9
|
+
require 'treetop/compiler/node_classes/parenthesized_expression'
|
10
|
+
require 'treetop/compiler/node_classes/nonterminal'
|
11
|
+
require 'treetop/compiler/node_classes/terminal'
|
12
|
+
require 'treetop/compiler/node_classes/anything_symbol'
|
13
|
+
require 'treetop/compiler/node_classes/character_class'
|
14
|
+
require 'treetop/compiler/node_classes/sequence'
|
15
|
+
require 'treetop/compiler/node_classes/choice'
|
16
|
+
require 'treetop/compiler/node_classes/repetition'
|
17
|
+
require 'treetop/compiler/node_classes/optional'
|
18
|
+
require 'treetop/compiler/node_classes/predicate'
|
19
|
+
require 'treetop/compiler/node_classes/transient_prefix'
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
require "#{dir}/ruby_extensions/string"
|
1
|
+
require 'treetop/ruby_extensions/string'
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'treetop/ruby_extensions'
|
2
|
+
|
3
|
+
require 'treetop/runtime/compiled_parser'
|
4
|
+
require 'treetop/runtime/syntax_node'
|
5
|
+
require 'treetop/runtime/terminal_parse_failure'
|
6
|
+
require 'treetop/runtime/interval_skip_list'
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require "#{dir}/interval_skip_list/node.rb"
|
1
|
+
require 'treetop/runtime/interval_skip_list/interval_skip_list'
|
2
|
+
require 'treetop/runtime/interval_skip_list/head_node'
|
3
|
+
require 'treetop/runtime/interval_skip_list/node'
|
@@ -3,9 +3,6 @@ module Treetop
|
|
3
3
|
class SyntaxNode
|
4
4
|
attr_reader :input, :interval
|
5
5
|
attr_accessor :parent
|
6
|
-
attr_reader :dot_id
|
7
|
-
|
8
|
-
@@dot_id_counter = 0
|
9
6
|
|
10
7
|
def initialize(input, interval, elements = nil)
|
11
8
|
@input = input
|
@@ -26,9 +23,6 @@ module Treetop
|
|
26
23
|
last_element = element
|
27
24
|
end
|
28
25
|
|
29
|
-
@dot_id = @@dot_id_counter
|
30
|
-
@@dot_id_counter += 1
|
31
|
-
|
32
26
|
@comprehensive_elements
|
33
27
|
end
|
34
28
|
|
@@ -90,8 +84,14 @@ module Treetop
|
|
90
84
|
)
|
91
85
|
end
|
92
86
|
|
87
|
+
@@dot_id_counter = 0
|
88
|
+
|
89
|
+
def dot_id
|
90
|
+
@dot_id ||= @@dot_id_counter += 1
|
91
|
+
end
|
92
|
+
|
93
93
|
def write_dot(io)
|
94
|
-
io.puts "node#{dot_id} [label=\"#{text_value}\"];"
|
94
|
+
io.puts "node#{dot_id} [label=\"'#{text_value}'\"];"
|
95
95
|
if nonterminal? then
|
96
96
|
elements.each do
|
97
97
|
|x|
|