github.com/go-xe2/third@v1.0.3/golang.org/x/text/encoding/internal/identifier/identifier.go (about)

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:generate go run gen.go
     6  
     7  // Package identifier defines the contract between implementations of Encoding
     8  // and Index by defining identifiers that uniquely identify standardized coded
     9  // character sets (CCS) and character encoding schemes (CES), which we will
    10  // together refer to as encodings, for which Encoding implementations provide
    11  // converters to and from UTF-8. This package is typically only of concern to
    12  // implementers of Indexes and Encodings.
    13  //
    14  // One part of the identifier is the MIB code, which is defined by IANA and
    15  // uniquely identifies a CCS or CES. Each code is associated with data that
    16  // references authorities, official documentation as well as aliases and MIME
    17  // names.
    18  //
    19  // Not all CESs are covered by the IANA registry. The "other" string that is
    20  // returned by ID can be used to identify other character sets or versions of
    21  // existing ones.
    22  //
    23  // It is recommended that each package that provides a set of Encodings provide
    24  // the All and Common variables to reference all supported encodings and
    25  // commonly used subset. This allows Index implementations to include all
    26  // available encodings without explicitly referencing or knowing about them.
    27  package identifier
    28  
    29  // Note: this package is internal, but could be made public if there is a need
    30  // for writing third-party Indexes and Encodings.
    31  
    32  // References:
    33  // - http://source.icu-project.org/repos/icu/icu/trunk/source/data/mappings/convrtrs.txt
    34  // - http://www.iana.org/assignments/character-sets/character-sets.xhtml
    35  // - http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib
    36  // - http://www.ietf.org/rfc/rfc2978.txt
    37  // - http://www.unicode.org/reports/tr22/
    38  // - http://www.w3.org/TR/encoding/
    39  // - https://encoding.spec.whatwg.org/
    40  // - https://encoding.spec.whatwg.org/encodings.json
    41  // - https://tools.ietf.org/html/rfc6657#section-5
    42  
    43  // Interface can be implemented by Encodings to define the CCS or CES for which
    44  // it implements conversions.
    45  type Interface interface {
    46  	// ID returns an encoding identifier. Exactly one of the mib and other
    47  	// values should be non-zero.
    48  	//
    49  	// In the usual case it is only necessary to indicate the MIB code. The
    50  	// other string can be used to specify encodings for which there is no MIB,
    51  	// such as "x-mac-dingbat".
    52  	//
    53  	// The other string may only contain the characters a-z, A-Z, 0-9, - and _.
    54  	ID() (mib MIB, other string)
    55  
    56  	// NOTE: the restrictions on the encoding are to allow extending the syntax
    57  	// with additional information such as versions, vendors and other variants.
    58  }
    59  
    60  // A MIB identifies an encoding. It is derived from the IANA MIB codes and adds
    61  // some identifiers for some encodings that are not covered by the IANA
    62  // standard.
    63  //
    64  // See http://www.iana.org/assignments/ianacharset-mib.
    65  type MIB uint16
    66  
    67  // These additional MIB types are not defined in IANA. They are added because
    68  // they are common and defined within the text repo.
    69  const (
    70  	// Unofficial marks the start of encodings not registered by IANA.
    71  	Unofficial MIB = 10000 + iota
    72  
    73  	// Replacement is the WhatWG replacement encoding.
    74  	Replacement
    75  
    76  	// XUserDefined is the code for x-user-defined.
    77  	XUserDefined
    78  
    79  	// MacintoshCyrillic is the code for x-mac-cyrillic.
    80  	MacintoshCyrillic
    81  )