From 4fb35d075f0314c2a65c2366aedbc7f2d576a2f0 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 12 Sep 2025 05:35:49 +0100 Subject: [PATCH] done implementing one text builder function --- fcore/text-builder.sml | 81 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/fcore/text-builder.sml b/fcore/text-builder.sml index 78ed8ea..c4c06da 100644 --- a/fcore/text-builder.sml +++ b/fcore/text-builder.sml @@ -121,7 +121,8 @@ struct , posX , posY , column - , lineNumber absIdx + , lineNumber + , absIdx , cursorIdx , env , acc @@ -141,11 +142,83 @@ struct , env , acc ) - else if lineNumber > #lastLineNumber env then - acc else case String.sub (str, pos) of - chr => raise Fail "unimplemented" + #" " => + let + val acc = + if absIdx = cursorIdx then makeCursor (posX, posY, env) :: acc + else acc + in + buildTextString + ( pos + 1 + , str + , stl + , line + , ltl + , posX + TC.xSpace + , posY + , column + 1 + , lineNumber + , absIdx + 1 + , cursorIdx + , env + , acc + ) + end + | #"\n" => + let + val acc = + if absIdx = cursorIdx then makeCursor (posX, posY, env) :: acc + else acc + + val nextLineNumber = lineNumber + 1 + in + if nextLineNumber > #lastLineNumber env then + acc + else + buildTextString + ( pos + 1 + , str + , stl + , line + , ltl + , #startX env + , posY + TC.ySpace + , 0 + , lineNumber + 1 + , absIdx + 1 + , cursorIdx + , env + , acc + ) + end + | chr => + let + val acc = + if absIdx = cursorIdx then + let val acc = makeCursor (posX, posY, env) :: acc + in makeCursorOnChr (chr, posX, posY, env) :: acc + end + else + makeCursor (chr, posX, posY, env) :: acc + in + buildTextString + ( pos + 1 + , str + , stl + , line + , ltl + , posX + TC.xSpace + , posY + , column + 1 + , lineNumber + , absIdx + 1 + , cursorIdx + , env + , acc + ) + end fun buildTextString ( pos