Source File
fold.go
Belonging Package
encoding/json/v2
// Copyright 2020 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.//go:build goexperiment.jsonv2package jsonimport ()// foldName returns a folded string such that foldName(x) == foldName(y)// is similar to strings.EqualFold(x, y), but ignores underscore and dashes.// This allows foldName to match common naming conventions.func foldName( []byte) []byte {// This is inlinable to take advantage of "function outlining".// See https://blog.filippo.io/efficient-go-apis-with-the-inliner/var [32]byte // large enough for most JSON namesreturn appendFoldedName([:0], )}func appendFoldedName(, []byte) []byte {for := 0; < len(); {// Handle single-byte ASCII.if := []; < utf8.RuneSelf {if != '_' && != '-' {if 'a' <= && <= 'z' {-= 'a' - 'A'}= append(, )}++continue}// Handle multi-byte Unicode., := utf8.DecodeRune([:])= utf8.AppendRune(, foldRune())+=}return}// foldRune is a variation on unicode.SimpleFold that returns the same rune// for all runes in the same fold set.//// Invariant://// foldRune(x) == foldRune(y) ⇔ strings.EqualFold(string(x), string(y))func foldRune( rune) rune {for {:= unicode.SimpleFold()if <= {return // smallest character in the fold set}=}}
![]() |
The pages are generated with Golds v0.7.9-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |