Ältere Versionen der Quellen finden sich hier:

Alle weiteren neueren Versionen liegen ab sofort im svn-Repository, das mit folgendem Befehl ausgecheckt werden kann:

Weitere nützliche svn-Befehle:

Interlinear-Baum

Um den aktuellen Stand der Interlinearversion eines Textes festzuhalten, soll er intern in Form eines Baumes dargestellt werden.

Beispiel

Hier anhand eine graphische Darstellung der oben genannten Entsprechungen zwischen der Interlinearversion eines Textes und zugehörigem Interlinearbaum.

Auf der linken Seite findet sich die Interlinearversion des Textes, auf der rechten der zugehörige Interlinearbaum.

tree-1.png

Intern wird der Interlinearbaum derzeit durch Knoten der folgenden Struktur dargestellt:

   1 struct _ShsNode {
   2   ShsNode *next;
   3   ShsNode *prev;
   4   ShsNode *parent;
   5   ShsNode *children;
   6 
   7   const gchar   *label;
   8   gpointer data;
   9 }; 

Um gegebenenfalls einen späteren Austausch der verwendeten Datenstruktur zu erlauben sollte nach Möglichkeit _nicht_ direkt auf diese Struktur zugegriffen werden, sondern über die zur Verfügung stehenden Zugriffsfunktionen.

Zu Testzwecken ist ein direkter Zugriff auf die verwendete Struktur aktuell durch einbinden des Headers "shs-node.h" zwar noch möglich - die zugehörige Definition soll aber früher oder später von dort in "shs-node.c" verschoben werden um versehentlichen Zugriff auf die interne Struktur zu verhindern.

Knoten API

Hier eine übersicht der derzeit zur Verfügung stehenden Funktionen zur Bewegung im Interlinearbaum

tree-2.png

Darstellung am Bildschirm

Die Darstellung der Interlinearversion eines Textes erfolgt derzeit so, dass jeweils die label sämtlicher Kinder eines Knotens bündig unter dem label des Knotens selbst dargestellt werden.

tree-3.png

Einzelne Zeilen können derzeit mit der Funktion node_pretty_line_string () erstellt werden.

Darstellung mit Gtk

Zur Darstellung wird derzeit ein GtkTextView Widget verwendet.

Für jede Referenz (s.o.) der Interlinearversion wird dabei eine eigene Textmarke (GtkTextMark) in den zugehörigen Buffer (GtkTextBuffer) eingefügt.

Einfügen und Löschen des zugehörigen Textes ist derzeit mit Hilfe der beiden Funktionen insert_ref (), bzw. delete_ref () möglich.

Konsistenz

Um Bildschirmdarstellung und Interlinearbaum konsistenz zu halten ist es erforderlich den zugehörigen Interlinearbaum sowohl beim Einfügen, als auch beim Entfernen von Zeichen aus dem Textpuffer entsprechend anzupassen.

Dies sollte in den Signalhandlern "insert-text", bzw. "delete-range" möglich sein, ist derzeit aber noch _nicht_ implementiert.

Regeln

Um die Gestaltung der beim Interlinearisierungsvorgang verwendeten Regeln möglichst flexibel zu halten werden zur Verfügung stehende Regeln derzeit mit Hilfe folgender Struktur beschrieben:

   1 struct _RuleInfo {
   2   const gchar *id;
   3 
   4   Rule* (*create) (JsonNode *options);  
   5   void (*destroy) (Rule *rule);
   6   GList* (*apply) (Rule *rule, ShsConfig *config, ShsNode *node);
   7   JsonNode* (*export) (Rule *rule);
   8 
   9   GtkWidget* (*build_widget) (Rule *rule);
  10 };

Felder

Callbacks

   1  { "key" : "...", "value" : "...." }
   2  { "key" : "...", "value" : [ "...", "...", ... }

Regel API

Zur Registrierung neuer Regeln steht derezeit die Funktion register_rule () zur Verfügung.

Nach Registrierung einer Regel können Regeln dieses Typs dann mit der Funktioner rule_new () erzeugt werden.

rule_lookup () (offensichtlich nicht sehr konsistent benannt! ... diese führt nämlich die Operation apply aus), rule_export () und rule_free () ermöglichen einen Aufruf der in der zugehörigen RuleInfo hinterlegten callbacks.

Regeln

Weit von einem für die Praxis tauglichen Stand entfernt befinden sich derzeit folgende Regel-Prototypen:

lugfrankfurt: Programmierworkshop/projekte/interlinearisator/entwicklung (zuletzt geändert am 2012-08-20 07:31:01 durch Harald Vajkonny)