CLDR Plural support. See UTS #35.
Unknown Field: copyright | |
| |
Unknown Field: license | |
BSD, see LICENSE for more details. |
Class | PluralRule |
No summary |
Function | to_gettext |
The plural rule as gettext expression. The gettext expression is technically limited to integers and returns indices rather than tags. |
Function | to_javascript |
Convert a list/dict of rules or a PluralRule object into a JavaScript function. This function depends on no external library: |
Function | to_python |
Convert a list/dict of rules or a PluralRule object into a regular Python function. This is useful in situations where you need a real function and don't are about the actual rule object: |
Variable | compile_zero |
Undocumented |
Class | _Compiler |
The compilers are able to transform the expressions into multiple output formats. |
Class | _GettextCompiler |
Compile into a gettext plural expression. |
Class | _JavaScriptCompiler |
Compiles the expression to plain of JavaScript. |
Class | _Parser |
Internal parser. This class can translate a single rule into an abstract tree of tuples. It implements the following grammar: |
Class | _PythonCompiler |
Compiles an expression to Python. |
Class | _UnicodeCompiler |
Returns a unicode pluralization rule again. |
Class | RuleError |
Raised if a rule is malformed. |
Function | _binary_compiler |
Compiler factory for the _Compiler . |
Function | _unary_compiler |
Compiler factory for the _Compiler . |
Function | cldr_modulo |
Javaish modulo. This modulo operator returns the value with the sign of the dividend rather than the divisor like Python does: |
Function | extract_operands |
Extract operands from a decimal, a float or an int, according to `CLDR rules`_. |
Function | ident_node |
Undocumented |
Function | in_range_list |
Integer range list test. This is the callback for the "in" operator of the UTS #35 pluralization rule language: |
Function | negate |
Undocumented |
Function | range_list_node |
Undocumented |
Function | skip_token |
Undocumented |
Function | test_next_token |
Undocumented |
Function | tokenize_rule |
Undocumented |
Function | value_node |
Undocumented |
Function | within_range_list |
Float range test. This is the callback for the "within" operator of the UTS #35 pluralization rule language: |
Constant | _RULES |
Undocumented |
Constant | _VARS |
Undocumented |
Variable | _fallback_tag |
Undocumented |
Variable | _plural_tags |
Undocumented |
The plural rule as gettext expression. The gettext expression is technically limited to integers and returns indices rather than tags.
>>> to_gettext({'one': 'n is 1', 'two': 'n is 2'}) 'nplurals=3; plural=((n == 1) ? 0 : (n == 2) ? 1 : 2)'
Parameters | |
rule | the rules as list or dict, or a PluralRule object |
Raises | |
RuleError | if the expression is malformed |
Convert a list/dict of rules or a PluralRule
object into a JavaScript
function. This function depends on no external library:
>>> to_javascript({'one': 'n is 1'}) "(function(n) { return (n == 1) ? 'one' : 'other'; })"
Implementation detail: The function generated will probably evaluate expressions involved into range operations multiple times. This has the advantage that external helper functions are not required and is not a big performance hit for these simple calculations.
Parameters | |
rule | the rules as list or dict, or a PluralRule object |
Raises | |
RuleError | if the expression is malformed |
Convert a list/dict of rules or a PluralRule
object into a regular
Python function. This is useful in situations where you need a real
function and don't are about the actual rule object:
>>> func = to_python({'one': 'n is 1', 'few': 'n in 2..4'}) >>> func(1) 'one' >>> func(3) 'few' >>> func = to_python({'one': 'n in 1,11', 'few': 'n in 3..10,13..19'}) >>> func(11) 'one' >>> func(15) 'few'
Parameters | |
rule | the rules as list or dict, or a PluralRule object |
Raises | |
RuleError | if the expression is malformed |
Javaish modulo. This modulo operator returns the value with the sign of the dividend rather than the divisor like Python does:
>>> cldr_modulo(-3, 5) -3 >>> cldr_modulo(-3, -5) -3 >>> cldr_modulo(3, 5) 3
Extract operands from a decimal, a float or an int, according to CLDR rules.
The result is a 6-tuple (n, i, v, w, f, t), where those symbols are as follows:
Symbol | Value |
n | absolute value of the source number (integer and decimals). |
i | integer digits of n. |
v | number of visible fraction digits in n, with trailing zeros. |
w | number of visible fraction digits in n, without trailing zeros. |
f | visible fractional digits in n, with trailing zeros. |
t | visible fractional digits in n, without trailing zeros. |
Parameters | |
source:int|float|decimal.Decimal | A real number |
Returns | |
tuple[decimal.Decimal, int, int, int, int, int] | A n-i-v-w-f-t tuple |
Integer range list test. This is the callback for the "in" operator of the UTS #35 pluralization rule language:
>>> in_range_list(1, [(1, 3)]) True >>> in_range_list(3, [(1, 3)]) True >>> in_range_list(3, [(1, 3), (5, 8)]) True >>> in_range_list(1.2, [(1, 4)]) False >>> in_range_list(10, [(1, 4)]) False >>> in_range_list(10, [(1, 4), (6, 8)]) False
Float range test. This is the callback for the "within" operator of the UTS #35 pluralization rule language:
>>> within_range_list(1, [(1, 3)]) True >>> within_range_list(1.0, [(1, 3)]) True >>> within_range_list(1.2, [(1, 4)]) True >>> within_range_list(8.8, [(1, 4), (7, 15)]) True >>> within_range_list(10, [(1, 4)]) False >>> within_range_list(10.5, [(1, 4), (20, 30)]) False
Undocumented
Value |
|