<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Trk_dict_oop.pm</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:root@localhost" />
</head>

<body style="background-color: white">


<!-- INDEX BEGIN -->
<div name="index">
<p><a name="__index__"></a></p>

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<li><a href="#methods">Methods</a></li>
	<ul>

		<li><a href="#trk_dict__new_dateiname_">Trk_dict-&gt;new(DATEINAME)</a></li>
		<li><a href="#_obj__translate_string_">$Obj-&gt;translate(String)</a></li>
		<li><a href="#_obj__append__kurzform____langform__">$Obj-&gt;append('Kurzform', 'Langform')</a></li>
		<li><a href="#_obj__config__argument_____wert__">$Obj-&gt;config(-argument =&gt; 'wert')</a></li>
		<li><a href="#_obj__get_dictionary">$Obj-&gt;get_dictionary</a></li>
		<li><a href="#_obj__get_config_optional_">$Obj-&gt;get_config(optional)</a></li>
		<li><a href="#_obj__get_error_message">$Obj-&gt;get_error_message</a></li>
	</ul>

	<li><a href="#aufbau_der_textdatei">Aufbau der Textdatei</a></li>
	<li><a href="#exports">Exports</a></li>
	<li><a href="#todo">ToDo</a></li>
	<li><a href="#abh__ngigkeiten">Abhängigkeiten</a></li>
	<li><a href="#kompatibilit__t_und_tests">Kompatibilität und Tests</a></li>
	<li><a href="#version">VERSION</a></li>
</ul>

<hr name="index" />
</div>
<!-- INDEX END -->

<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Trk_dict_oop</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p>Ein Tool zum übersetzen von Wörtern, bzw. Buchstaben in Wörter.</p>
<pre>
    use Trk_dict;</pre>
<pre>
    # Erstellen eines Objekts
    $Obj = Trk_dict-&gt;new(a =&gt; 'Adam', w =&gt; 'Wall'); # erstellt ein Objekt mit zwei Kurzwort-Langwort Paaren</pre>
<pre>
    # Zeile umwandeln
    $nichtumgewandelt = 'Larry w';  # z.B. der Inhalt eines Entry Feldes einer GUI
    $umgewandelt = $OBJ-&gt;translate($nichtumgewandelt); # $umgewandelt = 'Larry Wall'</pre>
<pre>
    # Neuen &quot;Kurzform Langform&quot; Datensatz eingeben
    $umgewandelt = $OBJ-&gt;translate('add p Programmiersprachen deutschsprachig') # 'p' = Kurzform;   'Programmiersprachen deutschsprachig' = Langform bzw. Übersetzung</pre>
<pre>
    # $nichtumgewandelt = 'p'
    $umgewandelt = $OBJ-&gt;translate($nichtumgewandelt);   # $umgewandelt = 'Programmiersprachen deutschsprachig'</pre>
<pre>
    # $nichtumgewandelt = 'p Perl'
    $umgewandelt = $OBJ-&gt;translate($nichtumgewandelt);   # $umgewandelt = 'Programmiersprachen deutschsprachig Perl'</pre>
<p>Dieses Modul ist es ein Tool dass Eingaben in GUI Text- oder Entry Feldern durch die wahlweise von Kurzwörtern, die von diesem Modul in Langwörter umgewandelt werden, erleichtern soll.</p>
<p>Also zum Beispiel um in einer Bücherdatenbank bei Genre  nur noch 'p' statt 'Programmiersprachen deutschsprachig' schreiben zu müssen.</p>
<p>Da das Modul Objektorientiert ist, ist es sehr einfach für verschiedene Eingabefelder der GUI Oberfläche verschiedene Objekte und damit Übersetzungslisten zu verwenden.</p>
<p>Das Ergänzen von neuen Kurzwort-Langwortpaaren ist dabei direkt von dem Eingabefeld der GUI Oberfläche aus möglich, dies kann aber auch unterbunden werden.</p>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>Wandelt auf Basis eines Objekts Strings mit Kurzzeichen in Wörter um.</p>
<p>Das dazu zugrunde liegende Wörterbuch ist ein Hash der die Objektvariable bildet. Die Basis des Objekts ist also die Übersetzungsliste.</p>
<pre>
    Aufbau des Objekthashes
    #################
    | a =&gt; 'Adam'   |
    | w =&gt; 'Wall'   |
    | ....          |
    | -arg1 =&gt; 'arg'|
    | -arg2 =&gt; 'arg'|
    | ....          |
    #################</pre>
