Beschreibung des /std/book.c
----------------------------
Es gibt einen sogenannten hot character, in diesem Fall den Backslash
"\". Taucht dieser Character im Text auf, so wird das nachfolgende Zeichen
literal, also so, wie es aussieht, uebernommen. Das ist notwendig, falls man
mal eines der Sonderzeichen *normal* darstellen will.
Die Sonderzeichen (Datei books.h):
"-" : Der Bindestrich. Er kennzeichnet die Stellen in Woertern, wo getrennt
werden darf. Er ist im endgueltigen Text nicht zu sehen, wenn er nicht
gebraucht wird, also am Ende einer Zeile. Will man Bindestriche an
anderen Stellen darstellen benutze man stattdessen "\-". Getrennt wird
normal, "c-k" wird "k- k" getrennt.
"~" : Die Tilde. Sie gilt im Prinzip auch als Trennstrich (wie der
Bindestrich), hat aber eine besondere Bewandnis: Wird an dieser Stelle
getrennt, so verdoppelt sich der vorangehende Buchstabe. Dies ist
notwendig fuer die korrekte Trennung einiger zusammengesetzter Woerter,
z.B. "Wat~tuempel" wird "Watt- tuempel".
"<" : Das Kleiner-als-Zeichen. Dieses Zeichen gibt der Satzmethode an, dass
der nachfolgende Text linksbuendig zu setzen ist.
">" : Das Groesser-als-Zeichen. Dieses Zeichen gibt der Satzmethode an, dass
der nachfolgende Text rechtsbuendig zu setzen ist.
"|" : Der senkrechte Strich. Dieses Zeichen gibt der Satzmethode an, dass
der nachfolgende Text zentriert zu setzen ist.
"^" : Der Circumflex-Akzent. Dieses Zeichen gibt der Satzmethode an, dass
der nachfolgende Text im Blocksatz zu setzen ist. Dies ist auch die
normale Satzmethode. Jeder Absatz beginnt automatisch wieder mit
Blocksatz. Falls man also z.B. mehrere linksbuendige Absaetze
hintereinander haben moechte, muss man zu Beginn eines jeden Absatzes
ein < schreiben. Das ^ ist also nur notwendig, wenn innerhalb eines
Absatzes auf Blocksatz zurueckgewechselt werden muss. Die letzte Zeile
eines Absatzes im Blocksatz wird linksbuendig gesetzt!
"%" : Das Prozentzeichen. Dieses Zeichen wird nur beachtet, wenn es allein in
einer Zeile steht und die vorangehende Zeile nicht mit \ aufhoert. Dann
wird an dieser Stelle ein harter Seitenumbruch eingebaut.
"\" : Der Backslash. Da er der hot character ist, muss auch er mit sich selbst
*escaped* werden, wenn man ihn im Text haben will (wie in den
LPC-Strings). "\\" wird zu "\", "\\\\" zu "\\" usw.
" " : Das Space. Leerzeichen werden durch den Blocksatz nach gusto eingefuegt
oder entfernt. Will man aber eine Anzahl Spaces fest im Text verankern,
so muss man stattdessen "\ " verwenden. Achtung! "\ " am Ende der Zeile
wird zum geschuetzten Space erklaert und nicht zur Verknuepfung mit der
naechsten Zeile ("\")!
Der Backslash am Ende der Zeile bewirkt die Verknuepfung mit der naechsten
Zeile zu einem Absatz. Die Absaetze werden einzeln im Blocksatz gesetzt, d.h.
die einzelnen Zeilen werden ggf. auf die volle Zeilenlaenge mit Leerzeichen
aufgefuellt. Dabei werden die Leerzeichen zwischen den Woertern und nicht am
Anfang oder Ende eingefuegt, es sei denn, die Zeile enthaelt nur genau ein
Wort (das wird dann mittig plaziert). Will man den Blocksatz nicht, so
verwende man die Formatierungszeichen (siehe oben).
Die Properties (Datei books.h):
1. P_BOOK_CONTENTS
Enthaelt den Dateinamen der Textdatei, deren Inhalt als Buch dargestellt
werden soll. Beim Setzen dieses Properties bzw. beim Setzen von
P_BOOK_PAGE_WIDTH oder P_BOOK_FLUSH_CHAR wird die Datei gelesen und durch
den Parser gejagt. Kann auch der Pfad zur vorformatierten .lines-Datei
sein - sprich Filename ohne Endung .lines. In diesem Fall wird das Parsen
uebersprungen. Diese Methode eignet sich vor allem fuer extrem lange
Files, die beim Parsen sonst einen Too-long-Evaluation-Fehler verursachen.
2. P_BOOK_PAGE_HEIGHT
Gibt die Seitenhoehe in Zeilen an. Wenn dieses Property auf 0 steht, wird
stattdessen P_SCREENSIZE des lesenden Spielers als Seitenhoehe angenommen.
Wenn P_BOOK_PAGE_HEIGHT groesser als P_SCREENSIZE ist, wird der Text mit
More weitergegeben.
3. P_BOOK_PAGE_WIDTH
Die Seitenbreite _einer_ Seite in Zeichen. Default: 30, Minimum: 10. Da
beim Lesen immer eine Doppelseite angezeigt wird, sollte der Wert 33 nicht
ueberschreiten (zu breit fuer die meisten Terminals). Das liegt daran, dass
zusaetzlich zu dieser Breite noch 12 Zeichen fuer die Raender berechnet
werden (2*33+12==78).
4. P_BOOK_FRAME_CHAR
Die Zeichen fuer die Darstellung des Rahmens und der Heftung. Es kann ein
bis zu drei Zeichen langer String angegeben werden. Das erste Zeichen wird
fuer den vertikalen, das zweite fuer den horizontalen Rand benutzt. Ein
eventuell vorhandenes drittes Zeichen wird fuer die Ecken benutzt. Wird
nur ein Zeichen angegeben, so wird dies fuer alles benutzt. Default "|-+".
5. P_BOOK_FILL_CHAR
Das Zeichen fuer den Bereich zwischen Rahmen und Text. Default " ".
6. P_BOOK_FLUSH_CHAR
Das Zeichen zum Auffuellen von rechtsbuendigem Text. Default " ".
7. P_BOOK_BLANK_HEADERS
Default 1. Wenn es gesetzt ist, werden Leerzeilen auch am Anfang der Seite
ausgegeben. Sonst werden sie uebersprungen.
(ab hier folgen interne Properties, die aber durchaus abgefragt werden duerfen)
8. P_BOOK_TEXT
(string*) Enthaelt den mit der gegenwaertigen Zeilenbreite umgebrochenen
Text zeilenweise ({zeile_1,zeile_2,...,zeile_n}).
9. P_BOOK_PAGE
Enthaelt die Nummer der Seite, die beim naechsten Lesen angezeigt werden
wuerde (immer ungerade).
10.P_BOOK_OPEN
Ist 1, wenn das Buch geoeffnet ist, sonst 0.
11.P_BOOK_SATZ
ist nur waehrend der Parserphase von Bedeutung.
12.P_BOOK_READ
wird intern beim Blaettern gebraucht.
Die Kommandos:
1. OEFFNE <ID> oder SCHLAGE <ID> AUF
Oeffnet das Buch, falls nicht schon offen, auf Seite 1.
2. SCHLIESSE <ID> oder SCHLAGE <ID> ZU
Schliesst das Buch, falls nicht bereits geschlossen.
3. LIES <ID>
Liest jeweils die naechste Doppelseite.
4. LIES SEITE <NR>
Liest die Doppelseite mit der Seite <NR> (falls vorhanden).
5. SCHLAGE SEITE <NR> AUF
Wechselt zur Seite <NR> (falls vorhanden).
6. BLAETTER ( UM | VOR ) oder UMBLAETTERN
Blaettert eine Doppelseite weiter. Achtung! Hier gibts eine Aenderung.
Frueher kam man bei einem UMBLAETTERN direkt nach einem LIES BUCH gleich 4
Seiten weiter. Das passiert nicht mehr.
7. BLAETTER ZURUECK
Blaettert eine Doppelseite zurueck.
Da die meisten Funktionen static deklariert sind, eruebrigt sich eine naehere
Beschreibung. Wers trotzdem wissen will, kann sich ja in die Datei book.c
einarbeiten.
Eine Funktion ist jedoch evtl. interessant:
static string pages()
Diese Funktion liefert die Gesamtzahl der Seiten des Buches fuer die aktuelle
Seitenhoehe (entweder P_BOOK_PAGE_HEIGHT, falls gesetzt, oder
this_player()->QueryProp(P_SCREENSIZE)). Mit ihr kann man die Seitenzahl in
die Buchbeschreibung einbauen:
SetProp(P_DESCR, (: "mit "+pages()+" Seiten" :));
Dadurch, dass der Text zeilenweise in einem Array gespeichert wird, hat das
Ganze eine Maximallaenge von 3000 Zeilen (es sei denn, der Gamedriver wurde
mit ner neuen MAX_ARRAY_SIZE compiliert, was nicht noetig ist). Bei einer
Zeilenzahl von 25 (P_SCREENSIZE-Default) kann man also fast 158 Seiten
darstellen, was fuer den Anfang reichen sollte. Wenn einer der Magier
beabsichtigt, Romane im Wunderland zu verbreiten, sollte er sich mit mir oder
mit Angus in Verbindung setzen (um sich den Einlauf abzuholen).
Viel Spass damit und Gruesse ans Wunderland,
Troy (im Exil..)
|