Lesedauer 40 - 41 Min.

Version 2.5.1 • Stand: 13.10.2021, 13:00 Uhr

©2020 Norbert Simon

OffSiteLogo OffSiteEditdit

©2020-2021 Norbert Simon Produktseite

Wartung und Pflege datenbankfreier Webseiten direkt vom PC aus.

Die Hilfe ist thematisch strukturiert. Für die Suche nach Menü-Einträgen bitte die Suchfunktion des anzeigenden Browsers bemühen.
Bei aktivem Textfenster kann mit Tab / SHIFTTAB in den Überschriften navigiert werden.


Der Editor

»OffSiteEdit« ist kein Code-Editor. Er dient zur Erstellung unv Pflege Projekt-orientierter Webseiten. Die Bearbeitung kann jederzeit unterbrochen und wieder aufgenommen werden, Daten können zwischen mehreren Arbeitsplätzen z.B. über den Webspace der Projekt-Domain ausgetauscht werden.

Es gibt keine „Formatier-Hilfe“ für Text-Auszeichnungen: Für die Markdown-basierte Texterfassung wäre das ein Antagonismus. Im Abschnitt „Markdown-Konvertierung“ werden die unterstützten und von »OffSiteEdit« zusätzlich angebotenen Auszeichnungen beschrieben.

Es gibt einstellbare Farben für die Hervorhebung von speziellen Textelementen, sowie diverse Tastenbefehle, die das Text Erfassen und Bearbeiten vielfältig unterstützen.

Die Erstellung der Webseiten basiert auf ergänzenden Daten (CSS, PHP, Bilder) für die z.B. PSPaD oder Notepad++, sowie z.B. Photoline das Werkzeug der Wahl ist.

Mit einer Konfigurationsdatei und einem Yaml-Header in der bearbeiteten Datei werden alle Arbeitsprozesse gesteuert: Verwaltung der Markdown-Quelle, Erzeugung des HTML-Codes, verbinden mit einem Layout, Upload13 auf den Server, inklusive dazugehörender Medien.

Ob am Ende lauffähige Webseiten entstehen, hängt von den ergänzenden Daten und dem Ersteller der Seiten ab: Es findet keine Validierung des erzeugten Codes statt.

Das Konzept

Die Ergebnisse von »OffSiteEdit« entsprechen gängigen CMS-Systemen, die Arbeitsweise ist grundlegend anders:

Um genau zu sein:
Es hängt von der erzeugten Seite ab:
  • Es können „für sich stehende“ HTML-Seiten erzeugt werden – wie diese Hilfedatei.
  • Mit einer entsprechenden Layoutdatei kann auf eine vom Server unterstützte Programmiersprache zugegriffen werden, die z.B. Inhalte nachlädt.
  • Die erzeugten Webseiten sind über frei definierbare Vorlagen beliebig definierbar
  • Frameworks ließen sich durchaus nutzen. … Wozu?

Der erste Start

Es ist keine Installation erforderlich. »OffSiteEdit« in das gewünschte „Arbeitsverzeichnis“ kopieren. Alle Arbeits- und Projektdaten werden (vorzugsweise) innerhalb dieses Verzeichnisses gehalten. Das macht die Arbeitsumgebung portabel.

Beim erste Start werden „Standardverzeichnisse“ und eine Basiskonfiguration für den Editor erzeugt. Die Verfeinerung dieser Einstellungen kann jederzeit im weiteren Verlauf erfolgen.

Die aktuellste Version dieser Hilfe wird mit Hilfe & LizenzHilfe aktualisieren in die Arbeitsumgebung kopiert werden.

Ein Beispielprojekt, dass eine Webseite erzeugt, mit der »OffSiteEdit« erklärt wird, kann mit Hilfe & LizenzErklärende Beispieldaten holen in die Arbeitsumgebung kopiert werden.

Erneutes Herunterladen dieser Daten überschreibt die lokalen Daten!

Grundlegende Bedienung

Fast alle Funktionen können per Tastenbefehl genutzt werden – für ein „Schreibwerkzeug“ naheliegend. In den Menüs werden die Tastenkombinationen eingeblendet.

Menü-Funktionen ohne Shortcut können mit der ALT-Taste und den in den Menüs unterstrichenen Buchstaben per Tastatur ausgelöst werden.

Einstellungen

Schriftart…

»OffSiteEdit« basiert auf SynEdit, einem „Programmier-Editor“, weshalb nur unproportionale Schriften unterstützt werden.

Gut geeignet ist „Consolas“ (Windows Standardschrift) oder „Hack“, Fira Code, beide trotz Unproportionalität angenehm lesbar. Ich verwende Telder Mono, dieser Font ist allerdings kostenpflichtig und hat einen eingeschränkten Zeichenumfang. Weitere – mit stark variierender Qualität – gibt es bei Google-Fonts

Farben…

Das Programm bietet verschiedenen „Themen“ an ( EinstellungenFarben… ).. Da System-Themen keine konsistente Farb-Zuordnung für Text-Farben haben, müssen diese individuell zugewiesen werden.

Neben den Farben aus der Liste kann per Rechtsklick auf das jeweilige Feld ein Farb-Picker eine Farbe vom Bildschirm holen oder mit RGB Wert aktuelle Farbe unten links im Dialog ein „Farbspickzettel“ angelegt werden. Der unterstützt bei der Einstellung über den Eintrag individuel…, der wenn in der aufgeklappten Liste angewählt, eine Farbwahl-Box öffnet.

Die „Rand“-Farben sind Farbumschläge für den Count-Down.

Basiskonfiguration

Die Basiskonfiguration wird beim ersten Programmstart automatisch mit Standardwerten angelegt. Bei Programm-Updates werden ggf. fehlende Einträge automatisch ergänzt. Bestehende oder geänderte Einträge werden von der Automatik respektiert.

Die Basiskonfiguration wird mit dem für Textdateien registrierten Editor bearbeitet. Die meisten Einträge pflegt das Programm selbst und aktualisiert sie – was eine Pflege durch den Nutzenden sinnlos macht.

Einstellbar sind:

EintragFunktion
[Path] → htmltemplateStandardvorlage für den HTML-Export (ohne Yaml-Header)
[Path] → templateStandardpfad für Layout-Dateien für Dateien ohne Projekt-Verknüpfung
[Path] → backupsAllgemeiner Pfad für Backups
[path] → dobackup1 = Es werden Backups angelegt, 0 = keine Backups
[path] → phpDer Pfad zum „www“-Verzeichnis eines lokalen Webservers, der Installationsstandard von XAMPP lautet c:\xampp\htdocs
[search] → …Pfade für die jeweilige (Web-)Suche eines markierten Wortes

Die Pfade htmltemplate, template, backups sind die Projektkonfiguration für „projektlose“ Dateien.

Änderungen der Konfiguration erfordern einem Neustart: Einstellungen-→Konfiguration aktualisieren.

Die Textbausteine

Für wiederkehrende Elemente können Textbausteine in einer Liste definiert werden:

[Suchkürzel::]Textbaustein
…

Das „Suchkürzel“ ist optional, es vereinfacht das Auffinden eines Bausteins. Es wird inklusive der Trennmarke :: vor dem Einfügen entfernt. Mit ALTLEERTASTE wird die Liste geöffnet, Zeichen links vom Cursor für die Vorauswahl verwendet.

Eindeutige Textbausteine können ohne Suchkürzel eingegeben werden. Sie werden – von links in der Liste gefunden und vollständig eingefügt.

Textbausteine müssen ohne Umbruch einzeilig erfasst werden, Steuerzeichen können Umbrüche und aktuelle Daten erzeugen, die Zwischenablage übernehmen und den Cursor positionieren:

Steuerzeichenwird vor dem Einfügen ersetzt durch
::Trennt eine „Suchhilfe“ vom Textbaustein: Alles nur „alles dahinter“ wird eingefügt.
|Das „Pipe“-Zeichen markiert Zeilen-/Absatzumbrüche
``Ein Paragraph-Zeichen markiert die Position des Cursors.
§…§Zwei Paragraph-Zeichen wählen Text im Baustein aus, mit „lostippen“ überschrieben wird.
@@@Fügt den aktuellen Inhalt der Zwischenablage ein
&#dDer aktuelle Tag, zweistellig
&#mDer aktuelle Monat, zweistellig
&#yDas aktuelle Jahr, vierstellig
&#hDie aktuelle Stunde, zweistellig, 0 - 24
&#nDie aktuelle Minute, zweistellig
&#sDie aktuelle Sekunde, zweistellig

