123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2015 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.
- package precis
- import (
- "unicode"
- "golang.org/x/text/runes"
- "golang.org/x/text/transform"
- "golang.org/x/text/unicode/norm"
- )
- var (
- // Implements the Nickname profile specified in RFC 8266.
- Nickname *Profile = nickname
- // Implements the UsernameCaseMapped profile specified in RFC 8265.
- UsernameCaseMapped *Profile = usernameCaseMap
- // Implements the UsernameCasePreserved profile specified in RFC 8265.
- UsernameCasePreserved *Profile = usernameNoCaseMap
- // Implements the OpaqueString profile defined in RFC 8265 for passwords and
- // other secure labels.
- OpaqueString *Profile = opaquestring
- )
- var (
- nickname = &Profile{
- options: getOpts(
- AdditionalMapping(func() transform.Transformer {
- return &nickAdditionalMapping{}
- }),
- IgnoreCase,
- Norm(norm.NFKC),
- DisallowEmpty,
- repeat,
- ),
- class: freeform,
- }
- usernameCaseMap = &Profile{
- options: getOpts(
- FoldWidth,
- LowerCase(),
- Norm(norm.NFC),
- BidiRule,
- ),
- class: identifier,
- }
- usernameNoCaseMap = &Profile{
- options: getOpts(
- FoldWidth,
- Norm(norm.NFC),
- BidiRule,
- ),
- class: identifier,
- }
- opaquestring = &Profile{
- options: getOpts(
- AdditionalMapping(func() transform.Transformer {
- return mapSpaces
- }),
- Norm(norm.NFC),
- DisallowEmpty,
- ),
- class: freeform,
- }
- )
- // mapSpaces is a shared value of a runes.Map transformer.
- var mapSpaces transform.Transformer = runes.Map(func(r rune) rune {
- if unicode.Is(unicode.Zs, r) {
- return ' '
- }
- return r
- })
|