<pre>
    arg - siehe config und new</pre>
<p>Dazu werden die Daten (Kurzform-Langform Paare) aus einer Textdatei eingelesen oder direkt per new an den Objekt-Hash übergeben.</p>
<p>Der String der mittels der Methode translate umgewandelt werden soll, kann beliebig viele Kurzzeichen haben, diese müssen nur durch ein Leerzeichen getrennt sein.</p>
<p>Zeichenfolgen die keine Schlüssel-Wörter sind, werden unverändert übernommen.</p>
<p>Da diese Klasse zum Einsatz von Entry Feldern einer Tk GUI gedacht ist, kann die gleiche Methode (translate) die zum Übersetzen der Kurzformwörter verwendet wird auch zum Hinzufügen neuer Kurzform-Langform Paare benutzt werden.</p>
<p>Das bedeutet dass Ergänzungen dieser Übersetzungsliste ohne eine zusätzliche Funktionalität der Benutzeroberfläche (GUI) möglich sind.</p>
<p>
</p>
<hr />
<h1><a name="methods">Methods</a></h1>
<p>
</p>
<h2><a name="trk_dict__new_dateiname_">Trk_dict-&gt;new(DATEINAME)</a></h2>
<p>Ruft den Konstruktor auf und gibt ein neues Trk_dict Objekt zurück.</p>
<p>Wird mit -base ein Dateinamen einer Datei angegeben die nicht vorhanden ist, wird diese Datei automatisch erstellt.</p>
<p>Wird bei -base kein Dateiname angegeben, erfolgt keine Speicherung der Daten auf der Festplatte.</p>
<p>Example:</p>
<pre>
    $newojekt = TRK_dict-&gt;new(-base =&gt; 'Dateiname');</pre>
<p>Ist die Datei leer wird das Objekt dennoch erstellt.</p>
<p>Zusätzlich können diverse Konfigurationen eingestellt werden, siehe Methode: config</p>
<p>Example:</p>
<pre>
    $newojekt = TRK_dict-&gt;new(-base =&gt; 'Dateiname', -save =&gt; 'off');</pre>
<p>Es können auch Kurzwort-Langwort Paare direkt per Argument an new übergeben werden.</p>
<pre>
    $newojekt = TRK_dict-&gt;new(-base =&gt; 'Dateiname', -save =&gt; 'off', l =&gt; 'long');</pre>
<p>Dabei ist aber zu beachten dass hier beispielsweise das l-long überschrieben werden würde, wenn sich in der zu ladenden Datei (-base...) bereits ein Schlüssel 'l' befindet !</p>
<p>Gibt man keine Dateinamen an z.B.</p>
<pre>
    $newojekt = TRK_dict-&gt;new(l =&gt; 'long');</pre>
<p>wird -save automatisch auf 'off' gesetzt, da Veränderungen mangels Datei nicht auf der Festplatte gespeichert werden können.</p>
<br/><p>
</p>
<h2><a name="_obj__translate_string_">$Obj-&gt;translate(String)</a></h2>
<ul>
<li><strong><a name="bersetzen" class="item">Übersetzen:</a></strong>

