(Arne Babenhauserheide)
2014-01-21: resolve quote-as-only-char bug: The testsuite passes again. resolve quote-as-only-char bug: The testsuite passes again.
diff --git a/.bugs/bugs b/.bugs/bugs
--- a/.bugs/bugs
+++ b/.bugs/bugs
@@ -22,4 +22,4 @@ make this work: let : : origfile ( open-
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
breaks on empty files | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:e40fa7a93eb2c497dca1af7eed22ad5ed5cfbe7f, time:1390325470.91
-quote as only char in a line gets parenthized instead of becoming a paren-prefix. | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:eb7468387e90bb5d13f5a5d81c6f4a704f2ca0fb, time:1390326369.6
+quote as only char in a line gets parenthized instead of becoming a paren-prefix. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:eb7468387e90bb5d13f5a5d81c6f4a704f2ca0fb, time:1390326369.6
diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -231,6 +231,10 @@ define : line-only-colon? line
. "Check whether the line content consists only of a colon and whitespace."
equal? ":" : string-trim-right : line-content line
+define : line-only-prefix? line prefix
+ . "Check whether the line content consists only of a colon and whitespace."
+ equal? prefix : string-trim-right : line-content line
+
define : line-merge-comment line
. "Merge comment and content into the content. Return the new line."
let
@@ -501,18 +505,26 @@ The line *must* have a whitespace after
line-content line
line-comment line
; otherwise check all possible prefixes
- let : : prefix : car paren-prefixes
- if
- or : string-prefix? prefix : line-content line
- equal? prefix : line-content line
- list
- line-indent line
- string-append
- . (string-drop-right prefix 1) "("
- string-drop (line-content line) : string-length prefix
- line-comment line
- ; else
- loop : cdr paren-prefixes
+ let*
+ : prefix : car paren-prefixes
+ prefix-no-space : string-drop-right prefix 1
+ cond
+ : string-prefix? prefix : line-content line
+ list
+ line-indent line
+ string-append
+ . prefix-no-space "("
+ string-drop (line-content line) : string-length prefix
+ line-comment line
+ : line-only-prefix? line prefix-no-space
+ list
+ line-indent line
+ string-append
+ . (string-drop-right prefix 1) "("
+ string-drop (line-content line) : string-length prefix-no-space
+ line-comment line
+ else
+ loop : cdr paren-prefixes
define : line-add-closing-brackets line number
. "Add a closing bracket to the line."