]> git.p6c8.net - template-class.git/blob - doc/changes.htm
template.py funktioniert auch unter Python 2.7.
[template-class.git] / doc / changes.htm
1 <?xml version="1.0" encoding="iso-8859-1" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <title>Versionshistorie</title>
8 <meta name="author" content="Patrick Canterino" />
9 <link rel="stylesheet" href="style.css" type="text/css" />
10 </head>
11 <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#0000FF">
12
13 <h1>Versionshistorie</h1>
14
15 <p><b>Neu in Version&nbsp;2.5</b> (vom 27.11.2011)</p>
16
17 <ul>
18 <li><b>Variablen werden komplett anders ersetzt:</b><br />
19 Der Vorgang des Ersetzens der Variablen wurde komplett ge&auml;ndert. Die Template-Klasse durchsucht den Template-Text nun Zeichen f&uuml;r Zeichen und ersetzt Variablen durch Text. Der Sinn hinter ist, dass auf diese Weise keine Variablen in Variablen mehr ersetzt werden k&ouml;nnen.<br />
20 Dieses neue Verfahren ist deaktivierbar, d.h. man kann bei Problemen auf das alte Verfahren, das einfach nur Zeichenketten ersetzt, zur&uuml;ckgreifen.</li>
21 <li><b><code>set_vars()</code> und <code>add_vars()</code>:</b><br />
22 Mit den neuen Methoden <code>set_vars()</code> und <code>add_vars()</code> ist es nun m&ouml;glich, die interne Variablenliste komplett zu &uuml;berschreiben oder mit mehreren Variablen und Werten auf einmal zu erg&auml;nzen.</li>
23 <li><b><code>{TRIM}</code>-Bl&ouml;cke in der Perl-Version funktionieren jetzt:</b><br />
24 Das Verarbeiten der <code>{TRIM}</code>-Bl&ouml;cke hat in der Perl-Version nicht funktioniert, da eine falsche Variable verwendet wurde. Dieser Fehler wurde behoben.</li>
25 <li><b>Anderer Programmierstil:</b><br />
26 Der Programmierstil wurde ge&auml;ndert. Dies betrifft vor allem die Einr&uuml;ckungen.</li>
27 <li><b>Dokumentation korrigiert:</b><br />
28 In der Dokumentation war die Beschreibung f&uuml;r die <code>reset()</code>- und die <code>save_state()</code>-Methode unvollst&auml;ndig.</li>
29 <li><b>Neue Lizenz:</b><br />
30 Die Template-Klasse ist nun unter den Bedingungen der <a href="http://www.opensource.org/licenses/artistic-license-2.0.php">Artistic License 2.0</a> lizenziert.</li>
31 </ul>
32
33 <p><b>Neu in Version&nbsp;2.0</b> (vom 9.8.2006)</p>
34
35 <ul>
36 <li><b><code>get_var()</code>, <code>set_var()</code> und <code>parse()</code>:</b><br />
37 Um die Arbeit mit der Template-Klasse etwas zu vereinfachen, wurde ein neues Interface f&uuml;r die Haupt-Arbeit eingef&uuml;hrt. Es besteht im Wesentlichen aus den drei neuen Methoden <code>get_var()</code>, <code>set_var()</code> und <code>parse()</code>.
38 <ul>
39 <li><code>get_var()</code> gibt den Wert einer Variablen zur&uuml;ck. Wenn kein Name angegeben wurde, gibt <code>get_var()</code> die Namen aller definierten Variablen zur&uuml;ck.</li>
40 <li><code>set_var()</code> weist einer Variablen einen Wert zu.</li>
41 <li><code>parse()</code> setzt die Variablen ein, verarbeitet die <code>{IF}</code>-Bl&ouml;cke, verarbeitet die Schleifen und liest die in der Template definierten Variablen aus.</li>
42 </ul>
43 </li>
44 <li><b>Variablen direkt in der Template-Datei definieren:</b><br />
45 Man kann nun mit Hilfe der neuen <code>{DEFINE}</code>-Bl&ouml;cke Variablen direkt in der Template-Datei definieren, so als h&auml;tte man sie mit <code>set_var()</code> definiert.<br />
46 Es gibt hierbei zwei M&ouml;glichkeiten:
47 <ol type="1">
48 <li><code>{DEFINE Name &quot;Wert&quot;}</code>:<br />
49 Hierbei erh&auml;lt die Variable &quot;Name&quot; den Wert &quot;Wert&quot;. Innerhalb des Blockes d&uuml;rfen keine Zeilenumbr&uuml;che vorkommen, ansonsten wird er ignoriert. Der Name der Variable darf keine Zeilenumbr&uuml;che oder Leerzeichen enthalten. Wenn der Wert ausgelesen wird, so wird <code>\n</code> durch einen Zeilenumbruch ersetzt.</li>
50 <li><code>{DEFINE Name}Wert{ENDDEFINE}</code>:<br />
51 Auch hier erh&auml;lt die Variable &quot;Name&quot; den Wert &quot;Wert&quot;. Der Name darf ebenfalls keine Zeilenumbr&uuml;che oder Leerzeichen enthalten, der Wert allerdings schon.</li>
52 </ol>
53 Die direkt mit <code>set_var()</code> haben allerdings Vorrang gegen&uuml;ber den erst &uuml;ber <code>{DEFINE}</code> definierten. Zus&auml;tzlich werden zweitere erst von <code>parse()</code> abgearbeitet, wenn erstere abgearbeitet wurden.</li>
54 <li><b>Schleifen:</b><br />
55 Es wurde eine einfache M&ouml;glichkeit zur Realisierung von Schleifen in einer Template-Datei hinzugef&uuml;gt.<br />
56 Man kann einen Block jetzt in <code>{LOOP}</code>...<code>{ENDLOOP}</code>-Bl&ouml;cke einschlie&szlig;en. Dieser Block bekommt einen Namen, diesem Namen werden dann &uuml;ber die Methoden <code>add_loop_data()</code> und/oder <code>set_loop_data()</code> Variablen zugewiesen. Der Block wird dann f&uuml;r jeden Durchgang mit neuen Werten ausgegeben.<br />
57 Der Vorteil hiervon ist, dass man so f&uuml;r sich wiederholende Bl&ouml;cke keine separate Template-Dateien erstellen muss.<br />
58 Es ist zur Zeit leider noch nicht m&ouml;glich, Schleifen zu verschachteln!</li>
59 <li><b><code>{TRIM}</code>-Bl&ouml;cke:</b><br />
60 Man kann jetzt Textstellen in <code>{TRIM}</code>-Bl&ouml;cke einschlie&szlig;en. Beim Inhalt werden vorangestellte und abschlie&szlig;endende Leerzeichen und Zeilenumbr&uuml;che entfernt.</li>
61 <li><b>Verhalten der <code>{INCLUDE}</code>-Anweisungen ver&auml;ndert:</b><br />
62 Das Verhalten der <code>{INCLUDE}</code>-Anweisungen wurde in einigen F&auml;llen ge&auml;ndert:
63 <ul>
64 <li>Wenn man bei einer <code>{INCLUDE}</code>-Anweisung einen relativen Pfad angibt, so gilt dieser Pfad nun relativ zur <b>Template-Datei</b> und nicht mehr zum Script.<br />
65 So wollte ich das eigentlich immer haben. Das alte Verhalten war eine Notl&ouml;sung, weil ich mir nicht anders zu helfen wusste...</li>
66 <li>Die Dateinamen, die bei einer <code>{INCLUDE}</code>-Anweisung angegeben werden, k&ouml;nnen nun auch Leerzeichen oder das }-Zeichen enthalten. In diesem Fall muss man den Dateinamen aber in doppelte Anf&uuml;hrungszeichen setzen.</li>
67 </ul>
68 </li>
69 <li><b>Template zur&uuml;cksetzen:</b><br />
70 Mit Hilfe der neuen <code>reset()</code>-Methode k&ouml;nnen Sie den Template-Text in den Zustand zur&uuml;ckversetzen, den er nach dem Auslesen der Template-Datei hatte. Zus&auml;tzlich k&ouml;nnen Sie mit <code>save_state()</code> den aktuellen Zustand des Template-Textes sichern und diesen dann bei Bedarf eben mit <code>reset()</code> wiederherstellen.</li>
71 <li><b>Alias-Funktionen entfernt:</b><br />
72 In der Perl- und in der PHP-Version wurden die alten Alias-Funktionen <code>addtext()</code>, <code>as_string()</code>, <code>condtag()</code> und <code>readin()</code> entfernt.</li>
73 <li><b>Kleine Korrekturen:</b><br />
74 Es wurden verschiedene, unterschiedliche kleine Korrekturen durchgef&uuml;hrt:
75 <ul>
76 <li>Die Perl-Version verwendet jetzt nicht mehr <code>split()</code>, um eine Zeichenkette aufzuteilen. Stattdessen verwendet sie nun meine <a href="http://www.patshaping.de/hilfen_ta/codeschnipsel/perl-explode.htm" target="_blank">Portierung der <code>explode()</code>-Funktion von PHP</a>. Die Grund hierf&uuml;r ist ein Problem von <code>split()</code>, welches auch auf der verlinkten Seite beschrieben wird.</li>
77 <li>Die Python-Version verwendet jetzt die Objektmethoden des String-Datentyps anstatt der Methoden aus dem <tt>string</tt>-Modul.</li>
78 <li>Die Python-Version kommt jetzt vollst&auml;ndig ohne regul&auml;re Ausdr&uuml;cke aus.</li>
79 </ul>
80 </li>
81 <li><b>Dokumentation neu strukturiert:</b><br />
82 Die Dokumentation wurde komplett neu strukturiert. Sie befindet sich nun im Unterverzeichnis <i>doc</i> und besteht aus mehreren Dateien.</li>
83 </ul>
84
85 <p><b>Neu in Version&nbsp;1.5a</b> (vom 6.6.2005)</p>
86
87 <ul>
88 <li><b>PHP-Version nun ohne &quot;Notices&quot;:</b><br />
89 Die PHP-Version der Template-Klasse hat eine &quot;Notice&quot; erzeugt, wenn f&uuml;r <code>error_reporting</code> der Wert <code>E_ALL</code> eingestellt war.</li>
90 <li><b>Fehlermeldung bei komplett leerer Template-Datei:</b><br />
91 Wenn die PHP-Version der Klasse eine Template-Datei mit einer Gr&ouml;&szlig;e von 0&nbsp;Bytes h&auml;tte einlesen sollen, hatte <code>fread()</code> eine Fehlermeldung erzeugt. Das ist nun behoben.</li>
92 </ul>
93
94 <p><b>Neu in Version&nbsp;1.5</b> (vom 5.5.2005)</p>
95
96 <ul>
97 <li><b><code>{IF}</code>-Bl&ouml;cke verneinen:</b><br />
98 Man kann <code>{IF}</code>-Bl&ouml;cke nun verneinen, indem man vor den Namen des Blockes ein <code>!</code> stellt. Die Methode <code>parse_if_block()</code> verarbeitet diese Bl&ouml;cke automatisch, es sei denn man setzt den neuen dritten Parameter dieser Routine auf <i>true</i>.</li>
99 <li><b>Fehlende <code>{INCLUDE}</code>-Dateien:</b><br />
100 Wenn eine Datei &uuml;ber eine <code>{INCLUDE}</code>-Anweisung eingebunden werden soll und die Datei existiert nicht, so wird diese Anweisung nicht mehr aus dem Vorlagentext entfernt.</li>
101 <li><b>Python-Version:</b><br />
102 Es existiert nun ebenfalls eine <a href="http://www.python.org/" target="_blank">Python</a>-Version der Template-Klasse. Von den Perl- und PHP-Versionen unterscheidet sie sich lediglich dadurch, dass sie nicht die Alias-Methoden bereitstellt (Methodennamen vor Version&nbsp;1.2).</li>
103 </ul>
104
105 <p><b>Neu in Version&nbsp;1.4a</b> (vom 21.3.2005)</p>
106
107 <ul>
108 <li><b>Mehrere <code>{ENDIF}</code> am Ende des Vorlagentextes:</b><br />
109 Wenn der Vorlagentext mit mehr als einem <code>{ENDIF}</code> endete, hat der <code>{IF}</code>-Parser der Perl-Version diese nicht gefunden und das Script wegen eines Verschachtelungsfehlers beendet.</li>
110 <li><b>(Mal wieder) Nicht funktionierender Alias in PHP-Fassung:</b><br />
111 F&uuml;r die Methode <code>add_text()</code> existiert aus Kompatibilit&auml;tsgr&uuml;nden ein Alias namens <code>addtext()</code>. In der PHP-Version der Klasse wurden die Argumente, die <code>addtext()</code> &uuml;bergeben wurden, nicht an <code>add_text()</code> weitergegeben.</li>
112 </ul>
113
114 <p><b>Neu in Version&nbsp;1.4</b> (vom 5.2.2005)</p>
115
116 <ul>
117 <li><b>Verschachtelungsfehler bei <code>{IF}</code>-Bl&ouml;cken:</b><br />
118 Bisher geriet der <code>{IF}</code>-Parser immer in eine Endlosschleife, wenn die <code>{IF}</code>-Bl&ouml;cke nicht korrekt verschachtelt waren.<br />
119 Das d&uuml;rfte jetzt behoben sein. Der Parser pr&uuml;ft jetzt, ob intern das letzte <code>{ENDIF}</code> &uuml;berschritten wurde. In diesem Fall wird das Script sofort mit einer Fehlermeldung beendet.</li>
120 <li><b>Suchen von <code>{IF}</code>-Bl&ouml;cken in <code>{IF}</code>-Bl&ouml;cken</b>:<br />
121 Um einen weiteren <code>{IF}</code>-Block in einem <code>{IF}</code>-Block zu erkennen, wird jetzt nicht mehr nach <code>{IF</code>, sondern nach <code>{IF&nbsp;</code> gesucht.<br />
122 Das ist zwar immer noch nicht das, was ich eigentlich will, aber es ist etwas besser als die alte Methode. Ich w&uuml;rde es ja gerne mit einem regul&auml;ren Ausdruck l&ouml;sen, der nach <code>\{IF&nbsp;.+?\}</code> oder so sucht, aber das hat nur noch mehr Probleme bereitet.</li>
123 <li><b>Einfache Anf&uuml;hrungszeichen statt doppelter:</b><br />
124 Es wurden, wo es angebracht war, alle doppelten Anf&uuml;hrungszeichen durch einfache ersetzt. Das bringt hoffentlich einen Geschwindigkeitsgewinn.</li>
125 <li><b>Name der Template-Datei in den Objekteigenschaften:</b><br />
126 Der Name der von <code>read_file()</code> eingelesenen Template-Datei wird jetzt in den Objekteigenschaften gespeichert.</li>
127 </ul>
128
129 <p><b>Neu in Version&nbsp;1.3</b> (vom 20.5.2004)</p>
130
131 <ul>
132 <li><b><code>{INCLUDE}</code>-Anweisungen:</b><br />
133 Es ist nun m&ouml;glich, in einer Vorlage <code>{INCLUDE Dateiname}</code>-Anweisungen einzubauen. Die Anweisungen werden beim Einlesen der Vorlagen-Datei durch den Inhalt der angegebenen Datei ersetzt.<br />
134 Das Verarbeiten der <code>{INCLUDE}</code>-Anweisungen l&auml;sst sich auch von Hand durchf&uuml;hren und das automatische Verarbeiten beim Lesen einer Datei l&auml;sst sich auch verhindern.</li>
135 <li><b><code>to_file()</code>:</b><br />
136 Mit der neuen Methode <code>to_file()</code> ist es m&ouml;glich, den kompletten Vorlagentext in eine zuvor ge&ouml;ffnete Datei zu schreiben.</li>
137 <li><b>Nicht funktionierender Alias in PHP-Fassung:</b><br />
138 F&uuml;r die Methode <code>add_text()</code> existiert aus Kompatibilit&auml;tsgr&uuml;nden ein Alias namens <code>addtext()</code>. In der PHP-Version der Klasse rief dieser Alias jedoch nicht <code>add_text()</code> auf, sondern die nicht existierende Methode <code>add_template()</code>.</li>
139 </ul>
140
141 <p><b>Neu in Version&nbsp;1.2a</b> (vom 12.9.2003)</p>
142
143 <ul>
144 <li><b>Fehler in <code>substr_count()</code>:</b><br />
145 Die von der Perl-Version der Klasse emulierte PHP-Funktion <code>substr_count()</code> enthielt einen Fehler. Wenn sich der zu suchende am Ende des zu durchsuchenden Strings befand, wurde er nicht gefunden.<br />
146 Die richtige Methode, Strings in Strings zu z&auml;hlen, wurde <tt>perlfaq4</tt> entnommen.</li>
147 </ul>
148
149 <p><b>Neu in Version&nbsp;1.2</b> (vom 9.9.2003)</p>
150
151 <ul>
152 <li><b>Methoden umbenannt:</b><br />
153 (Fast) Alle Methoden dieser Klasse haben neue, intelligentere Namen erhalten. Hier die neuen Namen im Einzelnen:<br />
154 <code>addtext()</code> =&gt; <code>add_text()</code><br />
155 <code>as_string()</code> =&gt; <code>get_template()</code><br />
156 <code>condtag()</code> =&gt; <code>parse_condtag()</code><br />
157 <code>readin()</code> =&gt; <code>read_file()</code><br />
158 Die alten Namen lassen sich selbstverst&auml;ndlich weiterhin verwenden. Das k&ouml;nnte sich aber irgendwann &auml;ndern.</li>
159 <li><b>ELSE hinzugef&uuml;gt:</b><br />
160 Die IF-Syntax versteht nun auch <code>{ELSE}</code>-Abschnitte, die angezeigt werden, wenn die Bedingung nicht erf&uuml;llt ist.</li>
161 <li><b>Variablen durch Array ersetzen:</b><br />
162 Mit der neuen Funktion <code>fillin_array()</code> ist es nun m&ouml;glich, Variablen durch Arrays zu ersetzen.</li>
163 <li><b><code>get_template()</code> und <code>set_template()</code>:</b><br />
164 Mit Hilfe der neuen Methoden <code>get_template()</code> und <code>set_template()</code> ist es viel leichter geworden, auf den in den Objekt-Eigenschaften gespeicherten Vorlagentext zuzugreifen.</li>
165 <li><b>Emuliertes <code>substr_count()</code> &uuml;berarbeitet:</b><br />
166 Die von der Perl-Fassung der Klasse emulierte PHP-Funktion <code>substr_count()</code> wurde ein wenig verbessert. Sie teilt zun&auml;chst die Zeichenkette mit der zu z&auml;hlenden Zeichenkette auf. Anschlie&szlig;end z&auml;hlt sie von der Anzahl der so entstandenen Array-Elemente 1 ab und gibt das Ergebnis zur&uuml;ck.</li>
167 <li><b>Keine regul&auml;re Ausdr&uuml;cke mehr in der PHP-Version:</b><br />
168 Die PHP-Version der Klasse verwendet nun keine regul&auml;re Ausdr&uuml;cke mehr, was hoffentlich zu einer Geschwindigkeitsverbesserung f&uuml;hrt.</li>
169 </ul>
170
171 <p><b>Neu in Version&nbsp;1.1</b> (vom 21.7.2003)</p>
172
173 <ul>
174 <li><b>Neue IF-Syntax:</b><br />
175 Es wird jetzt eine viel &uuml;bersichtlichere Syntax f&uuml;r bedingte Abschnitte verwendet. Diese Abschnitte werden mit einem <code>{IF}</code> eingeleitet und von einem <code>{ENDIF}</code> abgeschlossen.</li>
176 <li><b>CondTag am Anfang:</b><br />
177 Wenn ein CondTag-Abschnitt am Anfang eines Textes war, hat die PHP-Version diesen nicht erkannt, da die 0 als <i>false</i> interpretiert wurde.</li>
178 </ul>
179
180 <p><b>Neu in Version&nbsp;1.0</b> (vom 3.6.2003)</p>
181
182 <ul>
183 <li><b>Erste Version:</b><br />
184 Dies ist die erste Version der Template-Klasse. Sie erschien mit der Version&nbsp;1.3 des <a href="http://www.patshaping.de/redirector/redirect.php?page=guestbook" target="_blank"><i>Guestbook</i></a> und wurde nicht offiziell zum Download angeboten.</li>
185 </ul>
186
187 <hr width="80%" noshade="noshade" />
188
189 <p><a href="index.htm">Zur &Uuml;bersicht</a></p>
190
191 <hr width="80%" noshade="noshade" />
192
193 <p style="font-size:8pt">&copy;&nbsp;2002-2011 Patrick Canterino</p>
194
195 <table border="0" cellspacing="0" style="font-size:8pt">
196 <tr>
197 <td>Homepage:</td>
198 <td><a href="http://www.patshaping.de/">http://www.patshaping.de/</a></td>
199 </tr>
200 <tr>
201 <td><a name="bottom" id="bottom">E-Mail:</a></td>
202 <td><a href="mailto:patrick@patshaping.de">patrick@patshaping.de</a></td>
203 </tr>
204 </table>
205 </body>
206 </html>

patrick-canterino.de