package def_txt import ( "fmt" "strconv" "strings" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_fn" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/table/owner" "gitp78su.ipnodns.ru/svi/kern/v4/d0/result" ) // MTxt -- внутренней изменяемый текст. type MTxt struct { *LTxt } // MutTxt -- создать новый внутренний изменяемый текст. func MutTxt[T def_spec_fn.TxtConstraint](owner *owner.LOwner, msg T, arg ...any) *MTxt { sf := &MTxt{ LTxt: LetTxt(owner, msg, arg...), } return sf } // Add -- добавить изменяемый текст. func (sf *MTxt) Add(msg any, arg ...any) def_spec_base.Txt { sf.CheckOwner() val := fmt.Sprintf("%v", msg) val = fmt.Sprintf(val, arg...) sf.val.WriteString(val) return def_spec_base.Txt(sf.val.String()) } // TrimSuffix -- обрезает суффикс неизменяемого текста. func (sf *MTxt) TrimSuffix[T def_spec_fn.TxtConstraint](suffix T) def_spec_base.Txt { suf := fmt.Sprintf("%v", suffix) txt := strings.TrimSuffix(sf.val.String(), suf) sf.val.Reset() sf.val.WriteString(txt) return def_spec_base.Txt(sf.val.String()) } // Atoi -- устанавливает и возвращает возможное число. func (sf MTxt) Atoi() *result.Result[def_spec_base.Num] { sf.CheckOwner() fnCut := func(val string) string { for len(val) > 0 { isCut := false litBeg := string([]rune(val)[0]) if litBeg == " " || litBeg == "\t" || litBeg == "\n" { val = val[1:] isCut = true } runes := []rune(val) litEnd := string(runes[len(runes)-1]) if litEnd == " " || litEnd == "\t" || litEnd == "\n" { val = string(runes[:len(runes)-1]) isCut = true } if !isCut { break } } return val } val := sf.Str() val = fnCut(val) sf.Set(val) iRes, err := strconv.Atoi(sf.Str()) if err != nil { err := fmt.Errorf("LetTxt.Atoi(): val(%q) not Int, err=\n\t%w", sf.String(), err) return result.ResErr[def_spec_base.Num](err) } sf.val.Reset() sf.val.WriteString(fmt.Sprintf("%v", iRes)) return result.ResOk(def_spec_base.Num(iRes)) } // Set -- изменение внутренней строки. func (sf *MTxt) Set[T def_spec_fn.TxtConstraint](msg T, arg ...any) { _msg := fmt.Sprintf(string(msg), arg...) sf.val.Reset() sf.val.WriteString(_msg) } // Let -- возвращает неизменяемую копию себя func (sf *MTxt) Let() *LTxt { return sf.LTxt }