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.

Files changed (106) hide show
  1. data/CHANGELOG.rdoc +37 -0
  2. data/README.rdoc +1 -1
  3. data/Rakefile +2 -3
  4. data/TODO.rdoc +2 -12
  5. data/lib/mail.rb +7 -4
  6. data/lib/mail/attachments_list.rb +28 -10
  7. data/lib/mail/body.rb +44 -15
  8. data/lib/mail/core_extensions/string.rb +4 -0
  9. data/lib/mail/elements/content_transfer_encoding_element.rb +4 -1
  10. data/lib/mail/encodings/7bit.rb +29 -0
  11. data/lib/mail/encodings/8bit.rb +29 -0
  12. data/lib/mail/encodings/base64.rb +18 -5
  13. data/lib/mail/encodings/binary.rb +29 -0
  14. data/lib/mail/encodings/encodings.rb +22 -6
  15. data/lib/mail/encodings/quoted_printable.rb +27 -4
  16. data/lib/mail/encodings/transfer_encoding.rb +58 -0
  17. data/lib/mail/field.rb +4 -2
  18. data/lib/mail/fields/common/parameter_hash.rb +12 -3
  19. data/lib/mail/fields/content_disposition_field.rb +12 -2
  20. data/lib/mail/fields/content_location_field.rb +2 -2
  21. data/lib/mail/fields/content_transfer_encoding_field.rb +5 -3
  22. data/lib/mail/fields/content_type_field.rb +14 -4
  23. data/lib/mail/fields/mime_version_field.rb +2 -2
  24. data/lib/mail/fields/received_field.rb +8 -4
  25. data/lib/mail/fields/structured_field.rb +4 -0
  26. data/lib/mail/fields/unstructured_field.rb +5 -0
  27. data/lib/mail/header.rb +13 -6
  28. data/lib/mail/mail.rb +1 -1
  29. data/lib/mail/message.rb +100 -28
  30. data/lib/mail/network/delivery_methods/smtp.rb +1 -1
  31. data/lib/mail/parsers/address_lists.rb +4 -1
  32. data/lib/mail/parsers/content_disposition.rb +24 -6
  33. data/lib/mail/parsers/content_location.rb +8 -2
  34. data/lib/mail/parsers/content_transfer_encoding.rb +73 -83
  35. data/lib/mail/parsers/content_transfer_encoding.treetop +5 -10
  36. data/lib/mail/parsers/content_type.rb +36 -9
  37. data/lib/mail/parsers/date_time.rb +4 -1
  38. data/lib/mail/parsers/envelope_from.rb +8 -2
  39. data/lib/mail/parsers/message_ids.rb +4 -1
  40. data/lib/mail/parsers/mime_version.rb +4 -1
  41. data/lib/mail/parsers/phrase_lists.rb +4 -1
  42. data/lib/mail/parsers/received.rb +4 -1
  43. data/lib/mail/parsers/rfc2045.rb +75 -17
  44. data/lib/mail/parsers/rfc2045.treetop +2 -1
  45. data/lib/mail/parsers/rfc2822.rb +316 -79
  46. data/lib/mail/parsers/rfc2822_obsolete.rb +200 -50
  47. data/lib/mail/part.rb +21 -6
  48. data/lib/mail/patterns.rb +3 -3
  49. data/lib/mail/utilities.rb +4 -4
  50. data/lib/mail/vendor/treetop-1.4.3/Or +0 -0
  51. data/lib/mail/vendor/treetop-1.4.3/Rakefile +11 -6
  52. data/lib/mail/vendor/treetop-1.4.3/Treetop.tmbundle/Preferences/Comments.tmPreferences +22 -0
  53. data/lib/mail/vendor/treetop-1.4.3/Treetop.tmbundle/Syntaxes/Treetop Grammar.tmLanguage +28 -1
  54. data/lib/mail/vendor/treetop-1.4.3/bin/tt +5 -5
  55. data/lib/mail/vendor/treetop-1.4.3/lib/treetop.rb +3 -19
  56. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/bootstrap_gen_1_metagrammar.rb +4 -7
  57. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler.rb +7 -6
  58. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler/metagrammar.rb +1 -1
  59. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/compiler/node_classes.rb +19 -20
  60. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/polyglot.rb +9 -0
  61. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/ruby_extensions.rb +1 -2
  62. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime.rb +6 -5
  63. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime/interval_skip_list.rb +3 -4
  64. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/runtime/syntax_node.rb +7 -7
  65. data/lib/mail/vendor/treetop-1.4.3/lib/treetop/version.rb +1 -1
  66. data/lib/mail/vendor/treetop-1.4.3/script/generate_metagrammar.rb +3 -4
  67. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/and_predicate_spec.rb +2 -2
  68. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/anything_symbol_spec.rb +2 -2
  69. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/character_class_spec.rb +1 -1
  70. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/choice_spec.rb +2 -2
  71. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/circular_compilation_spec.rb +3 -1
  72. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/failure_propagation_functional_spec.rb +2 -2
  73. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/grammar_compiler_spec.rb +1 -1
  74. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/grammar_spec.rb +1 -1
  75. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/multibyte_chars_spec.rb +1 -9
  76. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/nonterminal_symbol_spec.rb +2 -2
  77. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/not_predicate_spec.rb +2 -2
  78. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/one_or_more_spec.rb +2 -2
  79. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/optional_spec.rb +1 -1
  80. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/parenthesized_expression_spec.rb +1 -1
  81. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/parsing_rule_spec.rb +1 -1
  82. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/repeated_subrule_spec.rb +1 -1
  83. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/semantic_predicate_spec.rb +1 -1
  84. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/sequence_spec.rb +1 -1
  85. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/terminal_spec.rb +1 -1
  86. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/terminal_symbol_spec.rb +1 -1
  87. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/tt_compiler_spec.rb +1 -1
  88. data/lib/mail/vendor/treetop-1.4.3/spec/compiler/zero_or_more_spec.rb +1 -1
  89. data/lib/mail/vendor/treetop-1.4.3/spec/composition/grammar_composition_spec.rb +1 -1
  90. data/lib/mail/vendor/treetop-1.4.3/spec/ruby_extensions/string_spec.rb +1 -1
  91. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/compiled_parser_spec.rb +1 -1
  92. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/delete_spec.rb +2 -2
  93. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/expire_range_spec.rb +2 -2
  94. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/insert_spec.rb +1 -1
  95. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +2 -2
  96. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +2 -3
  97. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/interval_skip_list/spec_helper.rb +2 -2
  98. data/lib/mail/vendor/treetop-1.4.3/spec/runtime/syntax_node_spec.rb +1 -1
  99. data/lib/mail/vendor/treetop-1.4.3/spec/spec_helper.rb +4 -5
  100. data/lib/mail/vendor/treetop-1.4.3/treetop.gemspec +2 -2
  101. data/lib/mail/version.rb +1 -1
  102. data/lib/mail/version_specific/ruby_1_8.rb +1 -3
  103. data/lib/mail/version_specific/ruby_1_9.rb +1 -2
  104. data/lib/tasks/treetop.rake +1 -1
  105. metadata +33 -14
  106. 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
