Просмотр исходного кода

SVI Рабочее сохранение

SVI 4 месяцев назад
Родитель
Сommit
ac14aa6cab
62 измененных файлов с 249 добавлено и 250 удалено
  1. 1 0
      v4/docs/index.md
  2. 1 1
      v4/kern.go
  3. 0 5
      v4/lev0/core_spec/core_spec.go
  4. 2 2
      v4/lev0/core_spec/estr.go
  5. 2 2
      v4/lev0/core_spec/ioption.go
  6. 2 2
      v4/lev0/core_spec/isafe_bool.go
  7. 2 2
      v4/lev0/core_spec/isafe_bool_react.go
  8. 3 3
      v4/lev0/core_spec/isafe_string.go
  9. 53 35
      v4/lev0/defs/defs.go
  10. 3 3
      v4/lev0/defs/stream_name/stream_name.go
  11. 6 6
      v4/lev0/etypes/estr/estr.go
  12. 2 2
      v4/lev0/etypes/etypes.go
  13. 2 2
      v4/lev0/helpers/helpers.go
  14. 2 2
      v4/lev0/lev0.go
  15. 10 10
      v4/lev0/option/option_test.go
  16. 5 5
      v4/lev0/result/result.go
  17. 3 3
      v4/lev1/comp_spec/ilocal_ctx.go
  18. 4 4
      v4/lev1/kint/kint.go
  19. 2 2
      v4/lev1/lev1.go
  20. 9 9
      v4/lev1/local_ctx/ctx_value/ctx_value.go
  21. 12 12
      v4/lev1/local_ctx/local_ctx.go
  22. 1 1
      v4/lev1/local_ctx/local_ctx_test.go
  23. 9 30
      v4/lev1/log_buf/log_buf.go
  24. 11 11
      v4/lev1/log_buf/log_msg/log_msg.go
  25. 3 3
      v4/lev1/safe_bool/safe_bool.go
  26. 9 9
      v4/lev1/safe_bool_react/safe_bool_react.go
  27. 2 2
      v4/lev1/safe_int/safe_int.go
  28. 7 7
      v4/lev1/safe_string/safe_string.go
  29. 1 1
      v4/lev2/kmodule/kmodule.go
  30. 1 1
      v4/lev2/kmonolit/kmonolit.go
  31. 2 2
      v4/lev2/lsi/store_spec/ibucket_base.go
  32. 4 4
      v4/lev2/lti/bus_ent/handler_name/handler_name.go
  33. 3 3
      v4/lev2/lti/dot/msg_serve/msg_serve.go
  34. 3 3
      v4/lev2/lti/dot/msg_unsub/msg_unsub.go
  35. 3 3
      v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go
  36. 2 2
      v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go
  37. 1 1
      v4/lev2/lti/kbus_http/kbus_http.go
  38. 1 1
      v4/lev2/wui/hx_url/hx_url.go
  39. 3 3
      v4/lev2/wui/hx_url_method/hx_url_method.go
  40. 4 4
      v4/lev2/wui/hx_url_patch/hx_url_patch.go
  41. 1 1
      v4/lev2/wui/wui.go
  42. 3 3
      v4/lev2/wui/wui_button/wui_button.go
  43. 1 1
      v4/lev2/wui/wui_hx/wui_hx.go
  44. 3 3
      v4/lev2/wui/wui_label/wui_label.go
  45. 6 6
      v4/lev2/wui/wui_text/wui_text.go
  46. 2 2
      v4/lev2/wui/wui_types/ihx_url_method.go
  47. 2 2
      v4/lev2/wui/wui_types/ihx_url_patch.go
  48. 2 2
      v4/lev2/wui/wui_types/iwui_text.go
  49. 2 2
      v4/lev2/wui/wui_types/iwui_widget.go
  50. 6 6
      v4/lev2/wui/wui_widget/wui_widget.go
  51. 3 3
      v4/lev3/mod_ent/module_name/module_name.go
  52. 2 1
      v4/lev3/mod_keeper/mod_keeper.go
  53. 2 2
      v4/lev3/mod_serv_http/btn_modules/btn_modules.go
  54. 3 2
      v4/lev3/mod_serv_http/btn_modules/btn_modules_test.go
  55. 1 1
      v4/lev3/mod_serv_http/btn_monolit/btn_monolit.go
  56. 2 1
      v4/lev3/mod_serv_http/http_api/http_api_test.go
  57. 3 1
      v4/lev3/mod_serv_http/mod_serv_http.go
  58. 1 1
      v4/lev3/mod_serv_http/page_module/page_module.go
  59. 4 3
      v4/lev3/mod_serv_http/page_module/page_module_test.go
  60. 1 1
      v4/lev3/mod_spec/imod_base.go
  61. 2 2
      v4/lev3/mod_wui/mod_wui.go
  62. 1 1
      v4/lev3/mod_wui/mod_wui_test.go

+ 1 - 0
v4/docs/index.md

@@ -113,6 +113,7 @@ kern — фреймворк для создания модульных комп
 
 ## Сделать
 
+- +++ разложить Hassert и Assert на условия и действие!!!
 - перевести все базовые типы на внутренние
 - контрактные внутренние типы;
 - TUF сериализация/десериализация (собственная разработка, замена JSON);

+ 1 - 1
v4/kern.go

