about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2017-05-27 00:17:50 -0700
committerKartik K. Agaram <vc@akkartik.com>2017-05-27 00:17:50 -0700
commitaac76bca12c9fc60af15219d4d93d92699743ac1 (patch)
tree9f4d88c82a882ab0611f19f3259a783c642f9716
parentb7fc9d3b5c4da25af0b919e65996b5dc0c3cf9f5 (diff)
downloadmu-aac76bca12c9fc60af15219d4d93d92699743ac1.tar.gz
3880
-rw-r--r--065duplex_list.mu22
-rw-r--r--edit/001-editor.mu17
-rw-r--r--sandbox/001-editor.mu17
3 files changed, 24 insertions, 32 deletions
diff --git a/065duplex_list.mu b/065duplex_list.mu
index 85683786..dea42fbc 100644
--- a/065duplex_list.mu
+++ b/065duplex_list.mu
@@ -510,6 +510,28 @@ def splice in:&:duplex-list:_elem, start:&:duplex-list:_elem/contained-in:in ->
   *start <- put *start, prev:offset, in
 ]
 
+# insert contents of 'new' after 'in'
+def insert in:&:duplex-list:_elem, new:&:@:_elem -> in:&:duplex-list:_elem [
+  local-scope
+  load-ingredients
+  return-unless in
+  return-unless new
+  len:num <- length *new
+  return-unless len
+  curr:&:duplex-list:_elem <- copy in
+  idx:num <- copy 0
+  {
+    done?:bool <- greater-or-equal idx, len
+    break-if done?
+    c:_elem <- index *new, idx
+    insert c, curr
+    # next iter
+    curr <- next curr
+    idx <- add idx, 1
+    loop
+  }
+]
+
 def append in:&:duplex-list:_elem, new:&:duplex-list:_elem/contained-in:in -> in:&:duplex-list:_elem [
   local-scope
   load-ingredients
diff --git a/edit/001-editor.mu b/edit/001-editor.mu
index 50ba09f5..807cf442 100644
--- a/edit/001-editor.mu
+++ b/edit/001-editor.mu
@@ -72,23 +72,8 @@ def new-editor s:text, left:num, right:num -> result:&:editor [
 def insert-text editor:&:editor, text:text -> editor:&:editor [
   local-scope
   load-ingredients
-  # early exit if text is empty
-  return-unless text
-  len:num <- length *text
-  return-unless len
-  idx:num <- copy 0
-  # now we can start appending the rest, character by character
   curr:&:duplex-list:char <- get *editor, data:offset
-  {
-    done?:bool <- greater-or-equal idx, len
-    break-if done?
-    c:char <- index *text, idx
-    insert c, curr
-    # next iter
-    curr <- next curr
-    idx <- add idx, 1
-    loop
-  }
+  insert curr, text
 ]
 
 scenario editor-initializes-without-data [
diff --git a/sandbox/001-editor.mu b/sandbox/001-editor.mu
index 50ba09f5..807cf442 100644
--- a/sandbox/001-editor.mu
+++ b/sandbox/001-editor.mu
@@ -72,23 +72,8 @@ def new-editor s:text, left:num, right:num -> result:&:editor [
 def insert-text editor:&:editor, text:text -> editor:&:editor [
   local-scope
   load-ingredients
-  # early exit if text is empty
-  return-unless text
-  len:num <- length *text
-  return-unless len
-  idx:num <- copy 0
-  # now we can start appending the rest, character by character
   curr:&:duplex-list:char <- get *editor, data:offset
-  {
-    done?:bool <- greater-or-equal idx, len
-    break-if done?
-    c:char <- index *text, idx
-    insert c, curr
-    # next iter
-    curr <- next curr
-    idx <- add idx, 1
-    loop
-  }
+  insert curr, text
 ]
 
 scenario editor-initializes-without-data [