| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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
- }
|