Auch auf die Gefahr hin, diesen Thread mit meinem Kram zuzuspammen, hier mal der letzte Stand, mit dem ich zufrieden bin:
Einmal den Input und dann der Output, ich habe mich bewusst nicht nur auf Brother Johns - zum Teil Corner Case Situationen allein bezogen, auch wenn ich sagen muß das mir das Dokument in vielerlei Hinsicht auch die Augen geöffnet hat, was man so noch alles berücksichtigen muß bzw. könnte.
Ich glaube die verschiedenen Fälle sind ganz gut abgedeckt - und immer noch ohne einen Zeichenpuffer zu verwenden und on-the-fly.
Wenn daran Interesse besteht würde ich auf manche Punkte eingehen, zum Beispiel warum ich manche Vorschläge die Brother John gegeben hatte, brechen würde oder warum etwas anders aussieht als bei ihm vorgeschlagen.
Spontan fallen mir zum Beispiel ein:
- keine Implementierung von fett und kursiv, nur fett, kursive und fettkursiv aber kein Mischen von fett und kursiv
- Listen innerhalb von Paragraphen - warum sollen Sternchen, die nicht der Formatierung von Textschnitten dienen, anders behandelt werden
- Zeileumbrüche in Paragraphen, ich setzte zum Beispiel voraus, dass die neue Zeile mit einem Space beginnt, ansonsten haben wir keinen Umbruch - aber wir verwenden den automatischen Umbruch im Browser wenn dieser die Zeile nicht ebenfalls "zusammenführt"
- Zeilenumbrüche in Zitat-Blöcken, ja, schon drin, aber es gibt auch andere Punkte - zum Beispiel das ein Zitat das mit ">" fortgesetzt wird, zusammenhängt, fehlt dieses, machen wir einen harten Umbruch
usw...
Input, das einfachere Testdokument von mir, eines aus dem Web und dem Bruder seins
[src=html5]#Markdown Parser
##Erstelle Deinen eigenen Markdown-Parser und wandle Markdown-Code in HTML-Code um.
**Du hast noch: 22 Tage 10 Stunden 59 Minuten 15 Sekunden**
#{ABOUT}
Was ist eigentlich ein Parser?
Mit **Hilfe von Parsern wird eine Eingabe zerlegt, analysiert und daraus eine Ausgabe in einem anderen Format erstellt**. In *der Regel wird* also *eine (Text-)Eingabe in eine neue Struktur übersetzt*.
Und *so **soll** es* auch bei dieser ***Code Competition*** sein. Du sollst **einen Parser (=Übersetzer) schreiben**, der **Markdown-Dokumente in HTML-Quellocde übersetzt**.
##{INPUT}
* Es bietet sich die Verwendung von regulären Ausdrücken (*Regular Expressions*) an.
Deine Abgabe soll:
* Die Eingabe eines mit Markdown strukturierten Dokuments erlauben. Hierbei ist die Eingabe über einen Textbereich in einer GUI möglich, aber auch das Einlesen einer Datei (über eine GUI, oder über die Kommandozeile).
Folgende Markdown-Syntax soll berücksichtigt werden und entsprechend in HTML-Code umgewandelt werden:
Markdown-Zeichen HMTL-Code
# h1-Überschrift
## h2-Überschrift
* Ein Stern am Anfang einer Zeile beginnt eine Auflistung (Jedes Element einer Liste wird mit einem Stern gekennzeichnet)
**fetter_text** Ein fett geschriebener Text wird mit zwei Sternen (**) eingeleitet und wieder beendet.
*kursiver_text* Kursiv geschriebener Text wird mit einem Stern eingeleitet und einem Stern beendet (*)
> Ein Zitat wird durch ein > am Zeilenanfang eingeleitet
> Und hier geht das Zitat in eine neue Zeile über
Leerzeile Ein Paragraph wird durch eine Leerzeile zwischen Textblücken angegeben.
#{REVIEW}
**Worauf achten wir bei der Bewertung Deiner Abgabe?**
* Funktionalität: Lässt sich das Programm bedienen? Tut die Anwendung oder die Funktion, was sie soll? Wie umfangreich sind die Funktionen?
* Code-Qualität: Ist der Code sinnvoll strukturiert und effizient?
* Code-Lesbarkeit / Dokumentation: Lässt sich der Quellcode nachvollziehen? Ist der Code kommentiert?
* Setup: Ist das System einfach einzurichten / aufzusetzen? (z.B. mittels guter Dokumentation, Docker, Vagrant, Skripte, o.ä.)
* Welche Zusatzfeatures wurden eingebaut?
**Wie bewerten wir?**
##{POST}
# NEW CONTENT
# An exhibit of Markdown
This note demonstrates some of what [Markdown][1] is capable of doing.
*Note: Feel free to play with this page. Unlike regular notes, this doesn't automatically save itself.*
## Basic formatting
Paragraphs can be written like so. A paragraph is the basic block of Markdown. A paragraph is what text will turn into when there is no reason it should become anything else.
Paragraphs must be separated by a blank line. Basic formatting of *italics* and **bold** is supported. This *can be **nested** like* so.
## Lists
### Ordered list
1. Item 1
2. A second item
3. Number 3
4. Ⅳ
*Note: the fourth item uses the Unicode character for [Roman numeral four][2].*
### Unordered list
* An item
* Another item
* Yet another item
* And there's more...
## Paragraph modifiers
### Code block
Code blocks are very useful for developers and other people who look at code or other things that are written in plain text. As you can see, it uses a fixed-width font.
You can also make `inline code` to add code into other things.
### Quote
> Here is a quote. What this is should be self explanatory. Quotes are automatically indented when they are used.
## Headings
There are six levels of headings. They correspond with the six levels of HTML headings. You've probably noticed them already in the page. Each level down uses one more hash character.
### Headings *can* also contain **formatting**
### They can even contain `inline code`
Of course, demonstrating what headings look like messes up the structure of the page.
I don't recommend using more than three or four levels of headings here, because, when you're smallest heading isn't too small, and you're largest heading isn't too big, and you want each size up to look noticeably larger and more important, there there are only so many sizes that you can use.
## URLs
URLs can be made in a handful of ways:
* A named link to [MarkItDown][3]. The easiest way to do these is to select what you want to make a link and hit `Ctrl+L`.
* Another named link to [MarkItDown](http://www.markitdown.net/)
* Sometimes you just want a URL like <http://www.markitdown.net/>.
## Horizontal rule
A horizontal rule is a line that goes across the middle of the page.
---
It's sometimes handy for breaking things up.
## Images
Markdown can also contain images. I'll need to add something here sometime.
## Finally
There's actually a lot more to Markdown than this. See the official [introduction][4] and [syntax][5] for more information. However, be aware that this is not using the official implementation, and this might work subtly differently in some of the little things.
[1]: http://daringfireball.net/projects/markdown/
[2]: http://www.fileformat.info/info/unicode/char/2163/index.htm
[3]: http://www.markitdown.net/
[4]: http://daringfireball.net/projects/markdown/basics
[5]: http://daringfireball.net/projects/markdown/syntax
#### TEXT
It's very easy to make some words **bold** and other words *italic* with Markdown. You can even [link to Google!](http://google.com)
#### LISTS
Sometimes you want numbered lists:
1. One
2. Two
3. Three
Sometimes you want bullet points:
* Start a line with a star
* Profit!
Alternatively,
- Dashes work just as well
- And if you have sub points, put two spaces before the dash or star:
- Like this
- And this
#### HEADINGS AND quote
# Structured documents
Sometimes it's useful to have different levels of headings to structure your documents. Start lines with a `#` to create headings. Multiple `##` in a row denote smaller heading sizes.
### This is a third-tier heading
You can use one `#` all the way up to `######` six for different heading sizes.
If you'd like to quote someone, use the > character before the line:
> Coffee. The finest organic suspension ever devised... I beat the Borg with it.
> - Captain Janeway
# BROTHER JOHNS TESTDOKUMENT
# Ein Testdokument
Absätze sind die grundlegenden Blockelemente.
Ein neuer Absatz braucht mindestens eine Leerzeile.
Mehrere geht genauso und führen zum gleichen Ergebnis.
Einen Absatz darf man beliebig
umbrechen. Es bleibt ein einzelner Absatz ohne (!) Zeilenumbruch. Bonus: Harte Zeilenumbrüche innerhalb eines Absatzes (aber nicht am Absatzanfang oder -ende) macht man am Zeilenende mit einem Backslash oder mindestens zwei Leerzeichen. Ja, Leerzeichen. Vollkommen bescheuerte Idee, finde ich, aber so ists festgelegt.
Führende Leerzeichen sind ok
und werden entfernt.
Ausnahme: Bei der ersten Zeile eines Absatzes dürfen es max. 3 LZ sein, sonst wird ein Codeblock draus – der von der Aufgabe nicht gefordert ist. Also könnte man auf die Spezialbehandlung für erste Zeilen verzichten.
Viel Inline-Formatierung ist ja nicht gefordert: **Fett** und *kursiv*. Was kann man denn damit noch anstellen ... Wer sagt eigentlich, dass man immer nur ganze Wörter formatieren will: Donau*dampf*schifffahrts**kapitäns**mütze.
In der Aufgabe steht nichts von geschachtelter Formatierung, Aber ***fettkursiv*** oder **fett und *kursiv*** ist ja nicht sooo weit aus der Welt. Trotzdem würde ich das als Bonus ansehen.
Inline-Formatierung wird der Reihe nach geparst und dangling Sternchen bleiben simple Sternchen. Beispiel: In *C++* (kursiv) wird der Pointer mit einem Sternchen (*) markiert. Der komplette Regelsatz ist relativ komplex und steht hier: http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis
Zu den Überschriften: Da die Aufgabenstellung so vage ist, alles laut Spec.
### Laut Aufgabenstellung ist dies keine Überschrift, sondern ein normaler Absatz (da nur H1 und H2 gefordert sind).
#Auch ein normaler Absatz, da mindestens ein Leerzeichen nach dem # stehen muss.
# normale H1-Überschrift
# genauso normale H1-Überschrift
# auch eine normale H1 mit optionalem schließenden Hash #
# auch das ist eine normale H1, die Anzahl der Schließhashes muss nicht übereinstimmen ##
## normale H2
## H2: keine Schließhashes, da nicht per Leerzeichen getrennt####
## H2: keine Schließhashes, da noch ## Text danach
Spec sagt: “The opening # character may be indented 0-3 spaces.”
# H1
# H1
# H1
# keine H1. Eigentlich ein Codeblock, aber der ist von der Aufgabe nicht gefordert. Ich würde es als normalen Absatz interpretieren.
Mehrzeilige Überschriften geht nicht. Leerzeilen vor/nach Überschriften sind optional.
Ein Absatz.
## Eine H2
Noch ein Absatz. ##
Nicht von den Hashes am Ende verwirren lassen!
## > Das hier ist eine interessant formatierte H2-Überschrift <
Und wenn wir schon bei den spitzen Klammern sind:
> Ein Zitatabsatz
Oder umgebrochen:
> Auch das ist
> ein einzelner Zitatabsatz (ohne harten Zeilenumbruch!).
Normale Zeilenumbrüche werden genauso behandelt wie im Fließtext.
> Ein einzelner Zitatabsatz
mit Umbruch.
Man kann das natürlich auch kombinieren:
> Das mit dem Zitieren
schaut auf Anhieb einfach aus.
> Isses aber nich. Denn dieser ganze Block hier
> ist ein einzelner Zitatabsatz.
Leerzeilen trennen Zitate.
> Zitat 1
> Zitat 2
Im Vergleich zu:
> Ein einzelnes Zitat.
>
> Es hat zwei Absätze.
Eines noch:
> Das Leerzeichen nach der spitzen Klammer
>ist optional.
## Listen
Lasst uns Sachen auflisten; weil man mit Listen trotz der *am Zeilenanfang*-Einschränkung sooo viel Mist bauen kann!
* eins
* zwei
* drei
So weit, so einfach.
* eins
* **zwei** in fett
* *drei* in kursiv
* *Nein, das ist
* nicht kursiv*. Das sind zwei Listenpunkte mit jeweils einem Stern im Text.
Folgendes
*ist laut Spec
*keine Liste, sondern ein Absatz, der zwei Sternchen im Text hat. Wichtig: Kein kursiv wegen dem Zeilenumbruch direkt vor dem zweiten Stern!
Apropos Absätze:
* langweiliger kurzer Listenpunkt
* Der hier ist ein bisschen länglicher.
V.a. hat er einen zweiten Absatz.
* noch ein Punkt
* und noch einer
Huch!
*
Ein einzelner Stern!? Das ist eine Liste mit einem einzelnen leeren Listenpunkt.
Aber Vorsicht! Ein leerer Listenpunkt
*
unterbricht nicht einen Absatz! Das da eine Zeile höher ist ein simpler Stern.
Alles was leer ist, ist ein wunderschöner Grenzfall. Z.B.:
*
Was ist das denn?
* Na logisch! Ein Listenpunkt mit führender Leerzeile.
* Todo: Nachlesen, was mit dem Zeilenumbruch passieren soll. Schlucken wie in normalen Absätzen? Oder bleibt der?
Ein leerer Punkt in einer Liste? Logisch:
* eins
*
* drei
Leere Zeilen sind auch was Feines. Sie trennen normalerweise Absätze. In Listen sieht das ein bisschen anders aus.
* Leerzeilen
* zwischen Listenpunkten
* sind erlaubt
* auch mehrere Leerzeilen
Das da oben ist eine einzelne Liste.
* Die Aufgabenstellung fordert den Listenpunkt *am Zeilenanfang*.
* Das hier ist also keine geschachtelte Liste (im Gegensatz zur Spec).
Sondern? Ähm ... Ich würde sagen: eine Liste mit einem einzelnen Absatz in einem einzelnen Listenpunkt. Der Absatz enthält einen weichen Zeilenumbruch und ein dangling Sternchen.
[/src]
Und die Ausgabe dazu:
[src=html5]<h1>Markdown Parser</h1>
<h2>Erstelle Deinen eigenen Markdown-Parser und wandle Markdown-Code in HTML-Code um.</h2>
<p><strong>Du hast noch: 22 Tage 10 Stunden 59 Minuten 15 Sekunden</strong></p>
<h1>{ABOUT}</h1>
<p>Was ist eigentlich ein Parser?</p>
<p>Mit <strong>Hilfe von Parsern wird eine Eingabe zerlegt, analysiert und daraus eine Ausgabe in einem anderen Format erstellt</strong>. In <em>der Regel wird</em> also <em>eine (Text-)Eingabe in eine neue Struktur übersetzt</em>.
Und <em>so <strong>soll</strong> es</em> auch bei dieser <strong><em>Code Competition</em></strong> sein. Du sollst <strong>einen Parser (=Übersetzer) schreiben</strong>, der <strong>Markdown-Dokumente in HTML-Quellocde übersetzt</strong>.</p>
<h2>{INPUT}</h2>
<ul><li>Es bietet sich die Verwendung von regulären Ausdrücken (<em>Regular Expressions</em>) an.</li></ul>
<p>Deine Abgabe soll:</p>
<ul><li>Die Eingabe eines mit Markdown strukturierten Dokuments erlauben. Hierbei ist die Eingabe über einen Textbereich in einer GUI möglich, aber auch das Einlesen einer Datei (über eine GUI, oder über die Kommandozeile).</li></ul>
<p>Folgende Markdown-Syntax soll berücksichtigt werden und entsprechend in HTML-Code umgewandelt werden:</p>
<p>Markdown-Zeichen HMTL-Code
<h1> h1-Überschrift</h1>
<h2> h2-Überschrift</h2>
<ul><li> Ein Stern am Anfang einer Zeile beginnt eine Auflistung (Jedes Element einer Liste wird mit einem Stern gekennzeichnet)</li></ul></p>
<p><strong>fetter_text</strong> Ein fett geschriebener Text wird mit zwei Sternen (**) eingeleitet und wieder beendet.</p>
<p><em>kursiver_text</em> Kursiv geschriebener Text wird mit einem Stern eingeleitet und einem Stern beendet (*)</p>
<blockquote><pre><code> Ein Zitat wird durch ein > am Zeilenanfang eingeleitet<br/>
Und hier geht das Zitat in eine neue Zeile über</code></pre></blockquote>
<p>Leerzeile Ein Paragraph wird durch eine Leerzeile zwischen Textblücken angegeben.</p>
<h1>{REVIEW}</h1>
<p><strong>Worauf achten wir bei der Bewertung Deiner Abgabe?</strong></p>
<ul><li>Funktionalität: Lässt sich das Programm bedienen? Tut die Anwendung oder die Funktion, was sie soll? Wie umfangreich sind die Funktionen?</li>
<li>Code-Qualität: Ist der Code sinnvoll strukturiert und effizient?</li>
<li>Code-Lesbarkeit / Dokumentation: Lässt sich der Quellcode nachvollziehen? Ist der Code kommentiert?</li>
<li>Setup: Ist das System einfach einzurichten / aufzusetzen? (z.B. mittels guter Dokumentation, Docker, Vagrant, Skripte, o.ä.)</li>
<li>Welche Zusatzfeatures wurden eingebaut?</li></ul>
<p><strong>Wie bewerten wir?</strong></p>
<h2>{POST}</h2>
<h1> NEW CONTENT</h1>
<h1> An exhibit of Markdown</h1>
<p>This note demonstrates some of what [Markdown][1] is capable of doing.</p>
<p><em>Note: Feel free to play with this page. Unlike regular notes, this doesn't automatically save itself.</em></p>
<h2> Basic formatting</h2>
<p>Paragraphs can be written like so. A paragraph is the basic block of Markdown. A paragraph is what text will turn into when there is no reason it should become anything else.</p>
<p>Paragraphs must be separated by a blank line. Basic formatting of <em>italics</em> and <strong>bold</strong> is supported. This <em>can be <strong>nested</strong> like</em> so.</p>
<h2> Lists</h2>
<h3> Ordered list</h3>
<p>1. Item 1
2. A second item
3. Number 3
4. Ⅳ</p>
<p><em>Note: the fourth item uses the Unicode character for [Roman numeral four][2].</em></p>
<h3> Unordered list</h3>
<ul><li>An item</li>
<li>Another item</li>
<li>Yet another item</li>
<li>And there's more...</li></ul>
<h2> Paragraph modifiers</h2>
<h3> Code block</h3>
<p> Code blocks are very useful for developers and other people who look at code or other things that are written in plain text. As you can see, it uses a fixed-width font.</p>
<p>You can also make `inline code` to add code into other things.</p>
<h3> Quote</h3>
<blockquote><pre><code> Here is a quote. What this is should be self explanatory. Quotes are automatically indented when they are used.</code></pre></blockquote>
<h2> Headings</h2>
<p>There are six levels of headings. They correspond with the six levels of HTML headings. You've probably noticed them already in the page. Each level down uses one more hash character.</p>
<h3> Headings <p><em>can</em> also contain <strong>formatting</strong></p></h3>
<h3> They can even contain `inline code`</h3>
<p>Of course, demonstrating what headings look like messes up the structure of the page.</p>
<p>I don't recommend using more than three or four levels of headings here, because, when you're smallest heading isn't too small, and you're largest heading isn't too big, and you want each size up to look noticeably larger and more important, there there are only so many sizes that you can use.</p>
<h2> URLs</h2>
<p>URLs can be made in a handful of ways:</p>
<ul><li>A named link to [MarkItDown][3]. The easiest way to do these is to select what you want to make a link and hit `Ctrl+L`.</li>
<li>Another named link to [MarkItDown](http://www.markitdown.net/)</li>
<li>Sometimes you just want a URL like <http://www.markitdown.net/>.</li></ul>
<h2> Horizontal rule</h2>
<p>A horizontal rule is a line that goes across the middle of the page.</p>
<p>---</p>
<p>It's sometimes handy for breaking things up.</p>
<h2> Images</h2>
<p>Markdown can also contain images. I'll need to add something here sometime.</p>
<h2> Finally</h2>
<p>There's actually a lot more to Markdown than this. See the official [introduction][4] and [syntax][5] for more information. However, be aware that this is not using the official implementation, and this might work subtly differently in some of the little things.</p>
<p> [1]: http://daringfireball.net/projects/markdown/<br/>
[2]: http://www.fileformat.info/info/unicode/char/2163/index.htm<br/>
[3]: http://www.markitdown.net/<br/>
[4]: http://daringfireball.net/projects/markdown/basics<br/>
[5]: http://daringfireball.net/projects/markdown/syntax</p>
<h4> TEXT</h4>
<p>It's very easy to make some words <strong>bold</strong> and other words <em>italic</em> with Markdown. You can even [link to Google!](http://google.com)</p>
<h4> LISTS</h4>
<p>Sometimes you want numbered lists:</p>
<p>1. One
2. Two
3. Three</p>
<p>Sometimes you want bullet points:</p>
<ul><li>Start a line with a star</li>
<li>Profit!</li></ul>
<p>Alternatively,</p>
<p>- Dashes work just as well
- And if you have sub points, put two spaces before the dash or star:<br/>
- Like this<br/>
- And this</p>
<h4> HEADINGS AND quote</h4>
<h1> Structured documents</h1>
<p>Sometimes it's useful to have different levels of headings to structure your documents. Start lines with a `#` to create headings. Multiple `##` in a row denote smaller heading sizes.</p>
<h3> This is a third-tier heading</h3>
<p>You can use one `#` all the way up to `######` six for different heading sizes.</p>
<p>If you'd like to quote someone, use the > character before the line:</p>
<blockquote><pre><code> Coffee. The finest organic suspension ever devised... I beat the Borg with it.<br/>
- Captain Janeway</code></pre></blockquote>
<h1> BROTHER JOHNS TESTDOKUMENT</h1>
<h1> Ein Testdokument</h1>
<p>Absätze sind die grundlegenden Blockelemente.</p>
<p>Ein neuer Absatz braucht mindestens eine Leerzeile.</p>
<p>Mehrere geht genauso und führen zum gleichen Ergebnis.</p>
<p>Einen Absatz darf man beliebig
umbrechen. Es bleibt ein einzelner Absatz ohne (!) Zeilenumbruch. Bonus: Harte Zeilenumbrüche innerhalb eines Absatzes (aber nicht am Absatzanfang oder -ende) macht man am Zeilenende mit einem Backslash oder mindestens zwei Leerzeichen. Ja, Leerzeichen. Vollkommen bescheuerte Idee, finde ich, aber so ists festgelegt.</p>
<p>Führende Leerzeichen sind ok<br/>
und werden entfernt.</p>
<p> Ausnahme: Bei der ersten Zeile eines Absatzes dürfen es max. 3 LZ sein, sonst wird ein Codeblock draus – der von der Aufgabe nicht gefordert ist. Also könnte man auf die Spezialbehandlung für erste Zeilen verzichten.</p>
<p>Viel Inline-Formatierung ist ja nicht gefordert: <strong>Fett</strong> und <em>kursiv</em>. Was kann man denn damit noch anstellen ... Wer sagt eigentlich, dass man immer nur ganze Wörter formatieren will: Donau<em>dampf</em>schifffahrts<strong>kapitäns</strong>mütze.</p>
<p>In der Aufgabe steht nichts von geschachtelter Formatierung, Aber <strong><em>fettkursiv</em></strong> oder **fett und *kursiv*** ist ja nicht sooo weit aus der Welt. Trotzdem würde ich das als Bonus ansehen.</p>
<p>Inline-Formatierung wird der Reihe nach geparst und dangling Sternchen bleiben simple Sternchen. Beispiel: In <em>C++</em> (kursiv) wird der Pointer mit einem Sternchen (*) markiert. Der komplette Regelsatz ist relativ komplex und steht hier: http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis</p>
<p>Zu den Überschriften: Da die Aufgabenstellung so vage ist, alles laut Spec.</p>
<h3> Laut Aufgabenstellung ist dies keine Überschrift, sondern ein normaler Absatz (da nur H1 und H2 gefordert sind).</h3>
<h1>Auch ein normaler Absatz, da mindestens ein Leerzeichen nach dem # stehen muss.</h1>
<h1> normale H1-Überschrift</h1>
<h1> genauso normale H1-Überschrift</h1>
<h1> auch eine normale H1 mit optionalem schließenden Hash #</h1>
<h1> auch das ist eine normale H1, die Anzahl der Schließhashes muss nicht übereinstimmen ##</h1>
<h2> normale H2</h2>
<h2> H2: keine Schließhashes, da nicht per Leerzeichen getrennt####</h2>
<h2> H2: keine Schließhashes, da noch ## Text danach</h2>
<p>Spec sagt: “The opening # character may be indented 0-3 spaces.”</p>
<p> # H1<br/>
# H1<br/>
# H1<br/>
# keine H1. Eigentlich ein Codeblock, aber der ist von der Aufgabe nicht gefordert. Ich würde es als normalen Absatz interpretieren.</p>
<p>Mehrzeilige Überschriften geht nicht. Leerzeilen vor/nach Überschriften sind optional.</p>
<p>Ein Absatz.
<h2> Eine H2</h2>
Noch ein Absatz. ##</p>
<p>Nicht von den Hashes am Ende verwirren lassen!</p>
<h2> > Das hier ist eine interessant formatierte H2-Überschrift <</h2>
<p>Und wenn wir schon bei den spitzen Klammern sind:</p>
<blockquote><pre><code> Ein Zitatabsatz</code></pre></blockquote>
<p>Oder umgebrochen:</p>
<blockquote><pre><code> Auch das ist<br/>
ein einzelner Zitatabsatz (ohne harten Zeilenumbruch!).</code></pre></blockquote>
<p>Normale Zeilenumbrüche werden genauso behandelt wie im Fließtext.</p>
<blockquote><pre><code> Ein einzelner Zitatabsatz
mit Umbruch.</code></pre></blockquote>
<p>Man kann das natürlich auch kombinieren:</p>
<blockquote><pre><code> Das mit dem Zitieren
schaut auf Anhieb einfach aus.<br/>
Isses aber nich. Denn dieser ganze Block hier<br/>
ist ein einzelner Zitatabsatz.</code></pre></blockquote>
<p>Leerzeilen trennen Zitate.</p>
<blockquote><pre><code> Zitat 1</code></pre></blockquote>
<blockquote><pre><code> Zitat 2</code></pre></blockquote>
<p>Im Vergleich zu:</p>
<blockquote><pre><code> Ein einzelnes Zitat.<br/>
<br/>
Es hat zwei Absätze.</code></pre></blockquote>
<p>Eines noch:</p>
<blockquote><pre><code> Das Leerzeichen nach der spitzen Klammer<br/>
ist optional.</code></pre></blockquote>
<h2> Listen</h2>
<p>Lasst uns Sachen auflisten; weil man mit Listen trotz der <em>am Zeilenanfang</em>-Einschränkung sooo viel Mist bauen kann!

</p>
<ul><li>eins</li>
<li>zwei</li>
<li>drei</li></ul>
<p>So weit, so einfach.</p>
<ul><li>eins</li>
<li><strong>zwei</strong> in fett</li>
<li><em>drei</em> in kursiv</li>
<li>*Nein, das ist</li>
<li>nicht kursiv*. Das sind zwei Listenpunkte mit jeweils einem Stern im Text.</li></ul>
<p>Folgendes</p>
<p>*ist laut Spec
*keine Liste, sondern ein Absatz, der zwei Sternchen im Text hat. Wichtig: Kein kursiv wegen dem Zeilenumbruch direkt vor dem zweiten Stern!</p>
<p>Apropos Absätze:</p>
<ul><li>langweiliger kurzer Listenpunkt</li>
<li>Der hier ist ein bisschen länglicher.</li></ul>
<p> V.a. hat er einen zweiten Absatz.
<ul><li>noch ein Punkt</li>
<li>und noch einer</li></ul></p>
<p>Huch!</p>
<ul><li></li></ul>
<p>Ein einzelner Stern!? Das ist eine Liste mit einem einzelnen leeren Listenpunkt.</p>
<p>Aber Vorsicht! Ein leerer Listenpunkt
</p><ul><li></li></ul>
<p>unterbricht nicht einen Absatz! Das da eine Zeile höher ist ein simpler Stern.</p>
<p>Alles was leer ist, ist ein wunderschöner Grenzfall. Z.B.:</p>
<ul><li></li></ul>
<p> Was ist das denn?
<ul><li>Na logisch! Ein Listenpunkt mit führender Leerzeile.</li>
<li>Todo: Nachlesen, was mit dem Zeilenumbruch passieren soll. Schlucken wie in normalen Absätzen? Oder bleibt der?</li></ul></p>
<p>Ein leerer Punkt in einer Liste? Logisch:</p>
<ul><li>eins</li>
<li></li>
<li>drei</li></ul>
<p>Leere Zeilen sind auch was Feines. Sie trennen normalerweise Absätze. In Listen sieht das ein bisschen anders aus.</p>
<ul><li>Leerzeilen</li></ul>
<ul><li>zwischen Listenpunkten</li>
<li>sind erlaubt</li></ul>
<ul><li>auch mehrere Leerzeilen</li></ul>
<p>Das da oben ist eine einzelne Liste.</p>
<ul><li>Die Aufgabenstellung fordert den Listenpunkt <em>am Zeilenanfang</em>.</li></ul>
<p> * Das hier ist also keine geschachtelte Liste (im Gegensatz zur Spec).</p>
<p>Sondern? Ähm ... Ich würde sagen: eine Liste mit einem einzelnen Absatz in einem einzelnen Listenpunkt. Der Absatz enthält einen weichen Zeilenumbruch und ein dangling Sternchen.</p>[/src]
Feedback ist natürlich willkommen
PS: Die Formatierung ist bestimmt weg, weil die Daten sehr lang sind....
Und ein Case fehlt noch aktuell, sehe ich gerade:
[src=html5]<p>Aber Vorsicht! Ein leerer Listenpunkt
</p><ul><li></li></ul>
<p>unterbricht nicht einen Absatz! Das da eine Zeile höher ist ein simpler Stern.</p>[/src]
Der Paragraph wird noch geschlossen und ein neuer eröffnent, irgendwie sollte das ja zusammenhängen....
