mail 2.5.5 → 2.6.0

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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +8 -9
  3. data/CONTRIBUTING.md +13 -0
  4. data/Dependencies.txt +0 -1
  5. data/Gemfile +7 -24
  6. data/README.md +36 -15
  7. data/Rakefile +10 -2
  8. data/VERSION +4 -0
  9. data/lib/mail.rb +1 -1
  10. data/lib/mail/body.rb +2 -2
  11. data/lib/mail/check_delivery_params.rb +10 -47
  12. data/lib/mail/core_extensions/string.rb +12 -2
  13. data/lib/mail/elements/address.rb +38 -82
  14. data/lib/mail/elements/address_list.rb +19 -42
  15. data/lib/mail/elements/content_disposition_element.rb +3 -7
  16. data/lib/mail/elements/content_location_element.rb +2 -6
  17. data/lib/mail/elements/content_transfer_encoding_element.rb +3 -10
  18. data/lib/mail/elements/content_type_element.rb +4 -8
  19. data/lib/mail/elements/date_time_element.rb +3 -7
  20. data/lib/mail/elements/envelope_from_element.rb +3 -11
  21. data/lib/mail/elements/message_ids_element.rb +1 -6
  22. data/lib/mail/elements/mime_version_element.rb +3 -7
  23. data/lib/mail/elements/phrase_list.rb +2 -7
  24. data/lib/mail/elements/received_element.rb +3 -7
  25. data/lib/mail/encodings.rb +0 -1
  26. data/lib/mail/envelope.rb +0 -5
  27. data/lib/mail/field.rb +53 -17
  28. data/lib/mail/field_list.rb +18 -18
  29. data/lib/mail/fields/common/common_address.rb +15 -20
  30. data/lib/mail/fields/common/common_date.rb +0 -7
  31. data/lib/mail/fields/common/common_field.rb +1 -1
  32. data/lib/mail/fields/content_transfer_encoding_field.rb +0 -6
  33. data/lib/mail/fields/resent_sender_field.rb +1 -1
  34. data/lib/mail/fields/sender_field.rb +1 -1
  35. data/lib/mail/fields/unstructured_field.rb +7 -1
  36. data/lib/mail/header.rb +8 -22
  37. data/lib/mail/mail.rb +12 -0
  38. data/lib/mail/matchers/has_sent_mail.rb +34 -1
  39. data/lib/mail/message.rb +18 -11
  40. data/lib/mail/multibyte/unicode.rb +1 -1
  41. data/lib/mail/network/delivery_methods/exim.rb +10 -6
  42. data/lib/mail/network/delivery_methods/file_delivery.rb +8 -4
  43. data/lib/mail/network/delivery_methods/sendmail.rb +7 -9
  44. data/lib/mail/network/delivery_methods/smtp.rb +5 -2
  45. data/lib/mail/network/delivery_methods/smtp_connection.rb +6 -2
  46. data/lib/mail/network/delivery_methods/test_mailer.rb +8 -5
  47. data/lib/mail/network/retriever_methods/imap.rb +18 -13
  48. data/lib/mail/parsers.rb +26 -0
  49. data/lib/mail/parsers/address_lists_parser.rb +132 -0
  50. data/lib/mail/parsers/content_disposition_parser.rb +67 -0
  51. data/lib/mail/parsers/content_location_parser.rb +35 -0
  52. data/lib/mail/parsers/content_transfer_encoding_parser.rb +33 -0
  53. data/lib/mail/parsers/content_type_parser.rb +64 -0
  54. data/lib/mail/parsers/date_time_parser.rb +36 -0
  55. data/lib/mail/parsers/envelope_from_parser.rb +45 -0
  56. data/lib/mail/parsers/message_ids_parser.rb +39 -0
  57. data/lib/mail/parsers/mime_version_parser.rb +41 -0
  58. data/lib/mail/parsers/phrase_lists_parser.rb +33 -0
  59. data/lib/mail/parsers/ragel.rb +17 -0
  60. data/lib/mail/parsers/ragel/common.rl +184 -0
  61. data/lib/mail/parsers/ragel/date_time.rl +30 -0
  62. data/lib/mail/parsers/ragel/parser_info.rb +61 -0
  63. data/lib/mail/parsers/ragel/ruby.rb +29 -0
  64. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +14864 -0
  65. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +37 -0
  66. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +751 -0
  67. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +37 -0
  68. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +614 -0
  69. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +37 -0
  70. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +447 -0
  71. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +37 -0
  72. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +825 -0
  73. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +37 -0
  74. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +817 -0
  75. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +37 -0
  76. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +2129 -0
  77. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +37 -0
  78. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +1570 -0
  79. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +37 -0
  80. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +440 -0
  81. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +37 -0
  82. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +564 -0
  83. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +37 -0
  84. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +51 -0
  85. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +5144 -0
  86. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +37 -0
  87. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +37 -0
  88. data/lib/mail/parsers/received_parser.rb +47 -0
  89. data/lib/mail/parts_list.rb +4 -2
  90. data/lib/mail/patterns.rb +3 -1
  91. data/lib/mail/utilities.rb +3 -1
  92. data/lib/mail/version.rb +1 -1
  93. data/lib/mail/version_specific/ruby_1_8.rb +1 -1
  94. data/lib/mail/version_specific/ruby_1_9.rb +13 -1
  95. metadata +55 -51
  96. data/lib/VERSION +0 -4
  97. data/lib/load_parsers.rb +0 -35
  98. data/lib/mail/parsers/address_lists.rb +0 -64
  99. data/lib/mail/parsers/address_lists.treetop +0 -19
  100. data/lib/mail/parsers/content_disposition.rb +0 -535
  101. data/lib/mail/parsers/content_disposition.treetop +0 -46
  102. data/lib/mail/parsers/content_location.rb +0 -139
  103. data/lib/mail/parsers/content_location.treetop +0 -20
  104. data/lib/mail/parsers/content_transfer_encoding.rb +0 -201
  105. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
  106. data/lib/mail/parsers/content_type.rb +0 -971
  107. data/lib/mail/parsers/content_type.treetop +0 -68
  108. data/lib/mail/parsers/date_time.rb +0 -114
  109. data/lib/mail/parsers/date_time.treetop +0 -11
  110. data/lib/mail/parsers/envelope_from.rb +0 -194
  111. data/lib/mail/parsers/envelope_from.treetop +0 -32
  112. data/lib/mail/parsers/message_ids.rb +0 -45
  113. data/lib/mail/parsers/message_ids.treetop +0 -15
  114. data/lib/mail/parsers/mime_version.rb +0 -144
  115. data/lib/mail/parsers/mime_version.treetop +0 -19
  116. data/lib/mail/parsers/phrase_lists.rb +0 -45
  117. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  118. data/lib/mail/parsers/received.rb +0 -71
  119. data/lib/mail/parsers/received.treetop +0 -11
  120. data/lib/mail/parsers/rfc2045.rb +0 -421
  121. data/lib/mail/parsers/rfc2045.treetop +0 -35
  122. data/lib/mail/parsers/rfc2822.rb +0 -5397
  123. data/lib/mail/parsers/rfc2822.treetop +0 -408
  124. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  125. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  126. data/lib/tasks/corpus.rake +0 -125
  127. data/lib/tasks/treetop.rake +0 -10
