1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Copyright 2016 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.
- // +build ignore
- package main
- // Form defines a plural form.
- //
- // Not all languages support all forms. Also, the meaning of each form varies
- // per language. It is important to note that the name of a form does not
- // necessarily correspond one-to-one with the set of numbers. For instance,
- // for Croation, One matches not only 1, but also 11, 21, etc.
- //
- // Each language must at least support the form "other".
- type Form byte
- const (
- Other Form = iota
- Zero
- One
- Two
- Few
- Many
- )
- var countMap = map[string]Form{
- "other": Other,
- "zero": Zero,
- "one": One,
- "two": Two,
- "few": Few,
- "many": Many,
- }
- type pluralCheck struct {
- // category:
- // 3..7: opID
- // 0..2: category
- cat byte
- setID byte
- }
- // opID identifies the type of operand in the plural rule, being i, n or f.
- // (v, w, and t are treated as filters in our implementation.)
- type opID byte
- const (
- opMod opID = 0x1 // is '%' used?
- opNotEqual opID = 0x2 // using "!=" to compare
- opI opID = 0 << 2 // integers after taking the absolute value
- opN opID = 1 << 2 // full number (must be integer)
- opF opID = 2 << 2 // fraction
- opV opID = 3 << 2 // number of visible digits
- opW opID = 4 << 2 // number of visible digits without trailing zeros
- opBretonM opID = 5 << 2 // hard-wired rule for Breton
- opItalian800 opID = 6 << 2 // hard-wired rule for Italian
- opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
- )
- const (
- // Use this plural form to indicate the next rule needs to match as well.
- // The last condition in the list will have the correct plural form.
- andNext = 0x7
- formMask = 0x7
- opShift = 3
- // numN indicates the maximum integer, or maximum mod value, for which we
- // have inclusion masks.
- numN = 100
- // The common denominator of the modulo that is taken.
- maxMod = 100
- )
|