offlineimap rev 495
"Automatic Subversion Change Mailer" <[email protected]> Wed, 16 Jul 2003 13:38:22 -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:38:03 -0500 (Wed, 16 Jul 2003)
New Revision: 495
Modified:
imaplib/head/imap2/parser/imap.g
Log:
This grammar now compiles.
Diff:
Modified: imaplib/head/imap2/parser/imap.g
==============================================================================
--- imaplib/head/imap2/parser/imap.g 2003-07-16 18:14:42 UTC (rev 494)
+++ imaplib/head/imap2/parser/imap.g 2003-07-16 18:38:03 UTC (rev 495)
@@ -30,12 +30,14 @@
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 BACKSLASH: r'\\'
+ token ASTERISK: r'\*'
+ token LBRACKET: r'\['
+ token RBRACKET: r'\]'
+ token PERIOD: r'\.'
token PLUSMINUS: r'[+-]'
+ token LT: r'<'
+ token GT: r'>'
# Tokens in RFC2060, missing from RFC3501, but used there.
token ALPHA: r'[a-zA-Z]'
@@ -43,19 +45,57 @@
token DIGIT: r'[0-9]'
token DIGITx2: r'[0-9]{2}'
token DIGITx4: r'[0-9]{4}'
+ token SP: r'\ '
+ token CRLF: r'\r\n'
+ token CTL: r'[\x00-\x1f\x7f]'
+ # Defined tokens
+ token ATOM_CHAR: r'(?![(){ \x00-\x1f\x7f%*"\\\]])[\x01-\x7f]'
+ token atom_specials_tok: r'[()}'
+ token base64_char: r'[a-zA-Z0-9+/]'
+ token base64_char_x2: r'[a-zA-Z0-9+/]{2}'
+ token base64_char_x3: r'[a-zA-Z0-9+/]{3}'
+ token base64_char_x4: r'[a-zA-Z0-9+/]{4}'
+ token CHAR8: r'[\x01-\xff]'
+ token date_day: r'[0-9]{1,2}'
+ token date_day_fixed: r'[ 0-9][0-9]'
+ token date_month: r'(?i)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'
+ token date_year: r'[0-9]{4}'
+ token digit_nz: r'[1-9]'
+ token flag_custom_base: r'(?i)\\(Answered|Flagged|Deleted|Seen|Draft)'
+ token list_wildcards: r'[%*]'
+ token mailbox_data_tok: r'(?i)(EXISTS|RECENT)'
+ token mbx_list_sflag: r'(?i)\\(Noselect|Marked|Unmarked)'
+ token media_basic_tok: r'(?i)(APPLICATION|AUDIO|IMAGE|MESSAGE|VIDEO'
+ token media_message: r'(?i)"MESSAGE" "RFC822"'
+ token msg_att_static_tok: r'(?i)RFC822(\.HEADER|\.TEXT){0,1}'
+ token msg_att_static_bodytok: r'(?i)BODY(STRUCTURE){0,1}'
+ token number_tok: r'[0-9]+'
+ token nz_number_tok: r'[1-9][0-9]*'
+ token QUOTED_CHAR_TOK: r'(?![\n\r"\\])[\x01-\x7f]'
+ token quoted_specials: r'["\\]'
+ token resp_cond_auth_tok: r'(?i)(OK|PREAUTH)'
+ token resp_cond_state_tok: r'(?i){OK|NO|BAD)'
+ token resp_specials: r'\]'
+ token RESP_TEXT_CHAR: r'(?![\n\r\]])[\x01-\x7f]'
+ token section_msgtext_tok: r'(?i)HEADER(\.FIELDS){0,1}(\.NOT){0,1}'
+ token status_att: r'(?i)(MESSAGES|RECENT|UIDNEXT|UIDVALIDITY|UNSEEN)'
+ token TAG_ATOM_CHAR: r'(?![+(){ \x00-\x1f\x7f%*"\\\]])[\x01-\x7f]'
+ token TEXT_CHAR: r'(?![\n\r])[\x01-\x7f]'
+
+
+
# Rules
- rule address: LPAREN addr-name SP addr-adl SP addr-mailbox SP
- addr-host RPAREN
- {{ return {'name': addr-name, 'adl': addr-adl,
- 'mailbox': addr-mailbox, 'host': addr-host} }}
+ rule address: LPAREN addr_name SP addr_adl SP addr_mailbox SP addr_host
+ RPAREN
+ {{ return {'name': addr_name, 'adl': addr_adl, 'mailbox': addr_mailbox, 'host': addr_host} }}
- rule addr-adl: nstring {{ return nstring }}
- rule addr-host: nstring {{ return nstring }}
- rule addr-mailbox: nstring {{ return nstring }}
- rule addr-name: nstring {{ return nstring }}
+ rule addr_adl: nstring {{ return nstring }}
+ rule addr_host: nstring {{ return nstring }}
+ rule addr_mailbox: nstring {{ return nstring }}
+ rule addr_name: nstring {{ return nstring }}
# append
rule astring: string {{ return string }} |
{{ v = '' }}
@@ -64,8 +104,6 @@
rule atom: {{ v = '' }} ( ATOM_CHAR {{ v += ATOM_CHAR }} ) + {{ return v }}
rule ASTRING_CHAR: ATOM_CHAR {{ return ATOM_CHAR}}
| resp_specials {{ return resp_specials }}
- token ATOM_CHAR: r'(?![(){ \x00-\x1f\x7f%*"\\\]])[\x01-\x7f]'
- token atom_specials_tok: r'[()}'
rule atom_specials: atom_specials_tok {{ return atom_specials_tok }}
| SP {{ return SP }}
| CTL {{ return CTL }}
@@ -86,10 +124,6 @@
(base64_char_x4 {{ v += base64_char_x4}} ) *
[ base64_terminal {{ v += base64_terminal }} ]
{{ return v }}
- token base64_char: r'[a-zA-Z0-9+/]'
- token base64_char_x2: r'[a-zA-Z0-9+/]{2}'
- token base64_char_x3: r'[a-zA-Z0-9+/]{3}'
- token base64_char_x4: r'[a-zA-Z0-9+/]{4}'
rule base64_terminal: (base64_char_x2 "==" {{ return base64_char_x2 + "==" }}
| base64_char_x3 "=" {{ return base64_char_x3 + "=" }}
)
@@ -122,9 +156,7 @@
{{ return v }}
rule body_fields: body_fld_param SP body_fld_id SP body_fld_desc SP
body_fld_enc SP body_fld_octets
- {{ return {'param': body_fld_param, 'id': body_fld_id,
- 'desc': body_fld_desc, 'enc': body_fld_enc,
- 'octets': body_fld_octets} }}
+ {{ return {'param': body_fld_param, 'id': body_fld_id, 'desc': body_fld_desc, 'enc': body_fld_enc, 'octets': body_fld_octets} }}
rule body_fld_desc: nstring {{ return nstring }}
rule body_fld_dsp: (nil {{ v = nil }}
| LPAREN string SP body_fld_param RPAREN {{ v = [string, body_fld_param] }}
@@ -165,13 +197,9 @@
{{ return v }}
rule body_type_msg: media_message SP body_fields SP envelope SP
body SP body_fld_lines
- {{ return {'media_message': media_message,
- 'body_fields': body_fields,
- 'envelope': envelope, 'body': body,
- 'bofy_fld_lines': body_fld_lines} }}
+ {{ return {'media_message': media_message, 'body_fields': body_fields,'envelope': envelope, 'body': body, 'bofy_fld_lines': body_fld_lines} }}
rule body_type_text: media_text SP body_fields SP body_fld_lines
- {{ return {'media_text': media_text, 'body_fields': body_fields,
- 'body_fld_lines': body_fld_lines} }}
+ {{ return {'media_text': media_text, 'body_fields': body_fields, 'body_fld_lines': body_fld_lines} }}
##############################
# C
@@ -184,8 +212,6 @@
"(?i)IMAP4rev1" {{ v.append("IMAP4rev1") }}
(SP capability {{ v.append(capability) }})*
{{ return v }}
- token CHAR8: r'[\x01-\xff]'
-
#rule command:
#rule command_any:
#rule command_auth:
@@ -198,21 +224,11 @@
# rule copy:
# rule create:
rule date: (date_text | DQUOTE date_text DQUOTE) {{ return date_text }}
- token date_day: r'[0-9]{1,2}'
- token date_day_fixed: r'[ 0-9][0-9]'
- token date_month: r'(?i)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'
rule date_text: date_day DASH date_month DASH date_year
- {{ return {'day': int(date_day),
- 'month': date_month,
- 'year': int(date_year)} }}
- token date_year: r'[0-9]{4}'
+ {{ return {'day': int(date_day), 'month': date_month, 'year': int(date_year)} }}
rule date_time: DQUOTE date_day_fixed DASH date_month DASH date_year
- SP time SP zone DQUOTE {{ return {'day': int(date_day_fixed.strip()),
- 'month': date_month,
- 'year': int(date_year),
- 'time': time, 'zone': zone} }}
+ SP time SP zone DQUOTE {{ return {'day': int(date_day_fixed.strip()), 'month': date_month, 'year': int(date_year),'time': time, 'zone': zone} }}
# rule delete:
- token digit_nz: r'[1-9]'
##############################
# E
@@ -221,10 +237,7 @@
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 } }}
+ {{ 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) }} )+
@@ -234,7 +247,7 @@
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_message_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 }}
@@ -249,7 +262,6 @@
# 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 }}
@@ -262,8 +274,9 @@
(SP flag {{ v.append(flag) }} ) * ]
RPAREN
{{ return v }}
- rule flag_perm: (flag {{ v = flag }}
- | BACKSLASH ASTERISK {{ v = "\\*" }} ) {{ return v }}
+ rule flag_perm: (flag {{ v = flag }}) {{ return v }}
+ # \* assumed in flag
+ # | BACKSLASH ASTERISK {{ v = "\\*" }} ) {{ return v }}
##############################
# G
@@ -290,7 +303,6 @@
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}}
@@ -315,8 +327,7 @@
| "(?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 }}
+ | number SP mailbox_data_tok {{ v[mailbox_data_tok.upper()] = number}}
) {{ return v }}
rule mailbox_list: {{ v = {} }}
LPAREN [mbx_list_flags {{ v['flags'] = mbx_list_flags }} ] RPAREN
@@ -326,21 +337,19 @@
)
SP mailbox {{ v['mailbox'] = mailbox }}
{{ return v }}
+ # This rule does not enforce the exactly-one occurance of sflag as
+ # specified in the RFC.
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'
+ (mbx_list_oflag {{ v.append(mbx_list_oflag)}}
+ | mbx_list_sflag {{v.append(mbx_list_sflag)}})
+ (SP (
+ mbx_list_oflag {{ v.append(mbx_list_oflag) }}
+ | mbx_list_sflag {{ v.append(mbx_list_sflag) }} )
+ )* {{ return v }}
+ rule mbx_list_oflag: flag_extension {{ return flag_extension }}
+ # oflag skips the \Noinferiors in the RFC because
+ # flag_extension captures it.
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) }}
@@ -362,8 +371,6 @@
[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 }}
@@ -383,9 +390,7 @@
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) }}
##############################
@@ -398,13 +403,11 @@
# 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
@@ -427,19 +430,15 @@
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 = {} }}
+ rule resp_text: {{ v = {} }}
[LBRACKET resp_text_code RBRACKET SP {{v['code'] = resp_text_code}} ]
- test {{ v['text'] = text}} {{ return v}}
+ text {{ v['text'] = text}} {{ return v}}
rule resp_text_code: (
r'(?i)ALERT' {{ v = ['ALERT'] }}
| r'(?i)BADCHARSET' {{ v = ['BADCHARSET'] }}
@@ -470,7 +469,6 @@
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 }}
@@ -487,7 +485,6 @@
# 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}})*
@@ -505,13 +502,11 @@
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 }}