<p>Wird verwendet um einen String mit Kurzzeichen zu übersetzen.</p>
<p>Dabei wird folgendermaßen vorgegangen:</p>
<p>1. Werden im String Wörter gefunden die in der Kurzform Liste vorkommen, werden diese übersetzt- Je nach Konfiguration nur das erst vorkommende oder alle.</p>
<p>2. Je nach Konfiguration werden alle restlichen einzelnen Zeichen entfernt.</p>
<p>3. Je nach Konfiguration werden alle doppelt oder mehrfach vorkommenden Leerzeichen entfernt.</p>
<p>4. Leerzeichen am Anfang und Ende des Strings werden gelöscht.</p>
<p>Die Groß- und Kleinschreibung spielt bei den Kurzformen keine Rolle !</p>
<p>Example:</p>
<pre>
    # {r =&gt; 'red', b =&gt; 'blue', g =&gt; 'green'} # Datenbasis
    # $translatet_text = $new_objekt-&gt;translate(&quot; r  r    r b white &quot;);
    # print &quot;$translatet_text\n&quot;;    # &quot;red blue white&quot;</pre>
</li>
<li><strong><a name="neue_schl_ssel_wert_paare_hinzuf_gen" class="item">Neue Schlüssel-Wert Paare hinzufügen:</a></strong>

<p>Mit dem Schlüsselwort 'add ' können neue Paare ergänzt werden.</p>
<p>Example:</p>
<pre>
    # $translatet_text = $new_objekt-&gt;translate(&quot;add y yellow&quot;); # fügt das Schlüsselwort 'b' mit dem Wert 'black' hinzu.
    # print &quot;$translatet_text\n&quot;;    # &quot;yellow&quot;</pre>
<pre>
    # $translatet_text = $new_objekt-&gt;translate(&quot; r  r  y  r b white &quot;);
    # print &quot;$translatet_text\n&quot;;    # &quot;red yellow blue white&quot;</pre>
<p>Wird bei add kein Wert mitgegeben, z.B. 'add y', wird der String: 'add Syntax Fehler' zurückgeliefert.</p>
</li>
<li><strong><a name="schl_ssel_wert_paare_l_schen" class="item">Schlüssel-Wert Paare löschen:</a></strong>

<p>Mit add kann man auch Kurzwort - Langwort Paare löschen.</p>
<p>Example:</p>
<pre>
    $new_objekt-&gt;translate(&quot;add y  &quot;) # löscht den Schlüssel y und den dazugehöreigen Wert
    # WICHTIG dabei ist dass man nach dem Schlüssel mindestens 2 Leerzeichen eingibt !!!!!</pre>
<p>Die Speicherung in der Datei die die Datenbasis für den Hash darstellt erfolgt automatisch sofern die add-Anweisung korrekt war und der Parameter bei -save 'on' ist.</p>
<p>Kann die Datei nicht gespeichert werden, wird als Wert des Strings: &quot;ERROR&quot; zurückgeliefert und es erfolgt eine genauere Fehlerbeschreibung die mittels der Methode <code>get_error_message()</code> abgerufen werden kann.</p>
<br/></li>
</ul>
<p>
</p>
<h2><a name="_obj__append__kurzform____langform__">$Obj-&gt;append('Kurzform', 'Langform')</a></h2>
<p>Diese Methode wird intern von der translate Methode dazu verwendet je nach eingestellten Optionen das Kurzwort-Langwort Wörterbuch zu ergänzen und die Daten auf der Festplatte abzuspeichern.</p>
<p>'append' kann aber auch als Objektmethode von 'außerhalb' aufgerufen werden um neue Datensätze anzufügen. Dies macht dann Sinn wenn beispielsweise Daten eingelesen werden und per Schleifenkonstrukt diese Daten angefügt werden sollen. Zudem ist es hiermit möglich als Argument einen Hash oder ein Array mit Kurzwort-Langwort Paaren zu übergeben.</p>
<p>Es ist aber NICHT möglich mittels 'append' die Konfigurationsdateien zu verändern, dazu muss 'config' verwendet werden.</p>
<p>Example:</p>
<pre>
    my %hash = (s =&gt; 'Short', l =&gt; 'Long');    # per Hash;
    $obj-&gt;append(%hash);</pre>
<pre>
    #oder per Array:</pre>
