diff --git a/fcore/cursor.sml b/fcore/cursor.sml index d39640d..ee64ef8 100644 --- a/fcore/cursor.sml +++ b/fcore/cursor.sml @@ -12,13 +12,34 @@ struct val strIdx = cursorIdx - bufferIdx in if strIdx < String.size hd - 2 then - (* increment if there is a character after where cursor is *) - cursorIdx + 1 + (* increment if there is a character after where cursor is + * but first, check if we are in a \r\n pair; + * if we are, then increment cursor by 2 *) + if + String.size hd > strIdx + 2 + andalso String.sub (hd, strIdx + 1) = #"\r" + andalso String.sub (hd, strIdx + 2) = #"\n" + then + (* increment cursor by 2 if we are inside \r\n pair *) + cursorIdx + 2 + else + (* inccrement cursor by 1 if we are not inside \r\n pair *) + cursorIdx + 1 else (case tl of _ :: _ => - (* if there is another string after current head, we can increment cursorIdx *) - cursorIdx + 1 + (* if there is another string after current head, we can increment cursorIdx + * however, first we need to check if next string is \r\n pair. *) + if + String.size hd > strIdx + 2 + andalso String.sub (hd, strIdx + 1) = #"\r" + andalso String.sub (hd, strIdx + 2) = #"\n" + then + (* increment cursor by 2 if we are inside \r\n pair *) + cursorIdx + 2 + else + (* inccrement cursor by 1 if we are not inside \r\n pair *) + cursorIdx + 1 | _ => (* if there is no string after current head, return original cursorIdx *) cursorIdx) diff --git a/fcore/text-builder.sml b/fcore/text-builder.sml index 11b6e7e..88455d1 100644 --- a/fcore/text-builder.sml +++ b/fcore/text-builder.sml @@ -227,7 +227,7 @@ struct buildTextStringBeforeCursor ( pos + 2, str, acc, startX, posY + ySpace, startX , windowWidth, windowHeight, fWindowWidth, fWindowHeight - , r, g, b, tl, absIdx + 1, cursorPos, hr, hg, hb + , r, g, b, tl, absIdx + 2, cursorPos, hr, hg, hb ) else buildTextStringBeforeCursor @@ -332,7 +332,7 @@ struct buildTextStringWithinCursor ( pos + 2, str, acc, startX, posY + ySpace, startX , windowWidth, windowHeight, fWindowWidth, fWindowHeight - , r, g, b, tl, absIdx + 1, cursorPos, cursorAcc, hr, hg, hb + , r, g, b, tl, absIdx + 2, cursorPos, cursorAcc, hr, hg, hb ) else buildTextStringWithinCursor diff --git a/shf b/shf index 55cf738..635e6f5 100755 Binary files a/shf and b/shf differ