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) }}