IF-Forum

» IF-Forum - Autorencafé - Schreiben! - I6/I7: Artikel vor [topic]-Token überlesen
AntwortenNeues ThemaNeue Umfrage

I6/I7: Artikel vor [topic]-Token überlesen

Geschrieben um 20:46 am 12.08.2010 | Zitat | Editieren | Löschen
ChristianB
Avatar
Mitglied
Prof Gumby
Beiträge: 569
<td valign="top"><div class="post"><p>In deform wird das erste Wort eines topics überlesen, wenn es ein Artikel ist.</p> <p>In ParseToken() heißt es für ein TOPIC TOKEN:</p> <p>&#8220;`&#8230;</p> <p>if &#40;consult_words > 1&#41; &#123;</p> <p>    Descriptors&#40;&#41;;</p> <p>    if &#40;wn > consult<em>from &amp;&amp; wn &lt; consult</em>from + consult_words&#41;</p> <p>        parsed_number=NextWord&#40;&#41;;</p> <p>&#125;</p> <p>&#8230;&#8220;`</p> <p>Diese Methode reicht für Inform 7 leider nicht aus, denn ein Topic (in I7 heißt das [text]) wird in einer eigens für das Topic erzeugten Routine geprüft:</p> <p>&#8220;`&#91; Consult<em>Grammar</em>290</p> <p>    range_from  ! call parameter&#58; word number of snippet start</p> <p>    range_words  ! call parameter&#58; snippet length</p> <p>    original_wn  ! first word of text parsed</p> <p>    group_wn  ! first word matched against A/B/C/&#8230; disjunction</p> <p>    w  ! for use by individual grammar lines</p> <p>    rv  ! for use by individual grammar lines</p> <p>    ;</p> <p>    wn = range<em>from; original</em>wn = wn; rv = GPR_PREPOSITION;</p> <p>        group_wn = wn;</p> <p>        .group<em>632</em>1<em>1; wn = group</em>wn;</p> <p>        if &#40;NextWordStopped&#40;&#41; ~= &#8216;tresen&#8217;&#41; jump group<em>632</em>1_2;</p> <p>        jump group<em>632</em>1_end;</p> <p>        .group<em>632</em>1<em>2; wn = group</em>wn;</p> <p>        if &#40;NextWordStopped&#40;&#41; ~= &#8216;bar&#8217;&#41; jump Fail_1;</p> <p>        .group<em>632</em>1_end;</p> <p>        if &#40;&#40;range<em>words==0&#41; || &#40;wn-range</em>from==range_words&#41;&#41; return rv;</p> <p>        .Fail<em>1; rv = GPR</em>PREPOSITION; wn = original_wn;</p> <p>    return GPR_FAIL;</p> <p>&#93;;&#8220;`</p> <p>Die Routine wird aufgerufen mit consult<em>from und consult</em>words als ersten bzw. zweiten Parameter.</p> <p>Ich habe schon allerhand probiert, consult<em>from und consult</em>words nach dem Überlesen der Deskriptoren (in ParseToken) anzupassen, aber es funktioniert einfach nicht. Wie kann man prüfen, ob und wieviele Deskriptoren überlesen wurden? Und wie muss ich dann consult<em>from und consult</em>words nachjustieren? Oder denke ich in eine völlig falsche Richtung?</p> <p>Wenn einer helfen kann, dann bestimmt Martin ;-)</p> </div></td>
Geschrieben um 12:12 am 13.08.2010 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Retired Gumby
Beiträge: 707
<td valign="top"><div class="post"><p><strong>ChristianB:</strong></p> <blockquote> <p>Wenn einer helfen kann, dann bestimmt Martin ;-)</p> </blockquote> <p>Na gut, dann will ich mir mal den Hut von I6-Repair-Man aufsetzen. (Natürlich muss ich dazu erst mal den Staub runterkopfen.)</p> <p>Der Code-Abschnitt, den Du da gepostet hast, wird nur aufgerufen, wenn eine der Aktionen Ask, Answer oder Tell ist. Für allgemeine Topic-Token werden die Deskriptoren also auch in I6-deform nicht überlesen.</p> <p>Ich habe jetzt einfach das Überlesen der Deskriptoren an den Anfang gestellt, bevor der Wortmarker <strong>wn</strong> gesetzt wird. Die Topic-Variablen <strong>consult_word</strong> und <strong>consult_from</strong> werden erst danach belegt, wenn also <strong>wn</strong> eventuell schon durch das Überlesen von Artikeln weitergerückt ist:</p> <p>&#8220;`</p> <p>5720&#58;          TOPIC_TOKEN&#58;</p> <p>5721&#58;            Descriptors&#40;&#41;;</p> <p>5722&#58;            consult_from = wn;</p> <p>&#8220;`</p> <p>Das klappt bei mir, macht aber das Überlesen später überflüssig. (Da es aber nicht mehr zum Überlesen gibt, macht das nichts.) Dass nun bei jedem Topic die Deskriptoren ignoriert werden, finde ich sogar gut.</p> <p>Ich habe es mit einem einfachen Beispiel, in dem Topics in einem Table abgelegt waren, ähnlich dem sybillinischen Beispiel in <a href="http://inform7.com/learn/man/doc253.html">Kapitel 15.13</a> I7-Manual, getestet.</p> </div></td>
Geschrieben um 01:32 am 14.08.2010 | Zitat | Editieren | Löschen
ChristianB
Avatar
Mitglied
Prof Gumby
Beiträge: 569

Danke, Martin! Das klappt perfekt und macht auch diese Abteilung wieder ein Stück besser.

Ich war zum Schluss der Lösung einigermaßen nahe gekommen, indem ich ein [descriptors]-Token definiert habe, das nichts weiter machte als Descriptors() aufzurufen und das jedem [text]-Token in der Verbendefinition vorangestellt wurde. Damit war am Ende im Grunde das erreicht, was Du vorgeschlagen hast — nur dass es den Umweg von I7 nach I6, dann zurück nach I7 und wieder nach I6 nahm.

Dass mir der direkte Weg nicht einfallen wollte, lag wohl daran, dass ich keinen I6-Repair-Man-Hut habe.

Chapeau und Danke!

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz