about summary refs log tree commit diff stats
path: root/text.lua
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-08-18 10:22:48 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-08-18 10:32:03 -0700
commit1d3c9f47085ee5d9cfa37d988d53f2dfead0195a (patch)
tree2b95e57cdd9ea18ec748fea7dc9458723fcec3b1 /text.lua
parentcf8d9774eac577b4cd4fdb77cbb27b6b46004756 (diff)
downloadtext.love-1d3c9f47085ee5d9cfa37d988d53f2dfead0195a.tar.gz
generalize a function
Diffstat (limited to 'text.lua')
-rw-r--r--text.lua19
1 files changed, 10 insertions, 9 deletions
diff --git a/text.lua b/text.lua
index ff98140..9c4a009 100644
--- a/text.lua
+++ b/text.lua
@@ -426,7 +426,7 @@ end
 function Text.up(State)
   assert(State.lines[State.cursor1.line].mode == 'text')
 --?   print('up', State.cursor1.line, State.cursor1.pos, State.screen_top1.line, State.screen_top1.pos)
-  local screen_line_starting_pos, screen_line_index = Text.pos_at_start_of_cursor_screen_line(State)
+  local screen_line_starting_pos, screen_line_index = Text.pos_at_start_of_screen_line(State, State.cursor1)
   if screen_line_starting_pos == 1 then
 --?     print('cursor is at first screen line of its line')
     -- line is done; skip to previous text line
@@ -500,7 +500,7 @@ function Text.down(State)
     -- move down one screen line in current line
     local scroll_down = Text.le1(State.screen_bottom1, State.cursor1)
 --?     print('cursor is NOT at final screen line of its line')
-    local screen_line_starting_pos, screen_line_index = Text.pos_at_start_of_cursor_screen_line(State)
+    local screen_line_starting_pos, screen_line_index = Text.pos_at_start_of_screen_line(State, State.cursor1)
     new_screen_line_starting_pos = State.line_cache[State.cursor1.line].screen_line_starting_pos[screen_line_index+1]
 --?     print('switching pos of screen line at cursor from '..tostring(screen_line_starting_pos)..' to '..tostring(new_screen_line_starting_pos))
     local new_screen_line_starting_byte_offset = Text.offset(State.lines[State.cursor1.line].data, new_screen_line_starting_pos)
@@ -525,7 +525,7 @@ end
 
 function Text.end_of_line(State)
   State.cursor1.pos = utf8.len(State.lines[State.cursor1.line].data) + 1
-  local botpos = Text.pos_at_start_of_cursor_screen_line(State)
+  local botpos = Text.pos_at_start_of_screen_line(State, State.cursor1)
   local botline1 = {line=State.cursor1.line, pos=botpos}
   if Text.cursor_out_of_screen(State) then
     Text.snap_cursor_to_bottom_of_screen(State)
@@ -636,11 +636,12 @@ function Text.right_without_scroll(State)
   end
 end
 
-function Text.pos_at_start_of_cursor_screen_line(State)
-  Text.populate_screen_line_starting_pos(State, State.cursor1.line)
-  for i=#State.line_cache[State.cursor1.line].screen_line_starting_pos,1,-1 do
-    local spos = State.line_cache[State.cursor1.line].screen_line_starting_pos[i]
-    if spos <= State.cursor1.pos then
+function Text.pos_at_start_of_screen_line(State, loc1)
+  Text.populate_screen_line_starting_pos(State, loc1.line)
+  local line_cache = State.line_cache[loc1.line]
+  for i=#line_cache.screen_line_starting_pos,1,-1 do
+    local spos = line_cache.screen_line_starting_pos[i]
+    if spos <= loc1.pos then
       return spos,i
     end
   end
@@ -984,7 +985,7 @@ function Text.cursor_out_of_screen(State)
   return State.cursor_y == nil
   -- this approach is cheaper and almost works, except on the final screen
   -- where file ends above bottom of screen
---?   local botpos = Text.pos_at_start_of_cursor_screen_line(State)
+--?   local botpos = Text.pos_at_start_of_screen_line(State, State.cursor1)
 --?   local botline1 = {line=State.cursor1.line, pos=botpos}
 --?   return Text.lt1(State.screen_bottom1, botline1)
 end