-
Überlegungen zur Logveröffentlichung Es könnte Sinn machen, das log öffentlich zu führen. Es ist absichtlich in einem leicht parsbaren, kontextfreien Format gehalten.
Eine Liste an Einträgen, in eckigen Klammern:
[1970-01-01]
. Danach kann eine Tagesbeschreibung kommen, und danach eine Liste von Items. Eine Tagesbeschreibung ist ein Block.Jedes Item ist ein Itemtitel und optional danach ein Itemblock. Ein Itemtitel beginnt mit
-
und danach Absatz mit Zeilenformatierung. Als Zeilenumbruch ist hier nur die Kombination\n
valide, diese wird dem Zeilenformatierer als\n
übergeben (Entfernen der Einrückung). Der Itemblock ist ein Block, der vier Spaces eingerückt ist.Ein Block ist ein valides Dokument in einer Markupsprache, in diesem log wird Markdown verwendet.
Der Absatz mit Zeilenformatierung ist in betreffender Markupsprache der Strukturtyp mit den wenigsten besonderen Eigenschaften (in Markdown der normale Absatz).Zwischen, vor und nach Einträgen können je beliebig viele Leerzeilen kommen, ebenso zwischen, vor und nach Tagesbeschreibung und Items. Dies dient zur besseren informellen Formatierung.
Im Sinne der Post-Post-Privacy wird die Synax des Itemtitels so erweitert, dass zu
-
noch+
und*
möglich sind.Die Liste an Einträgen ist nach aufsteigendem Datum sortiert und darf Datumslücken enthalten. Jeder Eintrag stellt einen Tagebucheintrag da, jedes Item eine logische Einheit des Tages (z.B. eine Aktivität, ein erledigtes Todo, einen Gedankenzug).
Die Markierung des Itemtitels stellt die Privatheit des Eintrags im Sinne der Post-Post-Privacy dar. Hierbei steht
+
für Öffentlich,-
für Privat und*
für Semiprivat (Einsehbar von Vertrauenspersonen).p-ebnf
, parametrisierte Extended Backus-Naur Form (Regeln können mit weiteren Regeln parametrisiert werden); das ist trivial normalisierbar (oder sollte es zumindest sein).Foo A
ist Applikation."abc"
ist Kurzschreibweise für"a", "b", "c"
. Character Classes wie inman perlrecharclass
definiert werden unterstützt durch Einschluss in/
, z.B./\w/
(Wortcharakter),/[a[:upper:]]/
(allea
und Großbuchstaben). Tokens, die auf andere Parser verweisen, werden mit<>
markiert.<Substitute>
ist eine spezielle Form, die vier Argumente erhält: Die zu ersetzende Form S, den Ersatz E, eine Form X, in der ersetzt wird und eine Form Y, die nach der Ersetzung gilt. Dabei muss X vor der Ersetzung gelten, und Y nach der Ersetzung. (TODO: geht das auch simpler?) Das ist für eingerückte mehrzeilige Blöcke gedacht, die an einen anderen Parser übergeben werden.log := Editorkommentar , Leerzeilen , SpacedList Eintrag , Leerzeilen Eintrag := Datum , Leerzeilen , Tagesbeschreibung , Leerzeilen , SpacedList Item Datum := "[", {/\d/}, "-", 2* /\d/, "-", 2* /\d/, "]", nl Tagesbeschreibung := Block, nl Item := Itemtitel , Itemblock Itemtitel := ( "+ " | "- " | "* " ) , AbsatzMitZeilenformatierung AbsatzMitZeilenformatierung := <Substitute> (indent 2) /\n/ (indentL 2) <Simpelster Strukturtyp> , nl Itemblock := <Substitute> (indent 4) /\n/ (indentL 4) Block , nl Block := <Blockparser (z.B. Markdown)> SpacedList a := a, {Leerzeilen, SpacedList a} Editorkommentar := "-*-", {/./}, "-*-", nl Leerzeilen := nl, {Leerzeilen} indentL n := {/./}, {(indent n), indentL n} indent n := nl, n*" " nl := /\n/
Last active
August 8, 2022 16:56
-
-
Save Profpatsch/092ff68fa267b9fa0ccbe13e98149b21 to your computer and use it in GitHub Desktop.
Spec für log
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment