offlineimap rev 493
"Automatic Subversion Change Mailer" <[email protected]> Wed, 16 Jul 2003 13:12:55 -0500 (CDT)
| Newsgroups | gmane.mail.imap.offlineimap.subversion |
|---|---|
| Message-ID | <[email protected]> |
You are receiving this message because
all commits get sent to this address.
Author: jgoerzen
Date: 2003-07-16 13:12:44 -0500 (Wed, 16 Jul 2003)
New Revision: 493
Modified:
imaplib/head/imap2/parser/imap.g
Log:
Completed initial load
Diff:
Modified: imaplib/head/imap2/parser/imap.g
==============================================================================
--- imaplib/head/imap2/parser/imap.g 2003-07-16 16:02:46 UTC (rev 492)
+++ imaplib/head/imap2/parser/imap.g 2003-07-16 18:12:44 UTC (rev 493)
@@ -11,10 +11,19 @@
token RPAREN: r'\)'
token PLUS: r'\+'
token DASH: r'-'
+ token BACKSLASH r'\\'
+ token ASTERISK r'\*'
+ token LBRACKET r'\['
+ token RBRACKET r'\]'
+ token PERIOD r'\.'
+ token PLUSMINUS: r'[+-]'
# Tokens in RFC2060, missing from RFC3501, but used there.
token ALPHA: r'[a-zA-Z]'
token DQUOTE: r'"'
+ token DIGIT: r'[0-9]'
+ token DIGITx2: r'[0-9]{2}'
+ token DIGITx4: r'[0-9]{4}'
# Rules
@@ -190,13 +199,325 @@
# E
##############################
+ rule envelope: LPAREN env_date SP env_subject SP env_from SP
+ env_sender SP env_reply_to SP env_to SP env_cc SP env_bcc SP
+ env_in_reply_to SP env_message_id RPAREN
+ {{ return {'date': env_date, 'subject': env_subject, 'from': env_from,
+ 'sender': env_sender, 'reply_to': env_reply_to,
+ 'to': env_to, 'cc': env_cc, 'bcc': env_bcc,
+ 'in_reply_to': env_in_reply_to, 'message_id': env_message_id } }}
+ rule env_custom_addrs: ( nil {{ v = [] }} |
+ LPAREN {{ v = [] }}
+ ( address {{ v.append(address) }} )+
+ RPAREN) {{ return v }}
+ rule env_bcc: env_custom_addrs {{ return env_custom_addrs }}
+ rule env_cc: env_custom_addrs {{ return env_custom_addrs }}
+ rule env_date: nstring {{ return nstring }}
+ rule env_from: env_custom_addrs {{ return env_custom_addrs }}
+ rule env_in_reply_to: nstring {{ return nstring }}
+ rule env_mesage_id: nstring {{ return nstring }}
+ rule env_reply_to: env_custom_addrs {{ return env_custom_addrs }}
+ rule env_sender: env_custom_addrs {{ return env_custom_addrs }}
+ rule env_subject: nstring {{ return nstring }}
+ rule env_to: env_custom_addrs {{ return env_custom_addrs }}
+
+ # rule examine:
+
+ ##############################
+ # F
+ ##############################
+
+ # rule fetch:
+ # rule fetch-att
+
+ token flag_custom_base: r'(?i)\\(Answered|Flagged|Deleted|Seen|Draft)'
+ rule flag: (flag_custom_base {{ v = flag_custom_base}}
+ | flag_keyword {{ v = flag_keyword }}
+ | flag_extension {{ v = flag_extension}} ) {{ return v }}
+ rule flag_extension: BACKSLASH atom {{ return "\\" + atom }}
+ rule flag_fetch: (flag {{ v = flag}}
+ | r'(?i)\\Recent' {{ v = "\\Recent" }} ) {{ return v }}
+ rule flag_keyword: atom {{ return atom }}
+ rule flag_list: LPAREN {{ v = [] }}
+ [flag {{ v.append(flag) }}
+ (SP flag {{ v.append(flag) }} ) * ]
+ RPAREN
+ {{ return v }}
+ rule flag_perm: (flag {{ v = flag }}
+ | BACKSLASH ASTERISK {{ v = "\\*" }} ) {{ return v }}
+
+ ##############################
+ # G
+ ##############################
+ rule greeting: ASTERISK SP (resp_cond_auth {{ v = resp_cond_auth }}
+ | resp_cond_bye {{ v = resp_cond_bye }} )
+ CRLF {{ return v }}
+
+ ##############################
+ # H
+ ##############################
+
+ rule header_fld_name: astring {{ return astring }}
+ rule header_list: LPAREN header_fld_name {{ v = [header_fld_name] }}
+ (SP header_fld_name {{v.append(header_fld_name)}} )*
+ RPAREN {{ return v }}
+
+ ##############################
+ # L
+ ##############################
+
+ # rule list:
+ # rule list_mailbox:
+ rule list_char: (ATOM_CHAR {{ v = ATOM_CHAR }}
+ | list_wildcards {{ v = list_wildcards}}
+ | resp_specials {{ v = resp_specials }} ) {{ return v }}
+ token list_wildcards: r'[%*]'
+ rule literal: r'\{' number r'\}' CRLF literal_load<<number>> {{ return literal_load }}
+ rule literal_load<<X>>: {{ count = 0 }} {{ data = '' }}
+ ( {{ if count == X: break}}
+ CHAR8 {{ count += 1 }} {{ data += CHAR8 }}
+ )*
+ {{ return data }}
-
-
+ #rule login:
+ #rule lsub:
+ ##############################
+ # M
+ ##############################
+ rule mailbox: ("INBOX" {{ v = "INBOX" }} | astring {{ v = astring }} )
+ {{ return v }}
+ rule mailbox_data: {{ v = {} }}
+ ("(?i)FLAGS" SP flag_list {{ v['flags'] = flag_list}}
+ | "(?i)(LIST|LSUB)" SP mailbox_list {{ v['list'] = mailbox_list}}
+ | "(?i)SEARCH" {{ v['search'] = [] }}
+ (SP nz_number {{ v['search'].append(nz_number) }} )*
+ | "(?i)STATUS" SP mailbox {{ v['status'] = {'mailbox': mailbox} }}
+ SP LPAREN [status_att_list {{v['status']['att'] = status_att_list }}
+ ] RPAREN
+ | number SP "(?i)EXISTS" {{ v['exists'] = number}}
+ | number SP "(?i)RECENT" {{ v['recent'] = number }}
+ ) {{ return v }}
+ rule mailbox_list: {{ v = {} }}
+ LPAREN [mbx_list_flags {{ v['flags'] = mbx_list_flags }} ] RPAREN
+ SP
+ ( nil {{ v['data'] = nil }}
+ | DQUOTE QUOTED_CHAR DQUOTE {{ v['data'] = QUOTED_CHAR }}
+ )
+ SP mailbox {{ v['mailbox'] = mailbox }}
+ {{ return v }}
+ rule mbx_list_flags: {{ v = [] }}
+ (
+ (mbx_list_oflag SP {{ v.append(mbx_list_oflag) }} )*
+ mbx_list_sflag {{v.append(mbx_list_sflag) }}
+ (SP mbx_list_oflag {{v.append(mbx_list_oflag)}})*
+ | mbx_list_oflag {{v.append(mbx_list_oflag)}}
+ (SP mbx_list_oflag {{v.append(mbx_list_oflag)}})*
+ ) {{ return v }}
+ rule mbx_list_oflag: (r'(?i)\\Noinferiors' {{ v = "\\Noinferiors" }}
+ | flag_extension {{ v = flag_extension }} ) {{ return v }}
+ token mbx_list_sflag: r'(?i)\\(Noselect|Marked|Unmarked)'
+
+ token media_basic_tok: r'(?i)(APPLICATION|AUDIO|IMAGE|MESSAGE|VIDEO'
+ rule media_basic: string SP media_subtype {{ return (string, media_subtype) }}
+ token media_message: r'(?i)"MESSAGE" "RFC822"'
+ rule media_subtype: string {{ return string }}
+ rule media_text: DQUOTE r'(?i)TEXT' DQUOTE SP media_subtype
+ {{ return ('TEXT', media_subtype) }}
+
+ rule message_data: nz_number SP {{ v = [nz_number] }}
+ (r'(?i)EXPUNGE' {{ v.append('EXPUNGE') }}
+ | r'(?i)FETCH' SP msg_att {{ v.extend(['FETCH', msg_att]) }}
+ ) {{ return v }}
+ rule msg_att: LPAREN {{ v = {} }}
+ (msg_att_dynamic {{ v.update(msg_att_dynamic) }}
+ | msg_att_static {{ v.update(msg_att_static) }} )
+ (SP
+ (msg_att_dynamic {{ v.update(msg_att_dynamic) }}
+ | msg_att_static {{ v.update(msg_att_static) }} )
+ )*
+ RPAREN {{ return v }}
+ rule msg_att_dynamic: r'(?i)FLAGS' SP LPAREN
+ {{ v = [] }}
+ [flag_fetch {{ v.append(flag_fetch) }}
+ (SP flag_fetch {{ v.append(flag_fetch) }} )* ]
+ RPAREN {{ return {'FLAGS': v} }}
+ token msg_att_static_tok: r'(?i)RFC822(\.HEADER|\.TEXT){0,1}'
+ token msg_att_static_bodytok: r'(?i)BODY(STRUCTURE){0,1}'
+ rule msg_att_static:
+ (
+ r'(?i)ENVELOPE' SP envelope {{ t = 'ENVELOPE'}} {{ v = envelope }}
+ | r'(?i)INTERNALDATE' SP date_time {{t = 'INTERNALDATE'}} {{v = date_time}}
+ | msg_att_static_tok SP nstring {{t = msg_att_static_tok}} {{v=nstring}}
+ | r'(?i)RFC822\.SIZE' SP number {{t = 'RFC822.SIZE'}} {{v=number}}
+ | msg_att_static_bodytok SP body {{t=msg_att_static_bodytok}}{{v=body}}
+ | r'(?i)BODY' {{t='BODYsect'}}
+ section {{ v = {'section': section} }}
+ [LT number GT {{v['number'] = number}}] SP nstring {{ v['nstring'] = nstring}}
+ | r'(?i)UID' SP uniqueid {{t='UID'}} {{v = uniqueid}}
+ ) {{ return {t: v} }}
+
+ ##############################
+ # N
+ ##############################
+
+ rule nil: r'(?i)NIL' {{ return None }}
+ rule nstring: (string {{ v = string}} | nil {{ v = nil }} ) {{ return v }}
+ token number_tok: r'[0-9]+'
+ rule number: number_tok {{ return int(number_tok) }}
+ token nz_number_tok: r'[1-9][0-9]*'
+ rule nz_number: nz_number_tok {{ return int(nz_number_tok) }}
+ ##############################
+ # P
+ ##############################
+
+ rule password: astring {{ return astring }}
+
+ ##############################
+ # Q
+ ##############################
+
+ token QUOTED_CHAR_TOK: r'(?![\n\r"\\])[\x01-\x7f]'
+ rule quoted: "\"" {{v = ''}}
+ ( QUOTED_CHAR {{ v += QUOTED_CHAR}} )*
+ "\"" {{ return v }}
+ rule QUOTED_CHAR: QUOTED_CHAR_TOK {{ return QUOTED_CHAR_TOK }}
+ | ( "\\\\" quoted_specials {{ return quoted_specials}} )
+ token quoted_specials: r'["\\]'
+
+ ##############################
+ # R
+ ##############################
+
+ # rule rename:
+
+ rule response: {{ v = [] }}
+ (continue_req {{ v.append(continue_req)}}
+ | response_data {{ v.append(response_data) }} )*
+ response_done {{ return [response_done] + v }}
+ rule response_data: ASTERISK SP (
+ resp_cond_state {{ v = resp_cond_date }}
+ | resp_cond_bye {{ v = resp_cond_bye}}
+ | mailbox_data {{ v = mailbox_data }}
+ | message_data {{ v = message_data }}
+ | capability_data {{ v = capability_data}}) CRLF {{ return v }}
+ rule response_done: (response_tagged {{ v = response_tagged}}
+ | response_fatal {{ v = response_fatal}}) {{ return v}}
+ rule response_fatal: ASTERISK SP resp_cond_bye CRLF {{ return resp_cond_bye}}
+ rule response_tagged: tag SP resp_cond_state CRLF
+ {{ return {'tag': tag, 'state': resp_cond_state} }}
+ token resp_cond_auth_tok: r'(?i)(OK|PREAUTH)'
+ rule resp_cond_auth: resp_cond_auth_tok SP resp_text
+ {{ return {'result': resp_cond_auth_tok, 'detail': resp_text} }}
+ rule resp_cond_bye: r'(?i)BYE' SP resp_text
+ {{ return {'result': BYE, 'detail': resp_text} }}
+ token resp_cond_state_tok: r'(?i){OK|NO|BAD)'
+ rule resp_cond_state: resp_cond_state_tok SP resp_text
+ {{ return {'result': resp_cond_state_tok, 'detail': resp_text} }}
+ token resp_specials: r'\]'
+ token RESP_TEXT_CHAR: r'(?![\n\r\]])[\x01-\x7f]'
+ rule resp_text = {{ v = {} }}
+ [LBRACKET resp_text_code RBRACKET SP {{v['code'] = resp_text_code}} ]
+ test {{ v['text'] = text}} {{ return v}}
+ rule resp_text_code: (
+ r'(?i)ALERT' {{ v = ['ALERT'] }}
+ | r'(?i)BADCHARSET' {{ v = ['BADCHARSET'] }}
+ [SP LPAREN astring {{ v.append(astring) }}
+ (SP astring {{ v.append(astring) }} )*
+ RPAREN ]
+ | capability_data {{ v = [capability_data] }}
+ | r'(?i)PARSE' {{ v = ['PARSE'] }}
+ | r'(?i)PERMANENTFLAGS' SP LPAREN {{ v = ['PERMANENTFLAGS'] }}
+ [flag_perm {{ v.append(flag_perm) }}
+ (SP flag_perm {{ v.append(flag_perm) }})*] RPAREN
+ | r'(?i)READ-ONLY' {{ v = ['READ-ONLY'] }}
+ | r'(?i)READ-WRITE' {{ v = ['READ-WRITE'] }}
+ | r'(?i)TRYCREATE' {{ v = ['TRYCREATE'] }}
+ | r'(?i)UIDNEXT' SP nz_number {{ v = ['UIDNEXT', nz_number] }}
+ | r'(?i)UIDVALIDITY' SP nz_number {{ v = ['UIDVALIDITY', nz_number] }}
+ | r'(?i)UNSEEN' SP nz_number {{ v = ['UNSEEN', nz_number] }}
+ | atom {{v = [atom]}} [SP {{ v.append('') }}
+ (RESP_TEXT_CHAR {{ v[1] += RESP_TEXT_CHAR}})+]
+ ) {{ return v }}
+
+ ##############################
+ # S
+ ##############################
+
+ #rule search:
+ #rule search_key:
+
+ rule section: {{ v = None }} LBRACKET [section_spec {{ v = section_spec }} ]
+ RBRACKET {{ return v }}
+ token section_msgtext_tok: r'(?i)HEADER(\.FIELDS){0,1}(\.NOT){0,1}'
+ rule section_msgtext: section_msgtext_tok {{ v = [section_msgtext_tok] }}
+ SP (header_list {{ v.append(header_list) }}
+ | r'(?i)TEXT' {{ v.append('TEXT') }} ) {{ return v }}
+ rule section_part: nz_number {{ v = str(nz_number) }}
+ (PERIOD nz_number {{ v += '.' + str(nz_number) }})* {{ return v }}
+ rule section_spec: (section_msgtext {{ v = {'msgtext': section_msgtext} }}
+ | section_part {{ v = {'part'}: section_part }}
+ [PERIOD section_text {{ v['text'] = section_text}} ]
+ ) {{ return v }}
+ rule section_text: (section_msgtext {{ v = section_msgtext}}
+ | r'(?i)MIME' {{ v = 'MIME' }}) {{ return v }}
+ # rule select:
+ # rule seq_number:
+ # rule seq_range:
+ # rule sequence_set:
+ # rule status:
+ token status_att: r'(?i)(MESSAGES|RECENT|UIDNEXT|UIDVALIDITY|UNSEEN)'
+ rule status_att_list: {{ v = {} }}
+ status_att SP number {{ v[status_att] = number}}
+ (SP status_att SP number {{ v[status_att] = number}})*
+ {{ return v}}
+ #rule store:
+ #rule store_att_flags:
+
+ rule string: (quoted {{ v = quoted }} | literal {{ v = literal }})
+ {{ return v }}
+ #rule subscribe:
+ ##############################
+ # T
+ ##############################
+
+ rule TAG_ASTRING_CHAR: TAG_ATOM_CHAR {{ return TAG_ATOM_CHAR}}
+ | resp_specials {{ return resp_specials }}
+ token TAG_ATOM_CHAR: r'(?![+(){ \x00-\x1f\x7f%*"\\\]])[\x01-\x7f]'
+ rule tag: {{ v = '' }} (TAG_ASTRING_CHAR {{ v += TAG_ASTRING_CHAR}})+
+ {{ return v}}
+ rule text: {{ v = '' }} (TEXT_CHAR {{ v += TEXT_CHAR }})+ {{ return v }}
+
+
+ token TEXT_CHAR: r'(?![\n\r])[\x01-\x7f]'
+ rule time: DIGITx2 {{ x = {'hours': DIGITx2} }}
+ ":" DIGITx2 {{ x['minutes']= DIGITx2} }}
+ ":" DIGITx2 {{ x['seconds']= DIGITx2} }} {{ return x }}
+
+ ##############################
+ # U
+ ##############################
+ # rule uid:
+ rule uniqueid: nz_number {{ return nz_number }}
+ # rule unsubscribe:
+ rule userid: astring {{ return astring }}
+
+ ##############################
+ # X
+ ##############################
+
+ # rule x_command:
+
+ ##############################
+ # Z
+ ##############################
+
+ rule zone: PLUSMINUS DIGITx4 {{ return PLUSMINUS + DIGITx4 }}
+
+
rule address:
token ATOM_CHAR: r'(?![(){ %("\\\x00-\x1f\x7f])[\x01-\x7f]'
@@ -207,7 +528,6 @@
token digit: r'[0-9]'
token digit_nz: r'[1-9]'
token list_wildcards: r'[%*]'
- token QUOTED_CHAR_TOK: r'(?![\n\r"\\])[\x01-\x7f]'
token quoted_specials: r'["\\]'
token SPACE: r'[ ]'
token TEXT_CHAR: r'(?![\n\r])[\x01-\x7f]'
@@ -254,21 +574,11 @@
rule digit: "0" {{ return "0" }} | digit_nz {{ return digit_nz }}
- rule literal: r'\{' number r'\}' CRLF literal_load<<number>> {{ return literal_load }}
- rule literal_load<<X>>: {{ count = 0 }} {{ data = '' }}
- ( CHAR8 {{ count += 1 }} {{ data += CHAR8 }}
- {{ if count == X: break}} )*
- {{ return data }}
rule number: {{ v = '' }}
(digit {{ v += digit }} ) +
{{ return int(v) }}
- rule quoted: "\"" {{v = ''}}
- ( QUOTED_CHAR {{ v += QUOTED_CHAR}} )*
- "\"" {{ return v }}
- rule QUOTED_CHAR: QUOTED_CHAR_TOK {{ return QUOTED_CHAR_TOK }}
- | ( "\\\\" quoted_specials {{ return quoted_specials}} )
rule response: {{ v = [] }}
( continue_req {{ v.append(continue_req) }}