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