aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/text/internal/cldrtree/option.go
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2023-11-16 16:04:50 +0300
committeruzhas <uzhas@ydb.tech>2023-11-16 17:46:46 +0300
commit46f0c0079bb50609d2eeb6586642bcf114fc5239 (patch)
tree84e4e4978d57fe5de321ba69bf9d0c290de60a66 /vendor/golang.org/x/text/internal/cldrtree/option.go
parent73045e389397816cc2bdd6cd7818b4bce427b265 (diff)
downloadydb-46f0c0079bb50609d2eeb6586642bcf114fc5239.tar.gz
enable ya make for go projects
Diffstat (limited to 'vendor/golang.org/x/text/internal/cldrtree/option.go')
-rw-r--r--vendor/golang.org/x/text/internal/cldrtree/option.go86
1 files changed, 86 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/cldrtree/option.go b/vendor/golang.org/x/text/internal/cldrtree/option.go
new file mode 100644
index 0000000000..ca0d4476cf
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/cldrtree/option.go
@@ -0,0 +1,86 @@
+// Copyright 2017 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 cldrtree
+
+import (
+ "reflect"
+
+ "golang.org/x/text/unicode/cldr"
+)
+
+// An Option configures an Index.
+type Option func(*options)
+
+type options struct {
+ parent *Index
+
+ name string
+ alias *cldr.Common
+
+ sharedType *typeInfo
+ sharedEnums *enum
+}
+
+func (o *options) fill(opt []Option) {
+ for _, f := range opt {
+ f(o)
+ }
+}
+
+// setAlias sets an alias from the given node, if the node defines one.
+func (o *options) setAlias(n Element) {
+ if n != nil && !reflect.ValueOf(n).IsNil() {
+ o.alias = n.GetCommon()
+ }
+}
+
+// Enum defines an enumeration type. The resulting option may be passed for the
+// construction of multiple Indexes, which they will share the same enum values.
+// Calling Gen on a Builder will generate the Enum for the given name. The
+// optional values fix the values for the given identifier to the argument
+// position (starting at 0). Other values may still be added and will be
+// assigned to subsequent values.
+func Enum(name string, value ...string) Option {
+ return EnumFunc(name, nil, value...)
+}
+
+// EnumFunc is like Enum but also takes a function that allows rewriting keys.
+func EnumFunc(name string, rename func(string) string, value ...string) Option {
+ enum := &enum{name: name, rename: rename, keyMap: map[string]enumIndex{}}
+ for _, e := range value {
+ enum.lookup(e)
+ }
+ return func(o *options) {
+ found := false
+ for _, e := range o.parent.meta.b.enums {
+ if e.name == enum.name {
+ found = true
+ break
+ }
+ }
+ if !found {
+ o.parent.meta.b.enums = append(o.parent.meta.b.enums, enum)
+ }
+ o.sharedEnums = enum
+ }
+}
+
+// SharedType returns an option which causes all Indexes to which this option is
+// passed to have the same type.
+func SharedType() Option {
+ info := &typeInfo{}
+ return func(o *options) { o.sharedType = info }
+}
+
+func useSharedType() Option {
+ return func(o *options) {
+ sub := o.parent.meta.typeInfo.keyTypeInfo
+ if sub == nil {
+ sub = &typeInfo{}
+ o.parent.meta.typeInfo.keyTypeInfo = sub
+ }
+ o.sharedType = sub
+ }
+}