<pre>
    my @arr = ('s','Short', 'l', 'Long');      # per Array
    $obj-&gt;append(@arr);</pre>
<pre>
    #oder direkt:</pre>
<pre>
    $obj-&gt;append(s =&gt; 'Short', l =&gt; 'Long');  # oder $obj-&gt;append('s','Short', 'l', 'Long');</pre>
<br/><p>
</p>
<h2><a name="_obj__config__argument_____wert__">$Obj-&gt;config(-argument =&gt; 'wert')</a></h2>
<p>Mit dieser Methode kann die Konfiguration nachträglich, also nach dem Erzeugen des Objekts geändert werden.</p>
<p>Example:</p>
<pre>
    $newojekt-&gt;config(-save =&gt; 'off');</pre>
<dl>
<dt><strong><a name="base_dateiname" class="item">-base =&gt; 'Dateiname'</a></strong></dt>

<dd>
</li>
<li><strong><a name="der_name_der_datei_in_der_die_daten_auf_der_festplatte_gespeichert_werden" class="item">Der Name der Datei in der die Daten auf der Festplatte gespeichert werden.</a></strong>

</dd>
</dl>
<br/><dl>
<dt><strong><a name="save" class="item">-save =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="off_nderungen_werden_nicht_in_der_datei_gespeichert_sind_also_nur_in_der_laufenden_sitzung_aktiv" class="item">'off'  Änderungen werden nicht in der Datei gespeichert, sind also nur in der laufenden Sitzung aktiv</a></strong>

</li>
<li><strong><a name="gespeichert" class="item">'on'   Änderungen werden in der Datei gespeichert (Standardeinstellung) - kann nicht aktiviert werden wenn bei der Instanzierung kein Dateiname übergeben wurde !</a></strong>

</dd>
</dl>
<br/><dl>
<dt><strong><a name="add" class="item">-add =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="off_add_ist_nicht_aktiv_es_k_nnen_also_keine_kurzwort_langwort_paare_angef_gt_werden" class="item">'off'   add ist nicht aktiv. Es können also keine Kurzwort-Langwort Paare angefügt werden.</a></strong>

</li>
<li><strong><a name="aktiv" class="item">'on'    add ist aktiv (Standardeinstellung).</a></strong>

</dd>
</dl>
<br/><dl>
<dt><strong><a name="overwrite" class="item">-overwrite =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="off_ein_berschreiben_bestehender_kurzwort_langwort_eintr_ge_ist_nicht_m_glich" class="item">'off' Ein Überschreiben bestehender Kurzwort-Langwort Einträge ist nicht möglich.</a></strong>

</li>
<li><strong><a name="on_ein_berschreiben_bestehender_kurzwort_langwort_eintr_ge_ist_m_glich_standardeinstellung" class="item">'on'  Ein Überschreiben bestehender Kurzwort-Langwort Einträge ist möglich.(Standardeinstellung).</a></strong>

</dd>
</dl>
<br/><dl>
<dt><strong><a name="delete_single" class="item">-delete_single =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="off_einzelne_zeichen_werden_nicht_gel_scht" class="item">'off' Einzelne Zeichen werden nicht gelöscht.</a></strong>

</li>
<li><strong><a name="scht" class="item">'on'  Einzelne Zeichen werden gelöscht (Standardeinstellung).</a></strong>

<p>Example:</p>
<pre>
    $newojekt-&gt;config(-delete_single =&gt; 'off'); # 'Name n a' wird zu 'Name n a'
    $newojekt-&gt;config(-delete_single =&gt; 'on');  # 'Name n a' wird zu 'Name'</pre>
</dd>
</dl>
<br/><dl>
<dt><strong><a name="translate_all" class="item">-translate_all =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="on_es_werden_alle_gleichen_kurzw_rter_durch_die_entspechenden_langw_rter_ersetzt" class="item">'on' Es werden alle gleichen Kurzwörter durch die entspechenden Langwörter ersetzt.</a></strong>

