...

Source file src/golang.org/x/text/feature/plural/gen_common.go

Documentation: golang.org/x/text/feature/plural

     1  // Copyright 2016 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:build ignore
     6  
     7  package main
     8  
     9  // Form defines a plural form.
    10  //
    11  // Not all languages support all forms. Also, the meaning of each form varies
    12  // per language. It is important to note that the name of a form does not
    13  // necessarily correspond one-to-one with the set of numbers. For instance,
    14  // for Croation, One matches not only 1, but also 11, 21, etc.
    15  //
    16  // Each language must at least support the form "other".
    17  type Form byte
    18  
    19  const (
    20  	Other Form = iota
    21  	Zero
    22  	One
    23  	Two
    24  	Few
    25  	Many
    26  )
    27  
    28  var countMap = map[string]Form{
    29  	"other": Other,
    30  	"zero":  Zero,
    31  	"one":   One,
    32  	"two":   Two,
    33  	"few":   Few,
    34  	"many":  Many,
    35  }
    36  
    37  type pluralCheck struct {
    38  	// category:
    39  	// 3..7: opID
    40  	// 0..2: category
    41  	cat   byte
    42  	setID byte
    43  }
    44  
    45  // opID identifies the type of operand in the plural rule, being i, n or f.
    46  // (v, w, and t are treated as filters in our implementation.)
    47  type opID byte
    48  
    49  const (
    50  	opMod           opID = 0x1    // is '%' used?
    51  	opNotEqual      opID = 0x2    // using "!=" to compare
    52  	opI             opID = 0 << 2 // integers after taking the absolute value
    53  	opN             opID = 1 << 2 // full number (must be integer)
    54  	opF             opID = 2 << 2 // fraction
    55  	opV             opID = 3 << 2 // number of visible digits
    56  	opW             opID = 4 << 2 // number of visible digits without trailing zeros
    57  	opBretonM       opID = 5 << 2 // hard-wired rule for Breton
    58  	opItalian800    opID = 6 << 2 // hard-wired rule for Italian
    59  	opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
    60  )
    61  const (
    62  	// Use this plural form to indicate the next rule needs to match as well.
    63  	// The last condition in the list will have the correct plural form.
    64  	andNext  = 0x7
    65  	formMask = 0x7
    66  
    67  	opShift = 3
    68  
    69  	// numN indicates the maximum integer, or maximum mod value, for which we
    70  	// have inclusion masks.
    71  	numN = 100
    72  	// The common denominator of the modulo that is taken.
    73  	maxMod = 100
    74  )
    75  

View as plain text