@@ -1,46 +0,0 @@
1
- module Mail
2
- grammar ContentDisposition
3
-
4
- include RFC2822
5
- include RFC2045
6
-
7
- rule content_disposition
8
- disposition_type param_hashes:(CFWS ";" parameter CFWS)* {
9
- def parameters
10
- param_hashes.elements.map do |param|
11
- param.parameter.param_hash
12
- end
13
- end
14
- }
15
- end
16
-
17
- rule disposition_type
18
- [iI] [nN] [lL] [iI] [nN] [eE] / [aA] [tT] [tT] [aA] [cC] [hH] [mM] [eE] [nN] [tT] / extension_token / ''
19
- end
20
-
21
- rule extension_token
22
- ietf_token / custom_x_token
23
- end
24
-
25
- rule parameter
26
- CFWS? attr:attribute "=" val:value CFWS? {
27
- def param_hash
28
- {attr.text_value => val.text_value}
29
- end
30
- }
31
- end
32
-
33
- rule attribute
34
- token+
35
- end
36
-
37
- rule value
38
- quoted_string {
39
- def text_value
40
- quoted_content.text_value
41
- end
42
- } / (token / [\x3d])+
43
- end
44
-
45
- end
46
- end
@@ -1,139 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- module Mail
5
- module ContentLocation
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :primary
10
- end
11
-
12
- include RFC2822
13
-
14
- include RFC2045
15
-
16
- module Primary0
17
- def CFWS1
18
- elements[0]
19
- end
20
-
21
- def location
22
- elements[1]
23
- end
24
-
25
- def CFWS2
26
- elements[2]
27
- end
28
- end
29
-
30
- def _nt_primary
31
- start_index = index
32
- if node_cache[:primary].has_key?(index)
33
- cached = node_cache[:primary][index]
34
- if cached
35
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
36
- @index = cached.interval.end
37
- end
38
- return cached
39
- end
40
-
41
- i0, s0 = index, []
42
- r1 = _nt_CFWS
43
- s0 << r1
44
- if r1
45
- r2 = _nt_location
46
- s0 << r2
47
- if r2
48
- r3 = _nt_CFWS
49
- s0 << r3
50
- end
51
- end
52
- if s0.last
53
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
54
- r0.extend(Primary0)
55
- else
56
- @index = i0
57
- r0 = nil
58
- end
59
-
60
- node_cache[:primary][start_index] = r0
61
-
62
- r0
63
- end
64
-
65
- module Location0
66
- def text_value
67
- quoted_content.text_value
68
- end
69
- end
70
-
71
- def _nt_location
72
- start_index = index
73
- if node_cache[:location].has_key?(index)
74
- cached = node_cache[:location][index]
75
- if cached
76
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
77
- @index = cached.interval.end
78
- end
79
- return cached
80
- end
81
-
82
- i0 = index
83
- r1 = _nt_quoted_string
84
- r1.extend(Location0)
85
- if r1
86
- r0 = r1
87
- else
88
- s2, i2 = [], index
89
- loop do
90
- i3 = index
91
- r4 = _nt_token
92
- if r4
93
- r3 = r4
94
- else
95
- if has_terminal?('\G[\\x3d]', true, index)
96
- r5 = true
97
- @index += 1
98
- else
99
- r5 = nil
100
- end
101
- if r5
102
- r3 = r5
103
- else
104
- @index = i3
105
- r3 = nil
106
- end
107
- end
108
- if r3
109
- s2 << r3
110
- else
111
- break
112
- end
113
- end
114
- if s2.empty?
115
- @index = i2
116
- r2 = nil
117
- else
118
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
119
- end
120
- if r2
121
- r0 = r2
122
- else
123
- @index = i0
124
- r0 = nil
125
- end
126
- end
127
-
128
- node_cache[:location][start_index] = r0
129
-
130
- r0
131
- end
132
-
133
- end
134
-
135
- class ContentLocationParser < Treetop::Runtime::CompiledParser
136
- include ContentLocation
137
- end
138
-
139
- end
@@ -1,20 +0,0 @@
1
- module Mail
2
- grammar ContentLocation
3
-
4
- include RFC2822
5
- include RFC2045
6
-
7
- rule primary
8
- CFWS location CFWS
9
- end
10
-
11
- rule location
12
- quoted_string {
13
- def text_value
14
- quoted_content.text_value
15
- end
16
- } / (token / [\x3d])+
17
- end
18
-
19
- end
20
- end
@@ -1,201 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- module Mail
5
- module ContentTransferEncoding
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :primary
10
- end
11
-
12
- include RFC2822
13
-
14
- include RFC2045
15
-
16
- module Primary0
17
- def CFWS1
18
- elements[0]
19
- end
20
-
21
- def encoding
22
- elements[1]
23
- end
24
-
25
- def CFWS2
26
- elements[2]
27
- end
28
-
29
- def CFWS3
30
- elements[4]
31
- end
32
- end
33
-
34
- def _nt_primary
35
- start_index = index
36
- if node_cache[:primary].has_key?(index)
37
- cached = node_cache[:primary][index]
38
- if cached
39
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
40
- @index = cached.interval.end
41
- end
42
- return cached
43
- end
44
-
45
- i0, s0 = index, []
46
- r1 = _nt_CFWS
47
- s0 << r1
48
- if r1
49
- r2 = _nt_encoding
50
- s0 << r2
51
- if r2
52
- r3 = _nt_CFWS
53
- s0 << r3
54
- if r3
55
- if has_terminal?(";", false, index)
56
- r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
57
- @index += 1
58
- else
59
- terminal_parse_failure(";")
60
- r5 = nil
61
- end
62
- if r5
63
- r4 = r5
64
- else
65
- r4 = instantiate_node(SyntaxNode,input, index...index)
66
- end
67
- s0 << r4
68
- if r4
69
- r6 = _nt_CFWS
70
- s0 << r6
71
- end
72
- end
73
- end
74
- end
75
- if s0.last
76
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
77
- r0.extend(Primary0)
78
- else
79
- @index = i0
80
- r0 = nil
81
- end
82
-
83
- node_cache[:primary][start_index] = r0
84
-
85
- r0
86
- end
87
-
88
- def _nt_encoding
89
- start_index = index
90
- if node_cache[:encoding].has_key?(index)
91
- cached = node_cache[:encoding][index]
92
- if cached
93
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
94
- @index = cached.interval.end
95
- end
96
- return cached
97
- end
98
-
99
- i0 = index
100
- if has_terminal?("7bits", false, index)
101
- r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
102
- @index += 5
103
- else
104
- terminal_parse_failure("7bits")
105
- r1 = nil
106
- end
107
- if r1
108
- r0 = r1
109
- else
110
- if has_terminal?("8bits", false, index)
111
- r2 = instantiate_node(SyntaxNode,input, index...(index + 5))
112
- @index += 5
113
- else
114
- terminal_parse_failure("8bits")
115
- r2 = nil
116
- end
117
- if r2
118
- r0 = r2
119
- else
120
- if has_terminal?("7bit", false, index)
121
- r3 = instantiate_node(SyntaxNode,input, index...(index + 4))
122
- @index += 4
123
- else
124
- terminal_parse_failure("7bit")
125
- r3 = nil
126
- end
127
- if r3
128
- r0 = r3
129
- else
130
- if has_terminal?("8bit", false, index)
131
- r4 = instantiate_node(SyntaxNode,input, index...(index + 4))
132
- @index += 4
133
- else
134
- terminal_parse_failure("8bit")
135
- r4 = nil
136
- end
137
- if r4
138
- r0 = r4
139
- else
140
- if has_terminal?("binary", false, index)
141
- r5 = instantiate_node(SyntaxNode,input, index...(index + 6))
142
- @index += 6
143
- else
144
- terminal_parse_failure("binary")
145
- r5 = nil
146
- end
147
- if r5
148
- r0 = r5
149
- else
150
- if has_terminal?("quoted-printable", false, index)
151
- r6 = instantiate_node(SyntaxNode,input, index...(index + 16))
152
- @index += 16
153
- else
154
- terminal_parse_failure("quoted-printable")
155
- r6 = nil
156
- end
157
- if r6
158
- r0 = r6
159
- else
160
- if has_terminal?("base64", false, index)
161
- r7 = instantiate_node(SyntaxNode,input, index...(index + 6))
162
- @index += 6
163
- else
164
- terminal_parse_failure("base64")
165
- r7 = nil
166
- end
167
- if r7
168
- r0 = r7
169
- else
170
- r8 = _nt_ietf_token
171
- if r8
172
- r0 = r8
173
- else
174
- r9 = _nt_custom_x_token
175
- if r9
176
- r0 = r9
177
- else
178
- @index = i0
179
- r0 = nil
180
- end
181
- end
182
- end
183
- end
184
- end
185
- end
186
- end
187
- end
188
- end
189
-
190
- node_cache[:encoding][start_index] = r0
191
-
192
- r0
193
- end
194
-
195
- end
196
-
197
- class ContentTransferEncodingParser < Treetop::Runtime::CompiledParser
198
- include ContentTransferEncoding
199
- end
200
-
201
- end
@@ -1,18 +0,0 @@
1
- module Mail
2
- grammar ContentTransferEncoding
3
-
4
- include RFC2822
5
- include RFC2045
6
-
7
- rule primary
8
- CFWS encoding CFWS ";"? CFWS
9
- end
10
-
11
- rule encoding
12
- "7bits" / "8bits" /
13
- "7bit" / "8bit" / "binary" / "quoted-printable" / "base64" /
14
- ietf_token / custom_x_token
15
- end
16
-
17
- end
18
- end
@@ -1,971 +0,0 @@
1
- # Autogenerated from a Treetop grammar. Edits may be lost.
2
-
3
-
4
- module Mail
5
- module ContentType
6
- include Treetop::Runtime
7
-
8
- def root
9
- @root ||= :content_type
10
- end
11
-
12
- include RFC2822
13
-
14
- include RFC2045
15
-
16
- module ContentType0
17
- def CFWS1
18
- elements[0]
19
- end
20
-
21
- def parameter
22
- elements[2]
23
- end
24
-
25
- def CFWS2
26
- elements[3]
27
- end
28
- end
29
-
30
- module ContentType1
31
- def main_type
32
- elements[0]
33
- end
34
-
35
- def sub_type
36
- elements[2]
37
- end
38
-
39
- def param_hashes
40
- elements[3]
41
- end
42
- end
43
-
44
- module ContentType2
45
- def parameters
46
- param_hashes.elements.map do |param|
47
- param.parameter.param_hash
48
- end
49
- end
50
- end
51
-
52
- def _nt_content_type
53
- start_index = index
54
- if node_cache[:content_type].has_key?(index)
55
- cached = node_cache[:content_type][index]
56
- if cached
57
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
58
- @index = cached.interval.end
59
- end
60
- return cached
61
- end
62
-
63
- i0, s0 = index, []
64
- r1 = _nt_main_type
65
- s0 << r1
66
- if r1
67
- if has_terminal?("/", false, index)
68
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
69
- @index += 1
70
- else
71
- terminal_parse_failure("/")
72
- r2 = nil
73
- end
74
- s0 << r2
75
- if r2
76
- r3 = _nt_sub_type
77
- s0 << r3
78
- if r3
79
- s4, i4 = [], index
80
- loop do
81
- i5, s5 = index, []
82
- r6 = _nt_CFWS
83
- s5 << r6
84
- if r6
85
- s7, i7 = [], index
86
- loop do
87
- if has_terminal?(";", false, index)
88
- r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
89
- @index += 1
90
- else
91
- terminal_parse_failure(";")
92
- r8 = nil
93
- end
94
- if r8
95
- s7 << r8
96
- else
97
- break
98
- end
99
- end
100
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
101
- s5 << r7
102
- if r7
103
- r9 = _nt_parameter
104
- s5 << r9
105
- if r9
106
- r10 = _nt_CFWS
107
- s5 << r10
108
- end
109
- end
110
- end
111
- if s5.last
112
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
113
- r5.extend(ContentType0)
114
- else
115
- @index = i5
116
- r5 = nil
117
- end
118
- if r5
119
- s4 << r5
120
- else
121
- break
122
- end
123
- end
124
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
125
- s0 << r4
126
- end
127
- end
128
- end
129
- if s0.last
130
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
131
- r0.extend(ContentType1)
132
- r0.extend(ContentType2)
133
- else
134
- @index = i0
135
- r0 = nil
136
- end
137
-
138
- node_cache[:content_type][start_index] = r0
139
-
140
- r0
141
- end
142
-
143
- def _nt_main_type
144
- start_index = index
145
- if node_cache[:main_type].has_key?(index)
146
- cached = node_cache[:main_type][index]
147
- if cached
148
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
149
- @index = cached.interval.end
150
- end
151
- return cached
152
- end
153
-
154
- i0 = index
155
- r1 = _nt_discrete_type
156
- if r1
157
- r0 = r1
158
- else
159
- r2 = _nt_composite_type
160
- if r2
161
- r0 = r2
162
- else
163
- @index = i0
164
- r0 = nil
165
- end
166
- end
167
-
168
- node_cache[:main_type][start_index] = r0
169
-
170
- r0
171
- end
172
-
173
- module DiscreteType0
174
- end
175
-
176
- module DiscreteType1
177
- end
178
-
179
- module DiscreteType2
180
- end
181
-
182
- module DiscreteType3
183
- end
184
-
185
- module DiscreteType4
186
- end
187
-
188
- def _nt_discrete_type
189
- start_index = index
190
- if node_cache[:discrete_type].has_key?(index)
191
- cached = node_cache[:discrete_type][index]
192
- if cached
193
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
194
- @index = cached.interval.end
195
- end
196
- return cached
197
- end
198
-
199
- i0 = index
200
- i1, s1 = index, []
201
- if has_terminal?('\G[tT]', true, index)
202
- r2 = true
203
- @index += 1
204
- else
205
- r2 = nil
206
- end
207
- s1 << r2
208
- if r2
209
- if has_terminal?('\G[eE]', true, index)
210
- r3 = true
211
- @index += 1
212
- else
213
- r3 = nil
214
- end
215
- s1 << r3
216
- if r3
217
- if has_terminal?('\G[xX]', true, index)
218
- r4 = true
219
- @index += 1
220
- else
221
- r4 = nil
222
- end
223
- s1 << r4
224
- if r4
225
- if has_terminal?('\G[tT]', true, index)
226
- r5 = true
227
- @index += 1
228
- else
229
- r5 = nil
230
- end
231
- s1 << r5
232
- end
233
- end
234
- end
235
- if s1.last
236
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
237
- r1.extend(DiscreteType0)
238
- else
239
- @index = i1
240
- r1 = nil
241
- end
242
- if r1
243
- r0 = r1
244
- else
245
- i6, s6 = index, []
246
- if has_terminal?('\G[iI]', true, index)
247
- r7 = true
248
- @index += 1
249
- else
250
- r7 = nil
251
- end
252
- s6 << r7
253
- if r7
254
- if has_terminal?('\G[mM]', true, index)
255
- r8 = true
256
- @index += 1
257
- else
258
- r8 = nil
259
- end
260
- s6 << r8
261
- if r8
262
- if has_terminal?('\G[aA]', true, index)
263
- r9 = true
264
- @index += 1
265
- else
266
- r9 = nil
267
- end
268
- s6 << r9
269
- if r9
270
- if has_terminal?('\G[gG]', true, index)
271
- r10 = true
272
- @index += 1
273
- else
274
- r10 = nil
275
- end
276
- s6 << r10
277
- if r10
278
- if has_terminal?('\G[eE]', true, index)
279
- r11 = true
280
- @index += 1
281
- else
282
- r11 = nil
283
- end
284
- s6 << r11
285
- end
286
- end
287
- end
288
- end
289
- if s6.last
290
- r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
291
- r6.extend(DiscreteType1)
292
- else
293
- @index = i6
294
- r6 = nil
295
- end
296
- if r6
297
- r0 = r6
298
- else
299
- i12, s12 = index, []
300
- if has_terminal?('\G[aA]', true, index)
301
- r13 = true
302
- @index += 1
303
- else
304
- r13 = nil
305
- end
306
- s12 << r13
307
- if r13
308
- if has_terminal?('\G[uU]', true, index)
309
- r14 = true
310
- @index += 1
311
- else
312
- r14 = nil
313
- end
314
- s12 << r14
315
- if r14
316
- if has_terminal?('\G[dD]', true, index)
317
- r15 = true
318
- @index += 1
319
- else
320
- r15 = nil
321
- end
322
- s12 << r15
323
- if r15
324
- if has_terminal?('\G[iI]', true, index)
325
- r16 = true
326
- @index += 1
327
- else
328
- r16 = nil
329
- end
330
- s12 << r16
331
- if r16
332
- if has_terminal?('\G[oO]', true, index)
333
- r17 = true
334
- @index += 1
335
- else
336
- r17 = nil
337
- end
338
- s12 << r17
339
- end
340
- end
341
- end
342
- end
343
- if s12.last
344
- r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
345
- r12.extend(DiscreteType2)
346
- else
347
- @index = i12
348
- r12 = nil
349
- end
350
- if r12
351
- r0 = r12
352
- else
353
- i18, s18 = index, []
354
- if has_terminal?('\G[vV]', true, index)
355
- r19 = true
356
- @index += 1
357
- else
358
- r19 = nil
359
- end
360
- s18 << r19
361
- if r19
362
- if has_terminal?('\G[iI]', true, index)
363
- r20 = true
364
- @index += 1
365
- else
366
- r20 = nil
367
- end
368
- s18 << r20
369
- if r20
370
- if has_terminal?('\G[dD]', true, index)
371
- r21 = true
372
- @index += 1
373
- else
374
- r21 = nil
375
- end
376
- s18 << r21
377
- if r21
378
- if has_terminal?('\G[eE]', true, index)
379
- r22 = true
380
- @index += 1
381
- else
382
- r22 = nil
383
- end
384
- s18 << r22
385
- if r22
386
- if has_terminal?('\G[oO]', true, index)
387
- r23 = true
388
- @index += 1
389
- else
390
- r23 = nil
391
- end
392
- s18 << r23
393
- end
394
- end
395
- end
396
- end
397
- if s18.last
398
- r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
399
- r18.extend(DiscreteType3)
400
- else
401
- @index = i18
402
- r18 = nil
403
- end
404
- if r18
405
- r0 = r18
406
- else
407
- i24, s24 = index, []
408
- if has_terminal?('\G[aA]', true, index)
409
- r25 = true
410
- @index += 1
411
- else
412
- r25 = nil
413
- end
414
- s24 << r25
415
- if r25
416
- if has_terminal?('\G[pP]', true, index)
417
- r26 = true
418
- @index += 1
419
- else
420
- r26 = nil
421
- end
422
- s24 << r26
423
- if r26
424
- if has_terminal?('\G[pP]', true, index)
425
- r27 = true
426
- @index += 1
427
- else
428
- r27 = nil
429
- end
430
- s24 << r27
431
- if r27
432
- if has_terminal?('\G[lL]', true, index)
433
- r28 = true
434
- @index += 1
435
- else
436
- r28 = nil
437
- end
438
- s24 << r28
439
- if r28
440
- if has_terminal?('\G[iI]', true, index)
441
- r29 = true
442
- @index += 1
443
- else
444
- r29 = nil
445
- end
446
- s24 << r29
447
- if r29
448
- if has_terminal?('\G[cC]', true, index)
449
- r30 = true
450
- @index += 1
451
- else
452
- r30 = nil
453
- end
454
- s24 << r30
455
- if r30
456
- if has_terminal?('\G[aA]', true, index)
457
- r31 = true
458
- @index += 1
459
- else
460
- r31 = nil
461
- end
462
- s24 << r31
463
- if r31
464
- if has_terminal?('\G[tT]', true, index)
465
- r32 = true
466
- @index += 1
467
- else
468
- r32 = nil
469
- end
470
- s24 << r32
471
- if r32
472
- if has_terminal?('\G[iI]', true, index)
473
- r33 = true
474
- @index += 1
475
- else
476
- r33 = nil
477
- end
478
- s24 << r33
479
- if r33
480
- if has_terminal?('\G[oO]', true, index)
481
- r34 = true
482
- @index += 1
483
- else
484
- r34 = nil
485
- end
486
- s24 << r34
487
- if r34
488
- if has_terminal?('\G[nN]', true, index)
489
- r35 = true
490
- @index += 1
491
- else
492
- r35 = nil
493
- end
494
- s24 << r35
495
- end
496
- end
497
- end
498
- end
499
- end
500
- end
501
- end
502
- end
503
- end
504
- end
505
- if s24.last
506
- r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
507
- r24.extend(DiscreteType4)
508
- else
509
- @index = i24
510
- r24 = nil
511
- end
512
- if r24
513
- r0 = r24
514
- else
515
- r36 = _nt_extension_token
516
- if r36
517
- r0 = r36
518
- else
519
- @index = i0
520
- r0 = nil
521
- end
522
- end
523
- end
524
- end
525
- end
526
- end
527
-
528
- node_cache[:discrete_type][start_index] = r0
529
-
530
- r0
531
- end
532
-
533
- module CompositeType0
534
- end
535
-
536
- module CompositeType1
537
- end
538
-
539
- def _nt_composite_type
540
- start_index = index
541
- if node_cache[:composite_type].has_key?(index)
542
- cached = node_cache[:composite_type][index]
543
- if cached
544
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
545
- @index = cached.interval.end
546
- end
547
- return cached
548
- end
549
-
550
- i0 = index
551
- i1, s1 = index, []
552
- if has_terminal?('\G[mM]', true, index)
553
- r2 = true
554
- @index += 1
555
- else
556
- r2 = nil
557
- end
558
- s1 << r2
559
- if r2
560
- if has_terminal?('\G[eE]', true, index)
561
- r3 = true
562
- @index += 1
563
- else
564
- r3 = nil
565
- end
566
- s1 << r3
567
- if r3
568
- if has_terminal?('\G[sS]', true, index)
569
- r4 = true
570
- @index += 1
571
- else
572
- r4 = nil
573
- end
574
- s1 << r4
575
- if r4
576
- if has_terminal?('\G[sS]', true, index)
577
- r5 = true
578
- @index += 1
579
- else
580
- r5 = nil
581
- end
582
- s1 << r5
583
- if r5
584
- if has_terminal?('\G[aA]', true, index)
585
- r6 = true
586
- @index += 1
587
- else
588
- r6 = nil
589
- end
590
- s1 << r6
591
- if r6
592
- if has_terminal?('\G[gG]', true, index)
593
- r7 = true
594
- @index += 1
595
- else
596
- r7 = nil
597
- end
598
- s1 << r7
599
- if r7
600
- if has_terminal?('\G[eE]', true, index)
601
- r8 = true
602
- @index += 1
603
- else
604
- r8 = nil
605
- end
606
- s1 << r8
607
- end
608
- end
609
- end
610
- end
611
- end
612
- end
613
- if s1.last
614
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
615
- r1.extend(CompositeType0)
616
- else
617
- @index = i1
618
- r1 = nil
619
- end
620
- if r1
621
- r0 = r1
622
- else
623
- i9, s9 = index, []
624
- if has_terminal?('\G[mM]', true, index)
625
- r10 = true
626
- @index += 1
627
- else
628
- r10 = nil
629
- end
630
- s9 << r10
631
- if r10
632
- if has_terminal?('\G[uU]', true, index)
633
- r11 = true
634
- @index += 1
635
- else
636
- r11 = nil
637
- end
638
- s9 << r11
639
- if r11
640
- if has_terminal?('\G[lL]', true, index)
641
- r12 = true
642
- @index += 1
643
- else
644
- r12 = nil
645
- end
646
- s9 << r12
647
- if r12
648
- if has_terminal?('\G[tT]', true, index)
649
- r13 = true
650
- @index += 1
651
- else
652
- r13 = nil
653
- end
654
- s9 << r13
655
- if r13
656
- if has_terminal?('\G[iI]', true, index)
657
- r14 = true
658
- @index += 1
659
- else
660
- r14 = nil
661
- end
662
- s9 << r14
663
- if r14
664
- if has_terminal?('\G[pP]', true, index)
665
- r15 = true
666
- @index += 1
667
- else
668
- r15 = nil
669
- end
670
- s9 << r15
671
- if r15
672
- if has_terminal?('\G[aA]', true, index)
673
- r16 = true
674
- @index += 1
675
- else
676
- r16 = nil
677
- end
678
- s9 << r16
679
- if r16
680
- if has_terminal?('\G[rR]', true, index)
681
- r17 = true
682
- @index += 1
683
- else
684
- r17 = nil
685
- end
686
- s9 << r17
687
- if r17
688
- if has_terminal?('\G[tT]', true, index)
689
- r18 = true
690
- @index += 1
691
- else
692
- r18 = nil
693
- end
694
- s9 << r18
695
- end
696
- end
697
- end
698
- end
699
- end
700
- end
701
- end
702
- end
703
- if s9.last
704
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
705
- r9.extend(CompositeType1)
706
- else
707
- @index = i9
708
- r9 = nil
709
- end
710
- if r9
711
- r0 = r9
712
- else
713
- r19 = _nt_extension_token
714
- if r19
715
- r0 = r19
716
- else
717
- @index = i0
718
- r0 = nil
719
- end
720
- end
721
- end
722
-
723
- node_cache[:composite_type][start_index] = r0
724
-
725
- r0
726
- end
727
-
728
- def _nt_extension_token
729
- start_index = index
730
- if node_cache[:extension_token].has_key?(index)
731
- cached = node_cache[:extension_token][index]
732
- if cached
733
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
734
- @index = cached.interval.end
735
- end
736
- return cached
737
- end
738
-
739
- i0 = index
740
- r1 = _nt_ietf_token
741
- if r1
742
- r0 = r1
743
- else
744
- r2 = _nt_custom_x_token
745
- if r2
746
- r0 = r2
747
- else
748
- @index = i0
749
- r0 = nil
750
- end
751
- end
752
-
753
- node_cache[:extension_token][start_index] = r0
754
-
755
- r0
756
- end
757
-
758
- def _nt_sub_type
759
- start_index = index
760
- if node_cache[:sub_type].has_key?(index)
761
- cached = node_cache[:sub_type][index]
762
- if cached
763
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
764
- @index = cached.interval.end
765
- end
766
- return cached
767
- end
768
-
769
- i0 = index
770
- r1 = _nt_extension_token
771
- if r1
772
- r0 = r1
773
- else
774
- r2 = _nt_iana_token
775
- if r2
776
- r0 = r2
777
- else
778
- @index = i0
779
- r0 = nil
780
- end
781
- end
782
-
783
- node_cache[:sub_type][start_index] = r0
784
-
785
- r0
786
- end
787
-
788
- module Parameter0
789
- def attr
790
- elements[1]
791
- end
792
-
793
- def val
794
- elements[3]
795
- end
796
-
797
- end
798
-
799
- module Parameter1
800
- def param_hash
801
- {attr.text_value => val.text_value}
802
- end
803
- end
804
-
805
- def _nt_parameter
806
- start_index = index
807
- if node_cache[:parameter].has_key?(index)
808
- cached = node_cache[:parameter][index]
809
- if cached
810
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
811
- @index = cached.interval.end
812
- end
813
- return cached
814
- end
815
-
816
- i0, s0 = index, []
817
- r2 = _nt_CFWS
818
- if r2
819
- r1 = r2
820
- else
821
- r1 = instantiate_node(SyntaxNode,input, index...index)
822
- end
823
- s0 << r1
824
- if r1
825
- r3 = _nt_attribute
826
- s0 << r3
827
- if r3
828
- if has_terminal?("=", false, index)
829
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
830
- @index += 1
831
- else
832
- terminal_parse_failure("=")
833
- r4 = nil
834
- end
835
- s0 << r4
836
- if r4
837
- r5 = _nt_value
838
- s0 << r5
839
- if r5
840
- r7 = _nt_CFWS
841
- if r7
842
- r6 = r7
843
- else
844
- r6 = instantiate_node(SyntaxNode,input, index...index)
845
- end
846
- s0 << r6
847
- end
848
- end
849
- end
850
- end
851
- if s0.last
852
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
853
- r0.extend(Parameter0)
854
- r0.extend(Parameter1)
855
- else
856
- @index = i0
857
- r0 = nil
858
- end
859
-
860
- node_cache[:parameter][start_index] = r0
861
-
862
- r0
863
- end
864
-
865
- def _nt_attribute
866
- start_index = index
867
- if node_cache[:attribute].has_key?(index)
868
- cached = node_cache[:attribute][index]
869
- if cached
870
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
871
- @index = cached.interval.end
872
- end
873
- return cached
874
- end
875
-
876
- s0, i0 = [], index
877
- loop do
878
- r1 = _nt_token
879
- if r1
880
- s0 << r1
881
- else
882
- break
883
- end
884
- end
885
- if s0.empty?
886
- @index = i0
887
- r0 = nil
888
- else
889
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
890
- end
891
-
892
- node_cache[:attribute][start_index] = r0
893
-
894
- r0
895
- end
896
-
897
- module Value0
898
- def text_value
899
- quoted_content.text_value
900
- end
901
- end
902
-
903
- def _nt_value
904
- start_index = index
905
- if node_cache[:value].has_key?(index)
906
- cached = node_cache[:value][index]
907
- if cached
908
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
909
- @index = cached.interval.end
910
- end
911
- return cached
912
- end
913
-
914
- i0 = index
915
- r1 = _nt_quoted_string
916
- r1.extend(Value0)
917
- if r1
918
- r0 = r1
919
- else
920
- s2, i2 = [], index
921
- loop do
922
- i3 = index
923
- r4 = _nt_token
924
- if r4
925
- r3 = r4
926
- else
927
- if has_terminal?('\G[\\x3d]', true, index)
928
- r5 = true
929
- @index += 1
930
- else
931
- r5 = nil
932
- end
933
- if r5
934
- r3 = r5
935
- else
936
- @index = i3
937
- r3 = nil
938
- end
939
- end
940
- if r3
941
- s2 << r3
942
- else
943
- break
944
- end
945
- end
946
- if s2.empty?
947
- @index = i2
948
- r2 = nil
949
- else
950
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
951
- end
952
- if r2
953
- r0 = r2
954
- else
955
- @index = i0
956
- r0 = nil
957
- end
958
- end
959
-
960
- node_cache[:value][start_index] = r0
961
-
962
- r0
963
- end
964
-
965
- end
966
-
967
- class ContentTypeParser < Treetop::Runtime::CompiledParser
968
- include ContentType
969
- end
970
-
971
- end