github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/isc/utf8string.go (about)

     1  package isc
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  type ISCUTF8String []rune
    11  
    12  func NewUTF8String(str string) ISCUTF8String {
    13  	return ISCUTF8String(str)
    14  }
    15  
    16  func (s ISCUTF8String) String() string {
    17  	return string(s)
    18  }
    19  
    20  func (s ISCUTF8String) At(index int) rune {
    21  	return s[index]
    22  }
    23  
    24  func (s ISCUTF8String) Length() int {
    25  	return len(s)
    26  }
    27  
    28  func (s ISCUTF8String) Chars() ISCList[rune] {
    29  	return ISCList[rune](s)
    30  }
    31  
    32  func (s ISCUTF8String) Count(substr ISCUTF8String) int {
    33  	return strings.Count(string(s), string(substr))
    34  }
    35  
    36  func (s ISCUTF8String) Contains(substr ISCUTF8String) bool {
    37  	return strings.Contains(string(s), string(substr))
    38  }
    39  
    40  func (s ISCUTF8String) ContainsRune(r rune) bool {
    41  	return strings.ContainsRune(string(s), r)
    42  }
    43  
    44  func (s ISCUTF8String) toIndex(idx int) int {
    45  	if idx < 0 {
    46  		return idx
    47  	}
    48  	buf := string(s)[:idx]
    49  	runeBuf := []rune(buf)
    50  	return len(runeBuf)
    51  }
    52  
    53  func (s ISCUTF8String) IndexOf(substr ISCUTF8String) int {
    54  	i := strings.Index(string(s), string(substr))
    55  	return s.toIndex(i)
    56  }
    57  
    58  func (s ISCUTF8String) LastIndexOf(substr ISCUTF8String) int {
    59  	i := strings.LastIndex(string(s), string(substr))
    60  	return s.toIndex(i)
    61  }
    62  
    63  func (s ISCUTF8String) IndexOfFunc(f func(rune) bool) int {
    64  	i := strings.IndexFunc(string(s), f)
    65  	return s.toIndex(i)
    66  }
    67  
    68  func (s ISCUTF8String) LastIndexOfFunc(f func(rune) bool) int {
    69  	i := strings.LastIndexFunc(string(s), f)
    70  	return s.toIndex(i)
    71  }
    72  
    73  func (s ISCUTF8String) SplitN(sep ISCUTF8String, n int) []ISCUTF8String {
    74  	ss := strings.SplitN(string(s), string(sep), n)
    75  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
    76  		return ISCUTF8String(item)
    77  	})
    78  }
    79  
    80  func (s ISCUTF8String) SplitAfterN(sep ISCUTF8String, n int) []ISCUTF8String {
    81  	ss := strings.SplitAfterN(string(s), string(sep), n)
    82  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
    83  		return ISCUTF8String(item)
    84  	})
    85  }
    86  
    87  func (s ISCUTF8String) Split(sep ISCUTF8String) []ISCUTF8String {
    88  	ss := strings.Split(string(s), string(sep))
    89  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
    90  		return ISCUTF8String(item)
    91  	})
    92  }
    93  
    94  func (s ISCUTF8String) SplitAfter(sep ISCUTF8String) []ISCUTF8String {
    95  	ss := strings.SplitAfter(string(s), string(sep))
    96  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
    97  		return ISCUTF8String(item)
    98  	})
    99  }
   100  
   101  func (s ISCUTF8String) Fields() []ISCUTF8String {
   102  	ss := strings.Fields(string(s))
   103  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
   104  		return ISCUTF8String(item)
   105  	})
   106  }
   107  
   108  func (s ISCUTF8String) FieldsFunc(f func(rune) bool) []ISCUTF8String {
   109  	ss := strings.FieldsFunc(string(s), f)
   110  	return ListToMapFrom[string, ISCUTF8String](ss).Map(func(item string) ISCUTF8String {
   111  		return ISCUTF8String(item)
   112  	})
   113  }
   114  
   115  func (s ISCUTF8String) StartsWith(prefix ISCUTF8String) bool {
   116  	return strings.HasPrefix(string(s), string(prefix))
   117  }
   118  
   119  func (s ISCUTF8String) EndsWith(suffix ISCUTF8String) bool {
   120  	return strings.HasSuffix(string(s), string(suffix))
   121  }
   122  
   123  func (s ISCUTF8String) TrimLeftFunc(f func(rune) bool) ISCUTF8String {
   124  	return ISCUTF8String(strings.TrimLeftFunc(string(s), f))
   125  }
   126  
   127  func (s ISCUTF8String) TrimRightFunc(f func(rune) bool) ISCUTF8String {
   128  	return ISCUTF8String(strings.TrimRightFunc(string(s), f))
   129  }
   130  
   131  func (s ISCUTF8String) TrimFunc(f func(rune) bool) ISCUTF8String {
   132  	return ISCUTF8String(strings.TrimFunc(string(s), f))
   133  }
   134  
   135  func (s ISCUTF8String) Trim(cutset ISCUTF8String) ISCUTF8String {
   136  	return ISCUTF8String(strings.Trim(string(s), string(cutset)))
   137  }
   138  
   139  func (s ISCUTF8String) TrimLeft(cutset ISCUTF8String) ISCUTF8String {
   140  	return ISCUTF8String(strings.TrimLeft(string(s), string(cutset)))
   141  }
   142  
   143  func (s ISCUTF8String) TrimRight(cutset ISCUTF8String) ISCUTF8String {
   144  	return ISCUTF8String(strings.TrimRight(string(s), string(cutset)))
   145  }
   146  
   147  func (s ISCUTF8String) TrimSpace() ISCUTF8String {
   148  	return ISCUTF8String(strings.TrimSpace(string(s)))
   149  }
   150  
   151  func (s ISCUTF8String) TrimPrefix(prefix ISCUTF8String) ISCUTF8String {
   152  	return ISCUTF8String(strings.TrimPrefix(string(s), string(prefix)))
   153  }
   154  
   155  func (s ISCUTF8String) TrimSuffix(suffix ISCUTF8String) ISCUTF8String {
   156  	return ISCUTF8String(strings.TrimSuffix(string(s), string(suffix)))
   157  }
   158  
   159  func (s ISCUTF8String) Replace(old, new ISCUTF8String, n int) ISCUTF8String {
   160  	return ISCUTF8String(strings.Replace(string(s), string(old), string(new), n))
   161  }
   162  
   163  func (s ISCUTF8String) ReplaceAll(old, new ISCUTF8String) ISCUTF8String {
   164  	return ISCUTF8String(strings.ReplaceAll(string(s), string(old), string(new)))
   165  }
   166  
   167  func (s ISCUTF8String) EqualFold(t ISCUTF8String) bool {
   168  	return strings.EqualFold(string(s), string(t))
   169  }
   170  
   171  func (s ISCUTF8String) ToUpper() ISCUTF8String {
   172  	return ISCUTF8String(strings.ToUpper(string(s)))
   173  }
   174  
   175  func (s ISCUTF8String) ToLower() ISCUTF8String {
   176  	return ISCUTF8String(strings.ToLower(string(s)))
   177  }
   178  
   179  func (s ISCUTF8String) ToTitle() ISCUTF8String {
   180  	return ISCUTF8String(strings.ToTitle(string(s)))
   181  }
   182  
   183  func (s ISCUTF8String) IsEmpty() bool {
   184  	return len(s) == 0
   185  }
   186  
   187  func (s ISCUTF8String) SubStringStart(AStartIndex int) ISCUTF8String {
   188  	return s[AStartIndex:]
   189  }
   190  
   191  func (s ISCUTF8String) SubStringStartEnd(AStartIndex, AEndIndex int) ISCUTF8String {
   192  	return s[AStartIndex:AEndIndex]
   193  }
   194  
   195  func (s ISCUTF8String) SubStringBefore(delimiter ISCUTF8String) ISCUTF8String {
   196  	if i := s.IndexOf(delimiter); i != -1 {
   197  		return s[:i]
   198  	} else {
   199  		return s
   200  	}
   201  }
   202  
   203  func (s ISCUTF8String) SubStringAfter(delimiter ISCUTF8String) ISCUTF8String {
   204  	if i := s.IndexOf(delimiter); i != -1 {
   205  		return s[i+len(delimiter):]
   206  	} else {
   207  		return s
   208  	}
   209  }
   210  
   211  func (s ISCUTF8String) SubStringBeforeLast(delimiter ISCUTF8String) ISCUTF8String {
   212  	if i := s.LastIndexOf(delimiter); i != -1 {
   213  		return s[:i]
   214  	} else {
   215  		return s
   216  	}
   217  }
   218  
   219  func (s ISCUTF8String) SubStringAfterLast(delimiter ISCUTF8String) ISCUTF8String {
   220  	if i := s.LastIndexOf(delimiter); i != -1 {
   221  		return s[i+len(delimiter):]
   222  	} else {
   223  		return s
   224  	}
   225  }
   226  
   227  func (s ISCUTF8String) Insert(index int, substr ISCUTF8String) ISCUTF8String {
   228  	ss := string(s[:index]) + string(substr) + string(s[index:])
   229  	return ISCUTF8String(ss)
   230  }
   231  
   232  func (s ISCUTF8String) Delete(index int, count int) ISCUTF8String {
   233  	ss := string(s[:index]) + string(s[index+count:])
   234  	return ISCUTF8String(ss)
   235  }
   236  
   237  func (s ISCUTF8String) Matches(pattern ISCUTF8String) bool {
   238  	reg := regexp.MustCompile(string(pattern))
   239  	return reg.MatchString(string(s))
   240  }
   241  
   242  func (s ISCUTF8String) Lines() []ISCUTF8String {
   243  	return s.Split(ISCUTF8String("\n"))
   244  }
   245  
   246  func (s ISCUTF8String) LinesNoEmpty() []ISCUTF8String {
   247  	return NewListWithList(s.Split(ISCUTF8String("\n"))).Filter(func(item ISCUTF8String) bool {
   248  		return !item.IsEmpty()
   249  	})
   250  }
   251  
   252  func (s ISCUTF8String) ToBoolean() bool {
   253  	return string(s.ToLower()) == "true"
   254  }
   255  
   256  func (s ISCUTF8String) ToInt() int {
   257  	return ToInt(string(s))
   258  }
   259  
   260  func (s ISCUTF8String) ToInt8() int8 {
   261  	return ToInt8(string(s))
   262  }
   263  
   264  func (s ISCUTF8String) ToInt16() int16 {
   265  	return ToInt16(string(s))
   266  }
   267  
   268  func (s ISCUTF8String) ToInt32() int32 {
   269  	return ToInt32(string(s))
   270  }
   271  
   272  func (s ISCUTF8String) ToInt64() int64 {
   273  	return ToInt64(string(s))
   274  }
   275  
   276  func (s ISCUTF8String) ToFloat() float32 {
   277  	return ToFloat32(string(s))
   278  }
   279  
   280  func (s ISCUTF8String) ToFloat64() float64 {
   281  	return ToFloat64(string(s))
   282  }
   283  
   284  func (s ISCUTF8String) ToIntRadix(radix int) (int64, error) {
   285  	if radix != 2 && radix != 8 && radix != 10 && radix != 16 {
   286  		return 0, fmt.Errorf("radix %d is not supported", radix)
   287  	}
   288  	size := strconv.IntSize
   289  	return strconv.ParseInt(string(s), radix, size)
   290  }
   291  
   292  func (s ISCUTF8String) ToJSONEncoded() ISCUTF8String {
   293  	return s.ReplaceAll(ISCUTF8String("\\"), ISCUTF8String("\\\\")).ReplaceAll(ISCUTF8String("\n"), ISCUTF8String("\\n")).ReplaceAll(ISCUTF8String("\""), ISCUTF8String("\\\""))
   294  }
   295  
   296  func (s ISCUTF8String) ToPair() Pair[ISCUTF8String, ISCUTF8String] {
   297  	sa := s.TrimSpace().Split(ISCUTF8String("="))
   298  	return NewPair(sa[0].TrimSpace(), sa[1].TrimSpace())
   299  }