diff --git a/src/line_gap.sml b/src/line_gap.sml index 9de2d5e..253c913 100644 --- a/src/line_gap.sml +++ b/src/line_gap.sml @@ -3308,8 +3308,16 @@ struct val prevIdx = curIdx - String.size shd in if findLine >= prevLine then - let val relativeLine = findLine - prevLine - 1 - in Vector.sub (lhd, relativeLine) + prevIdx + let + val relativeLine = findLine - prevLine - 1 + in + if relativeLine < 0 then + (* the line start is not at this node, + * so we need to continue going left + * to find what index the line start corresponds to *) + lineNumberToIdxLeft (findLine, prevIdx, prevLine, stl, ltl) + else + Vector.sub (lhd, relativeLine) + prevIdx end else lineNumberToIdxLeft (findLine, prevIdx, prevLine, stl, ltl)