Weiterentwicklung
Aneamal wird aktiv weiterentwickelt. Diese Seite listet Probleme und Ideen auf, die auf Bearbeitung warten. Orientierung bieten dabei W-Fragen:
- Was soll umgesetzt werden?
- Wozu soll es umgesetzt werden?
- Warum ist das wichtig?
- Woher kam die Anregung?
- Wann soll es umgesetzt werden?
- Wo soll es umgesetzt werden?
- Wer soll es umsetzen?
- Wie kann es umgesetzt werden?
- Gibt es weitere verwandte Ideen?
Berücksichtigt werden sollten auch die Fragen, ob es Implikationen für Sicherheit und Datenschutz hätte, ob es Kollisionen mit bestehender Syntax gibt und ob Alternativen denkbar sind.
Bekannte Probleme
Unerwünschte Liste bei Satzende am Blockanfang
Wenn wie in dem Beispiel:
Faszinierend, dass im rechtwinkligen Dreieck die Formel
$$a^2+b^2=c^2$$
gilt.
Faszinierend, dass im rechtwinkligen Dreieck die Formel
das Ende eines Satzes am Blockanfang steht („gilt.“), dann interpretiert Aneamal das als Listenpunkt. Noch schlimmer kann es kommen, wenn das Wort vor dem Endpunkt so lang ist, dass der Browser es als zu lang für eine Listennummer ansieht und stattdessen auf die nächste noch unbenutzte Nummer (im Beispiel „a.“) zurückfällt:
Ich habe es schon zuvor gesagt: Die Formel
$$a^2+b^2=c^2$$
fasziniert.
Ich habe es schon zuvor gesagt: Die Formel
Dies lässt sich mit einem Backslash verhindern, ist aber ein überraschendes, wohl kaum erwünschtes Verhalten.
Sprache einer eingebundenen Datei kann vom Direktaufruf abweichen
Eine direkt im Browser angesteuerte Datei erhält ihre Sprachangabe aus @meta.nml, wenn sie nicht in der Datei selbst deklariert ist. Wird dieselbe Datei jedoch in eine andere Datei eingebunden, erbt sie ab Aneamal 29 die Sprache der einbindenden Datei.
Auch wenn dies konzeptionell suboptimal sein mag, ist das praktisch unproblematisch und sowieso immer durch eine explizite Deklaration mit @lang
in der fraglichen Datei lösbar.
Vor Aneamal 29 wurde die Sprache einer eingebundenen Datei ohne Deklaration als unbekannt behandelt und in HTML markiert. Praktisch war dies insbesondere bei ja in der Regel einsprachigen Websites ungünstiger.
Geplantes
Scoped Styles
- Was
- ermöglichen, dass Stylesheets aus eingebundenen Dateien auch nur den eingebundenen Bereich betreffen und nicht das komplette Dokument, wohingegen Stylesheets aus dem Hauptdokument auch auf eingebundene Bereiche wirken
- Wozu
- einfachere Kontrolle der Darstellung, geringeres Risiko von Nebenwirkungen
- Warum
- weniger zerbissene Lippen und ausgerissene Haare; Verhalten von Stylesheets wäre dann analog zum Beispiel zu Metavariablen in Aneamal, die auch an eingebundene Bereiche vererbt werden, aber nicht umgekehrt, und einheitliches Verhalten senkt die Lernkurve, was wiederum zu einer größeren Nutzerzufriedenheit führt
- Woher
- Martin wünscht sich das quasi seit Anbeginn von Aneamal
- Wann
- wenn es irgendeine annehmbare Form von Browserunterstützung gibt
- Wo
- html.php oder im Falle einer Lösung mittels eigenem CSS-Parser eine Extradatei
- Wer
- Martin?
- Wie
- auf Browserunterstützung warten/hinwirken oder CSS parsen und automatisch umschreiben, um das Ergebnis zu simulieren, was aber einen riesigen Aufwand oder neue Abhängigkeiten mit andauernder Update-Notwendigkeit bedeutet
- Weitere
- –
Automatisierte Tests
- Was
- Tests für Aneamal-Syntax-Elemente erstellen, die automatisiert ausgeführt und ausgewertet werden
- Wozu
- um Fehler beim Erweitern des Aneamal-HTML-Konverters und insbesondere unbeabsichtigte Nebenwirkungen zu erkennen; um zu erkennen, ob ein zukünftig möglicher alternativer Aneamal-HTML-Konverter zu gleichen Ergebnissen kommt
- Warum
- eine möglichst fehlerfreie Software erhöht die Sicherheit und Zufriedenheit von Autoren
- Woher
- Martin
- Wann
- ?
- Wo
- Das Testsystem wird nicht in Aneamal integriert, sondern ist davon weitgehend unabhängig.
- Wer
- Martin?
- Wie
- .nml-Dokumente werden manuell erstellt, vom Konverter nach HTML übersetzt und die Ausgabe einmalig manuell auf Korrektheit überprüft. Diese Ausgabe wird als statische Datei (Soll-Wert) gespeichert. Der automatische Test besteht darin, die nml-Dokumente erneut vom Konverter übersetzen zu lassen und die Ausgabe mit dem Soll-Wert zu vergleichen. Im Fall von Abweichungen wird der Unterschied gemeldet.
- Weitere
- –
Mögliches
Übersetzung der Fehlermeldungen
- Was
- die Fehlermeldungen, die Aneamal direkt in einer Website ausgibt, bzw. die verlinkten Erläuterungen zu den Fehlermeldungen in andere Sprachen als Englisch übersetzen
- Wozu
- höhere Verständlichkeit für Autoren
- Warum
- Gerade, wenn man etwas falsch gemacht hat, ist es hilfreich, verständliche Erläuterungen in der eigenen Sprache zu erhalten. Das beschleunigt die Behebung und erhöht damit die Autorenzufriedenheit.
- Woher
- Martin
- Wann
- ?
- Wo
- Die Präferenz für eine Sprache für Fehlermeldungen könnte in aneamal-config.php hinterlegt werden. Ein Orientierung an der Sprache der bearbeiteten Seite (
@lang
) erscheint mir weniger sinnvoll, weil sie nicht der Muttersprache des technischen Autors entsprechen muss. In html.php Fehlermeldungen in mehreren Sprachen zu speichern, erscheint mir nicht sinnvoll – eher ein Verzeichnis /aneamal/lang/ mit einer Übersetzungsdatei pro Sprache, vgl. Wordpress.
Für die verlinkten Erläuterungen zu den Fehlermeldungen besteht bereits die Möglichkeit, in aneamal-config.php eine Adresse für Erläuterungen in anderer Sprache zu hinterlegen - Wer
- technische Umsetzung Martin; aber Übersetzungen ?
- Wie
- eine Übersetzungsdatei als Vorlage erstellen und Leute einladen, Übersetzungen anzufertigen; diese auf aneamal.org zum Herunterladen anbieten – wenn eine solche Übersetzungsdatei im Verzeichnis /aneamal/lang/ liegt und der Sprachpräferenz in aneamal-config.php entspricht, die übersetzte Fehlermeldung statt der englischen Fehlermeldung anzeigen
- Weitere
- aneamal.org mehrsprachig machen
Heredoc-Kurzsyntax
- Was
- Heredocs bestehen aus einer Anweisung zum Einbinden einer Datei, in der Regel in eckigen Klammern
[a-warnung]
bzw. als Metaangabe@style
, gefolgt von Zeilen die in der Regel alle mit einem|
beginnen bzw. bei Metaangaben mit@|
. Die wiederholten Zeichen am Zeilenanfang kann man per Sandwich-Markup automatisch setzen lassen, was einem Arbeit erspart. Allerdings erhält man dadurch einen zweizeiligen Start des Heredocs, zum Beispiel:[a-warnung]
/|/⚠️
Eine einzeilige Lösung wäre wünschenswert. - Wozu
- weniger Tipparbeit, mehr Übersichtlichkeit?
- Warum
- zur Tastenschonung und Freude von Autoren
- Woher
- David
- Wann
- ?
- Wo
- html.php
- Wer
- Martin
- Wie
- vorzugsweise etwas wie
[…]/END
, doch beachte die unten stehenden Anmerkungen – beim derzeitigen Konverteraufbau wäre etwas wie//…/END
leichter umzusetzen - Weitere
- –
Eine Syntax, die sich wie
[a-gedichtbox]/🐾
...
🐾
an das Gewohnte anlehnt, verkompliziert die Verarbeitung auf technischer Seite, wohingegen so etwas wie das Sandwich-Markup relativ einfach ist. Das hängt damit zusammen, dass Sandwich-Markup /…/…
wie Kommentare %
und Metadaten @
quasi überall am Zeilenanfang stehen kann, wohingegen eckige Klammern […]
nur eine Sonderbedeutung haben, wenn sie am Blockanfang stehen. Daher kann Sandwich-Markup sehr früh bei der Interpretation eines Dokumentes verarbeitet werden. Die Zerlegung eines Dokumentes in Blöcke geschieht derzeit erst später. Das ist momentan zu spät für eine Tippsparsyntax, weil vorher schon Leerzeichen und Tabulatorzeichen von allen Zeilenanfängen getilgt werden. In Aneamal haben sie keine Bedeutung. In anderen Dateitypen wie zum Beispiel in Textdateien mit Quellcode der Programmiersprache Python spielen Leerzeichen aber eine entscheidende Rolle. In /2015/mehrdimensional-kuchen-schneiden/ zum Beispiel habe ich Python-Code eingebunden:
|def find (dimensions):
| def findr (countdown, step, prod, cuts):
| diff = step * (cuts[-1] - 1) + prod
| if diff > 0:
| cuts[-1] -= diff // step
| diff %= step
| if countdown == 1:
| if diff == 0:
| print (cuts)
| else:
| if diff == 0:
| cuts[-1] += 1
| diff += step
| while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
| cuts[-1] += 1
| diff += step
| return cuts[-1]
| if isinstance (dimensions, int) and dimensions > 0:
| findr (dimensions, -1, 2, [1])
Die |
am Anfang jeder Zeile verhindern auch, dass die Leerzeichen zur Einrückung der Befehle vom Aneamal-Konverter entfernt werden. Wenn ich hier Sandwich-Markup nutze
/|/🐾
def find (dimensions):
def findr (countdown, step, prod, cuts):
diff = step * (cuts[-1] - 1) + prod
if diff > 0:
cuts[-1] -= diff // step
diff %= step
if countdown == 1:
if diff == 0:
print (cuts)
else:
if diff == 0:
cuts[-1] += 1
diff += step
while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
cuts[-1] += 1
diff += step
return cuts[-1]
if isinstance (dimensions, int) and dimensions > 0:
findr (dimensions, -1, 2, [1])
🐾
dann funktioniert das noch immer, denn das Sandwich-Markup wird ganz früh verarbeitet und in die Standardsyntax mit |
an jedem Zeilenumfang umgewandelt, bevor Leerzeichen am Zeilenanfang entfernt werden. Aber die Zerlegung in Blöcke passiert erst später, sodass eine Verarbeitung von eckigen Klammern, die nur am Blockanfang eine besondere Bedeutung zur Dateieinbindung haben
[t-python]/🐾
def find (dimensions):
def findr (countdown, step, prod, cuts):
diff = step * (cuts[-1] - 1) + prod
if diff > 0:
cuts[-1] -= diff // step
diff %= step
if countdown == 1:
if diff == 0:
print (cuts)
else:
if diff == 0:
cuts[-1] += 1
diff += step
while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
cuts[-1] += 1
diff += step
return cuts[-1]
if isinstance (dimensions, int) and dimensions > 0:
findr (dimensions, -1, 2, [1])
🐾
derzeit käme, wenn die Leerzeichen schon alle weg sind und der Python-Code also so aussieht:
def find (dimensions):
def findr (countdown, step, prod, cuts):
diff = step * (cuts[-1] - 1) + prod
if diff > 0:
cuts[-1] -= diff // step
diff %= step
if countdown == 1:
if diff == 0:
print (cuts)
else:
if diff == 0:
cuts[-1] += 1
diff += step
while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
cuts[-1] += 1
diff += step
return cuts[-1]
if isinstance (dimensions, int) and dimensions > 0:
findr (dimensions, -1, 2, [1])
womit er kaputt wäre. Aber das sind technische Details, die sich grundsätzlich lösen lassen.
Klären muss ich allerdings, ob sich solche Details so lösen lassen, dass das Programm nicht
nennenswert langsamer oder komplexer wird. Das relativ frühe Entfernen der Leerzeichen vom
Zeilenanfang spart nämlich einiges an Verarbeitungsaufwand in der Folge ein.
Version ohne mod_rewrite
- Was
- der Aneamal-Konverter setzt derzeit Unterstützung von URL-Rewriting per mod_rewrite voraus – es soll auch eine Version ohne diese Abhängigkeit geben
- Wozu
- Einsatz auf Systemen ohne mod_rewrite
- Warum
- einen größeren Nutzerkreis gewinnen
- Woher
- Martin
- Wann
- ?
- Wo
- ?
- Wer
- Martin
- Wie
- Denkbar wäre, URLs statt domain/pfad/datei als domain/index.php/pfad/datei oder domain/?/pfad/datei anzunehmen. Denkbar wäre auch, die Dateien in der URL mit .nml-Endung aufzurufen und dafür zu sorgen, dass diese Endung mit dem Konverter verknüpft wird
- Weitere
- Alternativen zu .htaccess anbieten für Server, die mit Alternativen funktionieren
Autokorrekturen statt Fehlermeldungen
- Was
- Für Fälle, in denen ein Dokument nicht der Aneamal-Syntax entspricht, könnte man definieren, wie diese interpretiert werden sollen, ohne eine Fehlermeldung auszugeben. Beispielsweise könnte in einem Textabsatz bei einem einzigen
*
, welcher den Beginn eines hervorgehobenen Abschnitts markiert und wozu eigentlich ein weiterer*
als Endmarke erwartet wird, definiert werden, dass das Ende des Absatzes dann das Ende des hervorgehobenen Abschnitts ist. Oder es könnte definiert werden, dass ein einziger*
in einem Textabsatz gleich\*
nur für sich selbst und nicht für einer Hervorhebung steht. - Wozu
- dem Autor Korrekturzeit ersparen; das Risiko senken, dass Leser unansehnliche/peinliche Fehlermeldungen sehen
- Warum
- weniger Störungen ergeben eine höhere Zufriedenheit mit Aneamal
- Woher
- Martin
- Wann
- fortlaufend
- Wo
- html.php
- Wer
- Martin
- Wie
- undefinierte Fälle vermeiden, Kurzschreibweisen erlauben, …
- Weitere
- –
einfache Update-Funktion
- Was
- eine automatische Update-Funktion oder eine Hilfe beim Update
- Wozu
- damit Aneamal-HTML-Konverter im Einsatz leicht auf dem aktuellen Stand bleiben
- Warum
- sollte eine Sicherheitslücke gefunden werden, wäre es wichtig, diese schnell zu schließen, sodass kein Schaden entsteht; auch ansonsten ist ein komfortables Aktualisieren wichtig im Wettbewerb mit anderer Software
- Woher
- David, Martin
- Wann
- ?
- Wo
- ?
- Wer
- Martin, ?
- Wie
- ?
- Weitere
- Möglichkeit, sich per E-Mail über Updates informieren zu lassen; Update-Möglichkeit für
[x]
- und[t]
-Erweiterungen
Unwahrscheinliches
Änderung der Schreibrichtung im Text
- Was
- explizite Markierungen für eine geänderte oder unbekannte Schreibrichtung im Text
- Wozu
- um im Fall einer Mischung von Text mit unterschiedlicher Schreibrichtung wie zum Beispiel in einem Arabisch-deutschen-Wörterbuch oder bei Zitaten oder Namensnennungen immer eine korrekte Darstellung zu gewährleisten
- Warum
- Den Bedürfnissen anderer Kulturkreise entgegenzukommen kann den Nutzerkreis erhöhen. Es wird aber auch Leuten, die hauptsächlich in europäischen Schriftsystemen schreiben, damit erleichtert, über Themen aus anderen Regionen der Welt zu schreiben.
- Woher
- Martin
- Wann
- ?
- Wo
- html.php
- Wer
- Martin
- Wie
- Man könnte vordefinierter Platzhalter zur Angabe der Schreibrichtung einsetzen – ich dachte zunächst an
&<
und&>
, allerdings ist problematisch, dass diese Zeichen abhängig von der Schreibrichtung der Schrift unterschiedlich herum dargestellt werden können und daher leicht verwechselt werden. Vielleicht wäre es sinnvoll, einfach auf Unicode-Kontrollzeichen zu verweisen. - Weitere
- –
Siehe auch: Verworfene Ideen zur Weiterentwicklung