Konvertierung nach RTF |
Top Previous Next |
Beispiele > Konvertierung eines Atari-Textes > Konvertierung nach RTF
Bis jetzt wurden die Zeichen, die die Atari Textattribute ausmachen: Unterstreichen, Fettdruck und Kursivschrift, ignoriert, da einfache Textdateien solche Attribute nicht enthalten können. Ein Beispiel eines Dokuments, das derartige Attribute enthalten kann, ist eine RTF-Datei, die nach dem Rich Text Format: RTF, aufgebaut ist. Das Projekt
...\Tetra\Beispiele\Atari\Atari2Rtf.ttp
zeigt, wie Atari Texte in das Rich Text Format transformeiert werden können. Die relevanten Teile RTF-Spezifikation werden unmittelbar verwendet, ohne diese Spezifikation im einzelnen zu erklären. Eine gute Einführung ist "RTF Pocket Guide" von Sean M. Burke.
http://www.oreilly.com/catalog/rtfpg/
Dort kann das wichtige erste Kapitel des Buchs als pdf-Datei heruntergeladen werden. Die originale Rich-Text-Spezifikation ist zu finden unter:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec.asp
Gemäß der RTF Spezifikation werden Textteile mit besonderen Attributen in die Klammern "{" und "}" eingeschlossen und an den Anfang des eingeschlossenen Textes wird ein Ausdruck für das Attribut geschrieben:
kursiv: \i fett: \b unterstrichen: \ul
So werden die Token-Aktionen zu:
italic_begin: out << "{\\i "; italic_end: out << "} ";
Im RT-Format werden Sonderzeichen durch ein Backslash gefolgt von einem Apostroph und dem Hexadezimal-Code des Zeichens ausgedrückt: So wird die Token-Aktion z.B. von ae zu:
ae: out << "\\'e4";
Zeilenumbrüche, die im angezeigten Text sichtbar sein sollen, können nicht direkt in eine RTF-Datei geschrieben werden.. Sie müssen durch "\line" oder "\par" kodiert wrden. Deshalb muss ein zusätzliches Token definiert werden, das die Zeilenumbrüche erkennt:
Name: EOL Text: \r?\n Aktion: out << endl << "\\line ";
(Durch endl wird ein Zeilenumbruch in die RTF-Quelle geschrieben, um seine logische Struktur besser sichtbar zu machen. Als Zeilenumbruch angezeigt wird nur "\line")
Das gesamte RTF-Dokument muss in die Klammern "{" und "}" eingeschlossen werden und auf die erste Klammer folgt ein Header, der spezifiziert, um welche RTF-Version es sich handelt, welche Fonts verwendet werden und welche Schriftgröße dargestellt werden soll. Der Anfang eines RTF-Dokuments kann dann z.B. so aussehen:
{\rtf1\ansi\deff0 {\fonttbl{\f0 Courier New;}}\f0\fs20
Um diesen Header zu schreiben soll erstmals die Seite für die Klassenelemente des TextTransformers benutzt werden. Diese Seite dient dazu Variablen und Funktionen zu definieren, die dann überall im Projekt verwendet werden können. Für das Atari-Projekt werden drei Funktionen definiert:
RtfBegin:
out << "{\\rtf1" // RTF, version 1 << "\\ansi" // ANSI character set << "\\deff0 "; // default font #0
RtfFont:
out << "{\\fonttbl" // font table << "{\\f0 Courier New;}" // font #0 << "}"; // font table end out << "\\f0" // use font #0 << "\\fs20"; // font size = 20/2 = 10 points
RtfEnd:
out << "}";
RtfBegin und RtfFont hätten auch zu einer einzelnen Funktion kombiniert werden können oder auch direkt in die Atari-Produktion geschrieben werden können. Die Aufteilung in mehrere Funktionen macht die logische Struktur des Projekts aber übersichtlicher.
Die Atari Produktion ist nun:
{{ RtfBegin(); RtfFont(); }} ( sonderzeichen | textattribut | SKIP {= out << xState.str(); =} )+ {{ RtfEnd(); }}
Nachdem ein Text transformiert wurde, muss er als RTF-Datei gespeichert werden, d.h. der Dateierweiterung muss "rtf" sein. Nun kann die Datei mit einem Textverarbeitungsprogramm geöffnet werden - z.B. Wordpad -, das in der Lage ist, RTF-Dokumente darzustellen. Dort sieht man nun z.B. Benjamin korrekt in Kursiv-Schrift geschrieben:
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |