Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Update TMail to v1.1.0. Use an updated version of TMail if available.…

… [mikel]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8084 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
commit 2a51c8682d44ee71a3c0411e2e30ef8ff29d6f67 1 parent 7464a39
@technoweenie technoweenie authored
Showing with 1,610 additions and 338 deletions.
  1. +2 −0  actionmailer/CHANGELOG
  2. +10 −1 actionmailer/lib/action_mailer.rb
  3. +2 −1  actionmailer/lib/action_mailer/vendor/tmail.rb
  4. +19 −0 actionmailer/lib/action_mailer/vendor/tmail/Makefile
  5. +6 −3 actionmailer/lib/action_mailer/vendor/tmail/address.rb
  6. +6 −0 actionmailer/lib/action_mailer/vendor/tmail/attachments.rb
  7. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/base64.rb
  8. +39 −0 actionmailer/lib/action_mailer/vendor/tmail/compat.rb
  9. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/config.rb
  10. +67 −0 actionmailer/lib/action_mailer/vendor/tmail/core_extensions.rb
  11. +23 −9 actionmailer/lib/action_mailer/vendor/tmail/encode.rb
  12. +23 −6 actionmailer/lib/action_mailer/vendor/tmail/header.rb
  13. +540 −0 actionmailer/lib/action_mailer/vendor/tmail/interface.rb
  14. +20 −5 actionmailer/lib/action_mailer/vendor/tmail/mail.rb
  15. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/mailbox.rb
  16. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/net.rb
  17. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb
  18. +234 −281 actionmailer/lib/action_mailer/vendor/tmail/parser.rb
  19. +381 −0 actionmailer/lib/action_mailer/vendor/tmail/parser.y
  20. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/port.rb
  21. +5 −0 actionmailer/lib/action_mailer/vendor/tmail/quoting.rb
  22. +5 −3 actionmailer/lib/action_mailer/vendor/tmail/scanner.rb
  23. +6 −4 actionmailer/lib/action_mailer/vendor/tmail/stringio.rb
  24. +50 −7 actionmailer/lib/action_mailer/vendor/tmail/utils.rb
  25. +38 −0 actionmailer/lib/action_mailer/vendor/tmail/version.rb
  26. +104 −0 actionmailer/test/fixtures/raw_email_with_invalid_characters_in_content_type
View
2  actionmailer/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Update TMail to v1.1.0. Use an updated version of TMail if available. [mikel]
+
* Introduce a new base test class for testing Mailers. ActionMailer::TestCase [Koz]
* Fix silent failure of rxml templates. #9879 [jstewart]
View
11 actionmailer/lib/action_mailer.rb
@@ -31,14 +31,23 @@
end
end
+# attempt to load the TMail gem
+begin
+ require 'rubygems'
+ gem 'TMail', '> 1.1.0'
+ require 'tmail'
+rescue Gem::LoadError
+ # no gem, fall back to vendor copy
+end
+
$:.unshift(File.dirname(__FILE__) + "/action_mailer/vendor/")
+require 'tmail'
require 'action_mailer/base'
require 'action_mailer/helpers'
require 'action_mailer/mail_helper'
require 'action_mailer/quoting'
require 'action_mailer/test_helper'
-require 'tmail'
require 'net/smtp'
ActionMailer::Base.class_eval do
View
3  actionmailer/lib/action_mailer/vendor/tmail.rb
@@ -1,3 +1,4 @@
-require 'tmail/info'
+require 'tmail/version'
require 'tmail/mail'
require 'tmail/mailbox'
+require 'tmail/core_extensions'
View
19 actionmailer/lib/action_mailer/vendor/tmail/Makefile
@@ -0,0 +1,19 @@
+#
+# lib/tmail/Makefile
+#
+
+debug:
+ rm -f parser.rb
+ make parser.rb DEBUG=true
+
+parser.rb: parser.y
+ if [ "$(DEBUG)" = true ]; then \
+ racc -v -g -o$@ parser.y ;\
+ else \
+ racc -E -o$@ parser.y ;\
+ fi
+
+clean:
+ rm -f parser.rb parser.output
+
+distclean: clean
View
9 actionmailer/lib/action_mailer/vendor/tmail/address.rb
@@ -1,5 +1,8 @@
-#
-# address.rb
+=begin rdoc
+
+= Address handling class
+
+=end
#
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
@@ -51,6 +54,7 @@ def initialize( local, domain )
raise SyntaxError, 'empty word in domain' if s.empty?
end
end
+
@local = local
@domain = domain
@name = nil
@@ -96,7 +100,6 @@ def spec
alias address spec
-
def ==( other )
other.respond_to? :spec and self.spec == other.spec
end
View
6 actionmailer/lib/action_mailer/vendor/tmail/attachments.rb
@@ -1,3 +1,9 @@
+=begin rdoc
+
+= Attachment handling class
+
+=end
+
require 'stringio'
module TMail
View
8 actionmailer/lib/action_mailer/vendor/tmail/base64.rb
@@ -1,6 +1,8 @@
-#
-# base64.rb
-#
+=begin rdoc
+
+= Base64 handling class
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
View
39 actionmailer/lib/action_mailer/vendor/tmail/compat.rb
@@ -0,0 +1,39 @@
+unless Enumerable.method_defined?(:map)
+ module Enumerable
+ alias map collect
+ end
+end
+
+unless Enumerable.method_defined?(:select)
+ module Enumerable
+ alias select find_all
+ end
+end
+
+unless Enumerable.method_defined?(:reject)
+ module Enumerable
+ def reject
+ result = []
+ each do |i|
+ result.push i unless yield(i)
+ end
+ result
+ end
+ end
+end
+
+unless Enumerable.method_defined?(:sort_by)
+ module Enumerable
+ def sort_by
+ map {|i| [yield(i), i] }.sort.map {|val, i| i }
+ end
+ end
+end
+
+unless File.respond_to?(:read)
+ def File.read(fname)
+ File.open(fname) {|f|
+ return f.read
+ }
+ end
+end
View
8 actionmailer/lib/action_mailer/vendor/tmail/config.rb
@@ -1,6 +1,8 @@
-#
-# config.rb
-#
+=begin rdoc
+
+= Configuration Class
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
View
67 actionmailer/lib/action_mailer/vendor/tmail/core_extensions.rb
@@ -0,0 +1,67 @@
+=begin rdoc
+
+= Ruby on Rails Core Extensions
+
+provides .blank?
+
+=end
+unless Object.respond_to?(:blank?) #:nodoc:
+ # Check first to see if we are in a Rails environment, no need to
+ # define these methods if we are
+ class Object
+ # An object is blank if it's nil, empty, or a whitespace string.
+ # For example, "", " ", nil, [], and {} are blank.
+ #
+ # This simplifies
+ # if !address.nil? && !address.empty?
+ # to
+ # if !address.blank?
+ def blank?
+ if respond_to?(:empty?) && respond_to?(:strip)
+ empty? or strip.empty?
+ elsif respond_to?(:empty?)
+ empty?
+ else
+ !self
+ end
+ end
+ end
+
+ class NilClass #:nodoc:
+ def blank?
+ true
+ end
+ end
+
+ class FalseClass #:nodoc:
+ def blank?
+ true
+ end
+ end
+
+ class TrueClass #:nodoc:
+ def blank?
+ false
+ end
+ end
+
+ class Array #:nodoc:
+ alias_method :blank?, :empty?
+ end
+
+ class Hash #:nodoc:
+ alias_method :blank?, :empty?
+ end
+
+ class String #:nodoc:
+ def blank?
+ empty? || strip.empty?
+ end
+ end
+
+ class Numeric #:nodoc:
+ def blank?
+ false
+ end
+ end
+end
View
32 actionmailer/lib/action_mailer/vendor/tmail/encode.rb
@@ -1,6 +1,8 @@
-#
-# encode.rb
-#
+=begin rdoc
+
+= Text Encoding class
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
@@ -50,23 +52,25 @@ def create_dest( obj )
end
end
module_function :create_dest
-
+
def encoded( eol = "\r\n", charset = 'j', dest = nil )
accept_strategy Encoder, eol, charset, dest
end
-
+
def decoded( eol = "\n", charset = 'e', dest = nil )
+ # Turn the E-Mail into a string and return it with all
+ # encoded characters decoded. alias for to_s
accept_strategy Decoder, eol, charset, dest
end
-
+
alias to_s decoded
-
+
def accept_strategy( klass, eol, charset, dest = nil )
dest ||= ''
- accept klass.new(create_dest(dest), charset, eol)
+ accept klass.new( create_dest(dest), charset, eol )
dest
end
-
+
end
@@ -141,6 +145,7 @@ def phrase( str )
end
def kv_pair( k, v )
+ v = dquote(v) unless token_safe?(v)
@f << k << '=' << v
end
@@ -190,9 +195,18 @@ def initialize( dest = nil, encoding = nil, eol = "\r\n", limit = nil )
@f = StrategyInterface.create_dest(dest)
@opt = OPTIONS[$KCODE]
@eol = eol
+ @preserve_quotes = true
reset
end
+ def preserve_quotes=( bool )
+ @preserve_quotes
+ end
+
+ def preserve_quotes
+ @preserve_quotes
+ end
+
def normalize_encoding( str )
if @opt
then NKF.nkf(@opt, str)
View
29 actionmailer/lib/action_mailer/vendor/tmail/header.rb
@@ -1,5 +1,10 @@
-#
-# header.rb
+=begin rdoc
+
+= Header handling class
+
+=end
+# RFC #822 ftp://ftp.isi.edu/in-notes/rfc822.txt
+#
#
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
@@ -76,6 +81,7 @@ def initialize( body, conf, intern = false )
@illegal = false
@parsed = false
+
if intern
@parsed = true
parse_init
@@ -129,7 +135,7 @@ def body=( str )
include StrategyInterface
- def accept( strategy, dummy1 = nil, dummy2 = nil )
+ def accept( strategy )
ensure_parsed
do_accept strategy
strategy.terminate
@@ -207,6 +213,7 @@ def parse_init
end
def do_parse
+ quote_boundary
obj = Parser.parse(self.class::PARSE_TYPE, @body, @comments)
set obj if obj
end
@@ -739,12 +746,17 @@ def content_type
def params
ensure_parsed
+ unless @params.blank?
+ @params.each do |k, v|
+ @params[k] = unquote(v)
+ end
+ end
@params
end
def []( key )
ensure_parsed
- @params and @params[key]
+ @params and unquote(@params[key])
end
def []=( key, val )
@@ -835,12 +847,17 @@ def disposition=( str )
def params
ensure_parsed
+ unless @params.blank?
+ @params.each do |k, v|
+ @params[k] = unquote(v)
+ end
+ end
@params
end
def []( key )
ensure_parsed
- @params and @params[key]
+ @params and unquote(@params[key])
end
def []=( key, val )
@@ -867,7 +884,7 @@ def do_accept( strategy )
@params.each do |k,v|
strategy.meta ';'
strategy.space
- strategy.kv_pair k, v
+ strategy.kv_pair k, unquote(v)
end
end
View
540 actionmailer/lib/action_mailer/vendor/tmail/interface.rb
@@ -0,0 +1,540 @@
+=begin rdoc
+
+= Facade.rb Provides an interface to the TMail object
+
+=end
+#--
+# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
+# with permission of Minero Aoki.
+#++
+
+require 'tmail/utils'
+
+module TMail
+
+ class Mail
+
+ def header_string( name, default = nil )
+ h = @header[name.downcase] or return default
+ h.to_s
+ end
+
+ ###
+ ### attributes
+ ###
+
+ include TextUtils
+
+ def set_string_array_attr( key, strs )
+ strs.flatten!
+ if strs.empty?
+ @header.delete key.downcase
+ else
+ store key, strs.join(', ')
+ end
+ strs
+ end
+ private :set_string_array_attr
+
+ def set_string_attr( key, str )
+ if str
+ store key, str
+ else
+ @header.delete key.downcase
+ end
+ str
+ end
+ private :set_string_attr
+
+ def set_addrfield( name, arg )
+ if arg
+ h = HeaderField.internal_new(name, @config)
+ h.addrs.replace [arg].flatten
+ @header[name] = h
+ else
+ @header.delete name
+ end
+ arg
+ end
+ private :set_addrfield
+
+ def addrs2specs( addrs )
+ return nil unless addrs
+ list = addrs.map {|addr|
+ if addr.address_group?
+ then addr.map {|a| a.spec }
+ else addr.spec
+ end
+ }.flatten
+ return nil if list.empty?
+ list
+ end
+ private :addrs2specs
+
+ #
+ # date time
+ #
+
+ def date( default = nil )
+ if h = @header['date']
+ h.date
+ else
+ default
+ end
+ end
+
+ def date=( time )
+ if time
+ store 'Date', time2str(time)
+ else
+ @header.delete 'date'
+ end
+ time
+ end
+
+ def strftime( fmt, default = nil )
+ if t = date
+ t.strftime(fmt)
+ else
+ default
+ end
+ end
+
+ #
+ # destination
+ #
+
+ def to_addrs( default = nil )
+ if h = @header['to']
+ h.addrs
+ else
+ default
+ end
+ end
+
+ def cc_addrs( default = nil )
+ if h = @header['cc']
+ h.addrs
+ else
+ default
+ end
+ end
+
+ def bcc_addrs( default = nil )
+ if h = @header['bcc']
+ h.addrs
+ else
+ default
+ end
+ end
+
+ def to_addrs=( arg )
+ set_addrfield 'to', arg
+ end
+
+ def cc_addrs=( arg )
+ set_addrfield 'cc', arg
+ end
+
+ def bcc_addrs=( arg )
+ set_addrfield 'bcc', arg
+ end
+
+ def to( default = nil )
+ addrs2specs(to_addrs(nil)) || default
+ end
+
+ def cc( default = nil )
+ addrs2specs(cc_addrs(nil)) || default
+ end
+
+ def bcc( default = nil )
+ addrs2specs(bcc_addrs(nil)) || default
+ end
+
+ def to=( *strs )
+ set_string_array_attr 'To', strs
+ end
+
+ def cc=( *strs )
+ set_string_array_attr 'Cc', strs
+ end
+
+ def bcc=( *strs )
+ set_string_array_attr 'Bcc', strs
+ end
+
+ #
+ # originator
+ #
+
+ def from_addrs( default = nil )
+ if h = @header['from']
+ h.addrs
+ else
+ default
+ end
+ end
+
+ def from_addrs=( arg )
+ set_addrfield 'from', arg
+ end
+
+ def from( default = nil )
+ addrs2specs(from_addrs(nil)) || default
+ end
+
+ def from=( *strs )
+ set_string_array_attr 'From', strs
+ end
+
+ def friendly_from( default = nil )
+ h = @header['from']
+ a, = h.addrs
+ return default unless a
+ return a.phrase if a.phrase
+ return h.comments.join(' ') unless h.comments.empty?
+ a.spec
+ end
+
+
+ def reply_to_addrs( default = nil )
+ if h = @header['reply-to']
+ h.addrs
+ else
+ default
+ end
+ end
+
+ def reply_to_addrs=( arg )
+ set_addrfield 'reply-to', arg
+ end
+
+ def reply_to( default = nil )
+ addrs2specs(reply_to_addrs(nil)) || default
+ end
+
+ def reply_to=( *strs )
+ set_string_array_attr 'Reply-To', strs
+ end
+
+
+ def sender_addr( default = nil )
+ f = @header['sender'] or return default
+ f.addr or return default
+ end
+
+ def sender_addr=( addr )
+ if addr
+ h = HeaderField.internal_new('sender', @config)
+ h.addr = addr
+ @header['sender'] = h
+ else
+ @header.delete 'sender'
+ end
+ addr
+ end
+
+ def sender( default )
+ f = @header['sender'] or return default
+ a = f.addr or return default
+ a.spec
+ end
+
+ def sender=( str )
+ set_string_attr 'Sender', str
+ end
+
+
+ #
+ # subject
+ #
+
+ def subject( default = nil )
+ if h = @header['subject']
+ h.body
+ else
+ default
+ end
+ end
+ alias quoted_subject subject
+
+ def subject=( str )
+ set_string_attr 'Subject', str
+ end
+
+ #
+ # identity & threading
+ #
+
+ def message_id( default = nil )
+ if h = @header['message-id']
+ h.id || default
+ else
+ default
+ end
+ end
+
+ def message_id=( str )
+ set_string_attr 'Message-Id', str
+ end
+
+ def in_reply_to( default = nil )
+ if h = @header['in-reply-to']
+ h.ids
+ else
+ default
+ end
+ end
+
+ def in_reply_to=( *idstrs )
+ set_string_array_attr 'In-Reply-To', idstrs
+ end
+
+ def references( default = nil )
+ if h = @header['references']
+ h.refs
+ else
+ default
+ end
+ end
+
+ def references=( *strs )
+ set_string_array_attr 'References', strs
+ end
+
+ #
+ # MIME headers
+ #
+
+ def mime_version( default = nil )
+ if h = @header['mime-version']
+ h.version || default
+ else
+ default
+ end
+ end
+
+ def mime_version=( m, opt = nil )
+ if opt
+ if h = @header['mime-version']
+ h.major = m
+ h.minor = opt
+ else
+ store 'Mime-Version', "#{m}.#{opt}"
+ end
+ else
+ store 'Mime-Version', m
+ end
+ m
+ end
+
+ def content_type( default = nil )
+ if h = @header['content-type']
+ h.content_type || default
+ else
+ default
+ end
+ end
+
+ def main_type( default = nil )
+ if h = @header['content-type']
+ h.main_type || default
+ else
+ default
+ end
+ end
+
+ def sub_type( default = nil )
+ if h = @header['content-type']
+ h.sub_type || default
+ else
+ default
+ end
+ end
+
+ def set_content_type( str, sub = nil, param = nil )
+ if sub
+ main, sub = str, sub
+ else
+ main, sub = str.split(%r</>, 2)
+ raise ArgumentError, "sub type missing: #{str.inspect}" unless sub
+ end
+ if h = @header['content-type']
+ h.main_type = main
+ h.sub_type = sub
+ h.params.clear
+ else
+ store 'Content-Type', "#{main}/#{sub}"
+ end
+ @header['content-type'].params.replace param if param
+ str
+ end
+
+ alias content_type= set_content_type
+
+ def type_param( name, default = nil )
+ if h = @header['content-type']
+ h[name] || default
+ else
+ default
+ end
+ end
+
+ def charset( default = nil )
+ if h = @header['content-type']
+ h['charset'] or default
+ else
+ default
+ end
+ end
+
+ def charset=( str )
+ if str
+ if h = @header[ 'content-type' ]
+ h['charset'] = str
+ else
+ store 'Content-Type', "text/plain; charset=#{str}"
+ end
+ end
+ str
+ end
+
+ def transfer_encoding( default = nil )
+ if h = @header['content-transfer-encoding']
+ h.encoding || default
+ else
+ default
+ end
+ end
+
+ def transfer_encoding=( str )
+ set_string_attr 'Content-Transfer-Encoding', str
+ end
+
+ alias encoding transfer_encoding
+ alias encoding= transfer_encoding=
+ alias content_transfer_encoding transfer_encoding
+ alias content_transfer_encoding= transfer_encoding=
+
+ def disposition( default = nil )
+ if h = @header['content-disposition']
+ h.disposition || default
+ else
+ default
+ end
+ end
+
+ alias content_disposition disposition
+
+ def set_disposition( str, params = nil )
+ if h = @header['content-disposition']
+ h.disposition = str
+ h.params.clear
+ else
+ store('Content-Disposition', str)
+ h = @header['content-disposition']
+ end
+ h.params.replace params if params
+ end
+
+ alias disposition= set_disposition
+ alias set_content_disposition set_disposition
+ alias content_disposition= set_disposition
+
+ def disposition_param( name, default = nil )
+ if h = @header['content-disposition']
+ h[name] || default
+ else
+ default
+ end
+ end
+
+ ###
+ ### utils
+ ###
+
+ def create_reply
+ mail = TMail::Mail.parse('')
+ mail.subject = 'Re: ' + subject('').sub(/\A(?:\[[^\]]+\])?(?:\s*Re:)*\s*/i, '')
+ mail.to_addrs = reply_addresses([])
+ mail.in_reply_to = [message_id(nil)].compact
+ mail.references = references([]) + [message_id(nil)].compact
+ mail.mime_version = '1.0'
+ mail
+ end
+
+ def base64_encode
+ store 'Content-Transfer-Encoding', 'Base64'
+ self.body = Base64.folding_encode(self.body)
+ end
+
+ def base64_decode
+ if /base64/i === self.transfer_encoding('')
+ store 'Content-Transfer-Encoding', '8bit'
+ self.body = Base64.decode(self.body, @config.strict_base64decode?)
+ end
+ end
+
+ def destinations( default = nil )
+ ret = []
+ %w( to cc bcc ).each do |nm|
+ if h = @header[nm]
+ h.addrs.each {|i| ret.push i.address }
+ end
+ end
+ ret.empty? ? default : ret
+ end
+
+ def each_destination( &block )
+ destinations([]).each do |i|
+ if Address === i
+ yield i
+ else
+ i.each(&block)
+ end
+ end
+ end
+
+ alias each_dest each_destination
+
+ def reply_addresses( default = nil )
+ reply_to_addrs(nil) or from_addrs(nil) or default
+ end
+
+ def error_reply_addresses( default = nil )
+ if s = sender(nil)
+ [s]
+ else
+ from_addrs(default)
+ end
+ end
+
+ def multipart?
+ main_type('').downcase == 'multipart'
+ end
+
+ end # class Mail
+
+end # module TMail
View
25 actionmailer/lib/action_mailer/vendor/tmail/mail.rb
@@ -1,6 +1,8 @@
-#
-# mail.rb
-#
+=begin rdoc
+
+= Mail class
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
@@ -27,7 +29,7 @@
# with permission of Minero Aoki.
#++
-require 'tmail/facade'
+require 'tmail/interface'
require 'tmail/encode'
require 'tmail/header'
require 'tmail/port'
@@ -37,7 +39,6 @@
require 'tmail/quoting'
require 'socket'
-
module TMail
class Mail
@@ -53,6 +54,7 @@ def load( fname )
def parse( str )
new(StringPort.new(str))
end
+
end
def initialize( port = nil, conf = DEFAULT_CONFIG )
@@ -355,6 +357,19 @@ def quoted_body
end
def body=( str )
+ # Sets the body of the email to a new (encoded) string.
+ #
+ # We also reparses the email if the body is ever reassigned, this is a performance hit, however when
+ # you assign the body, you usually want to be able to make sure that you can access the attachments etc.
+ #
+ # Usage:
+ #
+ # mail.body = "Hello, this is\nthe body text"
+ # # => "Hello, this is\nthe body"
+ # mail.body
+ # # => "Hello, this is\nthe body"
+ @body_parsed = false
+ parse_body(StringInput.new(str))
parse_body
@body_port.wopen {|f| f.write str }
str
View
8 actionmailer/lib/action_mailer/vendor/tmail/mailbox.rb
@@ -1,6 +1,8 @@
-#
-# mailbox.rb
-#
+=begin rdoc
+
+= Mailbox and Mbox interaction class
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
View
8 actionmailer/lib/action_mailer/vendor/tmail/net.rb
@@ -1,6 +1,8 @@
-#
-# net.rb
-#
+=begin rdoc
+
+= Net provides SMTP wrapping
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
View
8 actionmailer/lib/action_mailer/vendor/tmail/obsolete.rb
@@ -1,6 +1,8 @@
-#
-# obsolete.rb
-#
+=begin rdoc
+
+= Obsolete methods that are depriciated
+
+=end
#--
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
#
View
515 actionmailer/lib/action_mailer/vendor/tmail/parser.rb
@@ -1,38 +1,32 @@
-#
# DO NOT MODIFY!!!!
-# This file is automatically generated by racc 1.4.3
+# This file is automatically generated by racc 1.4.5
# from racc grammer file "parser.y".
#
#
# parser.rb: generated by racc (runtime embedded)
#
-
-###### racc/parser.rb
-
+###### racc/parser.rb begin
unless $".index 'racc/parser.rb'
$".push 'racc/parser.rb'
-self.class.module_eval <<'..end /home/aamine/lib/ruby/racc/parser.rb modeval..idb76f2e220d', '/home/aamine/lib/ruby/racc/parser.rb', 1
+self.class.module_eval <<'..end racc/parser.rb modeval..id8076474214', 'racc/parser.rb', 1
#
-# parser.rb
-#
-# Copyright (c) 1999-2003 Minero Aoki <aamine@loveruby.net>
+# $Id: parser.rb,v 1.7 2005/11/20 17:31:32 aamine Exp $
#
-# This program is free software.
-# You can distribute/modify this program under the same terms of ruby.
+# Copyright (c) 1999-2005 Minero Aoki
#
-# As a special exception, when this code is copied by Racc
-# into a Racc output file, you may use that output file
-# without restriction.
+# This program is free software.
+# You can distribute/modify this program under the same terms of ruby.
#
-# $Id: parser.rb,v 1.1.1.1 2004/10/14 11:59:58 webster132 Exp $
+# As a special exception, when this code is copied by Racc
+# into a Racc output file, you may use that output file
+# without restriction.
#
-unless defined? NotImplementedError
+unless defined?(NotImplementedError)
NotImplementedError = NotImplementError
end
-
module Racc
class ParseError < StandardError; end
end
@@ -40,24 +34,23 @@ class ParseError < StandardError; end
ParseError = Racc::ParseError
end
-
module Racc
- unless defined? Racc_No_Extentions
+ unless defined?(Racc_No_Extentions)
Racc_No_Extentions = false
end
class Parser
- Racc_Runtime_Version = '1.4.3'
- Racc_Runtime_Revision = '$Revision: 1.1.1.1 $'.split(/\s+/)[1]
+ Racc_Runtime_Version = '1.4.5'
+ Racc_Runtime_Revision = '$Revision: 1.7 $'.split[1]
- Racc_Runtime_Core_Version_R = '1.4.3'
- Racc_Runtime_Core_Revision_R = '$Revision: 1.1.1.1 $'.split(/\s+/)[1]
+ Racc_Runtime_Core_Version_R = '1.4.5'
+ Racc_Runtime_Core_Revision_R = '$Revision: 1.7 $'.split[1]
begin
require 'racc/cparse'
# Racc_Runtime_Core_Version_C = (defined in extention)
- Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split(/\s+/)[2]
+ Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]
unless new.respond_to?(:_racc_do_parse_c, true)
raise LoadError, 'old cparse.so'
end
@@ -78,7 +71,7 @@ class Parser
Racc_Runtime_Type = 'ruby'
end
- def self.racc_runtime_type
+ def Parser.racc_runtime_type
Racc_Runtime_Type
end
@@ -86,9 +79,9 @@ def self.racc_runtime_type
def _racc_setup
@yydebug = false unless self.class::Racc_debug_parser
- @yydebug = false unless defined? @yydebug
+ @yydebug = false unless defined?(@yydebug)
if @yydebug
- @racc_debug_out = $stderr unless defined? @racc_debug_out
+ @racc_debug_out = $stderr unless defined?(@racc_debug_out)
@racc_debug_out ||= $stderr
end
arg = self.class::Racc_arg
@@ -110,20 +103,19 @@ def _racc_init_sysvars
@racc_error_status = 0
end
-
###
### do_parse
###
def do_parse
- __send__ Racc_Main_Parsing_Routine, _racc_setup(), false
+ __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)
end
def next_token
raise NotImplementedError, "#{self.class}\#next_token is not defined"
end
- def _racc_do_parse_rb( arg, in_debug )
+ def _racc_do_parse_rb(arg, in_debug)
action_table, action_check, action_default, action_pointer,
goto_table, goto_check, goto_default, goto_pointer,
nt_base, reduce_table, token_table, shift_n,
@@ -134,47 +126,45 @@ def _racc_do_parse_rb( arg, in_debug )
nerr = 0
catch(:racc_end_parse) {
- while true
- if i = action_pointer[@racc_state[-1]]
- if @racc_read_next
- if @racc_t != 0 # not EOF
- tok, @racc_val = next_token()
- unless tok # EOF
- @racc_t = 0
- else
- @racc_t = (token_table[tok] or 1) # error token
- end
- racc_read_token(@racc_t, tok, @racc_val) if @yydebug
- @racc_read_next = false
+ while true
+ if i = action_pointer[@racc_state[-1]]
+ if @racc_read_next
+ if @racc_t != 0 # not EOF
+ tok, @racc_val = next_token()
+ unless tok # EOF
+ @racc_t = 0
+ else
+ @racc_t = (token_table[tok] or 1) # error token
end
+ racc_read_token(@racc_t, tok, @racc_val) if @yydebug
+ @racc_read_next = false
end
- i += @racc_t
- if i >= 0 and
- act = action_table[i] and
- action_check[i] == @racc_state[-1]
- ;
- else
- act = action_default[@racc_state[-1]]
- end
- else
- act = action_default[@racc_state[-1]]
end
- while act = _racc_evalact(act, arg)
+ i += @racc_t
+ unless i >= 0 and
+ act = action_table[i] and
+ action_check[i] == @racc_state[-1]
+ act = action_default[@racc_state[-1]]
end
+ else
+ act = action_default[@racc_state[-1]]
end
+ while act = _racc_evalact(act, arg)
+ ;
+ end
+ end
}
end
-
###
### yyparse
###
- def yyparse( recv, mid )
- __send__ Racc_YY_Parse_Method, recv, mid, _racc_setup(), true
+ def yyparse(recv, mid)
+ __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)
end
- def _racc_yyparse_rb( recv, mid, arg, c_debug )
+ def _racc_yyparse_rb(recv, mid, arg, c_debug)
action_table, action_check, action_default, action_pointer,
goto_table, goto_check, goto_default, goto_pointer,
nt_base, reduce_table, token_table, shift_n,
@@ -186,15 +176,13 @@ def _racc_yyparse_rb( recv, mid, arg, c_debug )
i = nil
nerr = 0
-
catch(:racc_end_parse) {
until i = action_pointer[@racc_state[-1]]
while act = _racc_evalact(action_default[@racc_state[-1]], arg)
+ ;
end
end
-
recv.__send__(mid) do |tok, val|
-# $stderr.puts "rd: tok=#{tok}, val=#{val}"
unless tok
@racc_t = 0
else
@@ -204,67 +192,53 @@ def _racc_yyparse_rb( recv, mid, arg, c_debug )
@racc_read_next = false
i += @racc_t
- if i >= 0 and
- act = action_table[i] and
- action_check[i] == @racc_state[-1]
- ;
-# $stderr.puts "01: act=#{act}"
- else
+ unless i >= 0 and
+ act = action_table[i] and
+ action_check[i] == @racc_state[-1]
act = action_default[@racc_state[-1]]
-# $stderr.puts "02: act=#{act}"
-# $stderr.puts "curstate=#{@racc_state[-1]}"
end
-
while act = _racc_evalact(act, arg)
+ ;
end
while not (i = action_pointer[@racc_state[-1]]) or
not @racc_read_next or
@racc_t == 0 # $
- if i and i += @racc_t and
- i >= 0 and
- act = action_table[i] and
- action_check[i] == @racc_state[-1]
- ;
-# $stderr.puts "03: act=#{act}"
- else
-# $stderr.puts "04: act=#{act}"
+ unless i and i += @racc_t and
+ i >= 0 and
+ act = action_table[i] and
+ action_check[i] == @racc_state[-1]
act = action_default[@racc_state[-1]]
end
-
while act = _racc_evalact(act, arg)
+ ;
end
end
end
}
end
-
###
### common
###
- def _racc_evalact( act, arg )
-# $stderr.puts "ea: act=#{act}"
+ def _racc_evalact(act, arg)
action_table, action_check, action_default, action_pointer,
goto_table, goto_check, goto_default, goto_pointer,
nt_base, reduce_table, token_table, shift_n,
reduce_n, use_result, * = arg
-nerr = 0 # tmp
+ nerr = 0 # tmp
if act > 0 and act < shift_n
#
# shift
#
-
if @racc_error_status > 0
@racc_error_status -= 1 unless @racc_t == 1 # error token
end
-
@racc_vstack.push @racc_val
@racc_state.push act
@racc_read_next = true
-
if @yydebug
@racc_tstack.push @racc_t
racc_shift @racc_t, @racc_tstack, @racc_vstack
@@ -274,10 +248,9 @@ def _racc_evalact( act, arg )
#
# reduce
#
-
code = catch(:racc_jump) {
- @racc_state.push _racc_do_reduce(arg, act)
- false
+ @racc_state.push _racc_do_reduce(arg, act)
+ false
}
if code
case code
@@ -287,7 +260,7 @@ def _racc_evalact( act, arg )
when 2 # yyaccept
return shift_n
else
- raise RuntimeError, '[Racc Bug] unknown jump code'
+ raise '[Racc Bug] unknown jump code'
end
end
@@ -295,7 +268,6 @@ def _racc_evalact( act, arg )
#
# accept
#
-
racc_accept if @yydebug
throw :racc_end_parse, @racc_vstack[0]
@@ -303,7 +275,6 @@ def _racc_evalact( act, arg )
#
# error
#
-
case @racc_error_status
when 0
unless arg[21] # user_yyerror
@@ -318,7 +289,6 @@ def _racc_evalact( act, arg )
end
@racc_user_yyerror = false
@racc_error_status = 3
-
while true
if i = action_pointer[@racc_state[-1]]
i += 1 # error token
@@ -328,8 +298,7 @@ def _racc_evalact( act, arg )
break
end
end
-
- throw :racc_end_parse, nil if @racc_state.size < 2
+ throw :racc_end_parse, nil if @racc_state.size <= 1
@racc_state.pop
@racc_vstack.pop
if @yydebug
@@ -337,11 +306,10 @@ def _racc_evalact( act, arg )
racc_e_pop @racc_state, @racc_tstack, @racc_vstack
end
end
-
return act
else
- raise RuntimeError, "[Racc Bug] unknown action #{act.inspect}"
+ raise "[Racc Bug] unknown action #{act.inspect}"
end
racc_next_state(@racc_state[-1], @racc_state) if @yydebug
@@ -349,7 +317,7 @@ def _racc_evalact( act, arg )
nil
end
- def _racc_do_reduce( arg, act )
+ def _racc_do_reduce(arg, act)
action_table, action_check, action_default, action_pointer,
goto_table, goto_check, goto_default, goto_pointer,
nt_base, reduce_table, token_table, shift_n,
@@ -390,7 +358,7 @@ def _racc_do_reduce( arg, act )
goto_default[k1]
end
- def on_error( t, val, vstack )
+ def on_error(t, val, vstack)
raise ParseError, sprintf("\nparse error on value %s (%s)",
val.inspect, token_to_str(t) || '?')
end
@@ -407,23 +375,24 @@ def yyerrok
@racc_error_status = 0
end
-
+ #
# for debugging output
+ #
- def racc_read_token( t, tok, val )
+ def racc_read_token(t, tok, val)
@racc_debug_out.print 'read '
@racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
@racc_debug_out.puts val.inspect
@racc_debug_out.puts
end
- def racc_shift( tok, tstack, vstack )
+ def racc_shift(tok, tstack, vstack)
@racc_debug_out.puts "shift #{racc_token2str tok}"
racc_print_stacks tstack, vstack
@racc_debug_out.puts
end
- def racc_reduce( toks, sim, tstack, vstack )
+ def racc_reduce(toks, sim, tstack, vstack)
out = @racc_debug_out
out.print 'reduce '
if toks.empty?
@@ -442,20 +411,20 @@ def racc_accept
@racc_debug_out.puts
end
- def racc_e_pop( state, tstack, vstack )
+ def racc_e_pop(state, tstack, vstack)
@racc_debug_out.puts 'error recovering mode: pop token'
racc_print_states state
racc_print_stacks tstack, vstack
@racc_debug_out.puts
end
- def racc_next_state( curstate, state )
+ def racc_next_state(curstate, state)
@racc_debug_out.puts "goto #{curstate}"
racc_print_states state
@racc_debug_out.puts
end
- def racc_print_stacks( t, v )
+ def racc_print_stacks(t, v)
out = @racc_debug_out
out.print ' ['
t.each_index do |i|
@@ -464,57 +433,39 @@ def racc_print_stacks( t, v )
out.puts ' ]'
end
- def racc_print_states( s )
+ def racc_print_states(s)
out = @racc_debug_out
out.print ' ['
s.each {|st| out.print ' ', st }
out.puts ' ]'
end
- def racc_token2str( tok )
+ def racc_token2str(tok)
self.class::Racc_token_to_s_table[tok] or
- raise RuntimeError, "[Racc Bug] can't convert token #{tok} to string"
+ raise "[Racc Bug] can't convert token #{tok} to string"
end
- def token_to_str( t )
+ def token_to_str(t)
self.class::Racc_token_to_s_table[t]
end
end
end
-..end /home/aamine/lib/ruby/racc/parser.rb modeval..idb76f2e220d
-end # end of racc/parser.rb
+..end racc/parser.rb modeval..id8076474214
+end
+###### racc/parser.rb end
#
# parser.rb
#
-#--
-# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
+# Copyright (c) 1998-2007 Minero Aoki
#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+# This program is free software.
+# You can distribute/modify this program under the terms of
+# the GNU Lesser General Public License version 2.1.
#
-# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
-# with permission of Minero Aoki.
-#++
require 'tmail/scanner'
require 'tmail/utils'
@@ -524,7 +475,7 @@ module TMail
class Parser < Racc::Parser
-module_eval <<'..end parser.y modeval..id43721faf1c', 'parser.y', 331
+module_eval <<'..end parser.y modeval..id7b0b3dccb7', 'parser.y', 340
include TextUtils
@@ -567,9 +518,9 @@ def on_error( t, val, vstack )
raise SyntaxError, "parse error on token #{racc_token2str t}"
end
-..end parser.y modeval..id43721faf1c
+..end parser.y modeval..id7b0b3dccb7
-##### racc 1.4.3 generates ###
+##### racc 1.4.5 generates ###
racc_reduce_table = [
0, 0, :racc_error,
@@ -669,10 +620,9 @@ def on_error( t, val, vstack )
3, 43, :_reduce_94,
0, 80, :_reduce_95,
5, 80, :_reduce_96,
- 1, 82, :_reduce_none,
- 1, 82, :_reduce_none,
- 1, 44, :_reduce_99,
- 3, 45, :_reduce_100,
+ 5, 80, :_reduce_97,
+ 1, 44, :_reduce_98,
+ 3, 45, :_reduce_99,
0, 81, :_reduce_none,
1, 81, :_reduce_none,
1, 78, :_reduce_none,
@@ -683,15 +633,15 @@ def on_error( t, val, vstack )
1, 78, :_reduce_none,
1, 78, :_reduce_none ]
-racc_reduce_n = 110
+racc_reduce_n = 109
-racc_shift_n = 168
+racc_shift_n = 167
racc_action_table = [
- -70, -69, 23, 25, 146, 147, 29, 31, 105, 106,
+ -70, -69, 23, 25, 145, 146, 29, 31, 105, 106,
16, 17, 20, 22, 136, 27, -70, -69, 32, 101,
- -70, -69, 154, 100, 113, 115, -70, -69, -70, 109,
- 75, 23, 25, 101, 155, 29, 31, 142, 143, 16,
+ -70, -69, 153, 100, 113, 115, -70, -69, -70, 109,
+ 75, 23, 25, 101, 154, 29, 31, 142, 143, 16,
17, 20, 22, 107, 27, 23, 25, 32, 98, 29,
31, 96, 94, 16, 17, 20, 22, 78, 27, 23,
25, 32, 112, 29, 31, 74, 91, 16, 17, 20,
@@ -703,11 +653,11 @@ def on_error( t, val, vstack )
78, 29, 31, 133, 78, 16, 17, 20, 22, 77,
23, 25, 75, 32, 29, 31, 65, 62, 16, 17,
20, 22, 139, 23, 25, 101, 32, 29, 31, 60,
- 100, 16, 17, 20, 22, 44, 27, 101, 148, 32,
- 23, 25, 120, 149, 29, 31, 152, 153, 16, 17,
- 20, 22, 42, 27, 157, 159, 32, 23, 25, 120,
- 40, 29, 31, 15, 164, 16, 17, 20, 22, 40,
- 27, 23, 25, 32, 68, 29, 31, 166, 167, 16,
+ 100, 16, 17, 20, 22, 44, 27, 101, 147, 32,
+ 23, 25, 120, 148, 29, 31, 151, 152, 16, 17,
+ 20, 22, 42, 27, 156, 158, 32, 23, 25, 120,
+ 40, 29, 31, 15, 163, 16, 17, 20, 22, 40,
+ 27, 23, 25, 32, 68, 29, 31, 165, 166, 16,
17, 20, 22, nil, 27, 23, 25, 32, nil, 29,
31, 74, nil, 16, 17, 20, 22, nil, 23, 25,
nil, 32, 29, 31, nil, nil, 16, 17, 20, 22,
@@ -735,9 +685,9 @@ def on_error( t, val, vstack )
68, 68, 68, 68, 126, 68, 75, 28, 68, 67,
75, 28, 143, 66, 86, 86, 75, 28, 75, 75,
28, 3, 3, 86, 143, 3, 3, 134, 134, 3,
- 3, 3, 3, 73, 3, 152, 152, 3, 62, 152,
- 152, 60, 56, 152, 152, 152, 152, 51, 152, 52,
- 52, 152, 80, 52, 52, 52, 50, 52, 52, 52,
+ 3, 3, 3, 73, 3, 151, 151, 3, 62, 151,
+ 151, 60, 56, 151, 151, 151, 151, 51, 151, 52,
+ 52, 151, 80, 52, 52, 52, 50, 52, 52, 52,
52, 45, 89, 52, 42, 52, 71, 71, 41, 96,
71, 71, 97, 98, 71, 71, 71, 71, 100, 7,
7, 101, 71, 7, 7, 102, 104, 7, 7, 7,
@@ -748,13 +698,13 @@ def on_error( t, val, vstack )
10, 10, 130, 2, 2, 131, 10, 2, 2, 11,
135, 2, 2, 2, 2, 6, 2, 138, 139, 2,
90, 90, 90, 140, 90, 90, 141, 142, 90, 90,
- 90, 90, 5, 90, 148, 151, 90, 127, 127, 127,
- 4, 127, 127, 1, 157, 127, 127, 127, 127, 159,
- 127, 26, 26, 127, 26, 26, 26, 163, 164, 26,
+ 90, 90, 5, 90, 147, 150, 90, 127, 127, 127,
+ 4, 127, 127, 1, 156, 127, 127, 127, 127, 158,
+ 127, 26, 26, 127, 26, 26, 26, 162, 163, 26,
26, 26, 26, nil, 26, 27, 27, 26, nil, 27,
- 27, 27, nil, 27, 27, 27, 27, nil, 155, 155,
- nil, 27, 155, 155, nil, nil, 155, 155, 155, 155,
- nil, 122, 122, nil, 155, 122, 122, nil, nil, 122,
+ 27, 27, nil, 27, 27, 27, 27, nil, 154, 154,
+ nil, 27, 154, 154, nil, nil, 154, 154, 154, 154,
+ nil, 122, 122, nil, 154, 122, 122, nil, nil, 122,
122, 122, 122, nil, 76, 76, nil, 122, 76, 76,
nil, nil, 76, 76, 76, 76, nil, 38, 38, nil,
76, 38, 38, nil, nil, 38, 38, 38, 38, nil,
@@ -788,78 +738,78 @@ def on_error( t, val, vstack )
nil, 80, 96, 344, 296, nil, nil, 108, nil, nil,
nil, 98, 217, nil, nil, nil, -19, 163, nil, 380,
128, 116, nil, nil, 14, 124, -26, nil, 128, 141,
- 148, 141, 152, 7, nil, nil, nil, nil, 160, nil,
- nil, 149, 31, nil, nil, 204, nil, 167, nil, 174,
- nil, nil, nil, 169, 184, nil, nil, nil ]
+ 148, 141, 152, 7, nil, nil, nil, 160, nil, nil,
+ 149, 31, nil, nil, 204, nil, 167, nil, 174, nil,
+ nil, nil, 169, 184, nil, nil, nil ]
racc_action_default = [
- -110, -110, -110, -110, -14, -110, -20, -110, -110, -110,
- -110, -110, -110, -110, -10, -95, -106, -107, -77, -44,
- -108, -11, -109, -79, -43, -103, -110, -110, -60, -104,
- -55, -105, -78, -68, -54, -71, -45, -12, -110, -1,
- -110, -110, -110, -2, -110, -22, -51, -48, -50, -3,
- -40, -41, -110, -46, -4, -86, -5, -88, -6, -90,
- -110, -7, -95, -8, -9, -99, -101, -61, -59, -56,
- -69, -110, -110, -110, -110, -75, -110, -110, -57, -15,
- -110, 168, -73, -80, -82, -21, -24, -81, -110, -27,
- -110, -83, -47, -89, -110, -91, -110, -101, -110, -100,
- -102, -75, -58, -52, -110, -110, -64, -63, -65, -76,
- -72, -67, -110, -110, -110, -26, -23, -110, -29, -49,
- -84, -42, -87, -92, -94, -95, -110, -110, -62, -110,
- -110, -25, -74, -28, -31, -101, -110, -53, -66, -110,
- -110, -34, -110, -110, -93, -96, -98, -97, -110, -18,
- -13, -38, -110, -30, -33, -110, -32, -16, -19, -14,
- -35, -36, -37, -110, -110, -39, -85, -17 ]
+ -109, -109, -109, -109, -14, -109, -20, -109, -109, -109,
+ -109, -109, -109, -109, -10, -95, -105, -106, -77, -44,
+ -107, -11, -108, -79, -43, -102, -109, -109, -60, -103,
+ -55, -104, -78, -68, -54, -71, -45, -12, -109, -1,
+ -109, -109, -109, -2, -109, -22, -51, -48, -50, -3,
+ -40, -41, -109, -46, -4, -86, -5, -88, -6, -90,
+ -109, -7, -95, -8, -9, -98, -100, -61, -59, -56,
+ -69, -109, -109, -109, -109, -75, -109, -109, -57, -15,
+ -109, 167, -73, -80, -82, -21, -24, -81, -109, -27,
+ -109, -83, -47, -89, -109, -91, -109, -100, -109, -99,
+ -101, -75, -58, -52, -109, -109, -64, -63, -65, -76,
+ -72, -67, -109, -109, -109, -26, -23, -109, -29, -49,
+ -84, -42, -87, -92, -94, -95, -109, -109, -62, -109,
+ -109, -25, -74, -28, -31, -100, -109, -53, -66, -109,
+ -109, -34, -109, -109, -93, -96, -97, -109, -18, -13,
+ -38, -109, -30, -33, -109, -32, -16, -19, -14, -35,
+ -36, -37, -109, -109, -39, -85, -17 ]
racc_goto_table = [
- 39, 67, 70, 73, 24, 37, 69, 66, 36, 38,
- 57, 59, 55, 67, 108, 83, 90, 111, 69, 99,
- 85, 49, 53, 76, 158, 134, 141, 70, 73, 151,
- 118, 89, 45, 156, 160, 150, 140, 21, 14, 19,
- 119, 102, 64, 63, 61, 83, 70, 104, 83, 58,
- 124, 132, 56, 131, 97, 54, 93, 43, 5, 83,
- 95, 145, 76, nil, 116, 76, nil, nil, 127, 138,
- 103, nil, nil, nil, 38, nil, nil, 110, nil, nil,
- nil, nil, nil, nil, 83, 83, nil, nil, 144, nil,
- nil, nil, nil, nil, nil, 57, 121, 122, nil, nil,
- 83, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, 135, nil, nil,
- nil, nil, nil, 93, nil, nil, nil, 70, 162, 137,
- 70, 163, 161, 38, nil, nil, nil, nil, nil, nil,
+ 39, 67, 70, 73, 38, 66, 69, 24, 37, 57,
+ 59, 36, 55, 67, 99, 90, 85, 157, 69, 108,
+ 83, 134, 111, 76, 49, 53, 141, 70, 73, 150,
+ 118, 89, 45, 155, 159, 149, 140, 21, 14, 19,
+ 119, 102, 64, 63, 61, 124, 70, 104, 58, 132,
+ 83, 56, 97, 83, 54, 93, 43, 5, 131, 95,
+ 116, nil, 76, nil, 83, 76, nil, 127, nil, 38,
+ nil, nil, nil, 103, 138, nil, 110, nil, nil, nil,
+ nil, nil, nil, 144, nil, nil, nil, nil, nil, 83,
+ 83, nil, nil, nil, 57, nil, nil, 122, nil, 121,
+ nil, nil, nil, nil, nil, 83, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 135, nil, nil, nil, nil,
+ nil, nil, 93, nil, nil, nil, 70, 161, 38, 70,
+ 162, 160, 137, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, 165 ]
+ nil, nil, nil, nil, 164 ]
racc_goto_check = [
- 2, 37, 37, 29, 13, 13, 28, 46, 31, 36,
- 41, 41, 45, 37, 25, 44, 32, 25, 28, 47,
- 24, 4, 4, 42, 23, 20, 21, 37, 29, 22,
+ 2, 37, 37, 29, 36, 46, 28, 13, 13, 41,
+ 41, 31, 45, 37, 47, 32, 24, 23, 28, 25,
+ 44, 20, 25, 42, 4, 4, 21, 37, 29, 22,
19, 18, 17, 26, 27, 16, 15, 12, 11, 33,
- 34, 35, 10, 9, 8, 44, 37, 29, 44, 7,
- 47, 43, 6, 25, 46, 5, 41, 3, 1, 44,
- 41, 48, 42, nil, 24, 42, nil, nil, 32, 25,
- 13, nil, nil, nil, 36, nil, nil, 41, nil, nil,
- nil, nil, nil, nil, 44, 44, nil, nil, 47, nil,
- nil, nil, nil, nil, nil, 41, 31, 45, nil, nil,
- 44, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil, nil, 46, nil, nil,
- nil, nil, nil, 41, nil, nil, nil, 37, 29, 13,
- 37, 29, 28, 36, nil, nil, nil, nil, nil, nil,
+ 34, 35, 10, 9, 8, 47, 37, 29, 7, 43,
+ 44, 6, 46, 44, 5, 41, 3, 1, 25, 41,
+ 24, nil, 42, nil, 44, 42, nil, 32, nil, 36,
+ nil, nil, nil, 13, 25, nil, 41, nil, nil, nil,
+ nil, nil, nil, 47, nil, nil, nil, nil, nil, 44,
+ 44, nil, nil, nil, 41, nil, nil, 45, nil, 31,
+ nil, nil, nil, nil, nil, 44, nil, nil, nil, nil,
+ nil, nil, nil, nil, nil, 46, nil, nil, nil, nil,
+ nil, nil, 41, nil, nil, nil, 37, 29, 36, 37,
+ 29, 28, 13, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, 2 ]
+ nil, nil, nil, nil, 2 ]
racc_goto_pointer = [
- nil, 58, -4, 51, 14, 47, 43, 39, 33, 31,
- 29, 37, 35, 2, nil, -94, -105, 26, -14, -59,
- -93, -108, -112, -127, -24, -60, -110, -118, -20, -24,
- nil, 6, -34, 37, -50, -27, 6, -25, nil, nil,
- nil, 1, -5, -63, -29, 3, -8, -47, -75 ]
+ nil, 57, -4, 50, 17, 46, 42, 38, 33, 31,
+ 29, 37, 35, 5, nil, -94, -105, 26, -14, -59,
+ -97, -108, -112, -133, -28, -55, -110, -117, -20, -24,
+ nil, 9, -35, 37, -50, -27, 1, -25, nil, nil,
+ nil, 0, -5, -65, -24, 3, -10, -52 ]
racc_goto_default = [
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, 48, 41, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, 86, nil, nil, 30, 34,
50, 51, nil, 46, 47, nil, 26, 28, 71, 72,
- 33, 35, 114, 82, 18, nil, nil, nil, nil ]
+ 33, 35, 114, 82, 18, nil, nil, nil ]
racc_token_table = {
false => 0,
@@ -999,8 +949,7 @@ def on_error( t, val, vstack )
'atom',
'phrase',
'params',
-'opt_semicolon',
-'value']
+'opt_semicolon']
Racc_debug_parser = false
@@ -1080,7 +1029,7 @@ def _reduce_12( val, _values)
end
.,.,
-module_eval <<'.,.,', 'parser.y', 33
+module_eval <<'.,.,', 'parser.y', 36
def _reduce_13( val, _values)
t = Time.gm(val[3].to_i, val[2], val[1].to_i, 0, 0, 0)
(t + val[4] - val[5]).localtime
@@ -1091,14 +1040,14 @@ def _reduce_13( val, _values)
# reduce 15 omitted
-module_eval <<'.,.,', 'parser.y', 42
+module_eval <<'.,.,', 'parser.y', 45
def _reduce_16( val, _values)
(val[0].to_i * 60 * 60) +
(val[2].to_i * 60)
end
.,.,
-module_eval <<'.,.,', 'parser.y', 47
+module_eval <<'.,.,', 'parser.y', 51
def _reduce_17( val, _values)
(val[0].to_i * 60 * 60) +
(val[2].to_i * 60) +
@@ -1106,13 +1055,13 @@ def _reduce_17( val, _values)
end
.,.,
-module_eval <<'.,.,', 'parser.y', 54
+module_eval <<'.,.,', 'parser.y', 56
def _reduce_18( val, _values)
timezone_string_to_unixtime(val[0])
end
.,.,
-module_eval <<'.,.,', 'parser.y', 59
+module_eval <<'.,.,', 'parser.y', 61
def _reduce_19( val, _values)
val
end
@@ -1120,7 +1069,7 @@ def _reduce_19( val, _values)
# reduce 20 omitted
-module_eval <<'.,.,', 'parser.y', 65
+module_eval <<'.,.,', 'parser.y', 67
def _reduce_21( val, _values)
val[1]
end
@@ -1128,25 +1077,25 @@ def _reduce_21( val, _values)
# reduce 22 omitted
-module_eval <<'.,.,', 'parser.y', 71
+module_eval <<'.,.,', 'parser.y', 73
def _reduce_23( val, _values)
val[1]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 77
+module_eval <<'.,.,', 'parser.y', 79
def _reduce_24( val, _values)
join_domain(val[0])
end
.,.,
-module_eval <<'.,.,', 'parser.y', 81
+module_eval <<'.,.,', 'parser.y', 83
def _reduce_25( val, _values)
join_domain(val[2])
end
.,.,
-module_eval <<'.,.,', 'parser.y', 85
+module_eval <<'.,.,', 'parser.y', 87
def _reduce_26( val, _values)
join_domain(val[0])
end
@@ -1154,19 +1103,19 @@ def _reduce_26( val, _values)
# reduce 27 omitted
-module_eval <<'.,.,', 'parser.y', 91
+module_eval <<'.,.,', 'parser.y', 93
def _reduce_28( val, _values)
val[1]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 96
+module_eval <<'.,.,', 'parser.y', 98
def _reduce_29( val, _values)
[]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 100
+module_eval <<'.,.,', 'parser.y', 103
def _reduce_30( val, _values)
val[0].push val[2]
val[0]
@@ -1175,13 +1124,13 @@ def _reduce_30( val, _values)
# reduce 31 omitted
-module_eval <<'.,.,', 'parser.y', 107
+module_eval <<'.,.,', 'parser.y', 109
def _reduce_32( val, _values)
val[1]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 111
+module_eval <<'.,.,', 'parser.y', 113
def _reduce_33( val, _values)
val[1]
end
@@ -1189,19 +1138,19 @@ def _reduce_33( val, _values)
# reduce 34 omitted
-module_eval <<'.,.,', 'parser.y', 117
+module_eval <<'.,.,', 'parser.y', 119
def _reduce_35( val, _values)
val[1]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 123
+module_eval <<'.,.,', 'parser.y', 125
def _reduce_36( val, _values)
val[0].spec
end
.,.,
-module_eval <<'.,.,', 'parser.y', 127
+module_eval <<'.,.,', 'parser.y', 129
def _reduce_37( val, _values)
val[0].spec
end
@@ -1209,7 +1158,7 @@ def _reduce_37( val, _values)
# reduce 38 omitted
-module_eval <<'.,.,', 'parser.y', 134
+module_eval <<'.,.,', 'parser.y', 136
def _reduce_39( val, _values)
val[1]
end
@@ -1235,15 +1184,16 @@ def _reduce_47( val, _values)
end
.,.,
-module_eval <<'.,.,', 'parser.y', 148
+module_eval <<'.,.,', 'parser.y', 152
def _reduce_48( val, _values)
- val
+ val
end
.,.,
-module_eval <<'.,.,', 'parser.y', 149
+module_eval <<'.,.,', 'parser.y', 157
def _reduce_49( val, _values)
- val[0].push val[2]; val[0]
+ val[0].push val[2]
+ val[0]
end
.,.,
@@ -1251,13 +1201,13 @@ def _reduce_49( val, _values)
# reduce 51 omitted
-module_eval <<'.,.,', 'parser.y', 156
+module_eval <<'.,.,', 'parser.y', 165
def _reduce_52( val, _values)
val
end
.,.,
-module_eval <<'.,.,', 'parser.y', 160
+module_eval <<'.,.,', 'parser.y', 170
def _reduce_53( val, _values)
val[0].push val[2]
val[0]
@@ -1268,7 +1218,7 @@ def _reduce_53( val, _values)
# reduce 55 omitted
-module_eval <<'.,.,', 'parser.y', 168
+module_eval <<'.,.,', 'parser.y', 178
def _reduce_56( val, _values)
val[1].phrase = Decoder.decode(val[0])
val[1]
@@ -1277,38 +1227,38 @@ def _reduce_56( val, _values)
# reduce 57 omitted
-module_eval <<'.,.,', 'parser.y', 176
+module_eval <<'.,.,', 'parser.y', 185
def _reduce_58( val, _values)
AddressGroup.new(val[0], val[2])
end
.,.,
-module_eval <<'.,.,', 'parser.y', 178
+module_eval <<'.,.,', 'parser.y', 185
def _reduce_59( val, _values)
AddressGroup.new(val[0], [])
end
.,.,
-module_eval <<'.,.,', 'parser.y', 181
+module_eval <<'.,.,', 'parser.y', 188
def _reduce_60( val, _values)
val[0].join('.')
end
.,.,
-module_eval <<'.,.,', 'parser.y', 182
+module_eval <<'.,.,', 'parser.y', 189
def _reduce_61( val, _values)
val[0] << ' ' << val[1].join('.')
end
.,.,
-module_eval <<'.,.,', 'parser.y', 186
+module_eval <<'.,.,', 'parser.y', 196
def _reduce_62( val, _values)
val[2].routes.replace val[1]
val[2]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 191
+module_eval <<'.,.,', 'parser.y', 200
def _reduce_63( val, _values)
val[1]
end
@@ -1316,25 +1266,25 @@ def _reduce_63( val, _values)
# reduce 64 omitted
-module_eval <<'.,.,', 'parser.y', 196
+module_eval <<'.,.,', 'parser.y', 203
def _reduce_65( val, _values)
[ val[1].join('.') ]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 197
+module_eval <<'.,.,', 'parser.y', 204
def _reduce_66( val, _values)
val[0].push val[3].join('.'); val[0]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 199
+module_eval <<'.,.,', 'parser.y', 206
def _reduce_67( val, _values)
Address.new( val[0], val[2] )
end
.,.,
-module_eval <<'.,.,', 'parser.y', 200
+module_eval <<'.,.,', 'parser.y', 207
def _reduce_68( val, _values)
Address.new( val[0], nil )
end
@@ -1342,19 +1292,19 @@ def _reduce_68( val, _values)
# reduce 69 omitted
-module_eval <<'.,.,', 'parser.y', 203
+module_eval <<'.,.,', 'parser.y', 210
def _reduce_70( val, _values)
val[0].push ''; val[0]
end
.,.,
-module_eval <<'.,.,', 'parser.y', 206
+module_eval <<'.,.,', 'parser.y', 213
def _reduce_71( val, _values)
val
end
.,.,
-module_eval <<'.,.,', 'parser.y', 209
+module_eval <<'.,.,', 'parser.y', 222
def _reduce_72( val, _values)
val[1].times do
val[0].push ''
@@ -1364,13 +1314,13 @@ def _reduce_72( val, _values)
end
.,.,
-module_eval <<'.,.,', 'parser.y', 217
+module_eval <<'.,.,', 'parser.y', 224
def _reduce_73( val, _values)
val
end
.,.,
-module_eval <<'.,.,', 'parser.y', 220
+module_eval <<'.,.,', 'parser.y', 233
def _reduce_74( val, _values)