From 621e49bb465f500cc46d47e39e828cf76d6381d7 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 24 Jul 2018 14:35:44 +0200 Subject: update vendor --- .../golang.org/x/text/internal/cldrtree/option.go | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 vendor/golang.org/x/text/internal/cldrtree/option.go (limited to 'vendor/golang.org/x/text/internal/cldrtree/option.go') 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 0000000..f91e250 --- /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) + } +} + +// aliasOpt 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 a 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 + } +} -- cgit v1.2.3