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 zB 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_NOCHECK); // 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

