Dieses HOWTO zeigt, wie man 'Externe Linguistik' in StarOffice unter Linux und Windows realisieren kann. Am Beispiel der Linux-Rechtschreibprüfung ispell wird gezeigt, wie ein Addin programmiert und unter StarOffice eingebunden wird. Das Addin ist eine Shared Library (DLL), die von StarOffice zur Laufzeit nachgeladen werden kann und zusätzliche Funktionen bereitstellt.
Voraussetzung:
Man
benötigt das entsprechende Addin und die ispell-Wörterbücher
der Zielsprache(n). Die Installation des ispell-Programms ist für
StarOffice nicht nötig. Das Addin besitzt alle nötigen
Fähigkeiten; gebraucht werden nur die Wörterbücher.
Die Voraussetzungen zur Compilierung usw. sind im Anhang
beschrieben.
Beschreibung:
Ab
sofort stehen in StarOffice (SO) sämtliche ispell-Wörterbücher
einschließlich der privaten ispell-Wortlisten zur Verfügung.
Die Verwaltung der privaten Wortlisten wird ebenfalls von StarOffice
übernommen.
Das ist von großem Vorteil, weil man
jetzt nicht mehr verschiedene Wörterbücher und Wortlisten
für SO und den Rest der Linux-Welt anlegen und warten muss,
sondern eine einheitliche Rechtschreibprüfung besitzt. Private
Wörterbücher, die man z.B. im Emacs erzeugt hat, werden
nun auch von SO erkannt und umgekehrt.
Ein weiterer Vorteil
ist, dass man sich nun »richtige« Wörterbücher
(nicht nur stupide Wortlisten) mit den ispell-Tools selbst
herstellen kann. Man ist nicht mehr von irgendwelchen Lieferanten
abhängig. So gab es z.B. für die SO-Versionen 5.0 und 5.1
keine Prüfung für die neue deutsche Rechtschreibung - von
Fachwörterbüchern ganz zu schweigen (später wird man
vielleicht die alte Rechtschreibung vermissen). Das ändert sich
von nun an: Für das Addin-Paket
gibt es die neue deutsche Rechtschreibung und eine Interimsversion
mit den neuen und alten Regeln (SO 5.2 kann wahlweise auf eines von
beiden eingestellt werden).
Neu in die privaten Wortlisten
aufgenommene Wörter werden jeweils nach Sprachen und Benutzern
getrennt in eigenen Dateien verwaltet. Da es sich hierbei um
einfache Textdateien handelt, ist eine Manipulation mit jedem Editor
möglich. Umfangreiche Wortlisten lassen sich später auch
den Wörterbüchern hinzufügen.
Windows:
Unter
Windows liegen die privaten Wortlisten im gleichen Verzeichnis, wie
die ispell-Wörterbücher: C:\ispell . Die
StarOffice-Version 5.2 hat allerdings einen Fehler und kann keine
neuen Wörter aufnehmen oder genauer: SO stürzt nach einer
solchen Aktion ab :-)
Installation:
Die
Integration der Rechtschreibprüfung ispell in StarOffice
ist recht einfach.
Linux:
Man erzeugt ein
Unterverzeichnis ~/Office5?/wordbook/addin bzw.
~/office52/user/wordbook/german/addin (falls dieses noch nicht
vorhanden sein sollte) und kopiert das Addin libspell.so
hinein - fertig. Die StarOffice-Hilfe gibt unter dem Stichwort
'Linguistik' genaue Auskunft über weitere mögliche
Verzeichnisse.
Die ispell-Wörterbücher werden wie
üblich im Verzeichnis /usr/lib/ispell erwartet.
Zusätzliche Installationsoptionen
sind weiter unten beschrieben.
Windows:
Man erzeugt ein
Unterverzeichnis ?:\Office5?\wordbook\addin bzw.
?:\Office52\share\wordbook\german\addin (falls dieses noch
nicht vorhanden sein sollte) und kopiert das Addin ispell.dll
hinein - fertig. Die StarOffice-Hilfe gibt unter dem Stichwort
'Linguistik' genaue Auskunft über weitere mögliche
Verzeichnisse.
Die ispell-Wörterbücher werden im
Verzeichnis C:\ispell erwartet. Zusätzliche
Installationsoptionen
sind weiter unten beschrieben.
Jetzt muss man nur noch ein
paar Einstellungen vornehmen.
Konfiguration:
Es wird
im Menü unter Extras |
Optionen...->Allgemein->Externe_Linguistik eine
Menütafel: Externe Linguistik
aufgerufen.
Hier kann das Addin aktiviert und deaktiviert
werden.
Zusätzlich lässt sich einstellen, ob die
Rechtschreibprüfung zuerst durch das Standardmodul von
StarOffice oder nur durch das Addin erfolgen soll.
Wenn man das
Feld markiert, wird jedes Wort zunächst in der
Standard-Linguistik von StarOffice überprüft, und nur hier
unbekannte Wörter werden an das Addin weitergereicht.
Unter Windows ist dort der Name 'SO-Linguistik'
eingetragen.
Man sollten diese Funktion für
Speziallinguistiken verwenden, die z.B. nur Fachbegriffe enthalten,
aber nicht den normalen Wortschatz. Wenn man die Prüfung nach
den alten und neuen Rechtschreibregeln durchführen will und das
Addin nur die neuen Regeln beherrscht, sollte man das Feld ebenfalls
markieren.
---
In älteren Versionen von StarOffice
befindet sich im Menü unter Extras |
Optionen...->Allgemein->Linguistik eine neu
hinzugekommene Schaltfläche: <Extern...>.
Daneben wird der Name des Addins angezeigt: libspell.so oder
SO-Linguistik
Wählt man <Extern...>
an, dann erscheint dieselbe Menütafel wie bei SO ab Version
5.2.
Während der Rechtschreibprüfung kommt man hier
übrigens auch an diese Menütafel heran: Unter
Zusätze->Optionen...
bekommt man ebenfalls eine Menütafel mit der neuen <Extern...>
Schaltfläche angeboten.
Benutzung:
Die
Rechtschreibprüfung läuft wie immer ab, hier hat sich
nichts geändert.
Bei der Aufnahme von neuen Wörtern
in die Benutzerwörterbücher hat sich bei älteren
Versionen (vor 5.2) ein Fehler eingeschlichen. Dem Benutzer wird
zwar ein Menü zur Aufnahme des unbekannten Wortes in eines der
SO-Benutzerwörterbücher angeboten, es funktioniert aber
nicht; alle unbekannten Wörter werden an das Addin
weitergereicht. Das ist aber nicht weiter tragisch, weil sie hier
vom Addin in die privaten ispell-Wortlisten eingetragen werden - und
da hinein sollten sie ohnehin gelangen.
(Bei der Windows-Version
5.2 gibt es allerdings einen üblen Fehler, beim Versuch ein
neues Wort aufzunehmen. Nach einer solchen Aktion - die noch
erfolgreich durchgeführt wird - beendet sich SO umgehend per
Crash).
Installationsoptionen:
Das
Suchverzeichnis für Linguistik-Addins lässt sich unter
Extras | Optionen...->Allgemein ->Pfade
->Wörterbücher einstellen. Hier wird im
Unterverzeichnis addin nach den Addins
gesucht.
Normalerweise wird für jede Sprache ein eigenes
Wörterbuch verwendet. Man kann das Addin jedoch zwingen, immer
ein bestimmtes Wörterbuch zu verwenden.
Linux:
Dazu
wird folgende Umgebungsvariable in die Datei ~/.bashrc
eingetragen:
export
STAR_DICTIONARY=Name_des_Wörterbuchs
wobei
Name_des_Wörterbuchs der Name des Wörterbuchs ist,
z.B.: deutsch.hash
Möchte man ein bestimmtes
Wörterbuch vorgeben, das benutzt werden soll, wenn kein
entsprechendes Wörterbuch gefunden wird, so kann man folgende
Umgebungsvariable setzten:
export
DICTIONARY=Name_des_default_Wörterbuchs
Diese
Option wirkt sich dann allerdings auf alle ispell-Klienten
aus!
Windows:
Hier wird die Umgebungsvariable in die
AUTOEXEC.BAT eingetragen:
SET
STAR_DICTIONARY=Name_des_Wörterbuchs
wobei
Name_des_Wörterbuchs der Name des Wörterbuchs ist,
z.B.: deutsch.hash
Analog gilt dies auch für die
Umgebungsvariable DICTIONARY .
Die folgenden
Wörterbücher werden vom Addin im Verzeichnis
/usr/lib/ispell bzw. C:\ispell gesucht:
Sprache |
Name des Wörterbuchs |
[Keine] |
english.hash |
Deutsch |
deutsch.hash |
Deutsch (CH) |
deutsch.hash |
Englisch (UK) |
british.hash |
Englisch (US) |
american.hash |
Finnisch |
suomi.hash |
Französisch |
francais.hash |
Italienisch |
italian.hash |
Niederländisch |
nederlands.hash |
Norwegisch Bokmal |
norsk.hash |
Norwegisch Nynorsk |
norsk.hash |
Portugiesisch |
portugues.hash |
Schwedisch |
svenska.hash |
Spanisch |
espanol.hash |
Um das Addin komplett aus dem Quellcode zu erzeugen, wird unter
Linux neben dem GNU C-compiler gcc und dem Programm make
auch ein lexikalischer Analysator und Parser-Generator benötigt,
der C-Code generieren kann. Das ist entweder yacc oder bison
(Linux-Standard). Unter Windows wurde der Borland C++ Compiler 5.5
verwendet, den es im Internet als Download gibt.
Das Addin wird
erzeugt, indem man im Verzeichnis mit dem Quellcode den Befehl <make>
mit dem jeweiligen Makefile aufruft. Im Emacs wird die Compilation
durch die Tastenkombination <F9>
<C> <Enter> angestoßen.
Die folgende Beschreibung der Addin-Schnittstelle stammt aus der
StarOffice-Hilfe und eigenen Versuchen ;-).
Die technischen
Einzelheiten sind in der C-Headerdatei soling.h in
Compiler-verständlicher Form zusammengefasst.
StarOffice sucht in dem persönlichen Wörterbuchpfad (welcher unter Extras | Optionen... -> Allgemein -> Pfade -> Wörterbücher eingestellt ist) nach einem Unterverzeichnis addin und untersucht dieses nach einer geeigneten Shared Library bzw. DLL. Diese Shared Library kann Funktionen zur Rechtschreibung, zum Thesaurus und zur Silbentrennung enthalten, welche von StarOffice unterstützt werden.
Auf Plattformen, die Versions-Resourcen unterstützen (Windows), wird die externe Linguistik-DLL von StarOffice nur dann erkannt, wenn der interne Name der DLL (Internal Name) SO-Linguistik lautet. Andernfalls wird die DLL von StarOffice nicht als Fremdlinguistik akzeptiert. Eigene Versuche ergaben, dass auch der Produkt-Name (ProductName) so lauten muss. Der entsprechende Resourcen-Code ist in der Datei version.rc enthalten.
Wichtig: Die an StarOffice exportierten Funktionen des selbst programmierten Linguistik-Moduls müssen unter Windows die Calling Convention _stdcall einhalten (ältere Versionen auch _cdecl). Dieser Aufruf unterscheidet sich etwas von der Addin-Schnittstelle für StarCalc.
Im folgenden findet sich eine Auflistung der Funktionen, die von StarOffice aufgerufen werden.
Get_Version |
Liefert die Versionsnummer der zu StarOffice benutzten Schnittstelle. short int Get_Version(void) Rückgabewert ist immer 1, solange die Funktionen gemäß der hier vorliegenden Schnittstellendefinition arbeiten. |
Available |
Liefert einen Rückgabewert, der angibt, welche Funktionalität unterstützt wird (Rechtschreibung, Thesaurus, Trennung) und ob es einen Optionsdialog für spezielle Einstellungen gibt. char Available(void) Rückgabewerte: |
OptionDlg |
Bringt einen Dialog zur Anzeige, an dem man für die Fremdlinguistik relevante Einstellungen vornehmen kann. char OptionDlg(void* pParent) Übergeben wird unter Windows und OS/2 der WindowHandler der Applikation, wenn dieser vorhanden ist. Es kann aber auch ein Null-Pointer übergeben werden, unter anderen Plattformen ist dies sogar immer der Fall. Rückgabewerte: |
SetLanguage |
Damit kann man die gewünschte Sprache einstellen. Es wird nur in den gleichsprachigen Wörterbüchern nachgeschlagen und in Wörterbüchern, die für alle Sprachen gedacht sind. char SetLanguage(short int nLanguage) Übergeben wird die gewünschte Sprache (siehe
StarCalc-Addin-Header xlang.h), z.B. Rückgabewerte: |
FreeAlloc |
Gibt durch Funktionen wie z.B. SpellWord, LookUp und Synonym zugeteilten Speicher wieder frei. short int FreeAlloc(void) |
SpellQuick |
Wird mit einem String übergeben und liefert TRUE, wenn das Wort bekannt ist, andernfalls FALSE. char SpellQuick(char *) Übergeben wird das zu überprüfende Wort. Rückgabewerte: |
SpellWord |
Wie SpellQuick, füllt zusätzlich bei unbekannten Worten eine Liste mit Vorschlägen, welches Wort gemeint sein könnte. char SpellWord(char*, char**) Übergeben wird als erstes das zu überprüfende Wort. Der zweite Pointer zeigt auf einen Speicherbereich, in den als
Ergebnis ein char-Pointer eingetragen wird, der bei einem falsch
geschriebenen Wort auf eine Liste von Strings (Vorschlägen)
zeigt. (Die Shared Library bzw. DLL teilt den für diesen
String benötigten Speicher zu und darf ihn nicht vor dem
nächsten Funktionsaufruf wieder freigeben. Zur Freigabe kann
auch explizit FreeAlloc aufgerufen werden.) Ein String der Länge
0 dient als Endmarkierung. Rückgabewerte: |
AddWord |
Fügt dem aktiven persönlichen Wörterbuch ein Wort hinzu. char AddWord(char*) Übergeben wird das Wort, welches in das zur Zeit aktive Wörterbuch aufgenommen werden soll. Rückgabewerte: |
LookUp |
Wird mit einem String übergeben und liefert TRUE, wenn das Wort bekannt ist, andernfalls FALSE. Es wird eine Liste mit Bedeutungen gefüllt, und der Synonymaufruf wird vorbereitet. char LookUp(char*, char**) Übergeben wird als erstes das nachzuschlagende Wort, als zweites ein Speicherbereich, der mit einem char-Pointer auf eine Liste von Bedeutungen (siehe oben) zeigt, z.B. wenn "Bank" nachgeschlagen wird: "Sitzbank\0Geldinstitut\0Sandbank\0\0" Nachfolgende Aufrufe der Funktion Synonyme beziehen sich immer auf diese LookUp-Liste, bis ein weiterer LookUp-Aufruf oder ein FreeAlloc erfolgt. Rückgabewerte: |
Synonym |
Bekommt die Position der Bedeutung in der obigen Liste und füllt eine Liste mit Synonymen. char Synonyme(short int, char**) Übergeben wird die Position innerhalb der Bedeutungsliste (beginnend mit Position 0) und ein Speicherbereich, in den der char-Pointer auf die Liste mit Synonymen dieser Bedeutung eingetragen wird. Im obigen Beispiel erhält man zu Position 1 (Geldinstitut) z.B. "Geldinstitut\0Bank\0Sparkasse\0Darlehenskasse\0\0" Rückgabewerte: |
LastHyph |
Wird mit einem String, einer MinHeader- und einer MinTrailzahl übergeben und liefert die Trennstelle. Bei einer alternativen Trennstelle wird auch das Alternativwort zurückgegeben (z.B. Bäkker oder Schifffahrt). unsigned short int LastHyph(char*, short int, short int, char **) Übergeben wird das Wort, die minimale Anzahl der Zeichen
vor und die minimale Anzahl der Zeichen hinter der
Trennstelle. |
AllHyph |
Wird mit einem String, einer MinHeader- und einer MinTrailzahl übergeben und liefert einen String mit sämtlichen Trennstellen (z.B. Do=nau=dampf=schiff=fahrt). char AllHyph(char*, short int, short int, char**) Ähnlich wie LastHyph, nur als Rückgabewert wird
lediglich 0 für "keine Trennstelle gefunden" oder
1 für "Trennstelle gefunden" zurückgegeben. |
-mdhs (23.05.01)