Konvertierer und neue Datenformate erstellen |
Mir der
Ein neues Format kann mit dem Befehl
(define-format format
(:name format-name)
options)
erzeugt werden. format ist ein Symbol, dass
für das Format steht und format-name
eine Zeichenkette, die in Menüs benutzt werden kann.
Tatsächlich gibt es ein Datenformat meist in mehreren Varianten:
ein Format format-file für Dateien, ein
Format format-document für ganze
Dokumente und ein Format format-snippet
für kurze Zeichenketten, wie z.B. Auswahlen (selections), und
schließlich format-object für die
bevorzugte interne
Der Anwender kann zusätzliche Optionen zur automatischen Erkennung von Formaten mit Hilfe von Datei-Suffixen oder -Inhalten spezifizieren. Z.B. können die erlaubten Suffixe eines Daten-Formats mit der Voreinstellung als erstem durch
(:suffix default-suffix
other-suffix-1 ... other-suffix-n)
angegeben werden. Eine (heuristische) Routine, um festzustellen, ob ein Dokument zu einem bestimmten Format gehört, kann mit
(:recognize predicate)
(:must-recognize predicate)
erreicht werden. Im ersten Fall hat die Suffix-Erkennung Vorrang vor der heuristischen Erkennung. Im zweiten Fall ist nur die heuristische Erkennung durch das Prädikat, predicate, maßgeblich.
Neue Konvertierer können mit
(converter from to
options)
erzeugt werden. Der eigentliche Konvertierer wird durch eine der folgenden Optionen spezifiziert:
(:function converter)
(:function-with-options
converter-with-options)
(:shell prog prog-pre-args from
progs-infix-args to prog-post-args)
Im ersten Fall ist der Konvertierer converter eine Routine die ein Objekt im Daten-Format from übernimmt und ein Objekt im Daten-Format to zurückgibt. Im zweiten Fall übernimmt der converter eine assoziative Liste als zweites Argument und Optionen für den Konvertierer. Im letzten Fall wird ein shell-Befehl angegeben, der die Konvertierung zwischen den beiden Datei-Formaten durchführt. Der Konvertierer wird dann und nur dann aktiviert, wenn das Programm prog gefunden wird. Hilfsdateien können automatisch erzeugt und wieder gelöscht werden.
TeXmacs berechnet automatisch die transitive „Closure” aller Konvertierer, indem einen „kürzesten Pfad Algorithmus” benutzt. Mit anderen Worten, wenn es einen Konvertierer für x nach y gibt und einen Konvertierer von y nach z, dann hat man auch einen von x nach z. Es für jede Konvertierung kann eine „Strafe/Abstand zwischen den Formaten“ mit
(:penalty floating-point-distance)
angeben werden, um so Hinweise zum automatischen Finden eines optimalen Weges für die Konvertierung zu geben.
Weitere Optionen für Konvertierer sind:
(:require cond)
(:option option default-value)
Die erste Option spezifiziert eine Bedingung, die erfüllt sein muss, damit der Konvertierer benutzt werden kann. Diese Option sollte als erste oder zweite Option spezifiziert werden und immer nach der :penalty Option. Die :option Option spezifiziert eine Option für den Konvertierer, mit einer Voreinstellung. Diese Option wird automatisch an alle Konvertierer mit Optionen weitergegeben.