Dokumentation zu: book(WL)

HR Image


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..)


Start » Magierhandbuch » Docu » Konzepte » Book Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!