
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