- !!(action =~ /failed/i)
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
- delivery_status_data['action'].value
46
+ get_return_values('action')
40
47
  end
41
48
 
42
49
  def final_recipient
43
- delivery_status_data['final-recipient'].value
50
+ get_return_values('final-recipient')
44
51
  end
45
52
 
46
53
  def error_status
47
- delivery_status_data['status'].value
54
+ get_return_values('status')
48
55
  end
49
56
 
50
57
  def diagnostic_code
51
- delivery_status_data['diagnostic-code'].value
58
+ get_return_values('diagnostic-code')
52
59
  end
53
60
 
54
61
  def remote_mta
55
- delivery_status_data['remote-mta'].value
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
@@ -137,12 +137,12 @@ module Mail
137
137
  # Example:
138
138
  #
139
139
  # string = :resent_from_field
140
- # dasherize ( string ) #=> 'resent_from_field'
140
+ # dasherize ( string ) #=> 'resent-from-field'
141
141
  def dasherize( str )
142
- str.to_s.downcase.gsub('_', '-')
142
+ str.to_s.gsub('_', '-')
143
143
  end
144
144
 
145
- # Swaps out all underscores (_) for hyphens (-) good for stringing from symbols
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 (.+)$</string>
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 'rubygems'
2
-
3
- module Treetop
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
- trusted_treetop_path = gem_spec.full_gem_path
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(File.join(dir, '..', 'treetop'))
20
+ require File.expand_path('../treetop')
24
21
 
