Changes

MyWikiBiz, Author Your Legacy — Tuesday May 14, 2024
Jump to navigationJump to search
21,849 bytes added ,  08:01, 16 July 2021
Pywikibot 6.4.0
This module provides a number-formatting function. This function can be used from #invoke or from other Lua modules.

This module is used by {{tl|FXConvert}}

== Use from other Lua modules ==
To use the module from normal wiki pages, no special preparation is needed. If you are using the module from another Lua module, first you need to load it, like this:

<syntaxhighlight lang="lua">
local mf = require('Module:Wordify')
</syntaxhighlight>

(The <code>mf</code> variable stands for '''M'''odule wordi'''F'''y; you can choose something more descriptive if you prefer.)

Most functions in the module have a version for Lua and a version for #invoke. It is possible to use the #invoke functions from other Lua modules, but using the Lua functions has the advantage that you do not need to access a Lua [[mw:Extension:Scribunto/Lua reference manual#Frame object|frame object]]. Lua functions are preceded by <code>_</code>, whereas #invoke functions are not.

== main ==

&#123;{#invoke:Wordify|main|''x''|''prec=''|''lk=''|''numsys=''|''lang=''|''script=''|''state=''|''case=''|''class=''|''possessed=''|''person=''|''plural=''|''exclude=''|''simplify=''}}

<syntaxhighlight lang="lua">
mf._wordify(x, prec, lk, numsys, lang, script, state, case, class, possessed, person, plural, exclude, simplify)
</syntaxhighlight>

Simplify a number x using a word denoting an order of magnitude.

* <code>numsys</code> can be <code>short</code> (short scale, the default), <code>ind </code>(Indian scale), or <code>long</code> (long scale)
* <code>prec</code> is the digits of precision to output
* if <code>lk</code> is true, the words will be linked to an explanation
* <code>lang</code> allows to specify the locale for formatting and wording
* <code>script</code> allows to specify a script if the language supports more than one
* <code>state</code> can be indefinite, definite, or construct
* <code>case</code> allows to specify a grammatical case
* <code>class</code> allows to specify a noun class
* if <code>possessed</code> is true, it designates that there are multiple possessed objects
* <code>person</code> designates the person (<code>1</code>, <code>2</code>, <code>3</code>)
* if <code>plural</code> is true, it indicates that the person is plural
* <code>exclude</code> indicates the persons to exclude (<code>2</code>, <code>3</code>)
* if <code>simplify</code> is true, only the order of magnitude words will be output

=== Notes ===

*The function is currently not applying declensions beyond the base case for some of the supported languages.
*If a case that does not exist in a certain language is requested, the function may give an error or just return the base result.
*The function understands case arguments that are not a word in a single language, like "akkusative".

== Examples ==
=== Scales, links, scripts, capitalization ===
*<code><nowiki>{{#invoke:Wordify|main|9876000}}</nowiki></code> displays {{#invoke:Wordify|main|9876000}}.
*<code><nowiki>{{#invoke:Wordify|main|9876000|lk=yes|prec=2}}</nowiki></code> displays {{#invoke:Wordify|main|9876000|lk=yes|prec=2}}.
*<code><nowiki>{{#invoke:Wordify|main|9876000|numsys=ind}}</nowiki></code> displays {{#invoke:Wordify|main|9876000|numsys=ind}}.
*<code><nowiki>{{#invoke:Wordify|main|9876000|numsys=ind|lk=yes|prec=2}}</nowiki></code> displays {{#invoke:Wordify|main|9876000|numsys=ind|lk=yes|prec=2}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|numsys=long}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|numsys=long}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|numsys=ind}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|numsys=ind}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|numsys=ind}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|numsys=ind}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=de}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=de}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=ko}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=ko}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=ko|script=hanja}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=ko|script=hanja}}.

=== State, case ===
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=sv}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=sv}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=sv|state=d}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=sv|state=d}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=sv|case=g}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=sv|case=g}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=sv|state=d|case=g}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=sv|state=d|case=g}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=sv}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=sv}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=sv|state=d}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=sv|state=d}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=sv|case=g}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=sv|case=g}}.
*<code><nowiki>{{#invoke:Wordify|main|100000000000000|lang=sv|state=d|case=g}}</nowiki></code> displays {{#invoke:Wordify|main|100000000000000|lang=sv|state=d|case=g}}.

=== Simplification ===
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=fr|lk=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=fr|lk=yes}}.