Änderungen der Textbausteine erfordern einem Neustart: EinstellungenKonfiguration aktualisieren

Farben verwenden

Färbt Worte aus der darunter befindliche Wortliste mit der „Textfarbe Wortliste“ unabhängig von der Schreibweise (groß/KLEIN) ein. Verteilung und Häufigkeit wird sichtbar und lässt sich kontrollieren.

Die Wortliste

Sie gilt für alle Projekte. Mit ALTL wir ein Wort am Cursor oder die aktuelle Auswahl eingefügt und der Cursor in die Liste gesetzt, die frei bearbeitet werden kann. Beim Verlassen (erneut ALTL: zurück zur letzten Position) werden die Einträge in GROSS, alphabetisch sortiert, Dubletten entfernt.

Pro Zeile wird nur ein Wort, ausschließlich Buchstaben, intepretiert. Andere Einträge werden ignoriert.

Worte/Differenz zählen

Abhängig vom Status des Editors wird entweder

der „Hauttext“ gezählt
Aus der Zählung werden
ausgeschlossen. Das entspricht dem nach einem Export „sichtbaren“ Haupttext.
Die Werte sind mit |…|-Balken umschlossen.
der markierte Block gezählt
Unabhängig vom Inhalt wird alles gezählt.
Die Werte sind mit ⟨…⟩ Klammern umschlossen.
die Differenz zu einem Zählwert
Beim anklicken von „Differenz zählen“ werden die aktuellen Werte der Arbeitsdatei als Ausgangswert angezeigt. Davon ausgehend wird die Differenz des Haupttextes mit den dafür geltenden Einschränkungen ermittelt.
Die Werte sind mit <…> spitzen Klammern umschlossen.

Speichern und Laden

Die Arbeitsdatei im Fenster wird automatisch beim Schließen, Verlassen und weiteren Operationen des Programms im Programm-Verzeichnis gespeichert. Deshalb muss es beschreibbar sein.

Arbeitsdatei ≠ Projektdatei

Mit der Arbeitsdatei kann ohne Änderung der Projektdatei ein Export durchgeführt werden. Das ist für vorübergehende Änderungen nützlich. Endgültig wird eine Änderung erst, wenn die Arbeitsdatei mit Datei Speichern… ins Projektverzeichnis geschrieben wird. Der Yaml-Eintrag schlägt die richtige Stelle automatisch vor, die bestätigt werden muss.

Automatisch

Projekt-Backups

Es gibt kein Backup-Limit oder „aufräumen“: Backup-Verzeichnisse müssen mit dem Explorer gepflegt werden.

Textaufbau

Abgesehen vom Yaml-Header gibt es keine strukturellen Vorgaben. »OffSiteEdit« kommt sogar damit zurecht, wenn Fußnotentexte und Referenzen direkt unter dem Yaml-Header stehen und darunter der Text. Es kann Inline-PHP verwendet werden, HTML, PHP-Code, CSS, Javascript – dem Editor ist das „alles egal“.

Beim Export mit der Markdown-Konvertierung ist das etwas komplexer. Es wird versucht, möglichst alles 1:1 durchzureichen, das per Definition „kein Markdown“ ist.

Dennoch kann es hier zu Konflikten kommen. Dafür bietet der Konverter Abhilfen – Details dort.

Yaml-Header

Der Yaml-Header ist ein zentrales Steuerelemente von »OffSiteEdit«. Er dient der Projektverwaltung und der Übergabe von Parametern in die damit verknüpften Export-Daten.

Drei Minus-Zeichen am Zeilenanfang der ersten Zeile markieren einen „Yaml-Header-Anfang“. Er endet in »OffSiteEdit« entweder mit dem nächsten Dreifach-Minus oder einer Leerzeile (!). Er kann beliebige Parameter für die Layoutdatei oder Module enthalten.

Regeln für Yaml-Variablen:

  1. *Groß/KLEIN-Schreibweise im Variablennamen wird ignoriert.
  2. Bei der Variable und dem Parameter werden Leerzeichen am Anfang und Ende entfernt.
  3. Variable und Inhalt müssen mit einem : getrennt werden. Es gilt der erste Doppelpunkt von links, d.h. ein Parameter kann weitere Doppelpunkte enthalten.
  4. Die Parameter werden in der Export-Ausgabe 1:1 an allen Fundstellen ersetzt.
  5. Es findet keine Inhaltskontrolle statt: Ein „leerer“ Parameter erzeugt eine „Leerstelle“.
  6. Parameter ohne Ersetzung werden entfernt. Aus »%­%­%abc%­%­%« wird »``«.
  7. Fehlende Parameter mit „!“ am Anfang, löschen den gesamten Absatz, egal wo sie darin stehen.

Beispiele

Der Quellcode enthält nach der Markdown-Konvertierung diese Zeile:

<p>%­%­%!p1%­%­% Was passiert %­%­%p2%­%­%  mit dieser Zeile?</p>

Abhängig vom Inhalt oder dem Vorhandensein der Variablen entstehen diese Ausgaben in der Export-Datei:

ParameterErgebnis
!p1:Frage:
p2:beim Ersetzen
»Frage: Was passiert beim Ersetzen mit dieser Zeile?«
!p1:
p2:beim Ersetzen
»Was passiert beim Ersetzen mit dieser Zeile?«
!p1:
p!2:beim Ersetzen
»Was passiert mit dieser Zeile?«
!p!1:Frage
p2:beim Ersetzen
»«
Weil „!p1“ fehlt (→!p!1) wird der ganze Absatz entfernt, weshalb „p2“ keine Relevanz hat

Besondere Editor-Variablen

BearbeitenEditor-Variable → …

Der Editor stellt mit nur im Editor gültigen Variablen Informationen zur Verfügung. Sie können im gesamten Text verwendet werden, einschließlich dem Yaml-Header. So können diese Information im Layout mit einem dafür definierten Yaml-Parameter verwendet werden.

Editor-VariableFunktion
%­%­%READ%­%%Aktuell angezeigte Lesedauer gerundet: ≤ 1 oder m - n
%­%%DATE%­%%Aktuelles Datum (tt.mm.yyyy)
%­%%YEAR%­%%Aktuelles Jahr (yyyy)
%­%%SORTDATE%­%%„umgedrehtes“ Datum (yyyy-mm-dd) → sortierbar
%­%%TIME%­%%Aktuelle Zeit, minutengenau
%­%%CLEANTIME%­%%Aktuelle Zeit (hh:mm), auf Viertelstunden abgerundet
%­%%RAWTIME%­%%Datum des Computers als Double/Float-Zeitstempel
%­%%FILEWITHOUTEXT%­%%Datei mit Pfad der erzeugten Datei
%­%%CURRPATH%­%%Aktueller Pfad der erzeugten Datei

Besondere Projekt-Variablen

Einige fest definierten Einträge im Yaml-Header definieren die Zugehörigkeit einer Datei zu einem Projekt. Sie legen den (vorgeschlagenen) Speicherort der Datei und der damit generierten Seite, sowie zugrunde liegenden Einstellungen fest.

!delete:
Project: Projektname
in: [pfad/]Datei.[md|txt|…]
out: [pfad/]Datei.[html|php|…]
media: [pfad]
Layout: [pfad/]Layout.[html|php|…]
upload: [Datei inkl. Pfad]
upload: …

Die Datei-Endung ist dem Editor weitestgehend „egal“. Für die generische Webseiten-Erzeugung wird jedoch für die Markdown-Dateien die Endung .md erwartet. Für die Verarbeitung werden „Text-Dateien“ im UTF815 Format vorausgesetzt.