25
22
  # Compile and evaluate freshly generated metagrammar source
26
- METAGRAMMAR_PATH = File.join(TREETOP_ROOT, 'compiler', 'metagrammar.treetop')
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
- dir = File.dirname(__FILE__)
2
- require File.join(dir, *%w[compiler lexical_address_space])
3
- require File.join(dir, *%w[compiler ruby_builder])
4
- require File.join(dir, *%w[compiler node_classes])
5
- require File.join(dir, *%w[compiler metagrammar]) unless defined?($exclude_metagrammar)
6
- require File.join(dir, *%w[compiler grammar_compiler])
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'
@@ -7,7 +7,7 @@ module Treetop
7
7
  include Treetop::Runtime
8
8
 
9
9
  def root
10
- @root || :treetop_file
10
+ @root ||= :treetop_file
11
11
  end
12
12
 
13
13
  module TreetopFile0
@@ -1,20 +1,19 @@
1
- dir = File.dirname(__FILE__)
2
- require File.join(dir, *%w[node_classes parsing_expression])
3
- require File.join(dir, *%w[node_classes atomic_expression])
4
- require File.join(dir, *%w[node_classes inline_module])
5
- require File.join(dir, *%w[node_classes predicate_block])
6
- require File.join(dir, *%w[node_classes treetop_file])
7
- require File.join(dir, *%w[node_classes grammar])
8
- require File.join(dir, *%w[node_classes declaration_sequence])
9
- require File.join(dir, *%w[node_classes parsing_rule])
10
- require File.join(dir, *%w[node_classes parenthesized_expression])
11
- require File.join(dir, *%w[node_classes nonterminal])
12
- require File.join(dir, *%w[node_classes terminal])
13
- require File.join(dir, *%w[node_classes anything_symbol])
14
- require File.join(dir, *%w[node_classes character_class])
15
- require File.join(dir, *%w[node_classes sequence])
16
- require File.join(dir, *%w[node_classes choice])
17
- require File.join(dir, *%w[node_classes repetition])
18
- require File.join(dir, *%w[node_classes optional])
19
- require File.join(dir, *%w[node_classes predicate])
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'
@@ -0,0 +1,9 @@
1
+ module Treetop
2
+ module Polyglot
3
+ VALID_GRAMMAR_EXT = ['treetop', 'tt']
4
+ VALID_GRAMMAR_EXT_REGEXP = /\.(#{VALID_GRAMMAR_EXT.join('|')})\Z/o
5
+ end
6
+ end
7
+
8
+ require 'polyglot'
9
+ Polyglot.register(Treetop::Polyglot::VALID_GRAMMAR_EXT, Treetop)
@@ -1,2 +1 @@
1
- dir = File.dirname(__FILE__)
2
- require "#{dir}/ruby_extensions/string"
1
+ require 'treetop/ruby_extensions/string'
@@ -1,5 +1,6 @@
1
- dir = File.dirname(__FILE__)
2
- require "#{dir}/runtime/compiled_parser"
3
- require "#{dir}/runtime/syntax_node"
4
- require "#{dir}/runtime/terminal_parse_failure"
5
- require "#{dir}/runtime/interval_skip_list"
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
- dir = File.dirname(__FILE__)
2
- require "#{dir}/interval_skip_list/interval_skip_list.rb"
3
- require "#{dir}/interval_skip_list/head_node.rb"
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|