Logo: Proxomitron - Ein Universeller Webfilter

Erweiterte Befehle / Funktionen

Neben den normalen Metazeichen besitzt Proxomitron eine Reihe spezieller Vergleichs- und Ersetzungskommandos, die erweiterten Befehle (englisch: Extended Matching Commands).
Diese Befehle werden auch oft als (erweiterte) Funktionen bezeichnet, weil sie wie Funktionen in einer Programmiersprache aufgerufen werden und auch sonst völlig aus dem Rahmen herkömmlicher regulärer Ausdrücke fallen.

Erweiterte Befehle beginnen mit einem "$". Dann folgt der Name der Funktion in Großbuchstaben. Dahinter stehen in Klammern die an die Funktion übergebenen Befehle und Variablen.

$FUNKTIONSNAME(Parameter1, Parameter2, ...)

Rückgabedaten

Das Ergebnis eines Funktionsaufrufs besteht entweder aus einem String, den die Funktion als Ergebnis ihrer Arbeit zurückgibt, oder aus einer boolschen TRUE/FALSE-Aussage.

Wenn die Funktion einen String zurückgibt, dann wird dieser so interpretiert, als stände er anstelle des Funktionsaufrufs im Filterausdruck.

Boolsche Aussagen werden hingegen so interpretiert, als stände anstelle des Funktionsaufrufs irgend ein herkömmlicher Unterausdruck, der sich entweder als zutreffend oder als nicht zutreffend herausgestellt hat. Das heißt konkret, dass der Teilausdruck, in dem ein solcher Funktionsaufruf steht, je nach Funktionsergebnis, entweder fortgesetzt oder abgebrochen wird.

Das klingt im ersten Moment wahrscheinlich etwas verwirrend, ist aber logisch, wenn man bedenkt, dass diese Funktionen aus einer Textbeschreibungssprache heraus aufgerufen werden, in der es für jedes Atom (kleinster möglicher Ausdruck) nur die beiden Zustände "trifft zu" und "trifft nicht zu" gibt.

Beispiel 1:
ein Stück Text $CONFIRM(Ja oder Nein?) mehr Text

Die Funktion $CONFIRM() zeigt ein Windows-typisches Abfrage-Dialogfeld mit Ja/Nein-Schaltflächen an. Je nach dem, ob der Benutzer "Ja" oder "Nein" anklickt, gibt die Funktion TRUE oder FALSE zurück und entscheidet damit, ob Proxomitron an dieser Stelle abbrechen oder mit der Verarbeitung des aktuellen Teilausdrucks fortfahren soll.

Beispiel 2:
$TYPE(htm) <!-- * -->
|
$TYPE(js) /\* * \*/

Das hier gezeigte Beispiel ist ein einfacher Vergleichsausdruck, der Kommentarbereiche in HTML-Seiten und JavaScript-Dateien erfassen soll.

Die Funktion $TYPE() nimmt als Parameter verschiedene Kürzel an, die jeweils für einen bestimmten Datentyp stehen und gibt TRUE oder FALSE zurück, wenn der erfragte Typ auf die gerade verarbeiteten Daten zutrifft bzw. nicht zutrifft. Die beiden Typabfragen sorgen also dafür, dass die dahinter stehenden Teilausdrücke nur dann verarbeitet werden, wenn die gerade verarbeiteten Daten den gewünschten Typ haben.

Damit Proxomitron nicht nach dem ersten FALSE abbricht, sondern statt dessen die nächste Möglichkeit ausprobiert, sind die beiden Teilausdrücke mit ODER verknüpft.
Die Zeilenumbrüche in diesem Beispiel dienen nur der Übersichtlichkeit. Sie haben keinen Einfluss auf die Verarbeitung.

Einsatzorte / Verarbeitungsphasen

Viele der Funktionen ermöglichen die Nutzung von Informationen, die im Rahmen der durch den jeweiligen Filter bearbeiteten Daten normalerweise nicht verfügbar wären.

Über die Funktion $IHDR() ist es z.B. möglich, bei der Verarbeitung des Quelltexts einer Webseite, rückwirkend auf die bei der Übertragung dieser Seite empfangenen Header-Informationen zuzugreifen und diese z.B. in Fallunterscheidungen einzubeziehen oder auch als String in den Seitenquelltext zu übernehmen.
Andere Funktionen, wie z.B. $SET() und $GET(), ermöglichen die Nutzung filterübergreifender globaler Variablen und damit die Datenübergabe zwischen Filtern.

In beiden Fällen gibt es ganz entscheidende Fragen, die sich jeder Filterentwickler stellen muss:

Diese Seite wird nach und nach ausgebaut, so wie ich Zeit dafür finde.

© Michael Bürschgens <website@proxomitron.de>