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