*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=fi}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=fi}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=fi|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=fi|simplify=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000000|lang=fi}}</nowiki></code> displays {{#invoke:Wordify|main|10000000000|lang=fi}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000000|lang=fi|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|10000000000|lang=fi|simplify=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=fi}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=fi}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000000|lang=fi|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000000|lang=fi|simplify=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000000000|lang=fi}}</nowiki></code> displays {{#invoke:Wordify|main|10000000000000|lang=fi}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000000000|lang=fi|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|10000000000000|lang=fi|simplify=yes}}.

=== Noun class agreement ===
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=la}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=la}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=la|class=n}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=la|class=n}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=la|class=m}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=la|class=m}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=la|class=f}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=la|class=f}}.

=== Slavic numerals ===
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|3000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|3000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|4000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|4000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|5000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|5000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|10000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|3000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|3000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|4000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|4000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|5000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|5000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000000|lang=sl}}</nowiki></code> displays {{#invoke:Wordify|main|10000000000|lang=sl}}.
*<code><nowiki>{{#invoke:Wordify|main|2500000|lang=sl|prec=1}}</nowiki></code> displays {{#invoke:Wordify|main|2500000|lang=sl|prec=1}}.
*<code><nowiki>{{#invoke:Wordify|main|2500000000|lang=sl|prec=1}}</nowiki></code> displays {{#invoke:Wordify|main|2500000000|lang=sl|prec=1}}.

*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|3000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|3000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|4000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|4000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|5000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|5000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|11000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|11000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|12000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|12000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|13000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|13000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|14000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|14000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|15000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|15000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|21000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|21000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|22000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|22000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|23000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|23000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|24000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|24000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|25000000|lang=pl}}</nowiki></code> displays {{#invoke:Wordify|main|25000000|lang=pl}}.
*<code><nowiki>{{#invoke:Wordify|main|2500000|lang=pl|prec=1}}</nowiki></code> displays {{#invoke:Wordify|main|2500000|lang=pl|prec=1}}.
*<code><nowiki>{{#invoke:Wordify|main|2500000000|lang=pl|prec=1}}</nowiki></code> displays {{#invoke:Wordify|main|2500000000|lang=pl|prec=1}}.

=== Possessive cases ===
*<code><nowiki>{{#invoke:Wordify|main|1000000|case=possessive}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|case=possessive}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000|case=possessive}}</nowiki></code> displays {{#invoke:Wordify|main|10000000|case=possessive}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|case=possessive|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|case=possessive|simplify=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|10000000|case=possessive|simplify=yes}}</nowiki></code> displays {{#invoke:Wordify|main|10000000|case=possessive|simplify=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|case=possessi}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|case=possessi}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|case=possessi}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|case=possessi}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|case=possessi}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|case=possessi}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|case=possessi}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|case=possessi}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|case=possessi|possessed=true}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|case=possessi|possessed=true}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|case=possessi|possessed=true}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|case=possessi|possessed=true}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|case=possessi|possessed=true}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|case=possessi|possessed=true}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|case=possessi|possessed=true}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|case=possessi|possessed=true}}.

=== Possessive forms ===
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=1}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=1}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=1}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=1}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=1}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=1}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=1}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|person=1}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=2}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=2}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=2}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=2}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=2}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=2}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=2}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|person=2}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=3}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=3}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=3}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=3}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=3}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=3}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=3}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|person=3}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=1|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=1|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=1|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=1|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=1|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=1|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=1|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=1|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=2|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=2|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=2|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=2|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=2|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=2|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=2|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|person=2|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000|lang=hu|person=3|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000|lang=hu|person=3|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000|lang=hu|person=3|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000|lang=hu|person=3|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|1000000000|lang=hu|person=3|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|1000000000|lang=hu|person=3|plural=yes}}.
*<code><nowiki>{{#invoke:Wordify|main|2000000000|lang=hu|person=3|plural=yes}}</nowiki></code> displays {{#invoke:Wordify|main|2000000000|lang=hu|person=3|plural=yes}}.

== Support for additional languages ==
New languages can be added by creating a corresponding object.

The <code>possessive</code> field conforms to the following grammar:

<syntaxhighlight lang="bnf">
<possessive-rules> ::= "{}" | <string> | "{" <possessor-cases> "}" | <possessive-function>
<possessor-cases> ::= <singular-possessors> | <singular-posessors> "," <plural-posessors>
<singular-possessors> ::= "{" <singular-possessor-cases> "}"
<singular-posessor-cases> := <simple-posessor-case> | <simple-possessor-case> "," <singular-possessor-cases>
<simple-posessor-case> := "{ {" <singular-possessed> "," <plural-possessed> "} }" | <possessor-function>
<singular-possessed> ::= <possessed>
<plural-possessed> ::= <possessed>
<possessed> ::= <string> | "{" <possessed-cases> "}" | <possessed-function>
<plural-posessors> ::= "{" <plural-possessor-cases> "}"
<plural-possessor-cases> := <plural-posessor-case> | <plural-possessor-case> "," <plural-possessor-cases>
<plural-possessor-case> ::= "{" <clusivity-cases> "}"
<clusivity-cases> ::= <simple-possessor-case> | <simple-possessor-case> "," <clusivity-cases>
</syntaxhighlight>

The <code>inflection</code> field conforms to the following grammar:

<syntaxhighlight lang="bnf">
<inflection-rules> ::= "{}" | "{" <stem-statement> "}" | "{" <number-cases> "}" | "{" <stem-statement> "," <number-cases> "}"
<stem-statement> ::= "stem" "=" <stem-function>
<number-cases> ::= <number-case> | <number-case> "," <number-cases>
<number-case> ::= <number-index> <number-rule>
<number-index> ::= "" | "[" <integer> "]" "=" | | "[" "fraction" "]" "="
<number-rule> ::= <string> | <ending-cases-list> | <state-cases> | <number-function>
<ending-cases-list> ::= "{" <ending-cases> "}"
<ending-cases> ::= <ending-case> | <ending-case> "," <ending-cases>
<ending-case> ::= <string-index> "=" <ending-rule>
<ending-rule> ::= <string> | <class-cases-list> | <state-cases> | <ending-function>
<class-cases-list> ::= "{" <class-cases> "}"
<class-cases> ::= <class-case> | <class-case> "," <class-cases>
<class-case> ::= <string-index> "=" <class-rule>
<class-rule> ::= <string> | <grammatical-cases-list> | <state-cases> | <class-function>
<state-cases> ::= "{" <indefinite-rule> "}" | "{" <indefinite-rule> "," <definite-rule> "}" | "{" <indefinite-rule> "," <definite-rule> "," <construct-rule> "}"
<indefinite-rule> ::= <state-rule>
<definite-rule> ::= <state-rule>
<construct-rule> ::= <state-rule>
<state-rule> ::= <string> | <grammatical-cases-list> | <state-function>
<grammatical-cases-list> ::= "{" <grammatical-cases> "}"
<grammatical-cases> ::= <grammatical-case> | <grammatical-case> "," <grammatical-cases>
<grammatical-case> ::= <string-index> "=" <grammatical-rule>
<grammatical-rule> ::= <string> | <simple-class-cases-list> | "{" <possessed-cases> "}" | <grammatical-function>
<simple-class-cases-list> ::= "{" <simple-class-cases> "}"
<simple-class-cases> ::= <simple-class-case> | <simple-class-case> "," <simple-class-cases>
<simple-class-case> ::= <string-index> "=" <simple-class-rule>
<simple-class-rule> ::= <string> | <simple-ending-cases-list> | <class-function>
<simple-ending-cases-list> ::= "{" <simple-ending-cases> "}"
<simple-ending-cases> ::= <simple-ending-case> | <simple-ending-case> "," <simple-ending-cases>
<simple-ending-case> ::= <string-index> "=" <simple-ending-rule>
<simple-ending-rule> ::= <string> | <ending-function>
</syntaxhighlight>

Common elements:

<syntaxhighlight lang="bnf">
<possessed-cases> ::= <possessed-case> | <possessed-case> "," <possessed-cases>
<possessed-case> ::= <string-index> "=" <possessed-rule>
<string-index> ::= <identifier> | "[" <string> "]"
<possessed-rule> ::= <string> | <possessed-function>
</syntaxhighlight>

The elements <identifier>, <string>, and <integer> are as defined for the Lua language and those ending in <code>-function</code> are Lua functions with signatures that can be found in the code.

A certain language might not be supported by the current algorithm, in this case it should be extended for the new kind.

==See also==
* [[Long and short scales]]
* [[Indian numbering system]]
* [[Orders of magnitude (numbers)]]
* [[Writing system]]
* [[Clusivity]]
* [[Grammatical gender]]
* [[Definiteness]]
* [[Grammatical case]]
* [[Possessive]]
* [[Wiktionary]]
* [[Backus–Naur form]]
{{Language grammars}}
{{Math templates}}

<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox | |
<!-- Categories below this line, please; interwikis at Wikidata -->

}}</includeonly>

Navigation menu