src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

strings.go (1813B)


      1 package ini
      2 
      3 import (
      4 	"strings"
      5 )
      6 
      7 func trimProfileComment(s string) string {
      8 	r, _, _ := strings.Cut(s, "#")
      9 	r, _, _ = strings.Cut(r, ";")
     10 	return r
     11 }
     12 
     13 func trimPropertyComment(s string) string {
     14 	r, _, _ := strings.Cut(s, " #")
     15 	r, _, _ = strings.Cut(r, " ;")
     16 	r, _, _ = strings.Cut(r, "\t#")
     17 	r, _, _ = strings.Cut(r, "\t;")
     18 	return r
     19 }
     20 
     21 // assumes no surrounding comment
     22 func splitProperty(s string) (string, string, bool) {
     23 	equalsi := strings.Index(s, "=")
     24 	coloni := strings.Index(s, ":") // LEGACY: also supported for property assignment
     25 	sep := "="
     26 	if equalsi == -1 || coloni != -1 && coloni < equalsi {
     27 		sep = ":"
     28 	}
     29 
     30 	k, v, ok := strings.Cut(s, sep)
     31 	if !ok {
     32 		return "", "", false
     33 	}
     34 	return strings.TrimSpace(k), strings.TrimSpace(v), true
     35 }
     36 
     37 // assumes no surrounding comment, whitespace, or profile brackets
     38 func splitProfile(s string) (string, string) {
     39 	var first int
     40 	for i, r := range s {
     41 		if isLineSpace(r) {
     42 			if first == 0 {
     43 				first = i
     44 			}
     45 		} else {
     46 			if first != 0 {
     47 				return s[:first], s[i:]
     48 			}
     49 		}
     50 	}
     51 	if first == 0 {
     52 		return "", s // type component is effectively blank
     53 	}
     54 	return "", ""
     55 }
     56 
     57 func isLineSpace(r rune) bool {
     58 	return r == ' ' || r == '\t'
     59 }
     60 
     61 func unquote(s string) string {
     62 	if isSingleQuoted(s) || isDoubleQuoted(s) {
     63 		return s[1 : len(s)-1]
     64 	}
     65 	return s
     66 }
     67 
     68 // applies various legacy conversions to property values:
     69 //   - remote wrapping single/doublequotes
     70 func legacyStrconv(s string) string {
     71 	s = unquote(s)
     72 	return s
     73 }
     74 
     75 func isSingleQuoted(s string) bool {
     76 	return hasAffixes(s, "'", "'")
     77 }
     78 
     79 func isDoubleQuoted(s string) bool {
     80 	return hasAffixes(s, `"`, `"`)
     81 }
     82 
     83 func isBracketed(s string) bool {
     84 	return hasAffixes(s, "[", "]")
     85 }
     86 
     87 func hasAffixes(s, left, right string) bool {
     88 	return strings.HasPrefix(s, left) && strings.HasSuffix(s, right)
     89 }