summaryrefslogtreecommitdiff
path: root/doc/eudas/eudas.ref.5
blob: 02971ea99332af01792abc5a369c3c3545c4f8d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
#limit (11.0)##pagelength (16.5)##block#                                   
#start (2.0,0.0)# 
#page (49)# 
#headodd# 
#center#EUDAS#right#% 
 
#end# 
#headeven# 
%#center#EUDAS 
 
#end# 
#center#1 
 
5 Drucken und Druckmuster 
 
 
 
5.1 Druckmustersyntax 
 
Ein Druckmuster ist eine Beschreibung für die Form, in der die In­
halte einer EUDAS-Datei ausgedruckt werden sollen. Der syntakti­
sche Aufbau des Druckmusters ist zeilenorientiert und gehorcht
folgender Syntax: 
 
    Druckmuster : 
      [ Initialisierungsteil ] 
      [ Vorspann ] 
      [ Wiederholungsteil ] 
      [ Nachspann ] 
 
    Initialisierungsteil : 
      ( Kommandozeile #char (""124"")# Textzeile )* 
      ( GRUPPE-Anweisung #char(""124"")# Textzeile )* 
 
    Vorspann : 
      VORSPANN-Anweisung  Abschnitt 
 
    Wiederholungsteil : 
      WIEDERHOLUNG-Anweisung  Abschnitt 
 
    Nachspann : 
      NACHSPANN-Anweisung  Abschnitt 
 
    Abschnitt : 
      Musterteil 
      [ ABKUERZUNGEN-Anweisung  Abkürzungsteil ] 
 
    Musterteil : 
      ( Musterzeile #char(""124"")# Kommandozeile #char(""124"")# 
        MODUS-Anweisung #char (""124"")# MEHR-Anweisung )* 
 
Zur Notation: [] bedeutet optional, ()* beliebig häufige Wiederho­
lung, #char(""124"")# Alternative und keine Angabe einfache Aneinanderreihung.
Die verschiedenen Zeilentypen werden weiter unten beschrieben. 
    Zusätzlich gilt die Bedingung, daß von Vorspann, Wiederho­
lungsteil und Nachspann mindestens einer vorhanden sein muß. 
 
#on("b")#Zeilentypen#off("b")# Im Druckmuster gibt es 6 verschiedene
Zeilentypen: 
 
#on("i")#Kommandozeilen#off("i")# 
    Eine Kommandozeile beginnt mit '%%' in der ersten und zweiten
    Spalte. Der Inhalt der Zeile ab Spalte 3 wird dem ELAN-Compi­
    ler übergeben. Die Bedeutung dieser Zeilen ergibt sich aus dem
    in 5.4 beschriebenen Übersetzungsmechanismus. 
 
#on("i")#Anweisungen#off("i")# 
    Anweisungen beginnen mit '%' in der ersten Spalte und dienen
    zur Steuerung des Druckgenerators. Der Name der Anweisung
    muß in Großbuchstaben und ohne Leerzeichen geschrieben
    werden. Davor dürfen sich noch Leerzeichen befinden. An­
    schließend können noch Parameter folgen, die nur durch Leer­
    zeichen getrennt aneinander gereiht werden. Die Syntax einer
    Anweisung ähnelt der eines Operators in ELAN. 
 
#on("i")#Textzeilen#off("i")# 
    Textzeilen sind die nicht anderweitig markierten Zeilen im
    Initialisierungsteil. Sie werden unverändert an den Anfang
    jeder Druckdatei gestellt. 
 
#on("i")#Musterzeilen#off("i")# 
    Musterzeilen sind nicht besonders gekennzeichnete Zeilen im
    Musterteil. Sie enthalten Feldmuster und werden nach dem
    Einsetzen von Inhalten in die Ausgabedatei übernommen. Die
    Interpretation der Musterzeilen wird in Abschnitt 5.3 beschrie­
    ben. 
 
#on("i")#Abkürzungszeilen#off("i")# 
    Abkürzungszeilen markieren den Beginn einer Abkürzung im
    Abkürzungsteil eines Abschnittes. Sie werden durch '&' in der
    ersten Spalte gekennzeichnet. Darauf folgt ohne Zwischenraum
    der Name einer Abkürzung (ohne Leerzeichen) und danach
    durch Leerzeichen getrennt ein Semikolon. Der Name der Ab­
    kürzung wird bei der Übersetzung durch einen Refinementnamen
    ersetzt und die Zeile dem ELAN-Compiler übergeben. Der Rest
    der Zeile kann also den Beginn eines werteliefernden Refine­
    ments enthalten. 
 
#on("i")#Programmzeilen#off("i")# 
    Programmzeilen sind die nicht durch '&' markierten Zeilen im
    Abkürzungsteil. Sie werden unverändert an den ELAN-Compiler
    übergeben. Der erlaubte Inhalt richtet sich nach dem Überset­
    zungsmechanismus (5.4). 
 
 
5.2 Der Druckvorgang 
 
Der Druckvorgang besteht im wesentlichen darin, daß für alle zu
bearbeitenden Sätze der Wiederholungsteil einmal interpretiert wird
und das Ergebnis in eine Ausgabedatei geschrieben wird, die dann
gedruckt werden kann. Wenn mindestens ein Satz markiert ist, wer­
den alle markierten Sätze der virtuellen Datei bearbeitet, ansonsten
alle durch die Suchbedingung erfaßten. 
 
#on("b")#Gruppen#off("b")# Eine #on("i")#Gruppe#off("i")# ist eine Folge von Sätzen, die in einem be­
stimmten Merkmal übereinstimmen. Durch eine GRUPPE-Anweisung
der Form 
 
 
        % GRUPPE n  Ausdruck 
 
 
werden aufeinanderfolgende Sätze mit gleichem Wert des angegebe­
nen Ausdrucks gruppiert. Über die Nummer 'n' kann festgestellt
werden, ob sich das angegebene Merkmal verändert hat. Dies ge­
schieht mit der Prozedur 
 
 
        BOOL PROC gruppenwechsel (INT CONST gruppennr) 
 
 
Immer wenn zwischen zwei Sätzen ein Gruppenwechsel stattfindet,
wird beim vorigen Satz der Nachspann und beim folgenden Satz der
Vorspann einmal interpretiert. Dies führt dazu, daß entsprechende
Vorspann- bzw. Nachspannzeilen gedruckt werden. 
    Vor dem ersten und nach dem letzten zu bearbeitenden Satz
wechseln alle Gruppen, d.h. dort wird immer ein Vorspann bzw.
Nachspann erzeugt. 
    Ist ein zu interpretierender Abschnitt nicht vorhanden, so wird
an dieser Stelle keine Ausgabe erzeugt. Die Textzeilen des Initali­
sierungsteils werden auf jeden Fall bei Beginn des Druckvorganges
in die Ausgabedatei geschrieben. Falls die Ausgabedatei voll ist,
wird eine neue Datei angefangen und die Zeilen des Initialisie­
rungsteils erneut an den Anfang gestellt. 
 
 
        Satz-  Gruppen-  Ausgabe 
        nummer merkmal 
#free (0.1)# 
                                     Initialisierungsteil 
        ------------------------------------------------- 
          1        x                 Vorspann 
                         WDH-Teil 
          2        x     WDH-Teil 
                                     Nachspann 
        ------------------------------------------------- 
          3        y                 Vorspann 
                         WDH-Teil 
          4        y     WDH-Teil 
          5        y     WDH-Teil 
                                     Nachspann 
        ------------------------------------------------- 
        ENDE 
 
#center#Abb. 5-1   Ablauf des Druckvorganges mit Gruppen 
 
 
#on("b")#Spaltendruck#off("b")# Normalerweise werden die Ausgaben der
einzelnen
Abschnitte hintereinander in der Ausgabedatei plaziert. Durch An­
gabe einer Nummer als Parameter in der WIEDERHOLUNG-Anweisung
können auch soviel Spalten wie angegeben nebeneinander gedruckt
werden. Die Spaltenbreite wird dabei durch das Dateilimit (Komman­
do 'limit' im Editor) festgelegt. Alternativ kann die Spaltenbreite
auch als zweiter Parameter durch Leerzeichen getrennt angegeben
werden. 
    Vorspann und Nachspann werden jedoch auf jeden Fall wieder
in eine eigene Zeile geschrieben, der Spaltendruck also unterbro­
chen. 
 
 
5.3 Interpretation von Musterzeilen 
 
Musterzeilen können Feldmuster enthalten, die bei der Interpreta­
tion durch entsprechende Inhalte ersetzt werden, ehe die Muster­
zeile in die Ausgabedatei übernommen wird. Der Beginn eines Feld­
musters wird durch ein Musterzeichen ('&' oder '%') markiert. Wo
und wie der Inhalt eingesetzt wird, kann durch folgende Variationen
angegeben werden: 
 
 
        Typ ! Beispiel  ! Position ! Länge    ! bündig 
        ----+-----------+------------------------------ 
         1  ! &Name     ! fest     ! variabel ! links 
         2  ! %Name     ! variabel ! variabel ! links 
         3  ! &Name&&&  ! fest     ! fest     ! links 
         4  ! %Name%%%  ! variabel ! fest     ! links 
         5  ! &&&Name&  ! fest     ! fest     ! rechts 
         6  ! %%%Name%  ! variabel ! fest     ! rechts 
 
 
Der in dem Feldmuster angegebene Name muß Name einer Abkür­
zung in irgendeinem Abkürzungsteil oder eines Feldes sein. Der
Name darf kein Leerzeichen oder Musterzeichen enthalten. Falls dies
doch der Fall ist, muß der Name in spitze Klammern eingeschlossen
werden. 
    Bei fester Länge wird bei zu kurzem Inhalt mit Leerzeichen
aufgefüllt, bei zu langem Inhalt abgeschnitten. Bei linksbündigem
Einsetzen geschieht dies an der rechten, sonst an der linken Seite. 
    Feldmuster variabler Länge können je nach Inhalt dazu führen,
daß der folgende Teil der Musterzeile verschoben wird. Für diesen
Einsetzprozeß gelten die folgenden Regeln: 
 
#on("b")#Position#off("b")# Feldmuster fester Position (mit '&' beginnend)
werden
immer in der Position eingesetzt, in der sie stehen. Feldmuster
variabler Position (mit '%' beginnen) können nach rechts verschoben
werden, wenn vorherige Inhalte länger als ihre Muster sind, und
nach links, wenn Modus 1 oder 3 eingestellt ist und vorherige In­
halte kürzer sind. 
 
#on("b")#Länge#off("b")# Feldmuster variabler Länge erhalten auf jeden Fall
den
Platz, der durch die Länge des Feldmusters reserviert ist. Sind die
Inhalte kürzer, kann der gewonnene Platz als Reserve für andere
Feldmuster verwendet werden; sind die Inhalte länger, so wird der
Inhalt so weit eingesetzt, wie noch Reserve vorhanden ist und der
Rest abgeschnitten. 
    Muß in ein Feldmuster variabler Länge ein leerer Inhalt einge­
setzt werden, so werden beim Drucken auch die auf das Feldmuster
folgenden Leerzeichen unterdrückt, falls vor dem Feldmuster noch
ein Leerzeichen steht oder das Feldmuster in Spalte 1 beginnt. 
    Feldmuster fester Länge werden immer in ihrer reservierten
Länge eingesetzt. Sie werden im folgenden behandelt wie Feldmuster
variabler Länge, deren Inhalt so lang ist wie das Feldmuster. 
 
#on("b")#Verteilung#off("b")# Die Verteilung der verschiebbaren Feldmuster
auf der
Zeile geschieht jeweils in dem Abschnitt zwischen zwei Feldmustern
fester Position bzw. Zeilenanfang oder Zeilenende. Für jeden Ab­
schnitt wird festgestellt, wieviel Stellen die Inhalte insgesamt mehr
oder weniger als ihre Muster benötigen. 
    Der Längenausgleich geschieht zwischen dem letzten Feldmuster
und dem Ende des Abschnitts. Dort wird ein Pufferplatz bestimmt,
der bei Überlänge bis auf ein Leerzeichen verkleinert werden kann
und an dem bei Unterlänge zusätzliche Leerzeichen eingefügt wer­
den. 
    Außer am Pufferplatz wird an keinem Mustertext des Abschnitts
etwas geändert. Zwischentexte zwischen den Feldmustern werden
unverändert übertragen und mit den umgebenden Feldmustern ver­
schoben. 
    Als Pufferplatz wird die erste Lücke hinter dem letzten Feld­
muster eines Abschnittes verwendet, die mehr als ein Leerzeichen
enthält. Ist keine solche Lücke vorhanden, wird das Ende des Ab­
schnitts verwendet, falls dort ein Leerzeichen steht, und sonst das
Ende des letzten Feldmusters. 
    Die durch den Pufferplatz und kürzere Inhalte gewonnene Re­
serve wird von links an die Feldmuster mit Überlänge verteilt, bis
die Reserve verbraucht ist. 
 
#on("b")#Zeilende#off("b")# Das Zeilenende wird als ein Quasi-Feldmuster mit
fester
Position aufgefaßt, das am Limit der Druckmusterdatei steht. Es
sind also keine Einsetzungen möglich, die über das Limit der Datei
hinausgehen. Als Pufferplatz wird hier jedoch die erste Blanklücke
vom Zeilenende her verwendet, damit Mustertexte am Zeilenende
gegebenenfalls stehenbleiben. Ist keine solche Lücke vorhanden, so
wird das Zeilenende als Pufferplatz verwendet. 
    Obwohl nicht als Pufferplatz ausgewiesen, kann der Raum zwi­
schen Zeilenende und Dateilimit als Reserve verwendet werden. 
 
#on("b")#Modi#off("b")# Der Einsetzmechanismus kann durch die MODUS-Anweisung
mit einem Parameter verändert werden. Folgende Modi stehen zur
Verfügung: 
 
 
        Modus ! Effekt 
        ------+---------------------------------------- 
          1   ! Normalmodus. 
              ! '%'-Feldmuster werden auch 
              ! nach links geschoben. 
              ! Keine Zeilenwiederholung. 
        ------+---------------------------------------- 
          2   ! Tabellenmodus. 
              ! '%'-Feldmuster werden nicht 
              ! nach links geschoben. 
              ! Keine Zeilenwiederholung. 
        ------+---------------------------------------- 
          3   ! Normalmodus mit Zeilenwiederholung. 
              ! '%'-Feldmuster werden auch 
              ! nach links geschoben. 
              ! Zeilenwiederholung ohne Zwischentexte. 
        ------+---------------------------------------- 
          4   ! Tabellenmodus mit Zeilenwiederholung. 
              ! '%'-Feldmuster werden nicht 
              ! nach links geschoben. 
              ! Zeilenwiederholung mit Zwischentexten. 
        ------+---------------------------------------- 
 
 
Bei Zeilenwiederholung werden Inhalte in einer folgenden Zeile
fortgesetzt, falls sie in der ersten Zeile nicht untergebracht werden
konnten. Dazu wird die Musterzeile mit den Restinhalten erneut
interpretiert. Je nach Modus werden auch die Zwischentexte noch
wiederholt. Der Restinhalt umfaßt immer noch das ganze letzte Wort,
das nicht mehr auf die vorige Zeile paßte. Es findet also ein Um­
bruch statt. Die Positionen, die in der vorigen Zeile vom Anfang des
Wortes eingenommen würden, werden durch Leerzeichen ersetzt. 
    Durch die MEHR-Anweisung mit einem Parameter kann die Zahl
der Zeilenwiederholungen für die nächste Musterzeile festgesetzt
werden. Dies hat jedoch nur eine Auswirkung, falls Zeilenwieder­
holung zugelassen ist. Stehen zur Interpretation keine Restinhalte
mehr zur Verfügung, wird mit leeren Inhalten weitergearbeitet. Kann
ein Inhalt bei der vorgegebenen Anzahl von Zeilen nicht ganz dar­
gestellt werden, wird der Rest nicht ausgegeben. 
 
 
5.4 Anschluß zum ELAN-Compiler 
 
Falls in einem Druckmuster Abkürzungen, Kommandozeilen oder
Gruppendefinitionen vorkommen, wird das Druckmuster in ein
ELAN-Programm umgewandelt, das dann vom ELAN-Compiler über­
setzt wird. 
    Alle Zeilen eines Abkürzungsteils werden direkt in das Pro­
gramm übernommen, wobei der Name einer Abkürzung durch einen
beliebig gewählten Refinementnamen ersetzt wird ('abk' + eine lau­
fende Nummer). Alle Abkürzungen und Refinements werden als glo­
bale Refinements definiert, also außerhalb von Prozeduren. Dadurch
wird erreicht, daß sie an jeder Stelle verwendet werden können. 
    Damit eine Abkürzung richtig als Refinement übersetzt wird,
muß sie ein TEXT-Objekt als Wert liefern. Die anderen Refinements
sind beliebig, da sie nur in selbstdefinierten Anweisungen verwen­
det werden. Die Refinements der Abkürzungen werden in einer Zu­
weisung an eine TEXT-Variable verwendet, damit der Druckgenera­
tor auf den entsprechenden Wert zugreifen kann. 
    Jeder Abschnitt wird dagegen als eine Prozedur übersetzt. Eine
Folge von Musterzeilen wird in eine Anweisung übersetzt, diese
Musterzeilen einzusetzen und zu drucken. Eine '%%'-Anweisung wird
einfach unverändert dazwischengeschrieben. Die Prozedur für den
Wiederholungsteil wird einmal für jeden ausgewählten Satz aufgeru­
fen, die Vorspann- und die Nachspann-Prozedur einmal bei jedem
Gruppenwechsel. 
    Anweisungen im Initialisierungsteil werden an den Anfang des
Programms als globale Definitionen gestellt. 
 
#on("b")#Fehler#off("b")# Findet sich in dem erzeugten ELAN-Programm ein
Fehler,
der durch den Druckgenerator nicht erkannt werden konnte (z.B.
eine Abkürzung liefert keinen Wert), so muß der ELAN-Compiler
diesen Fehler erkennen. Anschließend zeigt er das erzeugte Pro­
gramm zusammen mit seinen Fehlermeldungen im Paralleleditor. Sie
müssen nun die Fehlermeldung lokalisieren und anhand der eben
gegebenen Hinweise in das ursprüngliche Druckmuster zurücküber­
setzen, damit Sie dort den Fehler korrigieren können. 
 
 
5.5 Fehlermeldungen 
 
Folgende Fehlermeldungen können bei der Übersetzung eines Druck­
musters auftreten: 
 
#on("i")#keine schliessende Klammer in Feldmuster#off("i")# 
  Wenn der Name in einem Feldmuster in spitze Klammern einge­
  schlossen werden soll, muß noch in der gleichen Zeile eine
  schließende Klammer vorhanden sein. 
 
#on("i")#kein Kommando in Kommandozeile#off("i")# 
  Eine Zeile, die mit '%' beginnt, enthält keinen weiteren Text. 
 
#on("i")#unbekanntes Kommando#off("i")# 
  Das erste Wort in einer Kommandozeile ist kein bekanntes Kom­
  mando. 
 
#on("i")#kein % WIEDERHOLUNG gefunden#off("i")# 
  Das Druckmuster enthält keine Anweisung, die den Beginn eines
  Abschnittes markiert. Es muß aber mindestens ein Abschnitt
  vorhanden sein. 
 
#on("i")#nur GRUPPE-Anweisung erlaubt#off("i")# 
  Im Initialisierungsteil ist nur die GRUPPE-Anweisung erlaubt. 
 
#on("i")#keine ELAN-Anweisung im Initialisierungsteil nach Gruppen­ 
definition#off("i")# 
  Sobald im Initialisierungsteil eine GRUPPE-Anweisung aufgetreten
  ist, ist keine Kommandozeile mehr möglich. 
 
#on("i")#illegale Gruppennummer#off("i")# 
  In einer GRUPPE-Anweisung wurde eine zu große Nummer angege­
  ben. Gruppen sollten von 1 an durchnumeriert werden. 
 
#on("i")#diese Gruppe wurde schon definiert#off("i")# 
  Eine Gruppennummer wurde mehrfach verwendet. 
 
#on("i")#diese Abkürzung ist nicht definiert#off("i")# 
  Ein Name in einem Feldmuster tritt nicht als Feld-oder Abkür­
  zungsname auf. Eventuell enthält er ein Leerzeichen! 
 
#on("i")#dieser Abschnitt wurde schon einmal definiert#off("i")# 
  Kein Abschnitt kann mehrmals angegeben werden. 
 
#on("i")#falscher Modus#off("i")# 
  In einer MODUS-Anweisung wurde ein nicht definierter Modus als
  Parameter angegeben. 
 
#on("i")#diese Anweisung darf im Musterteil nicht vorkommen#off("i")# 
 
#on("i")#im Abkürzungsteil darf keine Anweisung auftreten#off("i")# 
 
#on("i")#in dieser Zeile stehen zu viele Feldmuster#off("i")# 
  Es können maximal 24 Feldmuster in einer Zeile stehen. Abhilfe:
  mehrere Feldmuster durch eine Abkürzung zusammenfassen. 
 
#on("i")#das Druckmuster enthält zu viele Feldmuster#off("i")# 
  Die Gesamtanzahl der Feldmuster ist begrenzt. Abhilfe: mehrere
  Feldmuster durch eine Abkürzung zusammenfassen. 
 
#on("i")#nach dem "&" soll direkt der Name einer Abkürzung folgen#off("i")# 
  In einer Abkürzungszeile stehen Leerzeichen hinter dem '&'. 
 
#on("i")#kein Doppelpunkt nach Abkürzung#off("i")# 
  Nach dem Abkürzungsnamen in einer Abkürzungszeile muß durch
  ein Leerzeichen getrennt ein Doppelpunkt folgen. 
 
#on("i")#Abkürzung mehrfach definiert#off("i")# 
  Die Abkürzung wurde unter dem gleichen Namen schon einmal,
  vielleicht in einem anderen Abschnitt, definiert. 
 
#on("i")#das Druckmuster enthält zu viele Abkürzungen#off("i")# 
  Abhilfe: mehrere Abkürzungen zu einem Ausdruck zusammenfas­
  sen.