(Arne Babenhauserheide)
2013-08-25: wisp-guile.w no longer dies too badly, and found a bug in wisp.py wisp-guile.w no longer dies too badly, and found a bug in wisp.py
diff --git a/.bugs/bugs b/.bugs/bugs
--- a/.bugs/bugs
+++ b/.bugs/bugs
@@ -6,4 +6,5 @@ wisp-guile.w does not yet remove the lea
inline ' : should be '( | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:72d534a8b23b4cb168017f1bb7d8816f0ea170c4, time:1366497335.26
wisp-mode: handle lines starting with underscores: currently sees the underscores as function call. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:b2c3755e1deb8355655a334d569679e2e62d2836, time:1376612093.55
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
+wisp.py breaks on \ - quote, escaped backslash, quote | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:d75a93ca58ade5b3e3e51f1e7ee9782e743ac131, time:1377424552.02
comments containing a closing parenthesis can break the parser. | owner:, open:False, id:d9147504868960e5fbc2648474d48ce5c9bd1a02, time:1374838747.22
diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -24,11 +24,16 @@ define : nostringandbracketbreaks inport
incharform 0 ; #\<something>
while : not : eof-object? nextchar
; incommentfirstchar is only valid for exactly one char
- when incommentfirstchar : set! incommentfirstchar #f
+ when incommentfirstchar : set! incommentfirstchar #f
; already started char forms win over everything, so process them first.
; already started means: after the #\
+ ; FIXME: Fails to capture #t and #f which can kill line splitting if it happens inside brackets
+ when : = incharform 1
+ when : not : char=? #\" nextchar
+ set! incharform 0
+
when : >= incharform 2
- if : char=? nextchar #\space
+ if : or (char=? nextchar #\space) (char=? nextchar #\linefeed ) (char=? nextchar #\newline )
set! incharform 0
; else
set! incharform : + incharform 1
@@ -40,7 +45,11 @@ define : nostringandbracketbreaks inport
. instring ; when I’m in a string, I can get out
char=? lastchar #\space ; when the last char was a space, I can get into a string
char=? lastchar #\linefeed ; same for newline chars
- char=? lastchar #\newline
+ char=? lastchar #\newline
+ and : not instring ; outside of strings, brackets are pseudo-whitespace, too
+ or
+ char=? lastchar #\(
+ char=? lastchar #\)
not incomment
< incharform 1
set! instring : not instring
@@ -77,7 +86,7 @@ define : nostringandbracketbreaks inport
char=? lastchar #\#
char=? nextchar #\\
set! incharform 2
-
+
; check for brackets
when : and ( char=? nextchar #\( ) ( not instring ) ( not incomment ) ( = incharform 0 )
set! inbrackets : + inbrackets 1
@@ -466,12 +475,12 @@ let*
; line-functions for details.
textlines : split-wisp-lines text
lines : linestoindented textlines
- lisp : wisp2lisp lines
+ ; lisp : wisp2lisp lines
display : length textlines
newline
display : length lines
newline
- display : length lisp
+ ; display : length lisp
newline
; display : list-ref lines 100 ; seems good
let show : (processed '()) (unprocessed lines)
diff --git a/wisp.py b/wisp.py
--- a/wisp.py
+++ b/wisp.py
@@ -27,7 +27,6 @@ Currently it is written in Python, becau
but crave the power of lisp.
"""
-
def replaceinwisp(code, string, replacement):
"""Replace the given string with the replacement, but only in
indentation sensitive parts of the code.
@@ -56,7 +55,8 @@ def replaceinwisp(code, string, replacem
incomment = not incomment
# all processing stops in comments
continue
- if i == '"' and not code[n-1:n] == "\\":
+ # FIXME: This still breaks at "\\"
+ if i == '"' and (not code[n-1:n] == "\\" or (code[n-2:n] == "\\\\" and not code[n-3:n] == "\\\\\\")):
instring = not instring
# all processing stops in strings
if instring: