(Arne Babenhauserheide)
2014-01-21: work on fixing : as only non-whitespace on a line. work on fixing : as only non-whitespace on a line.
diff --git a/.bugs/bugs b/.bugs/bugs
--- a/.bugs/bugs
+++ b/.bugs/bugs
@@ -1,6 +1,7 @@
fails when I add stuff at the end of end of example.w | owner:, open:False, id:08c68e1ce0c9798184c01806d2661a3220bff3cd, time:1363789693.79
add a testsuite for wisp parsers. | owner:, open:True, id:1c05d27ac916e1a823b8985a094947907c3c19af, time:1379064922.74
wisp-mode: export wisp to html fails in org-mode: font-lock-fontify-keywords-region: Invalid regexp | owner:, open:True, id:1e46d8c05580c961c37a32d36c987a5dd1d34943, time:1389371020.39
+an empty line with : should start with double parens | owner:Arne Babenhauserheide <bab@draketo.de>, open:True, id:2e188ddf44d36e4605030d3c58607ebfa97d189e, time:1390328674.43
wisp-in-wisp: remove the leading . for continuation lines after inferring the brackets. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:2e42e5b64622f0cc383eb8acc3d510912e925bf0, time:1377476687.79
wisp: handle general paren prefixes like quote, quasiquote, etc. | owner:, open:False, id:323ff94b5be635742619467e1cb44f4c0d96f63f, time:1379047798.47
throw an exception when reducing indentation to an unknown indentation level. | owner:Arne Babenhauserheide <bab@draketo.de>, open:False, id:424186bd85f186b7279c5c59e2bd42f847284719, time:1376003568.91
diff --git a/tests/syntax-colon.scm b/tests/syntax-colon.scm
--- a/tests/syntax-colon.scm
+++ b/tests/syntax-colon.scm
@@ -28,3 +28,5 @@
'())))
+(
+ (a)
diff --git a/tests/syntax-colon.w b/tests/syntax-colon.w
--- a/tests/syntax-colon.w
+++ b/tests/syntax-colon.w
@@ -23,6 +23,9 @@ let
let : : a ' :
let
- :
+ :
a
'
+
+:
+ a
diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -21,7 +21,9 @@
define-module : wisp
. #:export : wisp2lisp wisp-chunkreader
-use-modules : : srfi srfi-1
+use-modules
+ : srfi srfi-1
+ : ice-9 regex
define : endsinunevenbackslashes text ; comment
if : = 0 : string-length text
@@ -470,29 +472,39 @@ define : line-add-starting-bracket line
If line starts with one of ' , ` #` #' #, #,@, then turn it into '(... instead of ('...
-The line *must* have a whitespace after the prefix."
- let loop : : paren-prefixes : list "' " ", " "` " "#` " "#' " "#, " "#,@, "
- ; first check whether we are done checking
- if : null-list? paren-prefixes
- ; construct the line structure: '(indentation-depth content comment)
- list
- line-indent line
- string-append
- . "("
- line-content line
- line-comment line
- ; otherwise check all possible prefixes
- let : : prefix : car paren-prefixes
- if : string-prefix? 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
-
+If line is indented and only contains : and optional whitespace, remove the :.
+
+The line *must* have a whitespace after the prefix, except if the prefix is the only non-whitespace on the line."
+ ; if the line only contains a colon, we just replace its content with an opening paren.
+ if : string-match "^: *$" : line-content line ; FIXME: Check for this somewhere else.
+ list
+ line-indent line
+ string-append "(" : string-drop (line-content line) 1 ; keep whitespace
+ line-comment line
+ let loop : : paren-prefixes : list "' " ", " "` " "#` " "#' " "#, " "#,@, "
+ ; first check whether we are done checking
+ if : null-list? paren-prefixes
+ ; construct the line structure: '(indentation-depth content comment)
+ list
+ line-indent line
+ string-append
+ . "("
+ 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
+
define : line-add-closing-brackets line number
. "Add a closing bracket to the line."
list