</li>
<li><strong><a name="ersetzt" class="item">'off' Es wird nur das erste vorkommende Kurzwort durch das entspechende Langwort ersetzt (Standardeinstellung).</a></strong>

<pre>
    # c =&gt; car
    # -delete_single =&gt; 'off'
    $newojekt-&gt;config(-translate_all =&gt; 'off'); # ' c c  c' wird zu 'car c c'
    $newojekt-&gt;config(-translate_all =&gt; 'on');  # ' c c  c' wird zu 'car car car'</pre>
</dd>
</dl>
<br/><dl>
<dt><strong><a name="delete_whitespace" class="item">-delete_whitespace =&gt;</a></strong></dt>

<dd>
</li>
<li><strong><a name="entfernt" class="item">'on' Es werden alle doppelten oder mehrfachen Leerzeichen entfernt (Standardeinstellung).</a></strong>

</li>
<li><strong><a name="ndert" class="item">'off' Leerzeichen werden nicht verändert (außer am Anfang und Ende)</a></strong>

<pre>
    # c =&gt; car
    $newojekt-&gt;config(-delete_whitespace =&gt; 'on');  # ' c   Ford' = 'car Ford'
    $newojekt-&gt;config(-delete_whitespace =&gt; 'off'); # ' c   Ford' = 'car   Ford'</pre>
<br/></dd>
</dl>
<p>
</p>
<h2><a name="_obj__get_dictionary">$Obj-&gt;get_dictionary</a></h2>
<p>Gibt eine nach den Schlüsselwörtern(Kurzwörter) sortierte Liste aller Kurzwort =&gt; Langwort Paare in Form eines Arrays zurück.</p>
<p>Damit lassen sich von einem Frontend aus Infofenster generieren.</p>
<p>Der Aufbau ist folgender:</p>
<p>$array[0] = ('kurzform1 =&gt; langform1')</p>
<p>$array[1] = ('kurzform2 =&gt; langform2')</p>
<p>...</p>
<br/><p>
</p>
<h2><a name="_obj__get_config_optional_">$Obj-&gt;get_config(optional)</a></h2>
<p>Gibt ohne Argument eine sortierte Liste aller Konfigurationen in Form eines Arrays zurück.</p>
<p>Der Aufbau des Arrays ist der gleiche wie bei get_dictionary.</p>
<p>Wenn ein Argument gesetzt wird, wird nur der Inhalt der betreffenden Config zurückgegeben.</p>
<p>Example:</p>
<pre>
    $foo = $Obj-&gt;get_config('-add');   # $foo = 'on' oder 'off'</pre>
<br/><p>
</p>
<h2><a name="_obj__get_error_message">$Obj-&gt;get_error_message</a></h2>
<p>Gibt im Falle eines Fehlers eine Fehlermeldung zurück.</p>
<p>Wird bei jedem weiteren Methodenaufruf gelöscht, muss also unmittelbar nach einem Methodenaufruf abgefragt werden.</p>
<p>Example:</p>
<pre>
    $foo = $obj-&gt;get_error_message();   # $foo = &quot;error text.....&quot;</pre>
<p>
</p>
<hr />
<h1><a name="aufbau_der_textdatei">Aufbau der Textdatei</a></h1>
<p>Zeile 1 = erster Schlüssel (Kurzform)</p>
<p>Zeile 2 = erster Wert (Langform)</p>
<p>...</p>
<p>Example:</p>
<pre>
    # a
    # adam
    # b
    # berta</pre>
<p>
</p>
<hr />
<h1><a name="exports">Exports</a></h1>
<p>Ein Exporter wird nicht verwendet.</p>
<p>
</p>
<hr />
<h1><a name="todo">ToDo</a></h1>
<p>Testen, Testen, Testen .....</p>
<p>
</p>
<hr />
<h1><a name="abh__ngigkeiten">Abhängigkeiten</a></h1>
<p>Keine, das Modul benötigt keine Biblioteken</p>
<p>
</p>
<hr />
<h1><a name="kompatibilit__t_und_tests">Kompatibilität und Tests</a></h1>
<p>Getestet wurde das Modul bisher mit Perl 5.14.2</p>
<p>Das folgende Script kann ohne weitere Abhängigkeiten zum Testen der Methoden verwendet werden.</p>
<pre>
    #!/usr/bin/perl</pre>
