about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--source_text.lua10
-rw-r--r--text.lua10
2 files changed, 18 insertions, 2 deletions
diff --git a/source_text.lua b/source_text.lua
index 8b34d52..f60123e 100644
--- a/source_text.lua
+++ b/source_text.lua
@@ -128,7 +128,9 @@ function Text.populate_screen_line_starting_pos(State, line_index)
         -- long word; chop it at some letter
         -- We're not going to reimplement TeX here.
         local bpos = Text.nearest_pos_less_than(frag, State.width - x)
-        -- everything works if bpos == 0, but is a little inefficient
+        if x == 0 and bpos == 0 then
+          assert(false, ("Infinite loop while line-wrapping. Editor is %dpx wide; window is %dpx wide"):format(State.width, App.screen.width))
+        end
         pos = pos + bpos
         local boffset = Text.offset(frag, bpos+1)  -- byte _after_ bpos
         frag = string.sub(frag, boffset)
@@ -1035,6 +1037,12 @@ end
 
 function Text.redraw_all(State)
 --?   print('clearing fragments')
+  -- Perform some early sanity checking here, in hopes that we correctly call
+  -- this whenever we change editor state.
+  if State.right <= State.left then
+    assert(false, ('Right margin %d must be to the right of the left margin %d'):format(State.right, State.left))
+  end
+
   State.line_cache = {}
   for i=1,#State.lines do
     State.line_cache[i] = {}
diff --git a/text.lua b/text.lua
index f25e232..9a3d8a8 100644
--- a/text.lua
+++ b/text.lua
@@ -102,7 +102,9 @@ function Text.populate_screen_line_starting_pos(State, line_index)
         -- long word; chop it at some letter
         -- We're not going to reimplement TeX here.
         local bpos = Text.nearest_pos_less_than(frag, State.width - x)
-        -- everything works if bpos == 0, but is a little inefficient
+        if x == 0 and bpos == 0 then
+          assert(false, ("Infinite loop while line-wrapping. Editor is %dpx wide; window is %dpx wide"):format(State.width, App.screen.width))
+        end
         pos = pos + bpos
         local boffset = Text.offset(frag, bpos+1)  -- byte _after_ bpos
         frag = string.sub(frag, boffset)
@@ -894,6 +896,12 @@ end
 
 function Text.redraw_all(State)
 --?   print('clearing fragments')
+  -- Perform some early sanity checking here, in hopes that we correctly call
+  -- this whenever we change editor state.
+  if State.right <= State.left then
+    assert(false, ('Right margin %d must be to the right of the left margin %d'):format(State.right, State.left))
+  end
+
   State.line_cache = {}
   for i=1,#State.lines do
     State.line_cache[i] = {}