diff options
Diffstat (limited to 'actionmailer/lib/action_mailer/vendor/tmail/parser.y')
-rw-r--r-- | actionmailer/lib/action_mailer/vendor/tmail/parser.y | 381 |
1 files changed, 0 insertions, 381 deletions
diff --git a/actionmailer/lib/action_mailer/vendor/tmail/parser.y b/actionmailer/lib/action_mailer/vendor/tmail/parser.y deleted file mode 100644 index 77a1457794..0000000000 --- a/actionmailer/lib/action_mailer/vendor/tmail/parser.y +++ /dev/null @@ -1,381 +0,0 @@ -# -# parser.y -# -# Copyright (c) 1998-2007 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU Lesser General Public License version 2.1. -# - -class TMail::Parser - - options no_result_var - -rule - - content : DATETIME datetime { val[1] } - | RECEIVED received { val[1] } - | MADDRESS addrs_TOP { val[1] } - | RETPATH retpath { val[1] } - | KEYWORDS keys { val[1] } - | ENCRYPTED enc { val[1] } - | MIMEVERSION version { val[1] } - | CTYPE ctype { val[1] } - | CENCODING cencode { val[1] } - | CDISPOSITION cdisp { val[1] } - | ADDRESS addr_TOP { val[1] } - | MAILBOX mbox { val[1] } - - datetime : day DIGIT ATOM DIGIT hour zone - # 0 1 2 3 4 5 - # date month year - { - t = Time.gm(val[3].to_i, val[2], val[1].to_i, 0, 0, 0) - (t + val[4] - val[5]).localtime - } - - day : /* none */ - | ATOM ',' - - hour : DIGIT ':' DIGIT - { - (val[0].to_i * 60 * 60) + - (val[2].to_i * 60) - } - | DIGIT ':' DIGIT ':' DIGIT - { - (val[0].to_i * 60 * 60) + - (val[2].to_i * 60) + - (val[4].to_i) - } - - zone : ATOM - { - timezone_string_to_unixtime(val[0]) - } - - received : from by via with id for received_datetime - { - val - } - - from : /* none */ - | FROM received_domain - { - val[1] - } - - by : /* none */ - | BY received_domain - { - val[1] - } - - received_domain - : domain - { - join_domain(val[0]) - } - | domain '@' domain - { - join_domain(val[2]) - } - | domain DOMLIT - { - join_domain(val[0]) - } - - via : /* none */ - | VIA ATOM - { - val[1] - } - - with : /* none */ - { - [] - } - | with WITH ATOM - { - val[0].push val[2] - val[0] - } - - id : /* none */ - | ID msgid - { - val[1] - } - | ID ATOM - { - val[1] - } - - for : /* none */ - | FOR received_addrspec - { - val[1] - } - - received_addrspec - : routeaddr - { - val[0].spec - } - | spec - { - val[0].spec - } - - received_datetime - : /* none */ - | ';' datetime - { - val[1] - } - - addrs_TOP : addrs - | group_bare - | addrs commas group_bare - - addr_TOP : mbox - | group - | group_bare - - retpath : addrs_TOP - | '<' '>' { [ Address.new(nil, nil) ] } - - addrs : addr - { - val - } - | addrs commas addr - { - val[0].push val[2] - val[0] - } - - addr : mbox - | group - - mboxes : mbox - { - val - } - | mboxes commas mbox - { - val[0].push val[2] - val[0] - } - - mbox : spec - | routeaddr - | addr_phrase routeaddr - { - val[1].phrase = Decoder.decode(val[0]) - val[1] - } - - group : group_bare ';' - - group_bare: addr_phrase ':' mboxes - { - AddressGroup.new(val[0], val[2]) - } - | addr_phrase ':' { AddressGroup.new(val[0], []) } - - addr_phrase - : local_head { val[0].join('.') } - | addr_phrase local_head { val[0] << ' ' << val[1].join('.') } - - routeaddr : '<' routes spec '>' - { - val[2].routes.replace val[1] - val[2] - } - | '<' spec '>' - { - val[1] - } - - routes : at_domains ':' - - at_domains: '@' domain { [ val[1].join('.') ] } - | at_domains ',' '@' domain { val[0].push val[3].join('.'); val[0] } - - spec : local '@' domain { Address.new( val[0], val[2] ) } - | local { Address.new( val[0], nil ) } - - local: local_head - | local_head '.' { val[0].push ''; val[0] } - - local_head: word - { val } - | local_head dots word - { - val[1].times do - val[0].push '' - end - val[0].push val[2] - val[0] - } - - domain : domword - { val } - | domain dots domword - { - val[1].times do - val[0].push '' - end - val[0].push val[2] - val[0] - } - - dots : '.' { 0 } - | '.' '.' { 1 } - - word : atom - | QUOTED - | DIGIT - - domword : atom - | DOMLIT - | DIGIT - - commas : ',' - | commas ',' - - msgid : '<' spec '>' - { - val[1] = val[1].spec - val.join('') - } - - keys : phrase { val } - | keys ',' phrase { val[0].push val[2]; val[0] } - - phrase : word - | phrase word { val[0] << ' ' << val[1] } - - enc : word - { - val.push nil - val - } - | word word - { - val - } - - version : DIGIT '.' DIGIT - { - [ val[0].to_i, val[2].to_i ] - } - - ctype : TOKEN '/' TOKEN params opt_semicolon - { - [ val[0].downcase, val[2].downcase, decode_params(val[3]) ] - } - | TOKEN params opt_semicolon - { - [ val[0].downcase, nil, decode_params(val[1]) ] - } - - params : /* none */ - { - {} - } - | params ';' TOKEN '=' QUOTED - { - val[0][ val[2].downcase ] = ('"' + val[4].to_s + '"') - val[0] - } - | params ';' TOKEN '=' TOKEN - { - val[0][ val[2].downcase ] = val[4] - val[0] - } - - cencode : TOKEN - { - val[0].downcase - } - - cdisp : TOKEN params opt_semicolon - { - [ val[0].downcase, decode_params(val[1]) ] - } - - opt_semicolon - : - | ';' - - atom : ATOM - | FROM - | BY - | VIA - | WITH - | ID - | FOR - -end - - ----- header -# -# parser.rb -# -# Copyright (c) 1998-2007 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU Lesser General Public License version 2.1. -# - -require 'tmail/scanner' -require 'tmail/utils' - ----- inner - - include TextUtils - - def self.parse( ident, str, cmt = nil ) - new.parse(ident, str, cmt) - end - - MAILP_DEBUG = false - - def initialize - self.debug = MAILP_DEBUG - end - - def debug=( flag ) - @yydebug = flag && Racc_debug_parser - @scanner_debug = flag - end - - def debug - @yydebug - end - - def parse( ident, str, comments = nil ) - @scanner = Scanner.new(str, ident, comments) - @scanner.debug = @scanner_debug - @first = [ident, ident] - result = yyparse(self, :parse_in) - comments.map! {|c| to_kcode(c) } if comments - result - end - - private - - def parse_in( &block ) - yield @first - @scanner.scan(&block) - end - - def on_error( t, val, vstack ) - raise SyntaxError, "parse error on token #{racc_token2str t}" - end - |