wisp
 
(Arne Babenhauserheide)
2013-03-26: multiple inline : get condensed into brackets without whitespace

multiple inline : get condensed into brackets without whitespace between them: 'let : : a b' → '(let ((a b)))'

diff --git a/example.w b/example.w
--- a/example.w
+++ b/example.w
@@ -46,3 +46,11 @@ defun d :
       let 
           : a b
             c d
+
+a : : : c
+
+let 
+    : a b
+      c
+
+let : : a b
\ No newline at end of file
diff --git a/wisp.py b/wisp.py
--- a/wisp.py
+++ b/wisp.py
@@ -151,12 +151,14 @@ class Line:
         bracketstoclose = 0
         instring = False
         inbrackets = 0
-        for n, i in enumerate(self.content):
+        # go backwards through the content to be able to leave out the
+        # space after a colon without breaking later colons.
+        for n, i in reversed(list(enumerate(self.content))):
             if i == '"':
                 instring = not instring
-            if not instring and i == "(":
+            if not instring and i == ")":
                 inbrackets += 1
-            elif not instring and i == ")":
+            elif not instring and i == "(":
                 inbrackets -= 1
             if (not instring and 
                 not inbrackets and 
@@ -170,7 +172,7 @@ class Line:
                     # we have to keep the space after the colon (" : "
                     # → " ( "), otherwise we cannot use two
                     # consecutive colons (" : : ") which would be surprising.
-                    self.content = self.content[:n] + "(" + self.content[n+1:]
+                    self.content = self.content[:n] + "(" + self.content[n+2:]
         
         # after the full line processing, replace " \\: " "\n\\: " and
         # " \\:\n" (inside line, start of a line, end of a line) by "