VariableFunktion
deleteDieser Schalter ermöglicht das Löschen von Dateien auf dem Server. Die Funktionalität hängt von weiteren Schaltern ab, s. Serverdateien löschen.
projectDer Ordnername für ein Projekt im Editor-Verzeichnis ODER eine [Konfigurationsdatei[(#projektkonfiguration), auf die nachfolgende Einträge aus dem Yaml-Header zugreifen.
inDer Speicherort und Name der Datei, der für den Editortext vorgeschlagen wird. Der Name kann eine relative Pfadergänzung enthalten.
outDer Pfad und Dateiname für den Export. Der Name kann eine relative Pfadergänzung enthalten.
mediaLegt den Zielpfad für Medien-Dateien fest, die in diese Datei importiert werden (Drag & Drop oder Menübefehl). Ein hier angegebener relativer Pfad ergänzt den Basispfad für Medien, in den sie beim Einfügen in den Text automatisch kopiert werden.
Beim Einfügen ohne media-Angabe werden Medien — nach einem Hinweis mit Abbruchmöglichkeit — in den Standardpfad kopiert.
!mediaEin Ausrufezeichen vor dem Medienpfad deaktiviert ihn und den FTP-Upload für verknüpfte Medien.
layoutEine „Format-Datei“ für die Ausgabe. Ohne Layout-Datei wird ein HTML-Export des Editor-Inhalts („Text“) erzeugt.
uploadDieser Yaml-Eintrag ermöglicht das Hochladen einzelner Dateien oder ganzer Verzeichnisse unabhängig vom Verknüpfungen in der HTML-Datei. s. Dateien hochladen

Die im Yaml-Header gewählten Pfadstrukturen werden gegebenenfalls automatisch erzeugt.

Aus der Yaml-Variablen out wird die Editor-Variable filewithoutext generiert. Sie enthält den Ausgabepfad samt Dateinamen ohne Datei-Endung.

Dateien hochladen

Mit dem Yaml-Eintrag upload kann z.B. ein spezielles Twitter-Bild hochgeladen werden, das für die Darstellung dort optimiert ist (webp macht z.B. Probleme, wenn es Transparenz enthält). Es wird im angegebenen Pfad gesucht und analog auf die Webseite hochgeladen. Dieser Pfad ist unabhängig vom dem mit media eingestellten und muss daher vollständig angegeben sein.

Endet der Eintrag mit einem / (explizit „Slash“!) wird das damit beschriebene Verzeichnis (muss sich innerhalb von out befinden!) komplett hochgeladen. Allerdings nur die darin enthaltenen Dateien, die dem Dateityp-Filter der Projektkonfiguration… (→ upload) genügen.

Das Hochladen ist abhängig vom media-Status, der den Webseiten-Export von zusätzlichen Medien generell steuert. Upload kann ggf. mit ! individuell deaktiviert werden.

Serverdateien löschen

So wie Dateien hochgeladen werden können, lassen sie sich mit dem Schalter delete: entfernen. Relevant ist das Vorhadensein des Schalters; hinter dem Doppelpunkt kann eine Notiz folgen, wann oder warum Daten gelöscht wurden.

Der delete-Schalter kehrt den FTP-Upload um: die sonst hochgeladenen Dateien werden auf dem Server gelöscht. Einzig die lokal erzeugte HTML-Datei wird abschließend ebenfalls gelöscht. Damit spiegelt das lokale Verzeichnis die tatsächlich verfügbaren Webseiten. Fehlt die lokale HTML-Datei, ist kein FTP-Aufruf möglich. Alle übrigen lokalen Daten bleiben unberührt.

Es findet keine Kontrolle statt, ob gelöschte Medien oder die Webseite selbst von anderen Dateien referenziert wird.

Projekte

Eine Webseite besteht – meistens – aus mehreren Seiten. Die Erstellung, Bearbeitung und Pflege einer Webseite ist ein „Projekt“ – weshalb bei OffSiteEdit von „Projekten“ gesprochen wird. Denn damit erstellte Dateien können, müssen jedoch keine Webseite werden.

Die Projektorganisation der in diesem Menü unten aufgelisteten Projekte basiert auf den Angaben des Yaml-Headers der gerade im Editor bearbeiteten Datei. Diese ist – trotz der Angaben im Header – kein Bestandteil des Projekts, sondern lediglich die Editor-Datei. Nur mit den Datei → … - Befehlen wird auf Projektdateien zugegriffen. Diese stehen im Kontext zur im Yaml-Header festgelegten Konfiguration.

Die Projekteinträge im Menü Projekte haben aus dem Programmablauf heraus unterschiedliche Funktionen:

FunktionVoraussetzung
Yaml-Header anlegenFehlt in der Arbeitsdatei der Yaml-Header, wird der in der Projektkonfiguration definierte vorangestellt.
Projektkonfiguration öffnenIn der Arbeitsdatei ist ein Yaml-Header der Projektdatei vorhanden
Projekt wechselnIn der Arbeitsdatei verweist der Yaml-Heaer auf ein anderes Projekt

Modul-Verzeichnis öffnen

Das Modul-Verzeichnis ist für alle Projekte das Selbe und wird deshalb zum Bestandteil jedes Projekts, das Module verwendet.

Änderungen eines Moduls wirken ab diesem Zeitpunkt auf alle Projekte, die es verwenden. Das Verzeichnis öffnet im Explorer.

Projektverzeichnis öffnen

Für die Bearbeitung von Projektdateien mit einem Code- oder Bild-Editor lässt sich mit F4 das Projektverzeichnis im Explorer öffnen.

Neue Projektkonfiguration…

Die Projekt-Konfiguration ist benutzungsfreundlich gestaltet, d.h. es gibt Programmseitig keine Verschlüsselung der lokalen Daten (besonders relevant: FTP-Daten). Wenn dieser Rechner mehreren Benutzern zugänglich ist, müssen ggf. geeigneten Maßnahmen für den Datenschutz vom Anwender getroffen werden (Verzeichnis verschlüsseln, Daten auf portablem Datenträger, der sicher verwahrt wird,…).

Für die Projektorganisation sollten Konfigurationsdateien erzeugt werden. Diese müssen im Projektverzeichnis von »OffSiteEdit« liegen (s. Projekt-Organisation). Darin definierte Pfade werden den Pfaden der Projektdateien vorangestellt. Damit sind „absolute“ Pfade außerhalb des Projektverzeichnisses möglich, doch schränkt das die Portabilität von Projekten ein.

EintragFunktion
[Set]Gruppe Projekt-Einstellungen
backup1 : beim Laden von Dateien werden Backups des Editor-Inhalts angelegt (default), 0: keine Backups
headerDer Yaml-Header-Standard für neue Dateien
[Path]Gruppe Projektpfade
inBasis-Pfad zu den Quelldateien (Markdown)
outBasis-Pfad für den generierten lokalen Export
mediaBasis-Pfad für im Editor eingefügte Medien-Dateien
layoutBasis-Pfad zu den Layout-Dateien des Projekts
backupsBasis-Pfad für die beim Öffnen von Dateien automatisch angelegten Backups
[ftp]Serverkonfiguration für Upload
userFTP-Benutzername
passPasswort des FTP-Benutzers
hostder FTP-Host (typischerweise ohne ftp://)
rootDer Basispfad des Projekts, ohne Angabe ist das /
timeoutoptional: Legt die Dauer fest, in der eine Verbindung zustande kommen muss. Vorgabe sind 5 Sekunden. Bei langsamen Verbindungen kann der Wert nach Bedarf erhöht, bei schnellen ggf. auch verkürzt werden (ganzzahlig Millisekunden angeben 10s = 10000)
xchangeLege den relativen Pfad zur root für die Datensynchronisation fest.
uploadLegt fest, welche referenzierten, relativ verknüpften Medien (src="…", href="…" ohne ://) automatisch mit hochgeladen werden. Die Dateiendungen in der Liste müssen mit einem . beginnen.
[pack]Konfiguration der Archivierung
type1 = Standardzip; 0 = Stark schützbares ZIP, inkompatibel zu den meisten Standard-Programmen (kein Entpacken möglich)
passPasswort für Archive

Bitte beachten:

Für Änderungen der Archiv-Struktur (Kompressionstyp, Passwort) muss grundsätzlich ein neues Archiv angelegt, ein bestehendes vorher gelöscht werden.

Der Menübefehl ProjekteNeue Projektkonfiguration… generiert standardmäßig ein Projektverzeichnis innerhalb des Programm-Verzeichnisses. Das ist ein funktionierender Vorschlag, der an die eigenen Anforderungen angepasst werden kann.

Eine neu erzeugte Projektkonfiguration wird automatisch der Liste im Menü Projekte hinzugefügt.

PHP-Pfad → out setzen

Für XAMPP1 kann diese Funktion ein Symlink eingerichten, mit dem als Zielverzeichnis ein Ordner im Projektverzeichnis genutzt werden kann. Die Einrichtung erfolgt über einen damit abgesetzten Console-Befehl (erst ab Windows 10 verfügbar!):

cmd /J mklink {Pfad zum htdocs-Verzeichnis} {Pfad zum Projekt-Ausgabeverzeichnis}

Der {Pfad zum htdocs-Verzeichnis} muss in der Konfiguration von OffSiteEdit angegeben sein. Der {Pfad zum Projekt-Ausgabeverzeichnis} wird beim Funktionsaufruf als „htdocs“-Verzeichnis auf das aktuelle Projekt gesetzt. So kann ohne Aufwand problemlos zwischen verschiedenen Projekten gewechselt werden, ohne dass dafür Pfade in XAMPP verändert oder eingestellt werden müssen. Ein bestehender Symlink wird mit Aufruf der Funktion automatisch entfernt und durch den neuen ersetzt.

Das „reguläre“ htdocs-Verzeichnis muss dafür gelöscht werden, da ein Symlink nur auf einen Pfad verweisen kann, der „virtuell“ ist.

Konfiguration PHP-Pfad

In der Basiskonfiguration im Abschnitt Path muss eine Definition php=Absoluter Pfad vorhanden sein. Dieser Pfad wird als symbolischer Link für das aktuelle Projekt gesetzt. Ein möglicherweise bereits vorhandener Symlink wird vorher entfernt. Der Pfad kann *ohne Neustart der des XAMPP-Apache-Moduls gewechselt werden.

Der erste Zugriff auf das htdocs-Verzeichnis über einen Symlink ist unter Windows eventuell signifikant feststellbar verzögert. Im Anschluss erfolgen die Zugriffe jedoch gewohnt schnell.

Projekt neu generieren

Vor dem Aufruf dieser Funktion ist es ratsam, das Projekt einzupacken, damit es ggf. problemlos auf diesen Stand zurück gebracht werden kann.

Die mit OffSiteEdit erzeugen Website-Dateien sind „robust“, d.h. abgesehen von Teilen, die über zusätzliche Dateien eingefügt werden, sind sie unabhängig von späteren strukturellen Änderungen, z.B. von via Modulen eingefügtem Code. Das hat grundsätzlich den Vorteil, dass bestehende Seiten bei einer Moduländerung ohne Anpassungsdruck weiter funktionieren können (hängt natürlich vom Code ab…). Sollte aufgrund von Änderungen eine vollständige Neuerstellung der Webseiten erforderlich werden (z.B. Medien verschoben, Modul funktional erweitert,…), können alle exportierten Seiten automatisiert neu erzeugt werden.

Grundlage sind die im Augenblick des Aufrufs verfügbaren Daten. Das kann ältere, bisher funktionierende Dateien unbrauchbar machen, falls z.B. das in einigen Markdown-Dateien notierte Layout geändert wurde oder fehlt.

Die Funktion öffnet ausschließlich Dateien mit dern Endung <em>.md und exportiert sie mit den aktuellen Vorgaben in das lokale* Ausgabeverzeichnis. Nachdem das kontrolliert wurde (!), werden die geänderten Dateien (zweckmäßigerweise) in einem Archiv auf den Webserver geladen und ausgepackt.

Der Prozess ist „dumm“, d.h. es werden keine Prüfungen auf „tote Links“, fehlende Medien, Ressourcen, o.ä. durchgeführt. Es werden lediglich „technische Fehler“ (wie beim manuellen Export) registriert. Davon betroffene Dateien werden am Ende mit einem „Problemhinweis“ aufgelistet. Detailliertere Fehlermeldungen stehen ggf. im Log darüber.

Damit besondere Editor-Variablen korrekt erstzt werden (z.B. Lesezeit, die nur als Variable in der Markdown-Datei steht), wird der manuelle Prozess mit allen .md-Dateien simuliert: Datei laden, exportieren, nächste. Das erfolgt rekursiv durch alle Verzeichnisse im in:-Basis-Pfad.

Datei

Datei laden…

Yaml-Header-Check

Nach dem Laden einer Projektdatei, für die eine Projektkonfiguration gefunden wird, gleicht eine Prüfroutine den hinterlegten Eintrag [SET] header:… mit den Einträgen im Yaml-Header der Datei ab. Bei Abweichungen weist ein Hinweis-Dialog auf diesen Unterschied hin.

Der Abgleich erfolgt nach diesen Regeln:

  1. Die Parameter werden in Kleinbuchstasben umgewandelt: Damit gross/KLEIN-Schreibung keine Rolle spielt
  2. „!“-Zeichen werden aus den Parametern entfernt: Damit auch „gleiche“ Parameter erkannt werden, die mit einem eingefügten oder fehlenden „!“ als »hier ungültig« markiert sind.

Speichern unter…

DateiSpeichern untern…

Datei verknüpfen…

Diese Funktion erfordert eine Lizenz.

Die ausgewählte Medien-Datei wird in den eingestellten Medien-Pfad kopiert und ein Link dorthin an der Cursor-Position eingefügt (geht auch per „Drag & Drop“).

Datei als MIME einbetten…

Bilder können MIME-encodiert in eine HTML eingebettet werden. Das bläht diese erheblich auf, dafür ist „alles drin“, was z.B. bei einer Hilfedatei praktisch sein kann.

HTML exportieren…

Die aktuell im Editor befindliche Datei (!) wird an die Markdown-Konvertierung übergeben. Enthält sie einen Yaml-Header werden die darin getroffenen Vorgaben berücksichtigt (z.B. Seitenvorlage). Die so erzeugte Datei wird zum Speichern angeboten.

FTP-Operationen

Diese Funktionen erfordern eine Lizenz.

»OffSiteEdit« bietet verschiedene Optionen für den Up- und Download von Daten. Für die Pflege von Webseiten gilt:

Wenn beide Einträge im Yaml-Header vorkommen (media: + !media:) gewinnt !media. Sowohl der Medienimport als auch die FTP-Funktion weisen darauf hin.

Das dient vor allem als Hinweis: Wenn eine neue Mediendatei mit !media:-Einstellung eingefügt würde, gäbe es später keinen Upload, außerdem wäre der Pfad falsch…

FTP Upload

Dieser Befehl setzt einen Yaml-Header und eine Projektdatei voraus. Liegt Beides vor, wird die vorher erzeugte Exportdatei (out) in den entsprechenden Pfad auf dem Server hochgeladen.

Alles speichern → FTP

Das sind „drei Befehle in einem“: Datei speichern, HTML exportieren, FTP-Upload. Via Tastatur ausgelöst, wird „in einem Zug alles erledigt“.

Arbeitsdaten synchonisieren

Die Synchronisation ermöglicht den Austausch der Arbeitsdaten über den eingestellten Backup-Pfad via FTP.

Die Synchronisation erfolgt auf Grundlage des Zeitstempels der Dateien. Daher sind neben der gleichen Zeitzone gleich gehende Uhren auf den verwendeten Systemen relevant.

In Arbeit → FTP

Die gespeicherte Version der im Editor befindlichen Datei wird in einem Archiv in den Backup-Pfad des Projekts geladen. Wenn die Datei lokal exportiert wurde, werden in der vorgefundenen Pfadstruktur verknüpfte Medien mit eingepackt. Es können mehrere Dateien in den Backup-Pfad geladen werden. Sie werden mit einem vorangestellten wk- und ihrem Namen als ZIP-Datei abgelegt.

FTP → In Arbeit

Alle im Server-Backup-Pfad des Projekts befindlichen wk-Dateien werden in das lokale Backup-Verzeichnis herunter geladen und gemäß der hinterlegten Pfadangaben in der lokalen Umgebung entpackt. Nur ältere Dateien (Zeitstempel der Datei) werden überschrieben.

Das „Erkennungsmerkmal“ für die Funktion ist das vorangestellte wk-. Damit es keine Konflikte gibt, müssen für diese Funktion getrennte Backup-Verzeichnisse für Projekte eingerichtet werden (z.B. /backups/projektname). Bei „absoluten“ Pfaden kann das „Auspacken“ scheitern.

Arbeit aufräumen

Hiermit werden sowohl auf dem FTP-Server als auch lokal alle wk--Archive in den Backup-Verzeichnissen des Projekts gelöscht.

Projekt einpacken

Alle Daten im Projektordner sowie die Projektkonfiguration werden in ein Archiv gepackt.

Wenn das Archiv alles enthalten soll und die Webseite Module verwendet, sollten diese ebenfalls (z.B. als Kopie im »Layout-Ordner«) mit eingepackt werden.

Abhängig von den Einstellungen in der Projektkonfiguration (Abschnitt [pack] können verschiedene Archive erzeugt werden:

EintragFunktion
[pack]Konfigurationsabschnitt für Archive
type=1Standard-ZIP-Format
type=0Hochkomprimiertes ZIP, kann nur mit OffSiteEdit geöffnet werden
pass=…Ein (optionales) Passwort für das Archiv. Fehlt der Konfigurationseintrag, ist das erzeugte Archiv unbrauchbar. Kein Passwortpass=

Ein wiederholter Aufruf der Funktion aktualisiert ein vorhandenes Backup. Soll ein Zwischenstand dauerhaft gespeichert werden, kann das Backup nach einer Umbenennung im Verzeichnis verbleiben. Es wird beim nächsten Funktionsaufruf ein neues „Standardbackup“ erzeugt.

Projekt einpacken → FTP

Das „Standardbackup“ wird erzeugt/aktualisiert und in den Backup-Server-Pfad des Projekts hochgeladen.

FTP → Gepacktes Projekt

Ein „Standardprojekt“ auf dem Server wird herunter geladen. Vorher wird ein eventuell vorhandenes lokales „Standardprojekt“ mit einem Zeitstempel („Z-yymmddhhnnss-Projektname.zip“) umbenannt.

Projekt auspacken

Mit einen Auswahldialog kann das Archiv entpackt werden, das gebraucht wird. Beim Auspacken werden nur (nach Zeitstempel) ältere Dateien überschrieben.

Messen

Dieses Menü enthält Funktionen, die ebenfalls in der darunter liegenden Informationsleiste angeboten werden.

Die Sanduhr ganz links zeigt „fix“ die Dauer der aktuellen Sitzung an (ab Programmstart).Rechts daneben kann unterhalb des „Stoppuhr“-Symbols eine Zeit-Vorgabe in Minuten eingestellt werden, die mit dem Knopf rechts daneben gestartet/gestoppt wird. Der aktuelle Stand wird mit einem „Status-Icon“ angezeigt. Zur Halbzeit ertönt ein (dezenter) Hinweiston, der Rand wird mit der „Halbzeit“-Farbe eingefärbt. Bei ca. 10% Restzeit, schaltet der Rand auf die „Endspurt“-Farbe, mit weiterem akustischen Hinweis. Ist die Zeit abgelaufen, wird die „Ende“-Farbe mit akustischem Signal aktiviert. Eine Überziehungsdauer wird als negativer Minutenwert angezeigt. Aus-/Ein-Schalten des Schreiblimits setzt den Count-Down fort, ggf. wird weiter „ins Minus“ gearbeitet.

Für einen Neustart muss der Count-Down ausgeschaltet und der Startwert aktiviert (und Bedarfsweise angepasst) werden (ins Feld und wieder hinaus).
Der Count-Down ist „in etwa“. Start/Stopp verwirft den Anteil einer aktuellen Minute. Die Funktion ist lediglich als Erinnerung an ein selbstgestecktes Zeit-Budget gedacht.

Bearbeiten

Suchen & Ersetzen

Die Suche erfolgt wahlweise im »RegEX«-Modus«, voreingestellt ist „RegEx aus“.

Eine „lesbare“ Einführung gibt es im Artikel „Bis das Gehirn blutet: Der Regex-Guide von t3n“ oder als Kurzübersicht bei Autohotkey, Regeln entwickeln und Testen geht vorzüglich mit dem REGEXR.

Der Suchen-Ersetzen-Schalter „Ab Anfang“ ist beim Programmstart standardmäßig aktiviert, die übrigen standardmäßig „aus“.

Mit den Tastenbefehlen für Suchen/Ersetzen wird

Die Suchhistorie gilt nur für die jeweilige Sitzung. Sie geht mit Schließen des Programms verloren.

Editor-Variablen

Das Submenü enthält die verfügbaren Variablen, die in der korrekten Schreibweise an der Cursorposition eingefügt werden können.

Setze… / Gehe zu…

setzen und Anspringen von Textmarken. Neben dem direkten Anspringen kann „die nächste“ oder „die vorige“ angesprungen werden. Das „dynamische“ Setzen einer Marke nimmt die nächste freie Marke.

Marke 0 / Cursormarke

Die Marke 0 wird vom Editor automatisch für die aktuelle Position gesetzt, wenn…

Das erlaubt den Rücksprung an die jeweilige Position, die durch die gewählte Aktion eventuell verschoben oder verlassen wurde. Das erfolgt in einigen Fällen automatisch, wenn z.B. die letzte Position durch veränderte Zeichengrößen oder Zeilenumbruch aus dem sichtbaren Bereich rutscht.

Das erneute Setzen einer Marke an der gleichen Stelle löscht sie. Werden wiederholt Funktionen mit Auswirkung auf die Marke 0 an der gleichen Cursor-Position ausgeführt, kann das zur Folge haben, dass keine Marke gesetzt ist.

Querverweise

BearbeitenQuerverweis⟨e⟩…

Das sich öffnende Fenster ist ein „Multifunktionswerkzeug“. Einerseits ermöglicht es die schnelle Navigation innerhalb eines mit Überschriften strukturierten Dokuments, andererseits können Querverweise innerhalb des Dokuments damit erzeugt werden.

Nach dem Öffnen haben die nachfolgenden Tasten die beschriebene Funktion:

Reduzieren / Erweitern der Liste auf die gewählte Überschriften-HierarchieEnter
Taste(nfolge)Funktion
AZ(inkl. deutsche Umlaute und ß) Markieren von Überschriften mit dem getippten Inhalt
„kein Treffer“ löscht den bis dahin eingegebenen Tastenpuffer.
1..6
EnterEin Eintrag ausgewählt: Querverweis zur Überschrift an der Cursorposition einfügen.
Mehrere Einträge ausgewählt: : Alle gewählten Einträge werden als Liste eingefügt (z.B. für ein Inhalts-/Teilinhaltsverzeichnis)
STRGEnterEin Eintrag ausgewählt: Zur Überschrift hingehen
TabOhne Aktion Liste schließen (alternativ in den Text klicken)
ESCAuswahl/Tastenpuffer löschen, ohne Auswahl wird die Liste geschlossen

Alle Enter-Aktionen fügen vorher die Marke 0 an der aktuellen Cursor-Position ein. Nach Einfügeoperationen steht der Cursor anschließend auf dieser Marke.

Seitenverweis

Für Querverweise innerhalb der Webseitenstrutkur kann die dazugehörende Markdown-Datei ausgewählt werden. Der relative Link zu dieser Datei wird ohne Dateiendung eingefügt und gilt entsprechend beim Epxort der Datei für die Verknüpfung dort. Es findet keine Kontrolle statt, ob die Datei als Export-Ergebnis vorliegt.

Auswahl-Manipulationen

Codierung des STrings in eine URL-fähige Parameter-Schreibweise

* Der markierte Block bleibt erhalten, das Resultat wird in die Zwischenablage kopiert.

Korrektur

Für diese Funktion ist die Bibliothek-Datei hinspellx86.dll, sowie das Verzeichnis dict im Programmverzeichnis mit entsprechenden Wörterbüchern erforderlich. Sie basiert auf dem SynEdit-Spell-Checker von Jürgen Rathlev.

Im Sinne von „ablenkungsfreiem Schreiben“ gibt keine „Fehlermarkierungen“ im Text. Die Korrektur soll bewusst und willentlich erfolgen, deshalb können Vorschläge der Korrektur nur mit den bereitgestellten Befehlen gefunden und bearbeitet werden:

TastenbefehlFunktion
STRGNSucht ab der aktuellen Cursor-Position das nächste im Wörterbuch unbekannte Wort und markiert es. Ein erneuer Suchlauf beendet einen möglicherweise geöffneten Korrekturvorschlag.
STRGKKorrekturvorschläge öffnet dort eine Liste mit dem Wörterbuch bekannten Worten. Eine Auswahl wird Enter übernommen.
STRG MMerkt sich das markierte Wort im Wörterbuch. Es gibt keine Nachträgliche Korrekturmöglichkeit – es könnten lediglich „korrigierte“ Hunspell-Wörterbücher bestehende ersetzen.

Als Sprache ist „Deutsch“ voreingestellt, die im Haupt- und Eigenschaften-Menü („Rechtsklick“) geändert werden kann. Weitere Wörterbücher können beim Hunspell-Projekt herunter geladen werden. Diese müssen im Programmverzeichnis, im Ordner dict eingefügt sein, damit sie beim nächsten Programmstart zur Verfügung stehen.

Solide gepflegte Wörterbücher gibt es bei „Softmaker“. Diese müssen nach dem Herunterladen lediglich in ein zip umbenannt werden, damit sie — ausgepackt — genutzt werden können. Benötigt werden die aff- und dic-Dateien.

Tastenbefehle

Der Editor unterstütz die „gebräuchlichen“ Tastenbefehle, die von Word & Co bekannt sind. Das Menü reagiert auf ALT → (dann) unterstrichener Buchstabe. Zum Verlassen des aktivierten Menüs muss ggf. mehrfach ESC gedrückt werden.

Nachfolgend die „Schnelltasten“ vieler Menü- und besonderer Befehle:

Absatzbefehle

BefehlFunktionAnmerkung
SHIFT ALT 8Zeilen sortieren A..ZMindestens zwei Zeilen müssen markiert sein, Dubletten werden entfernt, A=a
SHIFT ALT 9Zeilen sortieren Z..AMindestens zwei Zeilen müssen markiert sein, Dubletten werden entfernt, A=a
SHIFT ALT ↑ oder ↓Absatz hoch/runter kopierenCursorposition bzw. Block
SHIFT STRG ↑ oder ↓Absatz hoch/runter schiebenCursorposition bzw. Block
STRG ↑ oder ↓hoch/runter rollenCursor bleibt wo er ist
F11Umbruch an/ausUmbruch an der Fensterkante, alternativ im Kontextmenü, Setzt Marke 0
STRG YZeile löschenAktuelle Zeile
SHIFT STRG YBis Zeilenende löschenAktuelle Zeile

Blockbefehle

BefehlFunktionAnmerkung
STRG ALT AAuswahlmodus wechselnNormal → Spalte → Zeile →… , alternativ im Kontextmenü
STRG ALT Ualles GROSS (wenn möglich)Schreibweise für Wort unter dem Cursor oder alles im Block
STRG Ualles kleinSchreibweise für Wort unter dem Cursor oder alles im Block
STRG SHIFT UA ß B # C - Ö → aßb#c-öAlles klein ohne Leerzeichen
ALT SHIFT Ualles SubstantivierenSchreibweise für Wort unter dem Cursor oder alles im Block
ALT UÄn Dern → aenndern → KlemmbrettMarkierter Text wird „umlautfrei“ und „Linkfähig“ z.B. für einen Dateinamen, entspricht der Funktion für die ID-Bildung der Überschriften
STRG TBis Wortende LöschenCursorposition bzw. Block

Dateibefehle

BefehlFunktionAnmerkung
STRG OText öffnen/ersetzenErsetzt den aktuellen Text mit einem hinzu geladenen. Es werden nur UTF8-Codierte Dateien akzeptiert. möglicherweise gesetzte Sprungmarken gelöscht
STRG SSpeichern unterAktuellen Text in (beliebige) Datei speichern.Der Text im Editor wird weiterhin in der Standard-Datei gespeichert.
STRG EMedien einfügen/kopierenKopiert eine Mediendatei gemäß Header und erzeugt einen Pfad im Editor an der Cursor-Position.
SHIFT STRG EMedien Mime-codiert einbettenEinbettung einer Media-Datei als Mime-Typ.
F12Text → HTML exportierens.HTML-Export
SHIFT F12FTP-Datei des Exportss. FTP-Upload
SHIFT ALT F12Alles speichern (lokal, FTP)entspricht funktional der Tastenfolge STRGS,F12,SHIFTF12
F5Module-Verzeichnis öffnenÖffnet das Module-Verzeichnis im Explorer
F9„In Arbeit“ → FTPHochlagen der gespeicherten Arbeitsdaten als Backup
ALT F9FTP → „In Arbeit“Alle Arbeitsdateien vom FTP-Backup herunterladen und lokal entpacken
STRG ALT F9„In Arbeit“ aufräumenAlle „In Arbeit“-Projekt-Dateien (lokal & FTP) löschen

Korrektur

BefehlFunktionAnmerkung
STRG NNächster Fehlerschließt ggf. Wortliste
STRG KKorrekturvorschlägeerneute Auslösung schließt die Liste
STRG MWort in Wörterbuchdirekt, ohne Rückfrage!
STRG LLieblingswortmarkierter Text wird mitgenommen, in der Liste ausgelöst erfolgt Rücksprung in den Text
ALT WNächstes Wort länger als 11 ZeichenErleichtert die Suche nach manuellen „Umbruchskandidaten“ (ALT 173)
F6Rechtschreibung DudenOnline-Duden-Abfrage mit markiertem Wort
SHIFT F6Duden SprachwissenDuden-Sprachwissen-Abfrage mit markiertem Wort
F7WikipediaWikipedia-Suche mit markiertem Wort

Textbefehle

BefehlFunktionAnmerkung
ALT ↑ oder ↓Markdown Überschrift hoch/runterSprung zur nächsten Zeile mit Hash in Spalte 1
STRG GQuerverweiseSetzt ggf. Marke 0
SHIFT STRG BKlammerpaar findenCursor muss links neben der Klammer stehen
STRG 1…9Marke 0-9 anspringenn = [0..9] s. Hinweis Marke 0
STRG FSuchenmarkierter Text wird mitgenommen
F3 / EnterWeitersuchenFokus wird auf dem Suchen-Knopf gehalten
STRG HErsetzenmarkierter Text wird mitgenommen
ALT #Suche a<>A an/ausStandard: aus
ALT -Suche rückwärts an/ausStandard: aus
ALT XStandard/RegEx-Suche umschaltenStandard: RegEx aus
ALT +Ab Anfang suchen an/ausStandard: An
SHIFT STRG 1…9
ALT 1…9
Marke 1-9 setzen/löschenn = [1..9] erneute Auslösung auf der Marke löscht sie
STRG BMarke dynamisch setzen/löschenErzeugt die nächste freie Marke (1-9), löscht eine beliebige Marke an der Position
ALT STRG ← oder →Nächste Marke davor/danachSpringt zur nächsten Marke ab Cursor in die entsprechende Richtung
SHIFT ALT STRG BAlle Marken löschenEntfernt ohne Rückfrage alle Textmarken
STRG ALT ,Schrift 1pt kleinerSetzt Marke 0
STRG ALT .Schrift 1pt größerSetzt Marke 0
F10Schrift wählen/einstellenSetzt Marke 0
STRG F10Farben wählen/einstellenSetzt Marke 0
ALT FFarben verwendenStandard: an

Projektbefehle

BefehlFunktionAnmerkung
F5Modulverzeichnis öffnenÖffnet das für alle Projekte gültige Modulverzeichnis im Explorer.
F4Projektverzeichnis öffnenÖffnet das Projekte-Verzeichnis im Explorer
STRG F4Neue Projektverzeichnis anlegenErzeugt das Grundgrüst einer Konfiguration für ein neues Projekt.
SHIFT STRG F4PHP-Pfad → out setzenSetzt den PHP-Pfad auf das Projekt. Dafür muss diese in der Basiskonfiguration festgelegt sein und dem Standard-Webverzeichnis der PHP-Installation entsprechen. Bei XAMPP ist das z.B. typischerweise „htdocs“
SHIFT Alt STRG F4Projekt neu generierenErzeugt für alle *.md im Projektverzeichnis rekursiv neue Ausgabedateien
SHIFT STRG SAktuelle Daten einpackenErzeugt im Backup-Pfad ein verschlüsseltes ZIP-Archiv, s. Projekt-Backups
STRG SHIFT OArbeitsbackup auspackenÖffnet ein verschlüsseltes Arbeitsdaten-Backup, s. Projekt-Backups
SHIFT ALT STRG F12FTP Uplad ArbeitsdatenDas Arbeitsdaten-Archiv wird aktualisiert und in den FTP-Upload-Pfad geladen, s. Projekt-Backups
STRG SHIFT ALT OFTP Download ArbeitsdatenArbeitsdaten-Archiv des aktuellen Projekts herunter laden, s. Projekt-Backups

Messen-Befehle

BefehlFunktionAnmerkung
ALT TTimer an / ausWenn an: ein Status-Icon, wenn aus: Stoppuhr
SHIFT ALT TTimer-Zeit einstellenStellt neu, wenn aus, bildet Differenz, wenn an, ±1 2
F2Differenz zählenSchalter ∇ an/aus, Taste angelehnt an „F2 → Bearbeiten“
ALT RWorte pro Minute einstellenDurchschnittliche Lesegeschwindigkeit ±10 2

Drag & Drop

Diese Funktion erfordert eine Lizenz.

Der Editor akzeptiert „TXT“ und „MD“-Dateien als neue Arbeitsdatei oder Mediendateien gemäß Projektkonfiguration. Von der vorhandenen Datei wird konfigurationsabhängig ein Backup angelegt. Mediendateien werden in das für die Arbeitsdatei gültige Medienverzeichnis kopiert, der dazugehörende Pfad an der aktuellen Curorposition* eingefügt. Ist keine Projektdatei vorgegeben, wird der absolute Dateipfad eingefügt. In diesem Fall findet keine Kontrolle bzgl. des Dateityps statt.


Ende Editor-Dokumentation


Markdown-Konvertierung

Die Übersetzung des Editor-Inhalts erfolgt mit den nachfolgenden Regeln. Sie folgen in weiten Teilen den mittlerweile gebräuchlichen Markdown-Standards, sind jedoch an einigen Stellen spezialisiert und erweitert. Das kann zu unerwarteten Ergebnissen führen, die anhand dieser Dokumentation alle behoben bzw. erklärt werden können.


Es können und müssen keine Einstellungen vorgenommen werden.

Konvertierungsreihenfolge

  1. Einlesen des Yaml-Headers und puffern der Parameter
  2. Laden der verfügbaren Module
  3. Konvertieren des Editor-Textes
    1. Doublettenprüfung und Entfernen des YAML-Headers (wenn vorhanden)
    2. Ersetzen der Meta-Zeichen
    3. Leerzeilen und Notizen entfernen
    4. Fußnoten sammeln und aus dem Text entfernen
    5. Referenzen sammeln und aus dem Text entfernen
    6. Module ersetzen
    7. Einzüge für Listen normalisieren (Tabs und Leerzeichen)
    8. HTML-Code erzeugen
      1. Blockbehandlung für Code-Blöcke, Kommentare, Notizen, Blockquote, Blockquote, Tabellen
      2. Überschriften
      3. Definitionen
      4. Linien (<hr>) → Theoretisch an jeder beliebigen Stelle, damit sie auch in Blöcken genutzt werden können
      5. Listen (•, a, A, 1., i, I), a,A,1 registrieren einen Startwert, römisch kann immer nur bei i/I anfangen, dehalb kann es a/A nicht.
      6. Fett, Kursiv, Fett-kursiv, code, …
      7. Fußnotenverweise im Text einfügen
      8. Referenzen im Text einfügen
      9. Fußnotentexte anhängen
  4. Laden der eingesellten Layoutdatei
  5. Zusammenfügen des layouts des konvertierten Textes zu einer Ausgabedatei
  6. Ersetzen bzw. Entfernen der Yaml-Parameter in der Ausgabedatei

Die Reihenfolge kann insbesondere im Zusammenspiel mit Modulen relevant sein. Einerseits werden eventuell Moduleinträge (Sonderzeichen) verändert, andererseits können Yaml-Parameter in Modulen ebenso wie im Layout genutzt werden, während Module und Markdonw-Auszeichnungen nur im Markdown-Bereich ersetzt werden. Yaml-Parameter werden deshalb immer „wie sie sind“ übergeben.

Zeichenkonvertierung

Im Markdown muss keine Rücksicht auf nachgelagerte Module genommen werden. Deshalb werden Zeichen »1:1« durchgereicht. Ersetzungen finden für diese „Meta-Zeichen“ statt, damit sich Sonderfälle lösen lassen:

WasWofürErsetzungAnmerkung
\\\\„Backslash“
\***„Sternchen“
\___Unterstrich
\^^^„Caret“
\[[[nur in Sonderfällen erforderlich
\>>>„größer“ umschifft ggf. HTML-Konflikte
\<<&lgt;„kleiner“ umschifft ggf. HTML-Konflikte
\]]]nur in Sonderfällen erforderlich
\|||innerhalb von Tabellen
\```Sonst wird es Code
\"""Damit sind Hochkomma z.B. in Bild-Titeln möglich
­(-)(-)„Bedingter Trennstrich“, in der Ausgabe unsichtbar, nur wenn eine Trennung nötig ist (ALT173)
  „festes Leerzeichen“, Backslash + Leertaste ( ALT160)
\0…\9₀…₉₀…₀Tiefgestellte Zahlen3

Code-Blöcke, DIV, Kommentare, Notizen

Zeilenweise eingerahmter HTML-Kommentar oder PHP-Code wird „durchgereicht“:

<?php
// wird inklusive der Start- und Endmarke 1:1 übernommen
?>
<!--
Dito.
-->

Eventuell noch offene“ Strukturen (Tabellen, Blockquotes, Aufzählungen, …) werden vor dem Beginn dieser Strukturen geschlossen.

Innerhalb eines Absatzes werden Kommentare und PHP ebenfalls durchgereicht.

Werden mehrzeilige Kommentare/Codezeilen innerhalb eines Absatzes eingeleitet, unterliegt die darin eingeschlossenen Absätze der Markdown-Interpretation. Der Code wird dadurch (sehr wahrscheinlich) fehlerhaft!

Sonderfunktion DIV

Beginnt ein Absatz mit ⟨⟨ (ersten beiden Zeichen im Absatz), wird der gesamte Absatz mit <DIV> ersetzt. Nachfolgender Text wird als Klasse interpretiert. Geschlossen wird der Block mit ⟩⟩ am Anfang eines weiteren Absatzes. Dort folgender Text wird als Kommentar ignoriert.

­⟨⟨ einzug1
…
­⟩⟩ Hier endet der Einzug
→
<div class="einzug1">
…
</div>

Sonderfunktion Pandoc DIV

Der Konverter Pandoc unterstützt das Einfügen von Blöcken mit einer anderen Notation. Soll eine Webseite eventuell darüber hinaus auch gedruckt werden, ist diese Notation für Abschnitte die bessere Wahl. Ein Block beginnt am Absatzanfang (ersten drei Zeichen) mit :::. Es können beliebig viele weitere Doppelpunkte verwendet und so ein Einzug bei Verschachtelungen dargestellt werden.

Es muss eine Klasse folgen, ansonsten wird ein </DIV> (Block schließt) erzeugt. Es findet keine Validierung statt, ob noch ein Block offen ist oder geschlossen wird, obwohl keiner offen war.

­::: Formatname
…
­:::::: Formatname
…
­:::
­:::

Sonderfunktion Notiz

Beginnt ein Absatz mit ?? wird er als „interner Kommentar“ angesehen und beim Export wie eine Leerzeile behandelt (s. Absätze).

Absätze

Ein „weicher Umbruch“ wird eingefügt, wenn ein „normaler Absatz“ mit zwei oder mehr Leerzeichen endet. Beim Export in andere Editoren/Konverter ist die Mindestanzahl der Leerzeichen womöglich größer.

Blockquote

Diese Blockstruktur lässt sich beliebig tief verschachteln. Dabei ist egal, ob vor oder zwischen den >-Symbolen Leerzeichen stehen (≠ Standard-Markdown). Innerhalb eines Blocks können alle hier nachfolgend beschriebenen Auszeichnungen verwendet werden5.

Damit das „optisch konsistent“ funktioniert, müssen entsprechende Stile definiert werden.


Das „Blockquote-Dilemma“

Es gibt keine Referenzierung in CSS auf das Eltern-Element. Über Folge-Definitionen wie z.B. :first-child lässt sich für mehrstufige Blockquotes schwer vorhersehen, was am Ende heraus kommt. Erwartbare Format-Kombinationen sollten daher explizit mit Stilvorlagen definiert sein. Ist es in der Formatvorlage berücksichtigt, lässt sich problemlos

  beispielsweise Code in eine Blockquote legen,
  was ziemlich cool aussieht…

pre

Codeblöcke folgen im Rang den Blockquotes. Sie können wahlweise mit dreifachem Akzent (```) oder dreifacher Tilde (˜˜˜) eingeleitet werden. Sie müssen am Zeilenanfang bzw. direkt nach dem letzten Blockquote-Zeichen stehen und werden mit <pre><code> eingeschlossen. Optional kann eine Formatklasse angehängt werden: Alles im Absatz hinter ~~~ ≠ Whitespace.

Überschriften

­## Eine Ganz - besondere - Überschrift
             ↓ wird zu ↓
<h2 id="eine-ganz-besondere-ueberschrift" tabindex="0">Eine Ganz - besondere - Überschrift</h2>

Aus dem Text der Überschrift wird (für H1…H6) ein ID erzeugt, bei dem [ÄÖÜ,äöüß] mit [ae..ue,ss] ersetzt und alles ≠ [A..Z,a..z,-] ersatzlos entfernt und klein geschrieben wird. Zusätzlich erhalten alle Überschriften den „tabindex="0"“, was sie mit der TAB / SHIFTTAB „navigierbar“ macht.

Zum einfachen Verweisen auf Überschriften in dieser Form können sie im Editor wahlweise per Querverweis eingefügt werden, oder mit dem Tastenbefehl ALTU ein markierter Text in dieser konvertierten Form in die Zwischenablage kopiert werden.

Auszeichnungen

WaswofürAnmerkung
**…****Fett**Fett 10
__…____Fett__Fett 10
*…**kursiv*Kursiv 10
_…__kursiv_Kursiv 10
***…******kursiv-fett***kursiv-fett 10
___…______kursiv-fett___kursiv-fett 10
`…``Code`Code, HTML-encodiert 9
°­°…°­°°­°klein°­°schreibenkleinschreiben8
^…^^hoch^stellenhochstellen8
˜…˜˜tief˜stellentiefstellen8
==…====durch==streichendurchstreichen8
=­=­=…=­=­==­=­=unter=­=­=streichenunterstreichen8
!­!…!­!!­!Achtung!­!Achtung 78

Bilder

   ![Ersatztext]⟨Link Titel⟩
   [Linktext]⟨Link Titel⟩

Referenzen

Im Text: [Linktext][referenz]

Referenz:

Ausgabe:

Eine „vergessene Referenz“ wird hervorgehoben: UNGÜLTIGE REFERENZ14

Fußnoten

Fußnote[^ref]
[^ref]: …

Eine „vergessene Fußnote“ wird hervorgehoben: UNGÜLTIGE FUSSNOTE14

Definitionslisten

Vorschlag
: Aufzählen als einfache Liste
: Ggf. auch mehrzeilig
    ↓ wird zu ↓
<dt>Vorschlag</dt>
<dd>Aufzählen als einfache Liste</dd>
<dd>Ggf. auch mehrzeilig</dd>

Tabellen


| Kopf 1 | Kopf 2 | kopf 3 |{tabellenid}
| :--- | :---: | ---: |
| links | Mitte | rechts |
| Das ist ein Muster | Das ist ein Muster | Das ist ein Muster |

Kopf 1Kopf 2kopf 3
linksMitterechts
Das ist ein MusterDas ist ein MusterDas ist ein Muster

Das ganze in einer Blockquote:

> | Kopf 1 | Kopf 2 | kopf 3 |{tabellenid2}
> | :--- | :---: | ---: |
> | links | Mitte | rechts |
> | Das ist ein Muster  | Das ist ein Muster | Das ist ein Muster |

Kopf 1Kopf 2kopf 3
linksMitterechts
Das ist ein MusterDas ist ein MusterDas ist ein Muster

Aufzählungen

Erstes ZeichenAnmerkung
- oder +ungeordnete Liste
1…9…nNummierierte Liste, optionaler Startwert = erste Zahl
A…H,J…ZAlphanummerisch Großbuchstaben, Startwert = erster Buchstabe
a…h,j…zAlphanummerisch Kleinbuchstaben, Startwert = erster Buchstabe 12
I oder iRömische Nummerierung, Kein freier Startwert möglich
  1. ungeordnete Listen mit - oder +
  2. Der Zähler der Einzugsebene wird mit dem ersten Eintrag festgelegt
  3. Eine Zählung wird mit einer folgenden höheren Ebene zurückgesetzt
  4. Die Aufzählung kann an beliebiger Stelle starten, maßgeblich ist der tatsächliche Einzug vom Absatzanfang (als Leerzeichen,> zählt als Leerzeichen, Tab wird zu zwei davon) für die Nummerierungstiefe.

Module

ProjekteModule-Verzeichnis öffnen

[modulname parameter "parameter" …]

Mit der abgebildeten Syntax können beliebige Erweiterungen realisiert werden. Der „Modulblock“ wird durch einen Code-Block ersetzt, in dem die Parameter vor der Einfügung ersetzt werden. Diese Erweiterungen müssen

Ab der nächsten Zeile werden - die im Kopf definierten Variablennamen mit dem übergebenen Wert ersetzt, wenn sie in der Form %parameter% eingefügt wurden. Die Übergabe erfolgt Reihenfolge-abhängig. Variablen können Standardwerte haben, die allerdings weder Leerzeichen enthalten dürfen, noch durch Anführungsstriche geklammert werden können:

modulname vertikal=rechts horizontal=unten breite=45.23

Wenn für dieses Beispiel nur die Breite übergeben werden soll:

[modulname - - 20]

Von hinten können Parameter mit Vorgabe ausgelassen werden. Für ungültige oder „leere“ Parameter müssen (gegebenenfalls) im Modulcode Vorkehrungen getroffen werden.

Ein fehlendes Modul wird hervorgehoben: UNGÜLTIGES MODUL14


Es findet keine Syntaxkontrolle des Ergebnisses statt.

Beispielmodul „img“

img href Titel=Keine Bildbeschreibung verfügbar ID=px css=right
<img id="%ID%" class="%css%" src="%href%" alt="%Titel%" title="%Titel%" />

Damit ein Bild mit Formatierung versehen werden kann, wird ein mit [img Bildpfad] übergebenes Bild ohne weitere Parameter so im HTML-Code eingefügt:

<img id="px" class="right" src="Bildpfad" alt="Keine Bildbeschreibun" title="Keine Bildbeschreibung" />

Die Worte im Vorgabewert für den Titel sind mit ALT0173=&­nbsp; getrennt – so werden soe als „ein Parameter“ erkannt. Der Vorschlaf für „ID“ kann kritisch werden, wenn mehrere Bilder mit gleicher ID eingefügt werden.

Die Parameter-Reihenfolge ist so gewählt, dass die notwendigen Eingaben am Anfang, die sinnvollen im Anschluss und die „optionalen“ am Ende stehen.

Layoutdatei(en)

Es handelt sich um „entkernte“ HTML/PHP-Dateien, die mit Variablen aus dem Yaml-Header ergänzt werden. Der in HTML transferierte Markdown-Text wird für die Variable %­%%content%­%% eingefügt.

  • Es findet keine Syntax- oder Funktionsprüfung statt.
  • Es findet keine Prüfung auf Existenz verwendeter Include-, CSS-, oder sonstiger verknüpften Daten statt.

Maßgeblich ist die Funktionalität im Rahmen der Webseite.

Lizenzabhängige Funktionen

Für die nachfolgenden Funktionen von »OffSiteEdit« ist eine Lizenz erforderlich:

Medien-Unterstützung:
Drag&Drop oder Einfügen von Media-Daten inklusive korrektem Pfad im Dokument und Kopieren der Daten in die Projekt-Struktur
FTP-Funktionen
Upload des Dokuments und verknüpfte Medien aus dem Editor in die Server-Struktur per Knopfdruck
„Alles speichern“
Speichern der Datei, Erzeugen des Exports und Upload der Daten auf den Server „in einem Zug“
Archiv-Funktionen
Ein- und Auspacken von (optional) verschlüsselten Arbeitsarchiven, sowie Upload/Download dieser Archive zur Synchronisation der Arbeitsdaten über mehrere Arbeitsplätze.

1Ob und wie sich das mit anderen lokalen PHP-Umgebungen einrichten und nutzen lässt, ist unklar (Falls es dazu Erkenntnsise gibt: Bitte teilen!). Allgemein formuliert ist das ´htdocs-Verzeichnis von XAMPP das Verzeichnis var/www` einer Linux-Installation.  

2Versteckt den Eingabe-Cursor. Damit dieser sichtbar wird, entweder Zahlen tippen (bei unklarer Position) oder / wiederholt drücken, bis der Cursor angezeigt wird.  

3https://www.htmlsymbols.xyz/miscellaneous-symbols/subscript-and-superscript "HTML Symbols"  

4Das gilt für den HTML-Export mit OffSiteEdit. Andere Markdown-Interpreter/Parser verhalten sich womöglich anders.  

5Das ist gemäß „Daring-Fireball“-Konvention, wird jedoch von wenigen Interpretern gemacht.  

7Es wird das HTML5-Element <mark>…</mark> verwendet, das älteren Browsern unbekannt ist.  

8Das ist kein offizielles Markdown.  

9Automatische Ersetzung von <,>,[,],(,) mit HTML-Encodierung innerhalb der <Code>-Auszeichnung.  

10Bei Auszeichnungsfehlern wird „der kleinste Nenner“ genommen, „unpaarige“ Sterne bleiben übrig. Falls ein Stern „überleben“ soll, muss er mit \* geschützt werden. Die „Unterstrich-Varianten“ werden unterstützt, allerdings werden sie von der Korrektur als „Zeichen“ interpretiert.  

11Wofür ist das gut? Technisch zum sortieren der Fußnoten. Ob es auch einen praktischen Wert hat, ist unklar. ;)  

12Wegen der Option „römisch“ kann I bzw. i kein Startwert sein.  

13Lizenzabhängige Funktion  

14Dafür wird der HTML-Code <mark>…</mark> verwendet – die Hervorhebung hängt daher von einem Formatbefehl dafür ab.  

15Dateien für Webserver (PHP, HTML, CSS,…) sollten grundsätzlich ohne Boom-Flag sein. Das ist häufig ein Grund für Probleme, die kaum diesem Detail zugeordnet werden.