@@ -155,7 +155,7 @@ func NewClientBusLocal() bus_spec.IBusClient {
 // NewClientBusHttp -- возвращает клиент для работы с шиной поверх HTTP.
 //
 
-func NewClientBusHttp(url defs.ATxt) bus_spec.IBusClient {
+func NewClientBusHttp(url defs.ITxtFix) bus_spec.IBusClient {
 	client := client_bus_http.NewClientBusHttp(url.String())
 	return client
 }

+ 0 - 5
v4/lev0/core_spec/core_spec.go

@@ -1,7 +1,2 @@
 // package core_spec -- типы ядра
 package core_spec
-
-import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
-
-// ITxtFix -- интерфейс для внутренней неизменямой строки.
-type ITxtFix = defs.ITxtFix

+ 2 - 2
v4/lev0/core_spec/estr.go

@@ -7,12 +7,12 @@ type EStr interface {
 	// SelfCheck -- выполняет самопроверку строки.
 	SelfCheck()
 	// Get -- возвращает строку.
-	Get() defs.ATxt
+	Get() defs.ITxtFix
 }
 
 // EStrMut -- мутабельная расширенная строка.
 type EStrMut interface {
 	EStr
 	// Set -- устанавливает строку.
-	Set(defs.ATxt)
+	Set(defs.ITxtFix)
 }

+ 2 - 2
v4/lev0/core_spec/ioption.go

@@ -15,7 +15,7 @@ type IOption[T any] interface {
 	// SomeOrFn -- возвращает значение, если оно есть, или результат выполнения функции.
 	SomeOrFn(fn func() T) T
 	// Hassert -- проверяет, что не пустое значение (с паникой).
-	Hassert(msgFormat defs.ATxt, args ...any) T
+	Hassert(msgFormat defs.ITxtFix, args ...any) T
 	// Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
-	Assert(msgFormat defs.ATxt, args ...any) T
+	Assert(msgFormat defs.ITxtFix, args ...any) T
 }

+ 2 - 2
v4/lev0/core_spec/isafe_bool.go

@@ -11,7 +11,7 @@ type ISafeBool interface {
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// FromStr -- устанавливает значение из строки
-	FromStr(defs.ATxt) IResult[EBool]
+	FromStr(defs.ITxtFix) IResult[EBool]
 	// Getenv -- получает значение из окружения
-	Getenv(defs.ATxt) IResult[EBool]
+	Getenv(defs.ITxtFix) IResult[EBool]
 }

+ 2 - 2
v4/lev0/core_spec/isafe_bool_react.go

@@ -8,7 +8,7 @@ import (
 type ISafeBoolReact interface {
 	ISafeBool
 	// Add -- добавляет функцию обратного вызова
-	Add(key defs.ATxt, fn func(EBoolMut)) IResult[EBool]
+	Add(key defs.ITxtFix, fn func(EBoolMut)) IResult[EBool]
 	// Delete -- удаляет функцию обратного вызова по ключу
-	Delete(key defs.ATxt)
+	Delete(key defs.ITxtFix)
 }

+ 3 - 3
v4/lev0/core_spec/isafe_string.go

@@ -5,13 +5,13 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // ISafeString -- интерфейс к потокобезопасной переменной.
 type ISafeString interface {
 	// Get -- возвращает хранимое значение потокобезопасной переменной
-	Get() defs.ATxt
+	Get() defs.ITxtFix
 	// Set -- устанавливает хранимое потокобезопасное значение
-	Set(defs.ATxt)
+	Set(defs.ITxtFix)
 	// Reset -- сбрасывает хранимое потокобезопасное значение
 	Reset()
 	// Byte -- возвращает байтовое представление строки
 	Byte() []byte
 	// Getenv -- устанавливает строку из переменной окружения
-	Getenv(defs.ATxt) IResult[defs.ATxt]
+	Getenv(defs.ITxtFix) IResult[defs.ITxtFix]
 }

+ 53 - 35
v4/lev0/defs/defs.go

@@ -15,7 +15,7 @@ func (i Int) Int() int {
 	return int(i)
 }
 
-// ITxtFix --интерфейс к гибкой строке.
+// ITxtFix -- интерфейс к фиксированной внутренней строке.
 type ITxtFix interface {
 	// Get -- возвращает внутреннюю строку
 	Get() ATxt
@@ -29,48 +29,73 @@ type ITxtFix interface {
 	Rune() []rune
 }
 
+// ITxtMut -- интерфейс к изменяемой внутренней строке.
+type ITxtMut interface {
+	ITxtFix
+	// Set -- устанавливает внутреннюю строку
+	Set(ATxt)
+}
+
 // ATxt -- алиас для внутренней строки.
 type ATxt string
 
+// KTxt -- алиас для внутренней строки.
+type KTxt struct {
+	val ATxt
+}
+
 // Txt -- создать новую строку.
-func Txt(msg ATxt, arg ...any) ATxt {
-	return ATxt(fmt.Sprintf(msg.String(), arg...))
+func Txt(msg ATxt, arg ...any) *KTxt {
+	_msg := fmt.Sprintf(string(msg), arg...)
+	sf := &KTxt{
+		val: ATxt(_msg),
+	}
+	return sf
 }
 
-// ToTxt -- создать новую строку.
-func ToTxt(msg ATxt) ITxtFix {
-	return msg
+// TxtFix -- создать новую строку.
+func TxtFix(msg ATxt, arg ...any) ITxtFix {
+	sf := Txt(msg, arg...)
+	return sf
 }
 
-// Rune -- возвращает внутреннюю строку в виде рун.
-func (s ATxt) Rune() []rune {
-	return []rune(s)
+// TxtMut -- создать новую мутабельную строку.
+func TxtMut(msg ATxt, arg ...any) ITxtMut {
+	_msg := fmt.Sprintf(string(msg), arg...)
+	sf := &KTxt{
+		val: ATxt(_msg),
+	}
+	return sf
 }
 
-// Byte -- возвращает внутреннюю строку в виде байтов.
-//
+// Get -- возвращает внутреннюю строку.
+func (sf KTxt) Get() ATxt {
+	return sf.val
+}
 
-func (s ATxt) Byte() []byte {
-	return []byte(s)
+// Set -- изменение внутренней строки
+func (sf *KTxt) Set(msg ATxt) {
+	sf.val = msg
 }
 
-// Len -- возвращает длину строки.
-//
+// Rune -- возвращает внутреннюю строку в виде рун.
+func (sf KTxt) Rune() []rune {
+	return []rune(sf.val)
+}
 
-func (s ATxt) Len() Int {
-	return Int(len(s))
+// Byte -- возвращает внутреннюю строку в виде байтов.
+func (sf KTxt) Byte() []byte {
+	return []byte(sf.val)
 }
 
-// Get -- возвращает внутреннюю строку.
-func (s ATxt) Get() ATxt {
-	return s
+// Len -- возвращает длину строки.
+func (sf KTxt) Len() Int {
+	return Int(len(sf.val))
 }
 
 // String -- возвращает строку по требованию.
-//
-
-func (s ATxt) String() string {
-	return string(s)
+func (sf KTxt) String() string {
+	return string(sf.val)
 }
 
 // IErr -- алиас для error.
@@ -88,25 +113,21 @@ type Err struct {
 
 // NewErr -- создать новую обёрнутую ошибку.
 func NewErr(msg ATxt, arg ...any) IErr {
-	err := fmt.Errorf(msg.String(), arg...)
+	err := fmt.Errorf(string(msg), arg...)
 	return &Err{err}
 }
 
 // WrapErr -- возвращает обёрнутую ошибку.
-//
-
 func WrapErr(err error) IErr {
 	return &Err{err}
 }
 
 // Rune -- возвращает внутреннюю строку в виде рун.
-//
-
 func (e *Err) Rune() []rune {
 	return []rune(e.err.Error())
 }
 
-// Byte -- возвращает байты из ошибки
+// Byte -- возвращает байты из ошибки.
 func (e *Err) Byte() []byte {
 	return []byte(e.err.Error())
 }
@@ -138,18 +159,15 @@ func (e *Err) Len() Int {
 
 // Time -- метка времени.
 // Вывод: "2006-01-02 15:04:05.000 -07 MST".
-type Time ATxt
+type Time KTxt
 
 // BucketName -- имя сущности.
-type BucketName ATxt
+type BucketName KTxt
 
 // StreamName -- имя потока для ожидания.
-
 // type StreamName = stream_name.AStreamName
 
 // NewStreamName -- создать новое имя потока.
-
-
 // func NewStreamName(val Str) *stream_name.AStreamName {
 // 	return stream_name.NewAStreamName(val)
 // }

+ 3 - 3
v4/lev0/defs/stream_name/stream_name.go

@@ -7,11 +7,11 @@ import (
 
 // AStreamName -- имя потока для ожидания.
 type AStreamName struct {
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewAStreamName -- создать новое имя потока.
-func NewAStreamName(val defs.ATxt) *AStreamName {
+func NewAStreamName(val defs.ITxtFix) *AStreamName {
 	helpers.Hassert(val != "", "NewAStreamName(): val is empty")
 	sf := &AStreamName{
 		val: val,
@@ -27,6 +27,6 @@ func (sf *AStreamName) String() string {
 }
 
 // Get -- получить значение.
-func (sf *AStreamName) Get() defs.ATxt {
+func (sf *AStreamName) Get() defs.ITxtFix {
 	return sf.val
 }

+ 6 - 6
v4/lev0/etypes/estr/estr.go

@@ -9,7 +9,7 @@ import (
 
 // EStr -- расширенная строка.
 type EStr struct {
-	val    defs.ATxt // Хранимое значение
+	val    defs.ITxtFix // Хранимое значение
 	lenMin defs.Int  // Минимальная длина строки
 	lenMax defs.Int  // Максимальная длина строки
 	isMut  bool      // Признак мутабельности
@@ -18,7 +18,7 @@ type EStr struct {
 // FnOptStr -- опции расширенной строки.
 type FnOptStr func(*EStr)
 
-var msg1 = defs.ATxt("EStr.OptStrMinLen: мин длина строки должна быть >= 0")
+var msg1 = defs.Txt("EStr.OptStrMinLen: мин длина строки должна быть >= 0")
 
 // OptStrMinLen -- устанавливает минимальную длину строки.
 func OptStrMinLen(lenMin defs.Int) FnOptStr {
@@ -28,7 +28,7 @@ func OptStrMinLen(lenMin defs.Int) FnOptStr {
 	}
 }
 
-var msg2 = defs.ATxt("EStr.OptStrMaxLen: макс длина строки должна быть >= 0")
+var msg2 = defs.Txt("EStr.OptStrMaxLen: макс длина строки должна быть >= 0")
 
 // OptStrMaxLen -- устанавливает максимальную длину строки.
 func OptStrMaxLen(lenMax defs.Int) FnOptStr {
@@ -39,7 +39,7 @@ func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 }
 
 // OptStr -- устанавливает начальное значение строки.
-func OptStr(val defs.ATxt) FnOptStr {
+func OptStr(val defs.ITxtFix) FnOptStr {
 	return func(sf *EStr) {
 		sf.val = val
 	}
@@ -80,7 +80,7 @@ func NewStrMut(opt ...FnOptStr) mKs.EStrMut {
 }
 
 // Set -- устанавливает значение расширенной строки.
-func (sf *EStr) Set(val defs.ATxt) {
+func (sf *EStr) Set(val defs.ITxtFix) {
 	mHp.Hassert(sf.isMut,
 		"EStrMut.Set(): нельзя изменить значение расширенной строки, если она не мутабельна, val=%q",
 		val.Get())
@@ -98,6 +98,6 @@ func (sf *EStr) SelfCheck() {
 }
 
 // Get -- возвращает хранимое значение расширенной строки.
-func (sf *EStr) Get() defs.ATxt {
+func (sf *EStr) Get() defs.ITxtFix {
 	return sf.val
 }

+ 2 - 2
v4/lev0/etypes/etypes.go

@@ -27,8 +27,8 @@ func OptStrMaxLen(lenMax defs.Int) FnOptStr {
 }
 
 // OptStr -- устанавливает начальное значение строки.
-func OptStr(val defs.ATxt) FnOptStr {
-	return estr.OptStr(val)
+func OptStr(val defs.ITxtFix) FnOptStr {
+	return estr.OptStr(val.Get())
 }
 
 // OptStrMut -- устанавливает признак мутабельности.

+ 2 - 2
v4/lev0/helpers/helpers.go

@@ -27,7 +27,7 @@ func Assert(isCond bool, msgFormat defs.ATxt, args ...any) {
 	if isCond {
 		return
 	}
-	msg := fmt.Sprintf("SOFT ASSERT "+msgFormat.String()+"\n", args...)
+	msg := fmt.Sprintf("SOFT ASSERT "+string(msgFormat)+"\n", args...)
 	if IsStageLocal {
 		panic(msg)
 	}
@@ -44,7 +44,7 @@ func Hassert(isCond bool, msgFormat defs.ATxt, args ...any) {
 	if isCond {
 		return
 	}
-	msg := fmt.Sprintf("HARD ASSERT "+msgFormat.String()+"\n", args...)
+	msg := fmt.Sprintf("HARD ASSERT "+string(msgFormat)+"\n", args...)
 	panic(msg)
 }
 

+ 2 - 2
v4/lev0/lev0.go

@@ -51,14 +51,14 @@ func NewNone[T any]() IOption[T] {
 // Hassert -- проверка на правильность утверждения с безусловным падением в панику (hard assert).
 //
 
-func Hassert(isCond bool, msgFormat defs.ATxt, args ...any) {
+func Hassert(isCond bool, msgFormat defs.ITxtFix, args ...any) {
 	helpers.Hassert(isCond, msgFormat, args)
 }
 
 // Assert -- проверка на правильность утверждения с падением в панику на локальном стенде (soft assert).
 //
 
-func Assert(isCond bool, msgFormat defs.ATxt, args ...any) {
+func Assert(isCond bool, msgFormat defs.ITxtFix, args ...any) {
 	helpers.Assert(isCond, msgFormat, args)
 }
 

+ 10 - 10
v4/lev0/option/option_test.go

@@ -33,7 +33,7 @@ func (sf *testerOption) createNoneGood1() {
 			sf.t.Fatalf("createNoneGood1(): panic=%v", _panic)
 		}
 	}()
-	opt := NewNone[defs.ATxt]()
+	opt := NewNone[defs.ITxtFix]()
 	if opt.IsSome() {
 		sf.t.Fatalf("createNoneGood1(): is ok")
 	}
@@ -49,13 +49,13 @@ func (sf *testerOption) createNoneGood1() {
 	if val := opt.SomeOrFn(sf.fnWrap2); val.Get() != "test5" {
 		sf.t.Fatalf("createNoneGood1(): val bad")
 	}
-	_opt := opt.(*Option[defs.ATxt])
+	_opt := opt.(*Option[defs.ITxtFix])
 	sf.unwrapErr(_opt)
 	sf.hassert(_opt)
 	sf.assert(_opt)
 }
 
-func (sf *testerOption) assert(res *Option[defs.ATxt]) {
+func (sf *testerOption) assert(res *Option[defs.ITxtFix]) {
 	sf.t.Log("assert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -65,7 +65,7 @@ func (sf *testerOption) assert(res *Option[defs.ATxt]) {
 	res.Hassert("test assert")
 }
 
-func (sf *testerOption) hassert(res *Option[defs.ATxt]) {
+func (sf *testerOption) hassert(res *Option[defs.ITxtFix]) {
 	sf.t.Log("hassert")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -75,7 +75,7 @@ func (sf *testerOption) hassert(res *Option[defs.ATxt]) {
 	res.Hassert("test hassert")
 }
 
-func (sf *testerOption) unwrapErr(res *Option[defs.ATxt]) {
+func (sf *testerOption) unwrapErr(res *Option[defs.ITxtFix]) {
 	sf.t.Log("unwrapErr")
 	defer func() {
 		if _panic := recover(); _panic == nil {
@@ -86,7 +86,7 @@ func (sf *testerOption) unwrapErr(res *Option[defs.ATxt]) {
 }
 
 var (
-	str = defs.ATxt("test val")
+	str = defs.Txt("test val")
 )
 
 func (sf *testerOption) createSomeGood2() {
@@ -106,7 +106,7 @@ func (sf *testerOption) createSomeGood2() {
 	if val := opt.Some(); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
-	strTest1 := defs.ATxt("test1")
+	strTest1 := defs.Txt("test1")
 	if val := opt.SomeOr(strTest1); val != str {
 		sf.t.Fatalf("createSomeGood2(): val bad")
 	}
@@ -121,12 +121,12 @@ func (sf *testerOption) createSomeGood2() {
 }
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap2() defs.ATxt {
+func (sf *testerOption) fnWrap2() defs.ITxtFix {
 	return "test5"
 }
 
 // Функция высшего порядка для замещения ошибки.
-func (sf *testerOption) fnWrap() defs.ATxt {
+func (sf *testerOption) fnWrap() defs.ITxtFix {
 	return "test1"
 }
 
@@ -149,6 +149,6 @@ func (sf *testerOption) createSomeBad1() {
 			sf.t.Fatalf("createSomeBad1(): panic==nil")
 		}
 	}()
-	var str defs.ATxt
+	var str defs.ITxtFix
 	_ = NewSome(str)
 }

+ 5 - 5
v4/lev0/result/result.go

@@ -142,23 +142,23 @@ func (sf *Result[T]) Error() string {
 
 // Hassert -- проверяет, что нет ошибки (с паникой).
 func (sf *Result[T]) Hassert(msgFormat defs.ATxt, args ...any) T {
-	strErr := defs.ATxt("")
+	strErr := defs.Txt("")
 	if !sf.isCheck {
 		strErr = defs.Txt("Result[T].Hassert(): not check error, err=\n\t%v", sf.err)
 	}
-	strErr = defs.Txt(msgFormat+strErr, args...)
-	mKh.Hassert(sf.err == nil, strErr)
+	strErr = defs.Txt(msgFormat+strErr.Get(), args...)
+	mKh.Hassert(sf.err == nil, strErr.Get())
 	sf.isCheck = true
 	return sf.val
 }
 
 // Assert -- проверяет, что нет ошибки (с паникой только на локальном стенде).
 func (sf *Result[T]) Assert(msgFormat defs.ATxt, args ...any) T {
-	strErr := defs.ATxt("")
+	strErr := defs.Txt("")
 	if !sf.isCheck {
 		strErr = defs.Txt("Result[T].Assert(): not check error, , err=\n\t%v", sf.err)
 	}
-	mKh.Assert(sf.err == nil, msgFormat+strErr, args...)
+	mKh.Assert(sf.err == nil, msgFormat+strErr.Get(), args...)
 	sf.isCheck = true
 	return sf.val
 }

+ 3 - 3
v4/lev1/comp_spec/ilocal_ctx.go

@@ -15,11 +15,11 @@ type ICtxValue = ctx_value.ICtxValue
 type ILocalCtx interface {
 	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key defs.ATxt) core_spec.IOption[ICtxValue]
+	Get(key defs.ITxtFix) core_spec.IOption[ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key defs.ATxt)
+	Del(key defs.ITxtFix)
 	// Set -- добавляет значение в контекст
-	Set(key defs.ATxt, val any, comment defs.ATxt)
+	Set(key defs.ITxtFix, val any, comment any)
 	// Size -- возвращает размер словаря контекста
 	Size() defs.Int
 	// SortedList -- возвращает сортированный список объектов контекста

+ 4 - 4
v4/lev1/kint/kint.go

@@ -51,7 +51,7 @@ func (sf *KernInt) Reset() {
 }
 
 // FromStr -- устанавливает значение из строки.
-func (sf *KernInt) FromStr(strVal defs.ATxt) mL0.IResult[defs.Int] {
+func (sf *KernInt) FromStr(strVal defs.ITxtFix) mL0.IResult[defs.Int] {
 	iVal, err := strconv.Atoi(strVal.String())
 	if err != nil {
 		err := defs.NewErr("KInt.FromStr(): vak(%v) bad, err=\n\t%w", strVal, err)
@@ -62,7 +62,7 @@ func (sf *KernInt) FromStr(strVal defs.ATxt) mL0.IResult[defs.Int] {
 }
 
 // ToStr -- возвращает как строку.
-func (sf *KernInt) ToStr() defs.ATxt {
+func (sf *KernInt) ToStr() defs.ITxtFix {
 	return defs.Txt("%v", sf.val)
 }
 
@@ -107,9 +107,9 @@ func (sf *KernInt) ToBool() bool {
 }
 
 // Getenv -- устанавливает значение из окружения.
-func (sf *KernInt) Getenv(env defs.ATxt) core_spec.IResult[defs.Int] {
+func (sf *KernInt) Getenv(env defs.ITxtFix) core_spec.IResult[defs.Int] {
 	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ATxt(strVal))
+	res := sf.FromStr(defs.ITxtFix(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeInt.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[defs.Int](err)

+ 2 - 2
v4/lev1/lev1.go

@@ -45,12 +45,12 @@ func NewSafeString() mKs.ISafeString {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal defs.ATxt) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
 	return safe_int.NewSafeIntFromStr(strVal)
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env defs.ATxt) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntGetenv(env defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
 	return safe_int.NewSafeIntGetenv(env)
 }
 

+ 9 - 9
v4/lev1/local_ctx/ctx_value/ctx_value.go

@@ -14,7 +14,7 @@ import (
 type ICtxValue interface {
 	core_spec.IRWMutex
 	// Key -- возвращает ключ значения
-	Key() defs.ATxt
+	Key() defs.ITxtFix
 	// Val -- возвращает хранимое значение
 	Val() any
 	// CreateAt -- возвращает метку времени создания
@@ -22,34 +22,34 @@ type ICtxValue interface {
 	// UpdateAt -- возвращает метку времени обновления
 	UpdateAt() core_spec.ITimeMut
 	// Comment -- возвращает комментарий значения
-	Comment() defs.ATxt
+	Comment() defs.ITxtFix
 }
 
 // CtxValue -- потокобезопасное значение локального контекста.
 type CtxValue struct {
 	sync.RWMutex
-	key       defs.ATxt
+	key       defs.ITxtFix
 	createAt  core_spec.ITime
 	Val_      any
 	UpdateAt_ core_spec.ITimeMut
-	Comment_  defs.ATxt
+	Comment_  defs.ITxtFix
 }
 
 // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста.
-func NewCtxValue(key defs.ATxt, val any, comment defs.ATxt) ICtxValue {
-	helpers.Hassert(key != "", "NewCtxValue(): key is empty", []any{})
+func NewCtxValue(key defs.ITxtFix, val any, comment any) ICtxValue {
+	helpers.Hassert(key != nil, "NewCtxValue(): key is empty", []any{})
 	sf := &CtxValue{
 		key:       key,
 		createAt:  etime.NewETimeAuto(),
 		UpdateAt_: etime.NewETimeAutoMut(),
 		Val_:      val,
-		Comment_:  comment,
+		Comment_:  defs.Txt("%v", comment),
 	}
 	return sf
 }
 
 // Key -- возвращает ключ значения.
-func (sf *CtxValue) Key() defs.ATxt {
+func (sf *CtxValue) Key() defs.ITxtFix {
 	return sf.key
 }
 
@@ -73,7 +73,7 @@ func (sf *CtxValue) CreateAt() core_spec.ITime {
 }
 
 // Comment -- возвращает комментарий значения.
-func (sf *CtxValue) Comment() defs.ATxt {
+func (sf *CtxValue) Comment() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.Comment_

+ 12 - 12
v4/lev1/local_ctx/local_ctx.go

@@ -22,11 +22,11 @@ import (
 type ILocalCtx interface {
 	core_spec.IRWMutex
 	// Get -- извлекает значение из контекста
-	Get(key defs.ATxt) core_spec.IOption[comp_spec.ICtxValue]
+	Get(key defs.ITxtFix) core_spec.IOption[comp_spec.ICtxValue]
 	// Del -- удаляет значение из контекста
-	Del(key defs.ATxt)
+	Del(key defs.ITxtFix)
 	// Set -- добавляет значение в контекст
-	Set(key defs.ATxt, val any, comment defs.ATxt)
+	Set(key defs.ITxtFix, val any, comment defs.ITxtFix)
 	// Size -- возвращает размер словаря контекста
 	Size() defs.Int
 	// SortedList -- возвращает сортированный список объектов контекста
@@ -93,15 +93,15 @@ func (sf *LocalCtx) Log() comp_spec.ILogBuf {
 }
 
 // Get -- возвращает хранимое значение.
-func (sf *LocalCtx) Get(key defs.ATxt) mL0.IOption[comp_spec.ICtxValue] {
+func (sf *LocalCtx) Get(key defs.ITxtFix) mL0.IOption[comp_spec.ICtxValue] {
 	sf.RLock()
 	defer sf.RUnlock()
-	if key == "" {
+	if key.Get() == "" {
 		return mL0.NewNone[comp_spec.ICtxValue]()
 	}
 	msg := defs.Txt("Get(): key='%v'", key)
 	sf.log.Debug(msg)
-	val, isOk := sf.dictVal[key]
+	val, isOk := sf.dictVal[key.Get()]
 	if !isOk {
 		return mL0.NewNone[comp_spec.ICtxValue]()
 	}
@@ -109,23 +109,23 @@ func (sf *LocalCtx) Get(key defs.ATxt) mL0.IOption[comp_spec.ICtxValue] {
 }
 
 // Del -- удаляет значение из контекста.
-func (sf *LocalCtx) Del(key defs.ATxt) {
+func (sf *LocalCtx) Del(key defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	msg := defs.Txt("Del(): key='%v'", key)
 	sf.log.Debug(msg)
-	val := sf.dictVal[key]
-	delete(sf.dictVal, key)
+	val := sf.dictVal[key.Get()]
+	delete(sf.dictVal, key.Get())
 	sf.lstSort.Del(val)
 }
 
 // Set -- добавляет значение в контекст.
-func (sf *LocalCtx) Set(key defs.ATxt, val any, comment defs.ATxt) {
+func (sf *LocalCtx) Set(key defs.ITxtFix, val any, comment any) {
 	sf.Lock()
 	defer sf.Unlock()
 	msg := defs.Txt("Set(): key='%v'", key)
 	sf.log.Debug(msg)
-	_val, isOk := sf.dictVal[key]
+	_val, isOk := sf.dictVal[key.Get()]
 	if isOk {
 		val0 := _val.(*ctx_value.CtxValue)
 		val0.Lock()
@@ -135,7 +135,7 @@ func (sf *LocalCtx) Set(key defs.ATxt, val any, comment defs.ATxt) {
 		return
 	}
 	_val = ctx_value.NewCtxValue(key, val, comment)
-	sf.dictVal[key] = _val
+	sf.dictVal[key.Get()] = _val
 	sf.lstSort.Add(_val)
 }
 

+ 1 - 1
v4/lev1/local_ctx/local_ctx_test.go

@@ -52,7 +52,7 @@ func (sf *tester) get() {
 // Устанавливает значение.
 func (sf *tester) set() {
 	sf.t.Log("set")
-	msg := defs.ATxt("count")
+	msg := defs.Txt("count")
 	sf.lCtx.Set(msg, 5, "test_val")
 	sf.lCtx.Set(msg, 15, "test_val1")
 }

+ 9 - 30
v4/lev1/log_buf/log_buf.go

@@ -17,13 +17,13 @@ import (
 //	Буфер для Error -- отдельный.
 type ILogBuf interface {
 	// Debug -- сообщение отладки
-	Debug(fMsg defs.ATxt, args ...any)
+	Debug(fMsg defs.ITxtFix, args ...any)
 	// LogBus -- возвращает объект публикации в шину
 	// LogBus()ILogBus
 	// Info -- информационные сообщения
-	Info(fMsg defs.ATxt, args ...any)
+	Info(fMsg defs.ITxtFix, args ...any)
 	// Warn -- предупреждающие сообщения
-	Warn(fMsg defs.ATxt, args ...any)
+	Warn(fMsg defs.ITxtFix, args ...any)
 	// Err -- сообщения об ошибках
 	Err(fMsg defs.IErr, args ...any)
 	// Get -- возвращает сообщение по номеру (0..99)
@@ -109,20 +109,11 @@ func (sf *LogBuf) Get(num defs.Int) log_msg.ILogMsg {
 	return sf.lst[num]
 }
 
-type tMsg struct {
-	text defs.ATxt
-	args []any
-}
-
 // Debug -- сообщение отладки.
-func (sf *LogBuf) Debug(fMsg defs.ATxt, args ...any) {
+func (sf *LogBuf) Debug(fTxt defs.ITxtFix, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := tMsg{
-		text: fMsg,
-		args: args,
-	}
-	strMsg := fmt.Sprintf(msg.text.String(), msg.args...)
+	strMsg := fmt.Sprintf(fTxt.String(), args...)
 	_msg := log_msg.NewLogMsg(log_msg.DEBUG, sf.Prefix_+defs.ATxt(strMsg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
@@ -133,11 +124,7 @@ func (sf *LogBuf) Debug(fMsg defs.ATxt, args ...any) {
 func (sf *LogBuf) Info(fMsg defs.ATxt, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := tMsg{
-		text: fMsg,
-		args: args,
-	}
-	strMsg := fmt.Sprintf(msg.text.String(), msg.args...)
+	strMsg := fmt.Sprintf(string(fMsg), args...)
 	_msg := log_msg.NewLogMsg(log_msg.INFO, sf.Prefix_+defs.ATxt(strMsg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
@@ -148,11 +135,7 @@ func (sf *LogBuf) Info(fMsg defs.ATxt, args ...any) {
 func (sf *LogBuf) Warn(fMsg defs.ATxt, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := tMsg{
-		text: fMsg,
-		args: args,
-	}
-	strMsg := fmt.Sprintf(msg.text.String(), msg.args...)
+	strMsg := fmt.Sprintf(string(fMsg), args...)
 	_msg := log_msg.NewLogMsg(log_msg.WARN, sf.Prefix_+defs.ATxt(strMsg))
 	sf.lst = append(sf.lst, _msg)
 	sf.checkLen()
@@ -160,14 +143,10 @@ func (sf *LogBuf) Warn(fMsg defs.ATxt, args ...any) {
 }
 
 // Err -- сообщения об ошибках.
-func (sf *LogBuf) Err(fMsg defs.IErr, args ...any) {
+func (sf *LogBuf) Err(err defs.IErr, args ...any) {
 	sf.Lock()
 	defer sf.Unlock()
-	msg := tMsg{
-		text: fMsg.Get(),
-		args: args,
-	}
-	strMsg := fmt.Sprintf(msg.text.String(), msg.args...)
+	strMsg := fmt.Sprintf(err.String(), args...)
 	_msg := log_msg.NewLogMsg(log_msg.ERROR, sf.Prefix_+defs.ATxt(strMsg))
 	sf.lst = append(sf.lst, _msg)
 	sf.lstErr = append(sf.lstErr, _msg)

+ 11 - 11
v4/lev1/log_buf/log_msg/log_msg.go

@@ -15,9 +15,9 @@ type ILogMsg interface {
 	// CreateAt -- когда создано
 	CreateAt() core_spec.ITime
 	// Level -- уровень сообщения
-	Level() core_spec.ITxtFix
+	Level() defs.ITxtMut
 	// Msg -- текст сообщения
-	Msg() core_spec.ITxtFix
+	Msg() defs.ITxtFix
 	// String -- форматированная строка
 	String() string
 }
@@ -31,16 +31,16 @@ const (
 
 // logMsg -- сообщение логгера.
 type logMsg struct {
-	level     core_spec.ITxtFixMut
+	level     defs.ITxtMut
 	createdAt core_spec.ITime
-	msg       core_spec.ITxtFix
+	msg       defs.ATxt
 }
 
 // NewLogMsg -- возвращает новое сообщение логгера.
 func NewLogMsg(level int, msg defs.ATxt) ILogMsg {
 	sf := &logMsg{
 		createdAt: etime.NewETimeAuto(),
-		msg:       quark.NewQStr(msg),
+		msg:       msg,
 	}
 	sf.check(level)
 	return sf
@@ -53,12 +53,12 @@ func (sf *logMsg) String() string {
 }
 
 // Msg -- возвращает хранимое сообщение.
-func (sf *logMsg) Msg() *quark.QStr[quark.Fix] {
+func (sf *logMsg) Msg() defs.ITxtFix {
 	return sf.msg
 }
 
 // Level -- возвращает уровень сообщения.
-func (sf *logMsg) Level() *quark.QStr[quark.Mut] {
+func (sf *logMsg) Level() defs.ITxtMut {
 	return sf.level
 }
 
@@ -71,13 +71,13 @@ func (sf *logMsg) CreateAt() core_spec.ITime {
 func (sf *logMsg) check(level int) {
 	switch level {
 	case DEBUG:
-		quark_val.Set(sf.level.Val(), "DEBU")
+		sf.level.Set("DEBU")
 	case INFO:
-		quark_val.Set(sf.level.Val(), "INFO")
+		sf.level.Set("INFO")
 	case WARN:
-		quark_val.Set(sf.level.Val(), "WARN")
+		sf.level.Set("WARN")
 	case ERROR:
-		quark_val.Set(sf.level.Val(), "ERRO")
+		sf.level.Set("ERRO")
 	default:
 		helpers.Hassert(false, "logMsg.check(): unknown level(%v)", []any{level})
 	}

+ 3 - 3
v4/lev1/safe_bool/safe_bool.go

@@ -70,7 +70,7 @@ func (sf *safeBool) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBool) FromStr(strVal defs.ATxt) core_spec.IResult[core_spec.EBool] {
+func (sf *safeBool) FromStr(strVal defs.ITxtFix) core_spec.IResult[core_spec.EBool] {
 	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
@@ -87,9 +87,9 @@ func (sf *safeBool) FromStr(strVal defs.ATxt) core_spec.IResult[core_spec.EBool]
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBool) Getenv(env defs.ATxt) mL0.IResult[core_spec.EBool] {
+func (sf *safeBool) Getenv(env defs.ITxtFix) mL0.IResult[core_spec.EBool] {
 	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ATxt(strVal))
+	res := sf.FromStr(defs.ITxtFix(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeBool.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 9 - 9
v4/lev1/safe_bool_react/safe_bool_react.go

@@ -15,20 +15,20 @@ import (
 // safeBoolReact -- потокобезопасный булевый признак с реакцией на своё изменение.
 type safeBoolReact struct {
 	sync.RWMutex
-	dict map[defs.ATxt]func(core_spec.EBoolMut) // Словарь обратных вызовов
+	dict map[defs.ITxtFix]func(core_spec.EBoolMut) // Словарь обратных вызовов
 	val  bool
 }
 
 // NewSafeBoolReact -- возвращает новый потокобезопасный булевый признак с реакцией на своё изменение.
 func NewSafeBoolReact() core_spec.ISafeBoolReact {
 	sf := &safeBoolReact{
-		dict: map[defs.ATxt]func(core_spec.EBoolMut){},
+		dict: map[defs.ITxtFix]func(core_spec.EBoolMut){},
 	}
 	return sf
 }
 
 // NewSafeBoolReactFromStr -- возвращает новое потокобезопасное булево с реакцией из строки.
-func NewSafeBoolReactFromStr(strVal defs.ATxt) mL0.IResult[core_spec.ISafeBoolReact] {
+func NewSafeBoolReactFromStr(strVal defs.ITxtFix) mL0.IResult[core_spec.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -39,7 +39,7 @@ func NewSafeBoolReactFromStr(strVal defs.ATxt) mL0.IResult[core_spec.ISafeBoolRe
 }
 
 // NewSafeBoolGetenv -- возвращает новое потокобезопасное целое с реакцией из окружения.
-func NewSafeBoolGetenv(env defs.ATxt) mL0.IResult[core_spec.ISafeBoolReact] {
+func NewSafeBoolGetenv(env defs.ITxtFix) mL0.IResult[core_spec.ISafeBoolReact] {
 	sf := NewSafeBoolReact()
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -50,14 +50,14 @@ func NewSafeBoolGetenv(env defs.ATxt) mL0.IResult[core_spec.ISafeBoolReact] {
 }
 
 // Delete -- удаляет функцию обратного вызова из наблюдения.
-func (sf *safeBoolReact) Delete(key defs.ATxt) {
+func (sf *safeBoolReact) Delete(key defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	delete(sf.dict, key)
 }
 
 // Add -- добавляет функцию обратного вызова.
-func (sf *safeBoolReact) Add(key defs.ATxt, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
+func (sf *safeBoolReact) Add(key defs.ITxtFix, fn func(core_spec.EBoolMut)) mL0.IResult[core_spec.EBool] {
 	sf.Lock()
 	defer sf.Unlock()
 	if key == "" {
@@ -101,7 +101,7 @@ func (sf *safeBoolReact) Reset() {
 }
 
 // FromStr -- получает число из строки.
-func (sf *safeBoolReact) FromStr(strVal defs.ATxt) core_spec.IResult[core_spec.EBool] {
+func (sf *safeBoolReact) FromStr(strVal defs.ITxtFix) core_spec.IResult[core_spec.EBool] {
 	_strVal := strings.ToLower(strVal.String())
 	sf.Lock()
 	defer sf.Unlock()
@@ -118,9 +118,9 @@ func (sf *safeBoolReact) FromStr(strVal defs.ATxt) core_spec.IResult[core_spec.E
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeBoolReact) Getenv(env defs.ATxt) mL0.IResult[core_spec.EBool] {
+func (sf *safeBoolReact) Getenv(env defs.ITxtFix) mL0.IResult[core_spec.EBool] {
 	strVal := os.Getenv(env.String())
-	res := sf.FromStr(defs.ATxt(strVal))
+	res := sf.FromStr(defs.ITxtFix(strVal))
 	if res.IsErr() {
 		err := defs.NewErr("safeBoolReact.Getenv(): from env %v, err=\n\t%w", env, res.Err())
 		return mL0.NewErr[core_spec.EBool](err)

+ 2 - 2
v4/lev1/safe_int/safe_int.go

@@ -25,7 +25,7 @@ func NewSafeInt(val defs.Int) mKs.ISafeInt {
 }
 
 // NewSafeIntFromStr -- возвращает новое потокобезопасное целое из строки.
-func NewSafeIntFromStr(strVal defs.ATxt) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntFromStr(strVal defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.FromStr(strVal)
 	if res.IsErr() {
@@ -36,7 +36,7 @@ func NewSafeIntFromStr(strVal defs.ATxt) mL0.IResult[mKs.ISafeInt] {
 }
 
 // NewSafeIntGetenv -- возвращает новое потокобезопасное целое из окружения.
-func NewSafeIntGetenv(env defs.ATxt) mL0.IResult[mKs.ISafeInt] {
+func NewSafeIntGetenv(env defs.ITxtFix) mL0.IResult[mKs.ISafeInt] {
 	sf := NewSafeInt(0)
 	res := sf.Getenv(env)
 	if res.IsErr() {

+ 7 - 7
v4/lev1/safe_string/safe_string.go

@@ -13,7 +13,7 @@ import (
 // safeString -- потокобезопасная строка.
 type safeString struct {
 	sync.RWMutex
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewSafeString -- возвращает новую потокобезопасную строку.
@@ -23,7 +23,7 @@ func NewSafeString() mKs.ISafeString {
 }
 
 // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
-func NewSafeStringGetenv(env defs.ATxt) mL0.IResult[mKs.ISafeString] {
+func NewSafeStringGetenv(env defs.ITxtFix) mL0.IResult[mKs.ISafeString] {
 	sf := NewSafeString()
 	res := sf.Getenv(env)
 	if res.IsErr() {
@@ -41,14 +41,14 @@ func (sf *safeString) Byte() []byte {
 }
 
 // Get -- возвращает хранимую строку.
-func (sf *safeString) Get() defs.ATxt {
+func (sf *safeString) Get() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
 }
 
 // Set -- устанавливает строку.
-func (sf *safeString) Set(val defs.ATxt) {
+func (sf *safeString) Set(val defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val = val
@@ -62,12 +62,12 @@ func (sf *safeString) Reset() {
 }
 
 // Getenv -- получает значение из окружения.
-func (sf *safeString) Getenv(env defs.ATxt) mL0.IResult[defs.ATxt] {
+func (sf *safeString) Getenv(env defs.ITxtFix) mL0.IResult[defs.ITxtFix] {
 	strVal := os.Getenv(env.String())
 	if strVal == "" {
 		err := defs.NewErr("safeString.Getenv(): from env(%v), val is empty", env)
-		return mL0.NewErr[defs.ATxt](err)
+		return mL0.NewErr[defs.ITxtFix](err)
 	}
-	sf.val = defs.ATxt(strVal)
+	sf.val = defs.ITxtFix(strVal)
 	return mL0.NewOk(sf.val)
 }

+ 1 - 1
v4/lev2/kmodule/kmodule.go

@@ -82,7 +82,7 @@ func (sf *kModule) IsWork() core_spec.EBool {
 }
 
 // Live -- возвращает индикатор жизни модуля.
-func (sf *kModule) Live() defs.ATxt {
+func (sf *kModule) Live() defs.ITxtFix {
 	return sf.strLive.Get()
 }
 

+ 1 - 1
v4/lev2/kmonolit/kmonolit.go

@@ -94,7 +94,7 @@ func (sf *kMonolit) Add(module mod_spec.IKernelModule) {
 	}
 	key := defs.Txt("module_%v", len(sf.dict))
 	moduleName := module.Name()
-	comment := defs.ATxt("kMonolit.Add(): module=" + moduleName.Get())
+	comment := defs.ITxtFix("kMonolit.Add(): module=" + moduleName.Get())
 	sf.lCtx.Set(key, module, comment)
 }
 

+ 2 - 2
v4/lev2/lsi/store_spec/ibucket_base.go

@@ -18,9 +18,9 @@ type IBucketBase interface {
 	// SizeLimit -- лимит размера бакета
 	SizeLimit() int64
 	// CreatedAt -- время создания бакета
-	CreatedAt() defs.ATxt
+	CreatedAt() defs.ITxtFix
 	// UpdatedAt -- время обновления бакета
-	UpdatedAt() defs.ATxt
+	UpdatedAt() defs.ITxtFix
 	// Vers -- версия бакета
 	Vers() defs.Int
 	// DictRec -- словарь для хранения данных

+ 4 - 4
v4/lev2/lti/bus_ent/handler_name/handler_name.go

@@ -16,19 +16,19 @@ type IHandlerNameFix interface {
 	// Get -- возвращает имя функции обработчика.
 	Get() AHandlerName
 	// Txt -- внутренне представление имени функции обработчика.
-	Txt() defs.ATxt
+	Txt() defs.ITxtFix
 }
 
 // HandlerName -- имя функции обработчика.
 type HandlerName struct {
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewHandlerName -- создать новое имя функции обработчика.
 func NewHandlerName(val AHandlerName) *HandlerName {
 	helpers.Assert(val != "", "NewAHandlerName: val is empty")
 	sf := &HandlerName{
-		val: defs.ATxt(val),
+		val: defs.ITxtFix(val),
 	}
 	_ = IHandlerNameFix(sf)
 	return sf
@@ -45,6 +45,6 @@ func (sf *HandlerName) String() string {
 }
 
 // Txt -- внутренне представление имени функции обработчика.
-func (sf *HandlerName) Txt() defs.ATxt {
+func (sf *HandlerName) Txt() defs.ITxtFix {
 	return sf.val
 }

+ 3 - 3
v4/lev2/lti/dot/msg_serve/msg_serve.go

@@ -10,7 +10,7 @@ import (
 // ServeReq -- входящий запрос на обслуживание.
 type ServeReq struct {
 	Topic_  bus_ent.ATopic `json:"topic"`
-	Uuid_   defs.ATxt      `json:"uuid"`
+	Uuid_   defs.ITxtFix      `json:"uuid"`
 	BinReq_ []byte         `json:"req"`
 }
 
@@ -22,8 +22,8 @@ func (sf *ServeReq) SelfCheck() {
 
 // ServeResp -- ответ на входящий запрос.
 type ServeResp struct {
-	Status_  defs.ATxt `json:"status"`
-	Uuid_    defs.ATxt `json:"uuid"`
+	Status_  defs.ITxtFix `json:"status"`
+	Uuid_    defs.ITxtFix `json:"uuid"`
 	BinResp_ []byte    `json:"resp"`
 }
 

+ 3 - 3
v4/lev2/lti/dot/msg_unsub/msg_unsub.go

@@ -10,7 +10,7 @@ import (
 // UnsubReq -- запрос на отписку от топика.
 type UnsubReq struct {
 	HandlerName_ bus_ent.AHandlerName `json:"name"` // Уникальная метка подписки
-	Uuid_        defs.ATxt            `json:"uuid"`
+	Uuid_        defs.ITxtFix            `json:"uuid"`
 }
 
 // SelfCheck -- проверка запроса на правильность полей.
@@ -21,8 +21,8 @@ func (sf *UnsubReq) SelfCheck() {
 
 // UnsubResp -- ответ на запрос отписки.
 type UnsubResp struct {
-	Status_ defs.ATxt `json:"status"`
-	Uuid_   defs.ATxt `json:"uuid"`
+	Status_ defs.ITxtFix `json:"status"`
+	Uuid_   defs.ITxtFix `json:"uuid"`
 }
 
 // SelfCheck -- проверяет правильность своих полей.

+ 3 - 3
v4/lev2/lti/kbus/dict_sub_hook/dict_sub_hook.go

@@ -39,7 +39,7 @@ func (sf *dictSubHook) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 	}
 	handlerName := handler.Name()
 	delete(sf.dict, handlerName.Get())
-	sf.kCtx.Del(defs.ATxt(handler.Name().Get()))
+	sf.kCtx.Del(defs.ITxtFix(handler.Name().Get()))
 }
 
 // Subscribe -- добавляет в словарь подписки новый обработчик.
@@ -57,9 +57,9 @@ func (sf *dictSubHook) Read(binMsg []byte) {
 	sf.block.RLock()
 	defer sf.block.RUnlock()
 	for handlerName := range sf.dict {
-		optHand := sf.kCtx.Get(defs.ATxt(handlerName))
+		optHand := sf.kCtx.Get(defs.ITxtFix(handlerName))
 		if optHand.IsNone() {
-			sf.kCtx.Del(defs.ATxt(handlerName))
+			sf.kCtx.Del(defs.ITxtFix(handlerName))
 			continue
 		}
 		handler := optHand.Some().Val().(bus_spec.IBusHandlerSubscribe)

+ 2 - 2
v4/lev2/lti/kbus_http/client_bus_http/client_bus_http.go

@@ -68,7 +68,7 @@ func (sf *ClientBusHttp) Unsubscribe(handler bus_spec.IBusHandlerSubscribe) {
 
 	req := &dot.UnsubReq{
 		HandlerName_: handler.Name().Get(),
-		Uuid_:        defs.Txt(defs.ATxt(_uuid.String())),
+		Uuid_:        defs.Txt(defs.ITxtFix(_uuid.String())),
 	}
 	req.SelfCheck()
 	binReq, err := json.MarshalIndent(req, "", "  ")
@@ -145,7 +145,7 @@ func (sf *ClientBusHttp) SendRequest(topic bus_ent.ITopicFix, binReq []byte) mL0
 	mL1.FnHassert(helpers.Hassert)(err == nil, "ClientBusHttp.SendRequest(): in generate UUID v6, err=\n\t%v", err)
 	req := &dot.ServeReq{
 		Topic_:  topic.Get(),
-		Uuid_:   defs.ATxt(_uuid.String()),
+		Uuid_:   defs.ITxtFix(_uuid.String()),
 		BinReq_: binReq,
 	}
 	req.SelfCheck()

+ 1 - 1
v4/lev2/lti/kbus_http/kbus_http.go

@@ -218,7 +218,7 @@ func (sf *kBusHttp) processUnsubRequest(req *dot.UnsubReq) *dot.UnsubResp {
 		Status_: "ok",
 		Uuid_:   req.Uuid_,
 	}
-	optHandler := sf.KCtx_.Get(defs.ATxt(req.HandlerName_))
+	optHandler := sf.KCtx_.Get(defs.ITxtFix(req.HandlerName_))
 	if optHandler.IsNone() {
 		resp.Status_ = defs.Txt("kernelBusHttp.processUnsubRequest(): not get handler(%v) from kernel ctx",
 			req.HandlerName_)

+ 1 - 1
v4/lev2/wui/hx_url/hx_url.go

@@ -15,7 +15,7 @@ type HxUrl struct {
 }
 
 // NewHxUrl -- возвращает новый URL запроса.
-func NewHxUrl(patch defs.ATxt) *HxUrl {
+func NewHxUrl(patch defs.ITxtFix) *HxUrl {
 	sf := &HxUrl{
 		method: hx_url_method.NewHxUrlMethod(),
 		patch:  hx_url_patch.NewHxUrlPatch(patch),

+ 3 - 3
v4/lev2/wui/hx_url_method/hx_url_method.go

@@ -11,7 +11,7 @@ import (
 // HxSwap -- атрибут HTMX (метод запроса, внеполосная замена).
 type HxSwap struct {
 	sync.RWMutex
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewHxUrlMethod -- возвращает новый метод запроса.
@@ -24,14 +24,14 @@ func NewHxUrlMethod() *HxSwap {
 }
 
 // Get -- возвращает хранимое значение метода запроса.
-func (sf *HxSwap) Get() defs.ATxt {
+func (sf *HxSwap) Get() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
 }
 
 // Set -- устанавливает значение метода запроса.
-func (sf *HxSwap) Set(val defs.ATxt) {
+func (sf *HxSwap) Set(val defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val = val

+ 4 - 4
v4/lev2/wui/hx_url_patch/hx_url_patch.go

@@ -12,11 +12,11 @@ import (
 // HxUrlPatch -- атрибут HTMX (путь запроса).
 type HxUrlPatch struct {
 	sync.RWMutex
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewHxUrlPatch -- возвращает новый путь запроса.
-func NewHxUrlPatch(patch defs.ATxt) *HxUrlPatch {
+func NewHxUrlPatch(patch defs.ITxtFix) *HxUrlPatch {
 	mKh.Hassert(patch != "", "NewHxUrlPatch(): patch isempty")
 	sf := &HxUrlPatch{
 		val: patch,
@@ -26,14 +26,14 @@ func NewHxUrlPatch(patch defs.ATxt) *HxUrlPatch {
 }
 
 // Get -- возвращает хранимое значение пути запроса.
-func (sf *HxUrlPatch) Get() defs.ATxt {
+func (sf *HxUrlPatch) Get() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val
 }
 
 // Set -- устанавливает значение пути запроса.
-func (sf *HxUrlPatch) Set(val defs.ATxt) {
+func (sf *HxUrlPatch) Set(val defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val = val

+ 1 - 1
v4/lev2/wui/wui.go

@@ -10,7 +10,7 @@ import (
 )
 
 // NewWuiButton -- возвращает новую WUI-кнопку.
-func NewWuiButton(text defs.ATxt, fnClick func(map[string]string) mL0.IResult[string]) mWt.IWuiButton {
+func NewWuiButton(text defs.ITxtFix, fnClick func(map[string]string) mL0.IResult[string]) mWt.IWuiButton {
 	wBtn := wui_button.NewWuiButton(text, fnClick)
 	return wBtn
 }

+ 3 - 3
v4/lev2/wui/wui_button/wui_button.go

@@ -26,7 +26,7 @@ type WuiButton struct {
 type FnBtnBack func(map[string]string) mL0.IResult[string]
 
 // NewWuiButton -- возвращает новую WUI-кнопку.
-func NewWuiButton(text defs.ATxt, fnBack FnBtnBack) *WuiButton {
+func NewWuiButton(text defs.ITxtFix, fnBack FnBtnBack) *WuiButton {
 	helpers.Hassert(fnBack != nil, "NewWuiButton(): text=%q, fnBack==nil", []any{text})
 	sf := &WuiButton{
 		IWuiWidget: wui_widget.NewWuiWidget(),
@@ -60,9 +60,9 @@ const (
 )
 
 // Html -- возвращает HTML-представление текста.
-func (sf *WuiButton) Html() defs.ATxt {
+func (sf *WuiButton) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
 	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get().String())
 	strRes = strings.ReplaceAll(strRes, "{.hx}", sf.hx.String())
-	return defs.ATxt(strRes)
+	return defs.ITxtFix(strRes)
 }

+ 1 - 1
v4/lev2/wui/wui_hx/wui_hx.go

@@ -23,7 +23,7 @@ type WuiHx struct {
 }
 
 // NewWuiHx -- возвращает новые атрибуты HTMX для WUI-объекта.
-func NewWuiHx(path defs.ATxt) *WuiHx {
+func NewWuiHx(path defs.ITxtFix) *WuiHx {
 	sf := &WuiHx{
 		url:     hx_url.NewHxUrl(path),
 		trigger: hx_trigger.NewHxTrigger(),

+ 3 - 3
v4/lev2/wui/wui_label/wui_label.go

@@ -19,7 +19,7 @@ type WuiLabel struct {
 }
 
 // NewWuiLabel -- возвращает новую метку.
-func NewWuiLabel(text defs.ATxt) mL0.IResult[*WuiLabel] {
+func NewWuiLabel(text defs.ITxtFix) mL0.IResult[*WuiLabel] {
 	sf := &WuiLabel{
 		IWuiWidget: wui_widget.NewWuiWidget(),
 		text:       wui_text.NewWuiText(text),
@@ -40,8 +40,8 @@ const (
 )
 
 // Html -- возвращает HTML-представление текста.
-func (sf *WuiLabel) Html() defs.ATxt {
+func (sf *WuiLabel) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
 	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.text.Get().String())
-	return defs.ATxt(strRes)
+	return defs.ITxtFix(strRes)
 }

+ 6 - 6
v4/lev2/wui/wui_text/wui_text.go

@@ -14,11 +14,11 @@ import (
 type WuiText struct {
 	mWt.IWuiWidget
 	sync.RWMutex
-	val defs.ATxt
+	val defs.ITxtFix
 }
 
 // NewWuiText -- возвращает новый текст WUI.
-func NewWuiText(val defs.ATxt) *WuiText {
+func NewWuiText(val defs.ITxtFix) *WuiText {
 	sf := &WuiText{
 		IWuiWidget: wui_widget.NewWuiWidget(),
 		val:        val,
@@ -32,23 +32,23 @@ const (
 )
 
 // Html -- возвращает HTML-представление текста.
-func (sf *WuiText) Html() defs.ATxt {
+func (sf *WuiText) Html() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.Id().String())
 	strRes = strings.ReplaceAll(strRes, "{.txt}", sf.val.String())
-	return defs.ATxt(strRes)
+	return defs.ITxtFix(strRes)
 }
 
 // Set -- устанавливает хранимое значение.
-func (sf *WuiText) Set(val defs.ATxt) {
+func (sf *WuiText) Set(val defs.ITxtFix) {
 	sf.Lock()
 	defer sf.Unlock()
 	sf.val = val
 }
 
 // Get -- возвращает хранимое значение.
-func (sf *WuiText) Get() defs.ATxt {
+func (sf *WuiText) Get() defs.ITxtFix {
 	sf.RLock()
 	defer sf.RUnlock()
 	return sf.val

+ 2 - 2
v4/lev2/wui/wui_types/ihx_url_method.go

@@ -11,7 +11,7 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // hx-delete // DELETE.
 type IHxUrlMethod interface {
 	// Get -- возвращает метод атрибута
-	Get() defs.ATxt
+	Get() defs.ITxtFix
 	// Set -- устанавливает метод атрибута
-	Set(defs.ATxt)
+	Set(defs.ITxtFix)
 }

+ 2 - 2
v4/lev2/wui/wui_types/ihx_url_patch.go

@@ -5,7 +5,7 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 // IHxUrlPatch -- атрибут пути HTMX.
 type IHxUrlPatch interface {
 	// Get -- возвращает путь атрибута
-	Get() defs.ATxt
+	Get() defs.ITxtFix
 	// Set -- устанавливает путь атрибута
-	Set(defs.ATxt)
+	Set(defs.ITxtFix)
 }

+ 2 - 2
v4/lev2/wui/wui_types/iwui_text.go

@@ -6,7 +6,7 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 type IWuiText interface {
 	IWuiWidget
 	// Get -- возвращает текст
-	Get() defs.ATxt
+	Get() defs.ITxtFix
 	// Set -- устанавливает текст
-	Set(defs.ATxt)
+	Set(defs.ITxtFix)
 }

+ 2 - 2
v4/lev2/wui/wui_types/iwui_widget.go

@@ -6,7 +6,7 @@ import "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 type IWuiWidget interface {
 	defs.ITxtFix
 	// Id -- возвращает Id виджета
-	Id() defs.ATxt
+	Id() defs.ITxtFix
 	// Html -- возвращает HTML-представление виджета
-	Html() defs.ATxt
+	Html() defs.ITxtFix
 }

+ 6 - 6
v4/lev2/wui/wui_widget/wui_widget.go

@@ -11,21 +11,21 @@ import (
 
 // WuiWidget -- базовый виджет WUI.
 type WuiWidget struct {
-	defs.ATxt
+	defs.ITxtFix
 }
 
 // NewWuiWidget -- возвращает новый базовый виджет WUI.
 func NewWuiWidget() *WuiWidget {
 	sf := &WuiWidget{
-		ATxt: "wui_" + defs.ATxt(rand.Text()),
+		KTxt: "wui_" + defs.ITxtFix(rand.Text()),
 	}
 	_ = mWt.IWuiWidget(sf)
 	return sf
 }
 
 // Id - возвращает ID виджета.
-func (sf *WuiWidget) Id() defs.ATxt {
-	return sf.ATxt
+func (sf *WuiWidget) Id() defs.ITxtFix {
+	return sf.KTxt
 }
 
 const (
@@ -33,7 +33,7 @@ const (
 )
 
 // Html -- возвращает HTML представление виджета.
-func (sf *WuiWidget) Html() defs.ATxt {
+func (sf *WuiWidget) Html() defs.ITxtFix {
 	strRes := strings.ReplaceAll(strBeg, "{.id}", sf.String())
-	return defs.ATxt(strRes)
+	return defs.ITxtFix(strRes)
 }

+ 3 - 3
v4/lev3/mod_ent/module_name/module_name.go

@@ -18,21 +18,21 @@ type IModuleNameFix interface {
 }
 
 type ModuleName struct {
-	name defs.ATxt
+	name defs.ITxtFix
 }
 
 // NewModuleName -- создать новое имя модуля.
 func NewModuleName(val AModuleName) *ModuleName {
 	helpers.Hassert(val != "", "NewAModuleName(): val is empty")
 	sf := &ModuleName{
-		name: defs.ATxt(val),
+		name: defs.ITxtFix(val),
 	}
 	_ = IModuleNameFix(sf)
 	return sf
 }
 
 // Txt -- возвращает внутренне представление имени модуля.
-func (sf *ModuleName) Txt() defs.ATxt {
+func (sf *ModuleName) Txt() defs.ITxtFix {
 	return sf.name
 }
 

+ 2 - 1
v4/lev3/mod_keeper/mod_keeper.go

@@ -5,6 +5,7 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
@@ -56,7 +57,7 @@ func GetModuleKeeper() *ModuleKeeper {
 
 // Run -- запускает модуль в работу.
 func (sf *ModuleKeeper) Run() {
-	sf.log.Info("ModuleKernelCtx.Run(): module=%v, is run", sf.Name())
+	sf.log.Info(defs.Txt("ModuleKernelCtx.Run(): module=%v, is run", sf.Name()))
 	go sf.kServHttp.Run()
 }
 

+ 2 - 2
v4/lev3/mod_serv_http/btn_modules/btn_modules.go

@@ -25,13 +25,13 @@ func NewBtnModules() *BtnModules {
 	sf := &BtnModules{
 		kCtx: kctx.GetKernelCtx(),
 	}
-	sf.btn = wui.NewWuiButton("Modules", sf.clickMonolit)
+	sf.btn = wui.NewWuiButton(defs.Txt("Modules"), sf.clickMonolit)
 	sf.btn.Hx().Target().Set("#modules")
 	return sf
 }
 
 // Html -- возвращает HTML-представление кнопки.
-func (sf *BtnModules) Html() defs.ATxt {
+func (sf *BtnModules) Html() defs.ITxtFix {
 	return sf.btn.Html()
 }
 

+ 3 - 2
v4/lev3/mod_serv_http/btn_modules/btn_modules_test.go

@@ -3,6 +3,7 @@ package btn_modules
 import (
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
@@ -11,11 +12,11 @@ import (
 
 func TestBtnModules(t *testing.T) {
 	btn := NewBtnModules()
-	if html := btn.Html(); html == "" {
+	if html := btn.Html(); html.Get() == "" {
 		t.Fatalf("html is empty")
 	}
 	kCtx := kctx.GetKernelCtx()
-	kCtx.Set("isLocal", true, "test")
+	kCtx.Set(defs.Txt("isLocal"), true, "test")
 	kMon := kmonolit.GetMonolit("test")
 	modName := module_name.IModuleNameFix(module_name.NewModuleName("test"))
 	mod := kmodule.NewKernelModule(modName)

+ 1 - 1
v4/lev3/mod_serv_http/btn_monolit/btn_monolit.go

@@ -23,7 +23,7 @@ func NewBtnMonolit() *BtnMonolit {
 }
 
 // Html -- возвращает HTML-представление кнопки.
-func (sf *BtnMonolit) Html() defs.ATxt {
+func (sf *BtnMonolit) Html() defs.ITxtFix {
 	return sf.btn.Html()
 }
 

+ 2 - 1
v4/lev3/mod_serv_http/http_api/http_api_test.go

@@ -5,6 +5,7 @@ import (
 	"os"
 	"testing"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmonolit"
@@ -62,7 +63,7 @@ func (sf *tester) new() {
 	_ = mock_env.MakeEnv()
 	_ = os.Unsetenv("LOCAL_HTTP_URL")
 	_ = os.Setenv("LOCAL_HTTP_URL", "http://localhost:18312/")
-	sf.kCtx.Set("isLocal", true, "testing")
+	sf.kCtx.Set(defs.Txt("isLocal"), true, "testing")
 	_ = kmonolit.GetMonolit("test_monolit")
 	sf.serv = kserv_http.GetKernelServHttp()
 

+ 3 - 1
v4/lev3/mod_serv_http/mod_serv_http.go

@@ -5,6 +5,7 @@ import (
 	"sync"
 
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/comp_spec"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kserv_http"
@@ -51,7 +52,8 @@ func GetModuleServHttp() *ModuleServHttp {
 
 // Run -- запускает модуль в работу.
 func (sf *ModuleServHttp) Run() {
-	sf.log.Info("ModuleServHttp.Run(): module=%v, is run", sf.Name())
+	msg := defs.Txt("ModuleServHttp.Run(): module=%v, is run", sf.Name())
+	sf.log.Info(msg)
 	go sf.kServHttp.Run()
 }
 

+ 1 - 1
v4/lev3/mod_serv_http/page_module/page_module.go

@@ -278,7 +278,7 @@ func (sf *PageModule) postSvgSec(ctx fiber.Ctx) error {
 
 // Возвращает модуль.
 func (sf *PageModule) getModule(modNum mod_num.IModNumFix) (mod_spec.IKernelModule, comp_spec.ICtxValue) {
-	optMonolit := sf.ctx.Get("monolit")
+	optMonolit := sf.ctx.Get(defs.Txt("monolit"))
 	if optMonolit.IsNone() {
 		return nil, nil
 	}

+ 4 - 3
v4/lev3/mod_serv_http/page_module/page_module_test.go

@@ -8,6 +8,7 @@ import (
 
 	"github.com/gofiber/fiber/v3"
 
+	"gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev1/mock_env"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
 	"gitp78su.ipnodns.ru/svi/kern/v4/lev2/kmodule"
@@ -113,11 +114,11 @@ func (sf *tester) comSvgPost() *fiber.App {
 	ctxMon := mon.Ctx()
 	modName := module_name.IModuleNameFix(module_name.NewModuleName("kCtx"))
 	kMod := kmodule.NewKernelModule(modName)
-	kMod.Log().Debug("test msg")
+	kMod.Log().Debug(defs.Txt("test msg"))
 	ctxMod := kMod.Ctx()
-	ctxMod.Set("demo_key", "demo value", "for demo comment")
+	ctxMod.Set(defs.Txt("demo_key"), "demo value", defs.Txt("for demo comment"))
 	time.Sleep(time.Millisecond * 20)
-	ctxMon.Set("module_1", kMod, "test_module")
+	ctxMon.Set(defs.Txt("module_1"), kMod, defs.Txt("test_module"))
 	fiberApp := sf.serv.Fiber()
 	return fiberApp
 }

+ 1 - 1
v4/lev3/mod_spec/imod_base.go

@@ -20,7 +20,7 @@ type IKernelModule interface {
 	// Log -- возвращает буферный лог модуля
 	Log() comp_spec.ILogBuf
 	// Live -- "сигнал жизни"
-	Live() defs.ATxt
+	Live() defs.ITxtFix
 	// Stat -- возвращает статистику модуля
 	Stat() IModuleStat
 }

+ 2 - 2
v4/lev3/mod_wui/mod_wui.go

@@ -86,9 +86,9 @@ func (sf *ModuleWui) IsWork() mKs.EBool {
 
 // Получает событие из сети.
 func (sf *ModuleWui) wuiClick(resp http.ResponseWriter, req *http.Request) {
-	url := defs.ATxt(req.RequestURI)
+	url := defs.ITxtFix(req.RequestURI)
 	id := strings.TrimPrefix(url.String(), "/wui/click/")
-	optWidget := sf.wCtx.Get(defs.ATxt(id))
+	optWidget := sf.wCtx.Get(defs.ITxtFix(id))
 	if optWidget == nil {
 		err := defs.NewErr("ModuleWui.wuiClick(): id(%v), widget not exists", id)
 		sf.log.Err(err)

+ 1 - 1
v4/lev3/mod_wui/mod_wui_test.go

@@ -100,7 +100,7 @@ func (sf *tester) clickBad3() {
 // С POST-формой.
 func (sf *tester) clickGood2() {
 	sf.t.Log("clickGood2")
-	btn := wui_button.NewWuiButton("test_btn", sf.fnClick)
+	btn := wui_button.NewWuiButton(defs.Txt("test_btn"), sf.fnClick)
 	// Данные формы
 	formData := url.Values{
 		"username": {"john_doe"},