[Tustep-Liste] Einfügen von tags - Erläuterung

Kuno Schälkle schaelkle at zdv.uni-tuebingen.de
Fr Jun 19 10:36:45 CEST 2009


Liebe Frau Jockers,

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<eintrag> soll vor <ll> beginnen und nach dem letzten </bed> bzw. vor
dem nächsten <ll> aufhören.
<gram> beginnt nach </ae> und endet nach dem letzten </sch>; es können
aber mehrere Paare <w> <sch> auftreten.
<lv> beginnt nach </gram> bzw. vor <koi type="lv">, falls vorhanden,
ansonsten vor <beleg>. </lv> endet nach dem letzten </beleg>.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

unten folgt ein Makro, bei dem ich mich auf
die obigen Aufgaben beschränkt habe, da Sie
mit den anderen Ergänzungen ja keine Probleme
haben.

Herzliche Grüße
Kuno Schaelkle

------------------------------------------------------

$$! quelle, ziel
$$-
$$ MODE TUSCRIPT

SET status = CHECK (quelle, READ, TUSTEP)
ERROR/STOP "QUELLE: ", status

SET status = CHECK (ziel, WRITE, TUSTEP)
ERROR/STOP "ZIEL: ", status

SET status = UNIQUE (quelle, ziel)
ERROR/STOP "Datei ", status, " ist mehrfach angegeben"

SET koi_type_lv = SET_ATTRIBUTE ("koi", "type", "lv")

COMPILE

ACCESS q: READ/STREAM/RECORDS "{quelle}" ...
          qsn.qzn/qun, aken + text + eken, anz, tags
ACCESS z: WRITE/ERASE/STREAM   "{ziel}"  ...
          zsn.zzn/zun, aken + text + eken

SET eintrag = gram = lv = "nicht offen"

LOOP/999999
   READ/NEXT/EXIT q

   - vor erstem <ll>: <eintrag> einfügen
   - vor weiteren <ll>: </eintrag><eintrag> einfügen

   IF (aken.EQ."<ll>")  THEN
      IF (eintrag.EQ."nicht offen")  THEN
         WRITE/NEXT/BREAK z "<eintrag>"
         SET eintrag = "offen"
      ELSE
         WRITE/NEXT/BREAK z "</eintrag><eintrag>"
      ENDIF
   ENDIF

   - vor erstem <w>: <gram> einfügen

   IF (aken.EQ."<w>" .AND. gram.EQ."nicht offen")  THEN
      WRITE/NEXT/BREAK z "<gram>"
      SET gram = "offen"
   ENDIF

   - nach letztem <w>-<schw>-Paar: </gram> einfügen

   IF (gram.EQ."offen" .AND. tags.NM.":*<<w>>*:*<<sch>>*:")  THEN
      WRITE/NEXT/BREAK z "</gram>"
      SET gram = "nicht offen"
   ENDIF

   - vor <koi type="lv"> bzw. vor <bel>: <lv> einfügen

   IF (aken.EQ.koi_type_lv,"<bel>" .AND. lv.EQ."nicht offen")  THEN
      WRITE/NEXT/BREAK z "<lv>"
      SET lv = "offen"
   ENDIF

   - nach letztem </bel>: </lv> einfügen

   IF (lv.EQ."offen" .AND. tags.NM.":*<<koi>>*:*<<bel>>*:")  THEN
      WRITE/NEXT/BREAK z "</lv>"
      SET lv = "nicht offen"
   ENDIF

   - zum Schluss ggf. </eintrag> einfügen

   IF (eken.EQ."</section>" .AND. eintrag.EQ."offen")  THEN
      WRITE/NEXT/BREAK z "</eintrag>"
      SET eintrag = "nicht offen"
   ENDIF

   IF (SOR)  WRITE/BREAK z
   WRITE z
ENDLOOP

ENDACCESS/PRINT q
ENDACCESS/PRINT z

ENDCOMPILE



Mehr Informationen über die Mailingliste Tustep-Liste