shugo
* lib/net/imap.rb: hack for speed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1018 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1488b9b458
commit
cac38b30e5
@ -430,7 +430,7 @@ module Net
|
|||||||
def get_all_responses(tag, cmd, &block)
|
def get_all_responses(tag, cmd, &block)
|
||||||
while resp = get_response
|
while resp = get_response
|
||||||
if @@debug
|
if @@debug
|
||||||
$stderr.puts(resp.inspect)
|
$stderr.printf("R: %s\n", resp.inspect)
|
||||||
end
|
end
|
||||||
case resp
|
case resp
|
||||||
when TaggedResponse
|
when TaggedResponse
|
||||||
@ -754,10 +754,11 @@ module Net
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
EXPR_BEG = :BEG
|
EXPR_BEG = :EXPR_BEG
|
||||||
EXPR_TEXT = :TEXT
|
EXPR_DATA = :EXPR_DATA
|
||||||
EXPR_RTEXT = :RTEXT
|
EXPR_TEXT = :EXPR_TEXT
|
||||||
EXPR_CTEXT = :CTEXT
|
EXPR_RTEXT = :EXPR_RTEXT
|
||||||
|
EXPR_CTEXT = :EXPR_CTEXT
|
||||||
|
|
||||||
T_SPACE = :SPACE
|
T_SPACE = :SPACE
|
||||||
T_NIL = :NIL
|
T_NIL = :NIL
|
||||||
@ -795,6 +796,15 @@ module Net
|
|||||||
(?# 15: CRLF )(\r\n)|\
|
(?# 15: CRLF )(\r\n)|\
|
||||||
(?# 16: EOF )(\z))/ni
|
(?# 16: EOF )(\z))/ni
|
||||||
|
|
||||||
|
DATA_REGEXP = /\G(?:\
|
||||||
|
(?# 1: SPACE )( )|\
|
||||||
|
(?# 2: NIL )(NIL)|\
|
||||||
|
(?# 3: NUMBER )(\d+)|\
|
||||||
|
(?# 4: QUOTED )"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)"|\
|
||||||
|
(?# 5: LITERAL )\{(\d+)\}\r\n|\
|
||||||
|
(?# 6: LPAR )(\()|\
|
||||||
|
(?# 7: RPAR )(\)))/ni
|
||||||
|
|
||||||
TEXT_REGEXP = /\G(?:\
|
TEXT_REGEXP = /\G(?:\
|
||||||
(?# 1: TEXT )([^\x00\x80-\xff\r\n]*))/ni
|
(?# 1: TEXT )([^\x00\x80-\xff\r\n]*))/ni
|
||||||
|
|
||||||
@ -932,6 +942,7 @@ module Net
|
|||||||
end
|
end
|
||||||
|
|
||||||
def envelope
|
def envelope
|
||||||
|
@lex_state = EXPR_DATA
|
||||||
match(T_LPAR)
|
match(T_LPAR)
|
||||||
date = nstring
|
date = nstring
|
||||||
match(T_SPACE)
|
match(T_SPACE)
|
||||||
@ -953,6 +964,7 @@ module Net
|
|||||||
match(T_SPACE)
|
match(T_SPACE)
|
||||||
message_id = nstring
|
message_id = nstring
|
||||||
match(T_RPAR)
|
match(T_RPAR)
|
||||||
|
@lex_state = EXPR_BEG
|
||||||
return Envelope.new(date, subject, from, sender, reply_to,
|
return Envelope.new(date, subject, from, sender, reply_to,
|
||||||
to, cc, bcc, in_reply_to, message_id)
|
to, cc, bcc, in_reply_to, message_id)
|
||||||
end
|
end
|
||||||
@ -1006,6 +1018,7 @@ module Net
|
|||||||
end
|
end
|
||||||
|
|
||||||
def body
|
def body
|
||||||
|
@lex_state = EXPR_DATA
|
||||||
match(T_LPAR)
|
match(T_LPAR)
|
||||||
token = lookahead
|
token = lookahead
|
||||||
if token.symbol == T_LPAR
|
if token.symbol == T_LPAR
|
||||||
@ -1014,6 +1027,7 @@ module Net
|
|||||||
result = body_type_1part
|
result = body_type_1part
|
||||||
end
|
end
|
||||||
match(T_RPAR)
|
match(T_RPAR)
|
||||||
|
@lex_state = EXPR_BEG
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1639,7 +1653,7 @@ module Net
|
|||||||
return Token.new(T_ATOM, $+)
|
return Token.new(T_ATOM, $+)
|
||||||
elsif $5
|
elsif $5
|
||||||
return Token.new(T_QUOTED,
|
return Token.new(T_QUOTED,
|
||||||
$+.gsub(/\\(["\\])/n, "\\1"))
|
$+.gsub(/\\(["\\])/n, "\\1"))
|
||||||
elsif $6
|
elsif $6
|
||||||
return Token.new(T_LPAR, $+)
|
return Token.new(T_LPAR, $+)
|
||||||
elsif $7
|
elsif $7
|
||||||
@ -1672,6 +1686,34 @@ module Net
|
|||||||
@str.index(/\S*/n, @pos)
|
@str.index(/\S*/n, @pos)
|
||||||
parse_error("unknown token - %s", $&.dump)
|
parse_error("unknown token - %s", $&.dump)
|
||||||
end
|
end
|
||||||
|
when EXPR_DATA
|
||||||
|
if @str.index(DATA_REGEXP, @pos)
|
||||||
|
@pos = $~.end(0)
|
||||||
|
if $1
|
||||||
|
return Token.new(T_SPACE, $+)
|
||||||
|
elsif $2
|
||||||
|
return Token.new(T_NIL, $+)
|
||||||
|
elsif $3
|
||||||
|
return Token.new(T_NUMBER, $+)
|
||||||
|
elsif $4
|
||||||
|
return Token.new(T_QUOTED,
|
||||||
|
$+.gsub(/\\(["\\])/n, "\\1"))
|
||||||
|
elsif $5
|
||||||
|
len = $+.to_i
|
||||||
|
val = @str[@pos, len]
|
||||||
|
@pos += len
|
||||||
|
return Token.new(T_LITERAL, val)
|
||||||
|
elsif $6
|
||||||
|
return Token.new(T_LPAR, $+)
|
||||||
|
elsif $7
|
||||||
|
return Token.new(T_RPAR, $+)
|
||||||
|
else
|
||||||
|
parse_error("[Net::IMAP BUG] BEG_REGEXP is invalid")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@str.index(/\S*/n, @pos)
|
||||||
|
parse_error("unknown token - %s", $&.dump)
|
||||||
|
end
|
||||||
when EXPR_TEXT
|
when EXPR_TEXT
|
||||||
if @str.index(TEXT_REGEXP, @pos)
|
if @str.index(TEXT_REGEXP, @pos)
|
||||||
@pos = $~.end(0)
|
@pos = $~.end(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user