Sandwich-Markierung /…/…

Eine Zeile mit Schrägstrich am Anfang und einem weiteren danach wie /ru/del besagt, dass ru vor jede kommende Zeile gesetzt werden soll, bis die Zeile del erreicht ist; die Zeilen /ru/del und del werden entfernt. ru und del stehen dabei für quasi beliebige Zeichenketten. Das klingt vielleicht verwirrend, ist in der Praxis aber einfach und wird durch die folgenden Beispiele veranschaulicht.

Beispiel: Liste

Der Text

/<> /TOAST
Tomaten
Eier
Mayo
Salatblatt
Meerrettich
TOAST

entspricht genau diesem Text

<> Tomaten
<> Eier
<> Mayo
<> Salatblatt
<> Meerrettich

weil gemäß /<> /TOAST die Zeichen <> an jeden Zeilenanfang gesetzt werden, bis die Zeile TOAST erreicht ist.

Beispiel: Auskommentieren

In diesem Beispiel wird statt eines Wortes ein Emoji als Markierung von Anfang und Ende des Sandwich-Bereiches verwendet. So ist

/%/🙊
Auferstanden aus Ruinen
und der Zukunft zugewandt,
laß uns dir zum Guten dienen,
Deutschland, einig Vaterland.
🙊

äquivalent zu

%Auferstanden aus Ruinen
%und der Zukunft zugewandt,
%laß uns dir zum Guten dienen,
%Deutschland, einig Vaterland.

denn gemäß /%/🙊 wird % vor jede Zeile gesetzt, bis die Zeile 🙊 erreicht ist.

Beispiel: Quiz

Dieses Beispiel illustriert, dass Sandwich-Markierungen nicht am Absatzanfang stehen müssen, sondern auch am Zeilenanfang innerhalb eines Absatzes stehen können. So ist

Nun, Frau Königin, wie heiß ich?
/{ } /🦋
Kunz
Heinz
Rumpelstilzchen
🦋

äquivalent zu

Nun, Frau Königin, wie heiß ich?
{ } Kunz
{ } Heinz
{ } Rumpelstilzchen

denn laut /{ } /🦋 wird { } vor jede Zeile gesetzt, bis die Zeile 🦋 erreicht wird.

Beispiel: Text

Dieses Beispiel illustriert, dass Sandwich-Markierungen nicht nur besondere Aneamal-Zeichen, sondern auch ganz normalen Text an den Anfang jeder folgende Zeile stellen können. In diesem Fall sind alle vier Zeilen im Sandwich-Bereich zudem leer. So ist

/Ich werde keine Kreide verschwenden./Tafel




Tafel

äquivalent zu

Ich werde keine Kreide verschwenden.
Ich werde keine Kreide verschwenden.
Ich werde keine Kreide verschwenden.
Ich werde keine Kreide verschwenden.

Beispiel: Quelltext

Dieses Beispiel illustriert, dass man das an den Zeilenanfängen zu wiederholende Zeichen auch gleichzeitig als Endmarkierung verwenden kann. So ist

/|/|
function is_escaped ($string, $pos) {
    $chk = $pos - 1;
    while (isset ($string[$chk]) and $string[$chk] === '\\') $chk--;
    return ($chk & 1) === ($pos & 1);
}
|

äquivalent zu

|function is_escaped ($string, $pos) {
|    $chk = $pos - 1;
|    while (isset ($string[$chk]) and $string[$chk] === '\\') $chk--;
|    return ($chk & 1) === ($pos & 1);
|}

weil /|/| zufolge | vor jede Zeile gesetzt wird, bis die Zeile | erreicht wird.

Beispiel: Metadaten

In diesem Beispiel sieht man, dass man auf die Angabe einer Endmarkierung auch verzichten beziehungsweise, besser gesagt, eine leere Endmarkierung verwenden kann. So ist

/@/
author: Martin Janecke
lang:   de
style
|header a {text-decoration: none}
|header li {font-size: x-large; line-height: 1}

Hallo Welt!

äquivalent zu

@author: Martin Janecke
@lang:   de
@style
@|header a {text-decoration: none}
@|header li {font-size: x-large; line-height: 1}
Hallo Welt!

denn laut /@/ wird @ vor jede Zeile gesetzt, bis eine leere Zeile (oder das Dateiende) erreicht ist.

Beispiel: Tabelle

Auch dieses Beispiel verwendet leere Markierungen. Damit wird hier eine „zweidimensionale Zuordnungsliste“ – auch als Tabelle bekannt – zusammengefrickelt. So ist

/<Stadt>/
<A> Addis Abeba
<B> Berlin
<C> Canberra

/<Land>/
<A> Armenien
<B> Bhutan
<C> Costa Rica

/<Fluss>/
<A> Amazonas
<B> Brahmaputra
<C> Colorado

äquivalent zu

<Stadt><A> Addis Abeba
<Stadt><B> Berlin
<Stadt><C> Canberra
<Land><A> Armenien
<Land><B> Bhutan
<Land><C> Costa Rica
<Fluss><A> Amazonas
<Fluss><B> Brahmaputra
<Fluss><C> Colorado

was im Übrigen wie folgt dargestellt wird

A B C
Stadt Addis Abeba Berlin Canberra
Land Armenien Bhutan Costa Rica
Fluss Amazonas Brahmaputra Colorado