QueryArticle()
==============

FUNKTION
--------
::

     varargs string QueryArticle(int casus, int dem, int force);

DEFINIERT IN
------------
::

     /std/thing/language.c

ARGUMENTE
---------
::

     casus
          Der Fall, in dem der Artikel gewuenscht wird.
          (Konstanten aus /sys/thing/language.h: WER, WEM, WESSEN, WEN.)

     dem
          Wird ein bestimmter oder ein unbestimmter Artikel verlangt?
             + dem = 0: Unbestimmter Artikel!
             + dem = 1: Bestimmter Artikel!
             + dem = 2: Finde selbst heraus, welcher Artikel passt!

     force
          Falls ungleich Null, so wird auf jeden Fall ein Artikel
          zurueckgegeben, trotz P_ARTICLE == 0.

BESCHREIBUNG
------------
::

     Diese Funktion gibt einen zum Geschlecht des Objektes passenden Artikel
     zurueck, der in den passenden Fall dekliniert wird.

     Das Herausfinden des passenden Artikels bei 'dem' = 2 bezieht sich auf
     Situationen, in denen mehrere gleichnamige Objekte im selben Environment
     sind. Man 'nimmt' dann z.B. nicht "den Stamm" sondern "einen Stamm".

     Ist P_ARTICLE = 0, so wird ein Leerstring zurueckgegeben, es sei denn,
     man uebergibt in dem Argument 'force' einen Wert ungleich Null.

BEMERKUNGEN
-----------
::

     Achtung: bei gueltigem Artikel wird ein Leerzeichen angehaengt!

     Name()/name() nutzen bereits QueryArticle(), wenn P_ARTICLE gesetzt
     ist. Deshalb muss man sich "Eines Orks" nicht selbst aus dem
     QueryArticle() und dem Namen zusammenbasteln, wenn mehrere Orks
     im Raum herumstehen und man eine Nachricht wie:
       "Du haust den Ork." und folgend
       "[Des|Eines] Orks Nase schwillt an."
     haben moechte:
       "Du haust "+ork->name(WEN, 1)+". "
       ork->Name(WESSEN, 2)+" Nase schwillt an."

RUeCKGABEWERT
-------------
::

     * gewuenschter Artikel als String plus Leerzeichen (!) ODER
     * Leerstring

BEISPIELE
---------
::

     // "X haut Y auf die Nase. [Der|Die|Das] ist nicht beeindruckt."
     // Man will:
     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
     // * nur den bestimmten Artikel
     send_room(this_object(),
       pl1->Name(WER)+" haut "+pl2->name(WEM)+" auf die Nase. "+
       capitalize(pl2->QueryArticle(WER, 1, 1))+"ist nicht beeindruckt.",
       MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));

     // "X gibt Dir Y. [Er|Sie|Es] prueft [den|die|das] ..."
     // Man will:
     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
     // * nur den bestimmten Artikel
     send_room(this_object(),
       pl1->Name(WER)+" gibt "+pl2->name(WEM)+" "+obj->name(WER)+". "+
       capitalize(pl2->QueryPronoun(WER))+" prueft "+
       ob->QueryArticle(WEN, 1, 1)+"...",
       MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));

     // "Dir faellt X auf den Kopf. Du siehst [die|den|das|eine|einen|eines "
     // "auf dem Boden liegen. [Sie|Er|Es] sieht blutig aus. Aua. Ist das "
     // "von dir?"
     // Man will:
     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
     // * bestimmte/unbestimmte Artikel, wenn bereits gleiche Gegenstaende
     //   (zB Kokosnuesse) auf dem Boden liegen ...
     ob->move(environment(), M_PUT); // vorher machen!
     pl->ReceiveMsg(
       "Dir faellt "+ob->name(WER, 0)+" auf den Kopf. Du siehst "+
       ob->QueryArticle(WEN, 2, 1)+" auf dem Boden liegen. "+
       capitalize(ob->QueryPronoun(WER))+" sieht blutig ...

SIEHE AUCH
----------
::

     Aehnlich:  SuggestArticle(), query_c_article(), query_g_suffix()
     Sonstiges: QueryOwn(), QueryDu(),
                QueryPronoun(), QueryPossPronoun()
                DeclAdj()
                name()

9. Jun 2016, Gloinson

