package language
import (
)
type Builder struct {
Tag Tag
private string
variants []string
extensions []string
}
func ( *Builder) () Tag {
:= .Tag
if len(.extensions) > 0 || len(.variants) > 0 {
sort.Sort(sortVariants(.variants))
sort.Strings(.extensions)
if .private != "" {
.extensions = append(.extensions, .private)
}
:= maxCoreSize + tokenLen(.variants...) + tokenLen(.extensions...)
:= make([]byte, )
:= .genCoreBytes()
.pVariant = byte()
+= appendTokens([:], .variants...)
.pExt = uint16()
+= appendTokens([:], .extensions...)
.str = string([:])
:= makeScanner([:])
, _ = parse(&, "")
return
} else if .private != "" {
.str = .private
.RemakeString()
}
return
}
func ( *Builder) ( Tag) {
.Tag.LangID = .LangID
.Tag.RegionID = .RegionID
.Tag.ScriptID = .ScriptID
.variants = .variants[:0]
if := .Variants(); != "" {
for , := range strings.Split([1:], "-") {
.variants = append(.variants, )
}
}
.extensions, .private = .extensions[:0], ""
for , := range .Extensions() {
.AddExt()
}
}
func ( *Builder) ( string) {
if [0] == 'x' {
if .private == "" {
.private =
}
return
}
for , := range .extensions {
if [0] == [0] {
if [0] == 'u' {
.extensions[] += [1:]
}
return
}
}
.extensions = append(.extensions, )
}
func ( *Builder) ( string) {
if [0] == 'x' {
.private =
return
}
for , := range .extensions {
if [0] == [0] {
if [0] == 'u' {
.extensions[] = + [1:]
} else {
.extensions[] =
}
return
}
}
.extensions = append(.extensions, )
}
func ( *Builder) ( ...string) {
for , := range {
if != "" {
.variants = append(.variants, )
}
}
}
func ( *Builder) () {
.variants = .variants[:0]
}
func ( *Builder) () {
.private = ""
.extensions = .extensions[:0]
}
func ( ...string) ( int) {
for , := range {
+= len() + 1
}
return
}
func ( []byte, ...string) int {
:= 0
for , := range {
[] = '-'
copy([+1:], )
+= 1 + len()
}
return
}
type sortVariants []string
func ( sortVariants) () int {
return len()
}
func ( sortVariants) (, int) {
[], [] = [], []
}
func ( sortVariants) (, int) bool {
return variantIndex[[]] < variantIndex[[]]
}