offlineimap rev 516

"Automatic Subversion Change Mailer" <[email protected]> Fri, 18 Jul 2003 22:00:30 -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-18 22:00:22 -0500 (Fri, 18 Jul 2003)
New Revision: 516

Modified:
  imaplib/head/imap2/parser/GrammarClass.py
  imaplib/head/imap2/parser/grammar.g
  imaplib/head/imap2/parser/grammar.py
  imaplib/head/imap2/parser/grammarTest.py

Log:
Finally cleared up the quoted and literal processing problems.


Diff:
Modified: imaplib/head/imap2/parser/GrammarClass.py
==============================================================================
--- imaplib/head/imap2/parser/GrammarClass.py	2003-07-18 21:13:04 UTC (rev 515)
+++ imaplib/head/imap2/parser/GrammarClass.py	2003-07-19 03:00:22 UTC (rev 516)
@@ -23,7 +23,7 @@
 from StringIO import StringIO
 
 def parse(rule, text):
-    P = grammar.IMAP(grammar.IMAPScanner(text))
+    P = grammar.IMAP(grammar.IMAP_YappsScanner(text))
     savedstdout = sys.stdout
     try:
         try:

Modified: imaplib/head/imap2/parser/grammar.g
==============================================================================
--- imaplib/head/imap2/parser/grammar.g	2003-07-18 21:13:04 UTC (rev 515)
+++ imaplib/head/imap2/parser/grammar.g	2003-07-19 03:00:22 UTC (rev 516)
@@ -23,7 +23,7 @@
 
 %%
 
-parser IMAP:
+parser IMAP_Yapps:
     token END: "$"
     
     token CHAR_EIGHT: r'[\x01-\xff]'
@@ -312,7 +312,7 @@
     rule literal: r'\{' number r'\}' CRLF literal_load<<number>> {{ return literal_load }}
     rule literal_load<<X>>: {{ if X == 0: return }}
          {{ data = '' }}
-         (  CHAR_EIGHT {{ data += CHAR_EIGHT; if len(data) ==  X): break }} )*
+         (  CHAR_EIGHT {{ data += CHAR_EIGHT }} {{ if (len(data) ==  X): break }} )*
          {{ assert len(data) == X, "data len is %d, X is %d" % (len(data), X) }}
          {{ return data }}
     #rule literal_load<<X>>: {{ if X == 0: return '' }} 
@@ -556,3 +556,15 @@
     rule test_capability_data: capability_data END {{ return capability_data }}
     rule test_nstring: nstring END {{ return nstring }}
 
+%%
+
+class IMAP(IMAP_Yapps):
+    def literal_load(self, X):
+        # This function is broken in Yapps' generation.
+        count = 0
+        data = ''
+        while count < X:
+            data += self._scan('CHAR_EIGHT')
+            count += 1
+        assert len(data) == X
+        return data

Modified: imaplib/head/imap2/parser/grammar.py
==============================================================================
--- imaplib/head/imap2/parser/grammar.py	2003-07-18 21:13:04 UTC (rev 515)
+++ imaplib/head/imap2/parser/grammar.py	2003-07-19 03:00:22 UTC (rev 516)
@@ -1,5 +1,5 @@
 # Implementation of grammar from RFC3501
-# $Id: grammar.g 506 2003-07-17 16:33:45Z jgoerzen $
+# $Id: grammar.g 515 2003-07-17 22:12:41Z jgoerzen $
 
 # COPYRIGHT #
 # Copyright (C) 2003 John Goerzen
@@ -26,7 +26,7 @@
 import re
 from yappsrt import *
 
-class IMAPScanner(Scanner):
+class IMAP_YappsScanner(Scanner):
     patterns = [
         ('":"', re.compile(':')),
         ("r'(?i)MIME'", re.compile('(?i)MIME')),
@@ -121,7 +121,7 @@
     def __init__(self, str):
         Scanner.__init__(self,None,[],str)
 
-class IMAP(Parser):
+class IMAP_Yapps(Parser):
     def goal(self):
         response = self.response()
         END = self._scan('END')
@@ -699,7 +699,8 @@
         data = ''
         while self._peek('CHAR_EIGHT', 'SP', 'RPAREN', 'END', 'CRLF') == 'CHAR_EIGHT':
             CHAR_EIGHT = self._scan('CHAR_EIGHT')
-            data += CHAR_EIGHT; if len(data) ==  X): break
+            data += CHAR_EIGHT
+            if (len(data) ==  X): break
         assert len(data) == X, "data len is %d, X is %d" % (len(data), X)
         return data
 
@@ -1268,15 +1269,19 @@
 
 
 def parse(rule, text):
-    P = IMAP(IMAPScanner(text))
+    P = IMAP_Yapps(IMAP_YappsScanner(text))
     return wrap_error_reporter(P, rule)
 
-if __name__=='__main__':
-    from sys import argv, stdin
-    if len(argv) >= 2:
-        if len(argv) >= 3:
-            f = open(argv[2],'r')
-        else:
-            f = stdin
-        print parse(argv[1], f.read())
-    else: print 'Args:  <rule> [<filename>]'
+
+
+
+class IMAP(IMAP_Yapps):
+    def literal_load(self, X):
+        # This function is broken in Yapps' generation.
+        count = 0
+        data = ''
+        while count < X:
+            data += self._scan('CHAR_EIGHT')
+            count += 1
+        assert len(data) == X
+        return data

Modified: imaplib/head/imap2/parser/grammarTest.py
==============================================================================
--- imaplib/head/imap2/parser/grammarTest.py	2003-07-18 21:13:04 UTC (rev 515)
+++ imaplib/head/imap2/parser/grammarTest.py	2003-07-19 03:00:22 UTC (rev 516)
@@ -77,7 +77,7 @@
             ("{5}\r\ntest1", "test1"),
             ("{7}\r\nTest\r\n2", "Test\r\n2"),
             ("{7}\r\nTest3\r\n", "Test3\r\n"),
-            ("{6}\r\nTest4\n1", "Test4\n1"),
+            ("{6}\r\nTest\n1", "Test\n1"),
             ('""', ""),
             ("{0}\r\n", ""),
             (r'"Quoted with \"Quotes\""', 'Quoted with "Quotes"'),