(Arne Babenhauserheide)
2013-08-10: throw an exception when reducing indentation to an unknown throw an exception when reducing indentation to an unknown indentation level.
diff --git a/.bugs/bugs b/.bugs/bugs
--- a/.bugs/bugs
+++ b/.bugs/bugs
@@ -1,5 +1,5 @@
fails when I add stuff at the end of end of example.w | owner:, open:False, id:08c68e1ce0c9798184c01806d2661a3220bff3cd, time:1363789693.79
-throw an exception when reducing indentation to an unknown indentation level. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:424186bd85f186b7279c5c59e2bd42f847284719, time:1376003568.91
+throw an exception when reducing indentation to an unknown indentation level. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:424186bd85f186b7279c5c59e2bd42f847284719, time:1376003568.91
implement wisp in wisp | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:6299306916706410702029289bf32edab1e7f17c, time:1367113341.49
inline ' : should be '( | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:72d534a8b23b4cb168017f1bb7d8816f0ea170c4, time:1366497335.26
make this work: let : : origfile ( open-file : nth 1 : command-line ) r | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:d6de2074a5017f1f29f34d142ce797981ed270a0, time:1366529287.67
diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -212,7 +212,7 @@ let*
; display text
set! lines : call-with-input-string text splitlines
set! lines : linestoindented lines
- display : list-ref lines 100
+ display : list-ref lines 0
newline
diff --git a/wisp.py b/wisp.py
--- a/wisp.py
+++ b/wisp.py
@@ -75,6 +75,10 @@ def replaceinwisp(code, string, replacem
return code, count
+class UndefinedIndentationLevel(IndentationError):
+ """Unindent does not match any outer indentation level."""
+
+
class Line:
def __init__(self, line):
"""Parse one line in which linebreaks within strings and
@@ -249,7 +253,8 @@ def nobracketbreaks(code):
def processlines(lines, prev, codestartindex, levels, lisplines, emptylines):
"""Process all lines after the first."""
# process further lines: adjust the content of the current line, but only append
- for line in lines[codestartindex+1:]:
+ for n, line in enumerate(lines[codestartindex+1:]):
+ n += codestartindex + 1
# ignore empty lines and comment-only lines
if line.empty:
# simply keep empty lines and ignore their indentation
@@ -279,6 +284,8 @@ def processlines(lines, prev, codestarti
# lower indent: parent funtion or variable. Find the number of brackets to close
if prev.indent > line.indent:
bracketstoclose = len([level for level in levels if level >= line.indent])
+ if not line.indent in levels[-bracketstoclose:]:
+ raise UndefinedIndentationLevel("Unindent of line " + str(n) + " does not match any outer indentation level.\n" + line.indent*" " + "|\n" + line.indent*" " + "v\n" + line.indent*" " + line.content)
levels = levels[:-bracketstoclose + 1]
if prev.continues:
bracketstoclose -= 1