Deine "Erweiterung" versteh ich nicht so ganz, da ein !2<text> ja alle bisherigen Objekte schliesst, die auf den letzten 2 Ebenen noch offen waren.
Vielleicht sollte das ganze ein Beispiel verdeutlichen.
Wir definieren jetzt, das Scene-Objekte weitere Scene-Objekte enthalten duerfen (was mir als Subszenen einzig sinnvoll erscheint). Alles andere bleibt beim alten.
Beispiel 1
#152: Herbert stirbt im Wald
<Im Wald>
Herbert: Hallo.
<Auf dem Friedhof>
Herbert: Ich lebe noch
Das generiert wie gehabt folgende struktur
Erklaehrung:
#152: Herbert stirbt im Wald -> Erstes Objekt (Episode) = Wurzel
<Im Wald> -> Episode kann Scene enthalten. -> Episode.insert(new Scene)
Herbert: Hallo. -> Scene kann Line enthalten, Episode aber nicht -> Scene.insert(new Line)
<Auf dem Friedhof> -> Sowohl Episode als auch Scene koennen Scene enthalten. Da kein ! angegeben ist, soll es auf die gleiche Ebene, wie andere Scene objekte -> Alle offenen Tags unterhalb von Episode schliessen (rekursiv) -> Episode.insert(new Scene)
Herbert: Ich lebe noch -> nur Scene kann line enthalten -> oberster offener Scene Knoten bekommt zuschlag -> Scene.insert(new line)
EOF -> Implizites Close All
Beispiel 2:
#152: Herbert stirbt im Wald
<Im Wald>
Herbert: Hallo.
!<Auf dem Friedhof>
Herbert: Ich lebe noch
Das generiert folgende struktur
Bis zum !<Auf dem Friedhof> ist alles wie gehabt.
<Auf dem Friedhof> -> Sowohl Episode als auch Scene koennen Scene enthalten. Da ! angegeben ist, soll es eine Ebene hoeher hinein -> Scene.insert(new Scene) -> Basiszeiger eine Ebene hoeher
Bei Beispiel 3 fuegen wir Beispiel 2 eine weitere Szene hinzu.
Beispiel 2:
#152: Herbert stirbt im Wald
<Im Wald>
Herbert: Hallo.
!<Auf dem Friedhof>
Herbert: Ich lebe noch
!1<Herberts Haus>
Herbert: Hier wohne ich schon lange
Das generiert folgende struktur
Bis zu !1<> ist alles wie in Beispiel 2.
!2<Herberts Haus> -> Die neue scene koennte innerhalb der Friedhofsszene liegen (das waere bei !<> der Fall) oder parallel dazu (ohne !). Sie koennte aber auch parallel zur Waldszene liegen. Momentan befinden wir uns innerhalb der Waldszene, denn wenn wir kein ! angeben, wuerden wir eine weitere Szene parallel zur Friedhofsszene einfuegen. Das !1 sagt uns aber, wie sollen eine Ebene tiefer gehen und alle offenen tags schliessen -> Scene (Friedhof).close -> Scene(Wald).close -> Nun sind wir eine Ebene unterhalb und fuegen die neue Szene ein -> Episode.insert(new Szene(Haus))
Soweit alles klar ?
Wenn du willst, kannst du natuerlich auch statt der (![0..9])? notation auch eine ([+]|[-]+)? notation verwenden, das ist vielleicht intuitiver
<scene> fuegt eine szene parallel ein
+<scene> fuegt die szene innerhalb des letzten sinnvollen offenen objekts ein
-<scene> geht eine Ebene im baum tiefer, schliesst offene Tags und fuegt dort die szene ein
---<scene> geht drei ebenen in richtung wurzel, schliesst alle offenen tags auf dem weg und fuegt dann die szene ein