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
Mitglied
Retired Gumby
Beiträge: 1062

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

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



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:

```[ 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 ;-)
Geschrieben um 12:12 am 13.08.2010 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

ChristianB:

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:


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.

Geschrieben um 01:32 am 14.08.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

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