Forum moved to if-forum.org
Autor Nachricht
<  I6/I7: Artikel vor [topic]-Token überlesen
ChristianB
BeitragVerfasst am: Do, 12 Aug 2010 - 19:46  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

In deform wird das erste Wort eines topics überlesen, wenn es ein Artikel ist.

In ParseToken() heißt es für ein TOPIC TOKEN:

Code:
...
if (consult_words > 1) {
    Descriptors();
    if (wn > consult_from && wn < consult_from + consult_words)
        parsed_number=NextWord();
}
...


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:

Code:
[ Consult_Grammar_290
    range_from  ! call parameter: word number of snippet start
    range_words  ! call parameter: snippet length
    original_wn  ! first word of text parsed
    group_wn  ! first word matched against A/B/C/... disjunction
    w  ! for use by individual grammar lines
    rv  ! for use by individual grammar lines
    ;
    wn = range_from; original_wn = wn; rv = GPR_PREPOSITION;
        group_wn = wn;
        .group_632_1_1; wn = group_wn;
        if (NextWordStopped() ~= 'tresen') jump group_632_1_2;
        jump group_632_1_end;
        .group_632_1_2; wn = group_wn;
        if (NextWordStopped() ~= 'bar') jump Fail_1;
        .group_632_1_end;
        if ((range_words==0) || (wn-range_from==range_words)) return rv;
        .Fail_1; rv = GPR_PREPOSITION; wn = original_wn;
    return GPR_FAIL;
];


Die Routine wird aufgerufen mit consult_from und consult_words als ersten bzw. zweiten Parameter.

Ich habe schon allerhand probiert, consult_from und consult_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_from und consult_words nachjustieren? Oder denke ich in eine völlig falsche Richtung?

Wenn einer helfen kann, dann bestimmt Martin ;-)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Fr, 13 Aug 2010 - 11:12  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

ChristianB hat folgendes geschrieben:
Wenn einer helfen kann, dann bestimmt Martin ;-)

Na gut, dann will ich mir mal den Hut von I6-Repair-Man aufsetzen. (Natürlich muss ich dazu erst mal den Staub runterkopfen.)

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.

Ich habe jetzt einfach das Überlesen der Deskriptoren an den Anfang gestellt, bevor der Wortmarker wn gesetzt wird. Die Topic-Variablen consult_word und consult_from werden erst danach belegt, wenn also wn eventuell schon durch das Überlesen von Artikeln weitergerückt ist:

Code:

5720:          TOPIC_TOKEN:
5721:            Descriptors();
5722:            consult_from = wn;

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.

Ich habe es mit einem einfachen Beispiel, in dem Topics in einem Table abgelegt waren, ähnlich dem sybillinischen Beispiel in Kapitel 15.13 I7-Manual, getestet.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Sa, 14 Aug 2010 - 0:32  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

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!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05