OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / text / secure / precis / profiles.go
diff --git a/vendor/golang.org/x/text/secure/precis/profiles.go b/vendor/golang.org/x/text/secure/precis/profiles.go
new file mode 100644 (file)
index 0000000..8601002
--- /dev/null
@@ -0,0 +1,78 @@
+// 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 7700.
+       // The nickname profile is not idempotent and may need to be applied multiple
+       // times before being used for comparisons.
+       Nickname *Profile = nickname
+
+       // Implements the UsernameCaseMapped profile specified in RFC 7613.
+       UsernameCaseMapped *Profile = usernameCaseMap
+
+       // Implements the UsernameCasePreserved profile specified in RFC 7613.
+       UsernameCasePreserved *Profile = usernameNoCaseMap
+
+       // Implements the OpaqueString profile defined in RFC 7613 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,
+               ),
+               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
+})