===== Landesspezifische Zeichen ===== Bei der Formulierung von regulären Ausdrücken gibt es im Zusammenhang mit dem Thema landesspezifische Buchstaben und Sonderzeichen ein Problem: es muß bekannt sein, in welchem Zeichensatz der zu untersuchende Druckdatenstrom vorliegt. Die im Deutschen verwendeten Umlaute können je nach Zeichensatz ganz unterschiedliche interne Codes haben. Im print2forms-System werden die regulären Ausdrücke, wie alle anderen textuellen Eingaben auch, im Zeichensatz ISO-8859-1 angenommen und auch so abgespeichert. Taucht also im Ausdruck ein 'Ä' auf, wird der interne Code hexadezimal 'C4' verwendet. Man muß sich also darüber im Klaren sein, daß mit so einem Ausdruck wunderbar in einem von einem Windows-System erzeugten Druckauftrag gesucht werden kann, daß aber so in einer Host-Ausgabe niemals ein Muster erkannt wird, weil dort ein 'Ä' als hexadezimal '8E' kodiert ist. Prinzipell könnte print2forms diesen Fall natürlich erkennen, weil es ja den Druckdatenstrom analysiert hat, und demzufolge weiss, in welchem Zeichensatz die Druckdaten vorliegen. Doch dies verlangt eine ganze Reihe von Konvertierungstabellen, die im Moment noch nicht vollständig zur Verfügung stehen. Von daher sollten alle landesspezifischen Zeichen und Sonderzeichen, die nicht im 7-Bit ASCII-Zeichensatz enthalten sind, nur mit Bedacht innerhalb von regulären Ausdrücken eingesetzt werden. \\ Ein weiteres Problem taucht im Zusammenhang mit dem Muster '@' auf. In der Regel ist es gewünscht, daß dieses Muster ganz generell Buchstaben erkennt, also auch landesspezifische. Insofern ist '@' nicht wirklich eine Abkürzung für %%'[%%a-zA-Z]', sondern viel mehr. Auch in diesem Fall benötigt print2forms eine ganze Reihe von weiteren Tabellen, um für die jeweiligen Zeichensätze die Codes zu ermitteln, an denen Buchstaben stehen. Diese Tabellen stehen ebenfalls aktuell nicht zur Verfügung. Um aber in der täglichen Praxis die regulären Ausdrücke nicht unnötig kompliziert werden zu lassen, ist es in der aktuellen Implementierung desprint2forms-Clients und -Gateways so, daß diese für das Muster '@' auch alle Zeichen im Bereich der hexadezimalen Codes '80' bis 'FF' akzeptieren. Dies ist zugegeben natürlich nicht ganz korrekt, weil in diesem Codebereich auch einige Sonderzeichen liegen, die definitiv nicht zu den Buchstaben im klassischen Sinn gehören, aber es führt in allen bisherigen Anwendungen der regulären Ausdrücke zu befriedigenden Ergebnissen. \\ Eine gute Praxis bei der Formulierung regulärer Ausdrücke ist demnach, keine landesspezifischen Zeichen als Literale einzusetzen, und beim Extrahieren von Textfragmenten, die eventuell landesspezifische Zeichen enthalten können, nur die Muster '.' und '@' zu verwenden. ==== Hinweise ==== * Muß dennoch einmal ein landesspezifisches Zeichen getestet werden, und es gibt auch noch verschiedene Druckdatenquellen mit unterschiedlichen Zeichensätzen, muß im Moment mit einer Alternative aus den verschieden Codes gearbeitet werden, zum Beispiel %%'[%%\xC4\X8E]'. Es ist dann aber klar, daß es im Einzelfall zu Erkennungsfehlern kommen kann, weil der alternative Code natürlich im anderen Zeichensatz auch eine, aber eben eine andere Bedeutung hat. * Es ist geplant, in der nächsten Zeit die oben angesprochenen Tabellen zu vervollständigen und in die print2forms-Clients und -Gateways zu integrieren. Alte reguläre Ausdrücke mit landesspezifischen Sonderzeichen sind davon aber nicht betroffen, weil die Tabellen in diesen Fällen ja eine 1:1 Ersetzung erzeugen. Das Muster '@' wird dann allerdings nur noch 'richtige' Buchstaben erkennen. * Eine Unterstützung von Unicode ist zur Zeit zwar angedacht, aber es ist noch kein konkreter Termin für die Realisierung absehbar. In diesem Zusammenhang werden weitere sehr komplexe Umsetzungstabellen benötigt, weil wir dann auch Unicode-Druckdatenströme auf nicht Unicode-fähigen Druckern unterstützen wollen.