transformPathSegment transforms one path segment (or really any string) according to the chosen TransformAlgo. It assumes path separators have already been trimmed.
(s string, t transform)
| 122 | // transformPathSegment transforms one path segment (or really any string) according to the chosen TransformAlgo. |
| 123 | // It assumes path separators have already been trimmed. |
| 124 | func transformPathSegment(s string, t transform) (string, error) { |
| 125 | switch t.key { |
| 126 | case ConvNone: |
| 127 | return s, nil |
| 128 | case ConvToNFC: |
| 129 | return norm.NFC.String(s), nil |
| 130 | case ConvToNFD: |
| 131 | return norm.NFD.String(s), nil |
| 132 | case ConvToNFKC: |
| 133 | return norm.NFKC.String(s), nil |
| 134 | case ConvToNFKD: |
| 135 | return norm.NFKD.String(s), nil |
| 136 | case ConvBase64Encode: |
| 137 | return base64.URLEncoding.EncodeToString([]byte(s)), nil // URLEncoding to avoid slashes |
| 138 | case ConvBase64Decode: |
| 139 | if s == ".DS_Store" { |
| 140 | return s, nil |
| 141 | } |
| 142 | b, err := base64.URLEncoding.DecodeString(s) |
| 143 | if err != nil { |
| 144 | fs.Errorf(s, "base64 error") |
| 145 | } |
| 146 | return string(b), err |
| 147 | case ConvFindReplace: |
| 148 | split := strings.Split(t.value, ":") |
| 149 | if len(split) != 2 { |
| 150 | return s, fmt.Errorf("wrong number of values: %v", t.value) |
| 151 | } |
| 152 | return strings.ReplaceAll(s, split[0], split[1]), nil |
| 153 | case ConvPrefix: |
| 154 | return t.value + s, nil |
| 155 | case ConvSuffix: |
| 156 | return s + t.value, nil |
| 157 | case ConvSuffixKeepExtension: |
| 158 | return SuffixKeepExtension(s, t.value), nil |
| 159 | case ConvTrimPrefix: |
| 160 | return strings.TrimPrefix(s, t.value), nil |
| 161 | case ConvTrimSuffix: |
| 162 | return strings.TrimSuffix(s, t.value), nil |
| 163 | case ConvTruncate: |
| 164 | max, err := strconv.Atoi(t.value) |
| 165 | if err != nil { |
| 166 | return s, err |
| 167 | } |
| 168 | return truncateChars(s, max, false), nil |
| 169 | case ConvTruncateKeepExtension: |
| 170 | max, err := strconv.Atoi(t.value) |
| 171 | if err != nil { |
| 172 | return s, err |
| 173 | } |
| 174 | return truncateChars(s, max, true), nil |
| 175 | case ConvTruncateBytes: |
| 176 | max, err := strconv.Atoi(t.value) |
| 177 | if err != nil { |
| 178 | return s, err |
| 179 | } |
| 180 | return truncateBytes(s, max, false) |
| 181 | case ConvTruncateBytesKeepExtension: |
no test coverage detected
searching dependent graphs…