MCPcopy Create free account
hub / github.com/cogentcore/core / insertTextImpl

Method insertTextImpl

texteditor/text/lines.go:965–1011  ·  view source on GitHub ↗
(st lexer.Pos, text []byte)

Source from the content-addressed store, hash-verified

963}
964
965func (ls *Lines) insertTextImpl(st lexer.Pos, text []byte) *Edit {
966 if len(text) == 0 {
967 return nil
968 }
969 st = ls.validPos(st)
970 lns := bytes.Split(text, []byte("\n"))
971 sz := len(lns)
972 rs := bytes.Runes(lns[0])
973 rsz := len(rs)
974 ed := st
975 var tbe *Edit
976 st.Ch = min(len(ls.lines[st.Ln]), st.Ch)
977 if sz == 1 {
978 ls.lines[st.Ln] = slices.Insert(ls.lines[st.Ln], st.Ch, rs...)
979 ed.Ch += rsz
980 tbe = ls.region(st, ed)
981 ls.linesEdited(tbe)
982 } else {
983 if ls.lines[st.Ln] == nil {
984 ls.lines[st.Ln] = []rune("")
985 }
986 eostl := len(ls.lines[st.Ln][st.Ch:]) // end of starting line
987 var eost []rune
988 if eostl > 0 { // save it
989 eost = make([]rune, eostl)
990 copy(eost, ls.lines[st.Ln][st.Ch:])
991 }
992 ls.lines[st.Ln] = append(ls.lines[st.Ln][:st.Ch], rs...)
993 nsz := sz - 1
994 tmp := make([][]rune, nsz)
995 for i := 1; i < sz; i++ {
996 tmp[i-1] = bytes.Runes(lns[i])
997 }
998 stln := st.Ln + 1
999 ls.lines = slices.Insert(ls.lines, stln, tmp...)
1000 ed.Ln += nsz
1001 ed.Ch = len(ls.lines[ed.Ln])
1002 if eost != nil {
1003 ls.lines[ed.Ln] = append(ls.lines[ed.Ln], eost...)
1004 }
1005 tbe = ls.region(st, ed)
1006 ls.linesInserted(tbe)
1007 }
1008 ls.changed = true
1009 ls.callChangedFunc()
1010 return tbe
1011}
1012
1013// insertTextRect inserts a rectangle of text defined in given Edit record,
1014// (e.g., from RegionRect or DeleteRect).

Callers 3

insertTextMethod · 0.95
undoMethod · 0.95
redoMethod · 0.95

Calls 7

validPosMethod · 0.95
regionMethod · 0.95
linesEditedMethod · 0.95
linesInsertedMethod · 0.95
callChangedFuncMethod · 0.95
SplitMethod · 0.80
InsertMethod · 0.45

Tested by

no test coverage detected