Die Grammatik-Funktionen rufen bei der Deklination des Namens eines
Objektes in dem Objekt diese Funktion auf.
Ist der Rueckgabewert ungleich 0, so wird dieser Wert als deklinierte Form
des Namens verwendet; ist der Rueckgabewert 0, so wird auf herkoemmlichem
Wege versucht, den Namen zu deklinieren.
Diese Funktion hat Vorrang vor den Einzelfall-Funktionen query_genitiv(),
query_dativ und query_akkusativ.
Die Defines fuer fall stehen in /sys/deklin.h (sind 1-4 fuer
Nominativ-Akkusativ), das Objekt interessent ist das Objekt, welches die
Grammatikfunktion aufgerufen hat, die den Namen dekliniert haben will.
flags gibt an, in welchem Kontext der Name verwendet werden soll:
DEKL_BESTIMMT Dem Namen wird ein bestimmter Artikel vorangestellt
DEKL_UNBESTIMMT Dem Namen wird ein unbestimmter Artikel vorangestellt
DEKL_BLANK Dem Namen wird kein Artikel vorangestellt
Obige Defines sind keine Bitflags, d.h. eine Abfrage sollte aehnlich wie
(flags&DEKL_ART_MASK)==DEKL_BESTIMMT aussehen.
Diese Funktion ist fuer Problemfaelle der Deklination gedacht; im
Allgemeinen duerften die Einzelfall-Funktionen ausreichen.
Bei V-Items mit einer Closure als Eintrag fuer "dekliniert" wird als
1. Parameter das V-Item selber uebergeben und danach die Parameter
wie bei query_dekliniert.
BEISPIELE:
string query_dekliniert(int fall, object interessent, int flags)
{
return
({ "Atlas",
"Atlasses",
"Atlasse",
"Atlas",
}) [fall-1];
}
// Fuer adjektivaehnliche Namen (z.B. Reisender) kann man auf
// Grammatikfunktionen zurueckgreifen:
// (DEKL_2_ADJ_ART uebernimmt hierbei die Umrechung des Flags in den
// 2. Parameter von query_deklin. Es entspricht einem ART_NUR_ADJEKTIV
// mit ART_DER, ART_EIN bzw. ART_BLANK.)
string query_dekliniert(int fall, object interessent, int flags)
{
return query_deklin(
([
"adjektiv": ({"Reisend"}),
"gender":"maennlich"
]), DEKL_2_ADJ_ART(flags), fall);
}