diff options
-rw-r--r-- | 065duplex_list.mu | 22 | ||||
-rw-r--r-- | edit/001-editor.mu | 17 | ||||
-rw-r--r-- | sandbox/001-editor.mu | 17 |
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 [ |