<pre>
    use strict;
    use v5.12;          # wird nur für say benötigt
    use warnings;</pre>
<pre>
    use Trk_dict_oop;</pre>
<pre>
    # Testprogramm zum Testen von Trk_dict_oop</pre>
<pre>
    sub menue {
        say &quot;Testprogramm&quot;;
        say &quot;------------\n&quot;;
        say &quot;'menue' zeigt dieses Menue nochmal&quot;;
        say &quot;'config' zeigt alle Konfigurationen an&quot;;
        say &quot;'config...' ruft config auf z.B config -save =&gt; 'on'&quot;;
        say &quot;'ende' beendet das Programm&quot;;
        say &quot;'wörterbuch' zeigt die Kurz-Langform liste&quot;;
        say &quot;'error ?' zeigt eine Fehlermeldung&quot;;
        say &quot;'append...' fügt ein einzelnes neues Paare hinzu z.B. append e =&gt; emil\n&quot;;
        say &quot;Alle anderen Eingaben werden direkt und ungefiltert an translate übermittelt\n&quot;;
        say &quot;Dass eine Eingabe von translate verarbeitet wurde erkennt man daran dass die\nAusgabe innerhalb von einem &gt;und&lt; Zeichen ist\n\n&quot;;
    }</pre>
<pre>
    #  ----------------Main-------------------------------------------------</pre>
<pre>
    my @array;
    my $obj = Trk_dict-&gt; new(-base =&gt; 'test',w =&gt; 'walter');</pre>
<pre>
    menue();
    while (1){
        chomp (my $eingabe = &lt;&gt;);
        if ($eingabe eq 'ende'){last}
        elsif ($eingabe eq 'wörterbuch'){
            @array = $obj-&gt;get_dictionary();
            foreach (@array){
                say
            }
            say &quot;\n\n&quot;;
        }
        elsif ($eingabe eq 'menue'){menue()}</pre>
<pre>
        elsif ($eingabe eq 'config'){
            @array = $obj-&gt;get_config();
            foreach (@array){
                say
            }
            say &quot;\n\n&quot;;
        }</pre>
<pre>
        elsif ($eingabe =~ /\Aconfig /){
            $_ = $eingabe;
            s/config //g;
            @array = split / =&gt; /, $_;
            $array[1] =~ s/\'//g;;
            $_ = $obj-&gt;config($array[0], $array[1]);
            if ($_ eq &quot;ERROR&quot;){say $obj-&gt;get_error_message()}
            else {say}
            say &quot;\n\n&quot;;
        }
        elsif ($eingabe =~ /\Aappend /){
            $_ = $eingabe;
            s/append //g;
            @array = split / =&gt; /, $_;
            $array[1] =~ s/\'//g;
            $obj-&gt;append($array[0], $array[1]);
            @array = $obj-&gt;get_dictionary();
            foreach (@array){
                say
            }
            say &quot;\n\n&quot;;
        }
        elsif ($eingabe eq 'testlauf'){
            testlauf()
        }
        elsif ($eingabe eq 'error ?'){
            my $ausgabe = $obj-&gt;get_error_message();
            if ($ausgabe) {say $ausgabe}
            else {say &quot;Keine Fehlermeldung vorhanden&quot;}
            }
        else {
            my $ausgabe = $obj-&gt;translate($eingabe);
            if ($ausgabe) {say &quot;&gt;$ausgabe&lt;&quot;}
            else {say &quot;&gt;&lt;&quot;};
        }
}</pre>
<p>
</p>
<hr />
<h1><a name="version">VERSION</a></h1>
<p>Version 0.1 letzte Änderung 30.05.2014</p>

</body>

</html>
