Aneamal-Version 27
Ein paar Monate später als geplant ist sie nun da, Version 27 des Aneamal-Übersetzers. Auf dieser Seite stelle ich ausgewählte Neuerungen vor – es gibt eine komplette Liste an anderer Stelle – und gebe einen Ausblick auf die Zukunft nach dieser größten Aktualisierung in der Aneamal-Geschichte.
Version 27 des Aneamal-Übersetzers steht zum Herunterladen bereit.
So aktualisierst du eine ältere Version
Die Aktualisierung wird allen Nutzern empfohlen. Vergewissere dich, dass PHP mindestens in der Version 7.1 auf deinem Webspace läuft. Lege eine Sicherheitskopie deines aneamal-Ordners an. Übernehme deine Einstellungen wie unten erläutert aus aneamal-config.php nach @meta.nml. Lade die folgenden vier Dateien hoch:
- @meta.nml
- aneamal/func.php
- aneamal/html.php
- aneamal/main.php
Nach dem erfolgreichen Update kannst du die zwei Dateien
- aneamal-config.php
- aneamal/functions.php
entfernen. Sie werden nicht mehr verwendet. Übernehme bei Bedarf die auf dieser Seite beschriebenen CSS-Angaben in deine Datei @look.css.
Cache
Rund ums Zwischenspeichern der übersetzten Seiten und Vorschaubilder gibt es drei Verbesserungen.
Gültigkeitsdauer
In der Datei .htaccess kann man bereits seit Jahren einen serverseitigen Cache aktivieren. Neben der Option
AneamalCache on
um den Cache außer bei Anfrage mit der POST-Methode zu nutzen, und
AneamalCache forced
um den Cache einschließlich bei Anfrage mit der POST-Methode zu nutzen, gibt es nun auch die Möglichkeit, eine Zahl anzugeben:
AneamalCache 86400
Diese Variante entspricht on, aber mit beschränkter Gültigkeitsdauer auf die angegebene Zahl an Sekunden. In diesem Beispiel wären das 24 Stunden. Spätestens nach dieser Zeit würde eine wieder aufgerufene Aneamal-Datei neu generiert und das Resultat wieder für bis zu 24 Stunden gespeichert.
Die zeitliche Beschränkung gilt nur für Webseiten, also übersetzte Aneamal-Dateien, nicht für Vorschaubilder.
Vorschaubilder
Während neu bearbeitete Aneamal-Dateien im Cache automatisch aktualisiert wurden und werden, galt das für Vorschaubilder – also per [j]->
generierte Versionen von Originalbildern – bislang nicht. Das ändert sich nun. Wird das Originalbild aktualisiert und eine Aneamal-Datei aufgerufen, in der das Bild mit [j]->
verknüpft ist, dann wird ein neues Vorschaubild unter einer neuen Adresse erstellt.
Zusammenarbeit mir Browser-Caches
Es gibt nicht nur den serverseitigen Cache. Auch Browser legen Webseiten clientseitig in einem Zwischenspeicher ab. Wenn ein Besucher eine Seite zum zweiten Mal besucht und sie in seinem Browser noch gespeichert ist, dann braucht sie kein zweites Mal heruntergeladen zu werden, sofern sie sich auch serverseitig in der Zwischenzeit nicht verändert hat.
Dafür wird bei aktiviertem AneamalCache nun der HTTP-Header Last-Modified
gesandt, der von Browsern übertragene Header If-Modified-Since
ausgewertet und ggf. mit dem HTTP-Status-Code 304 Not Modified
statt der ganzen Webseite geantwortet.
Zitate im Textfluss
Die geraden Anführungszeichen "…"
aus dem ASCII-Zeichensatz werden nach HTML jetzt so übersetzt: <q>…</q>
. Per CSS kann ihre Darstellung variiert werden. Sinnvoll ist, die angezeigten Anführungszeichen von der Sprache des Textes abhängig zu machen. Auf dieser Seite habe ich beispielhaft folgende CSS-Angaben eingefügt:
q {quotes: '"' '"' "'" "'"}
q:lang(en) {quotes: '“' '”' '‘' '’'}
q:lang(de) {quotes: '„' '“' '‚' '‘'}
q:lang(de-ch) {quotes: '«' '»' '‹' '›'}
Ein Text in Esperanto, für den keine spezifische Darstellung vorgegeben ist, wird dementsprechend mit geraden Anführungszeichen dargestellt:
@lang: eo
"Saluton!"
Saluton!
Der englische Text wird mit typografisch bevorzugten englischen Anführungszeichen ausgegeben:
@lang: en
"Hello!"
Hello!
Der österreichische Text, ein Dialekt des Deutschen, wird mit den Anführungszeichen für die deutsche Sprache präsentiert:
@lang: de-at
"Grüß Gott!"
Grüß Gott!
Fürs Deutsch nach Schweizer Rechtschreibung werden aber andere Anführungszeichen angezeigt, wie man sie ähnlich auch im Französischen verwendet:
@lang: de-ch
"Grüezi!"
Grüezi!
Durchstreichen
Textabschnitte kann man nun durchstreichen. Sinnvoll ist das vor allem, wenn man Änderungen dokumentieren möchte. Es kann aber auch humoristischen Effekten dienen. So geht es:
+-Urbi-+ Urso et Orbi
Urbi Urso et Orbi
Listennummern als Linkziel
Listennummern werden nun auch als solche erkannt, wenn man sie mit vorgestelltem #
zum Ziel für Links macht. So lassen sich Fußnoten1 als nummerierte Liste2 verwalten:
___
#1. Das ist eine Anmerkung unterhalb des Textes zu einer Textstelle.
#2. "Nummerieren" kann man man in Aneamal auch mit Buchstaben.
- Das ist eine Anmerkung unterhalb des Textes zu einer Textstelle.
Nummerieren
kann man man in Aneamal auch mit Buchstaben.
Per CSS kann man über einen Link angesteuerte Listenpunkte übrigens hervorheben:
li:target {background: yellow}
Eingerückte Stichpunkte
In Aufzählungslisten kann man Einträge mit Punkten einrücken. Leerzeichen dazwischen sind optional. Damit kann man „Unterstichpunkte“ erzeugen:
<> Banane
<> Kirsche
. <> Süßkirsche
. . <> Knupper
. <> Sauerkirsche
- Banane
- Kirsche
- Süßkirsche
- Knupper
- Sauerkirsche
- Süßkirsche
In Aneamal sind prinzipiell auch Einrückungen ohne einen „übergeordneten Eintrag“ möglich:
. . <> Sabre
. <> Odin
. . <> Romance
<> Wotan
. . <> Benno
. <> Fina
. . <> Elvira
-
-
- Sabre
- Odin
- Romance
-
- Wotan
-
- Benno
- Fina
- Elvira
-
Beachte: In HTML sind die Listen mit geschachtelten <ul>
- und <li>
-Elementen implementiert. Bei diesen ist es prinzipiell unmöglich, eine Schachtelungstiefe zu überspringen. Der Aneamal-Übersetzer fügt daher bei den in Aneamal nicht angegebenen, aber in HTML nötigen, <li>
-Elementen die Klasse _skip
hinzu. Per CSS können diese mit
._skip {list-style-type: none}
unsichtbar gemacht werden, wie es auf dieser Seite auch gemacht wurde.
Dateien und Formelblöcke in Listen
Listen können nun nicht nur Text, sondern auch eingebettete und verknüpfte Dateien sowie Formelblöcke $$…$$
enthalten, zum Beispiel:
Auf dem Bauernhof sah ich diese Tiere:
<> [i]->huhn.jpg
<> [i]->rind.jpg
<> [i]->mensch.jpg
Dies gilt für einfache Aufzählungslisten wie im Beispiel, für nummerierte Liste, Zuordnungslisten und auch „Tabellen“ als zweidimensionale Zuordnungslisten.
Ausrichtung
Bislang konnte man einzelne Textabsätze bei Bedarf durch eine vorgestellte Markierung explizit links :..
oder zentriert .:.
oder rechts ..:
ausrichten. Das funktioniert nun nicht nur mit einfachen Textabsätzen, sondern mit jedem Block. Außerdem gibt es acht neue Markierungen für zusätzliche Ausrichtungen. Diese Tabelle fasst alle zusammen und gibt an, welche Klassen ihnen in HTML zugeordnet werden.
Aneamal | HTML-Klassen |
---|---|
:.. |
_align _left |
::. |
_align _mid _left |
.:. |
_align _center |
.:: |
_align _mid _right |
..: |
_align _right |
:.: |
_align _justify |
: : |
_columns |
::: |
_row |
:. |
_float _port |
.: |
_float _starboard |
:: |
_clear |
Die Klassen werden in der Regel in einem HTML-<div>
-Element, bei Überschriften ausklappbarer Abschnitte im HTML-<summary>
-Element gesetzt.
Welche Wirkung sie haben sollen, kannst du auf der Demoseite zur Ausrichtung sehen. Die konkrete Umsetzung allerdings liegt in der Hand dessen, der die CSS-Angaben schreibt – in der Regel in der Datei @look.css. Aneamal fügt keine CSS-Angaben für die Ausrichtung mehr direkt ins HTML-Dokument ein, da diese gegebenenfalls mit den restlichen CSS-Angaben abgestimmt sein müssen.
Die Demoseite enthält beispielhaft folgende CSS-Angaben – aber fasse das bitte nicht als ein So muss es sein
oder ein Das klappt für alle Fälle
auf:
._left {text-align: left}
._center {text-align: center}
._right {text-align: right}
._justify {text-align: justify}
._mid {display: table; margin: 0 auto}
._align :not(._align) {text-align: inherit}
._columns {columns: 3 14em}
._row {column-span: all}
._float {margin: 0 0 .5em 0}
._port {clear: left; float: left; margin-right: 1em}
._starboard {clear: right; float: right; margin-left: 1em}
._float figure {display: table; margin: 0}
._float img {display: block}
._float figcaption {caption-side: bottom; display: table-caption; margin-top:.5em}
._clear {clear: both}
Die Markierungen können kombiniert werden, um beispielsweise Spalten zentrierten Textes zu erhalten. Beachte, dass nach einer Markierung ein Zeilenumbruch oder anderer Leerraum folgen muss. Ansonsten wäre etwas wie :..:.
mehrdeutig. Richtig ist da entweder :. .:.
oder :.. :.
Klasse für einfache Textdateien
Mit [t]
ohne Zusatzmodul geladene Textdateien werden nun mit einer Klasse _plain
ausgegeben:
<pre class='_plain'>…</pre>
Du kannst dafür die bisher in die HTML-Ausgabe gepackte CSS-Angabe in @look.css hinterlegen:
pre._plain {white-space: pre-wrap}
Fehlermeldungen per CSS ausblenden
Fehlermeldungen dienen dazu, Autoren auf Markup-Probleme hinzuweisen und ihnen zu helfen, sie zu lösen. Dessen ungeachtet kann Fehlermeldungen auszublenden wünschenswert sein. Allgemein geht das per CSS mit ._error {display:none}
. Fortan lässt sich auch nur eine bestimmte Fehlermeldung ausblenden. Möchtest du das, so nutze dazu wie im Fall der Fehlernummer 207 diese CSS-Angabe:
[class='_error _207'], ._error ._207 {display:none}
Zur Erläuterung: Fehlermeldungen werden in HTML so ausgegeben:
<div class="_error _206 _207" …>
<b>Errors in the previous block</b> …:
<span class="_206"><br>206: …</span>
<span class="_207"><br>207: …</span>
</div>
Mit ._error ._207
wird darin nur die Meldung zu Fehler 207 selektiert. Fehler 206 sowie die Einleitung der Fehlermeldungen bleiben unangetastet. Das folgende Beispiel zeigt dagegen die Ausgabe zu einem isolierten Fehler 207:
<div class="_error _207" …>
<b>Errors in the previous block</b> …:
<span class="_207"><br>207: …</span>
</div>
Hier selektiert [class='_error _207']
die ganze Meldung inklusive Einleitung.
Mindestanforderung PHP 7.1
Mit dieser Version springt die Mindestanforderung von PHP 5.6 auf PHP 7.1. Das ist die älteste PHP-Version, die noch Sicherheitsaktualisierungen erhält. Ganz unabhängig von Aneamal ist es empfehlenswert, nicht mehr mit älteren PHP-Versionen zu arbeiten und sich damit zu gefährden. PHP 7.x läuft außerdem signifikant schneller als PHP 5.x. Dank neuer Features in PHP ist der Aneamal-Übersetzer jetzt robuster, zum Beispiel wenn ein Nutzer ein defektes Zusatzmodul installiert.
Ausblick
In den kommenden Wochen und Monaten wird die Website https://aneamal.org/ in englischer Sprache aufgebaut. Sie wird zukünftig die primäre Quelle für Aneamal, den Aneamal-Übersetzer, für Module und Weiteres sein. Hier auf prlbr.de wird es mit etwas Verzögerung noch deutschsprachige Erläuterungen geben.
Mit dem Start von aneamal.org – wo hoffentlich auch mehr Nutzer Aneamal für sich entdecken werden – wird nun Rückwärtskompatibilität in jeder vernünftigen Hinsicht zum entscheidenden Kriterium für alle Weiterentwicklungen.
Was bedeutet vernünftig
? Sollten Sicherheitslücken auftauchen, werden diese selbstverständlich geschlossen und nicht bewahrt. Auch Sicherheit bleibt ein entscheidendes Kriterium. Außerdem wird der Aneamal-Übersetzer auch zukünftig mit der Entwicklung seiner Programmiersprache (PHP) mitgehen, wobei vom neuesten Übersetzer stets die älteste noch mit Sicherheitsupdates versorgte PHP-Version unterstützt wird. Wer trotzdem eine ältere PHP-Version betreiben möchte, kann natürlich auch bei einer älteren Version des Aneamal-Übersetzers bleiben.
Versionsnummern
Die aktuelle Version des Aneamal-Übersetzers hat die Nummer 27, denn es ist die 27ste Veröffentlichung. Zukünftig werden Veröffentlichungen des Aneamal-Übersetzers Versionsnummern in einer der folgenden Varianten erhalten:
- Planmäßige Veröffentlichungen erhalten eine einzige aufsteigende Nummer. Jetzt ist es 27, die nächste Version wird 28 sein. Nutzer können anhand ihres Bedarfs für neue Funktionen entscheiden, ob sie diese Aktualisierungen mitmachen.
- Außerplanmäßige Veröffentlichungen, die ausschließlich Sicherheitslücken schließen oder andere dringende Fehler beheben, halten sich an das Format x.y, zum Beispiel 27.1. Bei ihnen ist eine Aktualisierung empfehlenswert bis notwendig.
- Die dritte Variante x.y.z, beispielsweise 27.0.1, kommt bei kleinen Änderungen zum Zuge. Das könnte sein, um einen peinlichen Rechtschreibfehler in der readme-Datei zu beheben. Diese Veröffentlichungen werden nicht extra verkündet. Bestehende Installationen zu aktualisieren ist bei ihnen unwichtig bis sinnlos.
Sollte eine Vorschau auf eine künftige Version bereitgestellt werden, wird dies durch einen angehängten Bindestrich und einen Bezeichner signalisiert, zum Beispiel 28-rc1. Eine solche Vorschau ist weniger weit entwickelt als die offiziell veröffentlichte Version 28 ohne Bindestrich oder bestenfalls identisch mit ihr.
Danksagung
Merci beaucoup, David. Deine Ideen und unsere fruchtbaren Gespräche haben Aneamal besser gemacht. Ich danke meinen Eltern, die mich während der Entwicklung teils beherbergten, insbesondere Christoph der mich auch bei Bauarbeiten während dieser Zeit unterstützte, und Migo für seine Geduld. Gute Genesung, Cash!