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
