coord-transf.2d elements3d elementsnon geo scriptsfunctionscontrol statem.attributesvariousaddons
generallinesfillsmaterialstextextended
STYLE DEFINE STYLE DEFINE STYLE{2} PARAGRAPH TEXTBLOCK
Name
PARAGRAPH
Syntax
PARAGRAPHname alignment,
indent1, indent_left, indent_right,
line_spacing [, tabulator1 [, ...tabulatork]]
[attributee_definition1
[... attributee_definitionm]]
text1
[... texto]
[attributee_definitionm+1
[... attributee_definitionm+n]]
texto+1
[...texto+p]
[...]
ENDPARAGRAPH
Aufklappen Range
name, Typ text
1 ≤ alignment ≤ 4, Typ integer (*)
indent1, Typ real
indent_left, Typ real
indent_right, Typ real
0 ≤ line_spacing, Typ real
tabulatori, Typ real
texti, Typ text
attribute_definition[i, GDL-Befehle zum setzen von Attributen (PEN, STYLE, MATERIAL)

(*) Ausrichtung des Textes ist mit alignment=
=1: linksbündig
=2: zentriert
=3: rechtsbündig
=4: Blocksatz
Aufklappen Description
Setzt aus unterschiedlichen Textschnipseln einen Fließtext als Absatz zusammen, dem ein, innerhalb des Skriptes eindeutiger und möglichst signifikanter, name zugewiesen wird. Die Ausgabe des Absatzes erfolgt erst nach der Zusammensetzung zu einem TEXTBLOCK mit RICHTEXT2 oder RICHTEXT. PARAGRAPH alleine bewirkt noch kein sichtbares Ergebnis.

PARAGRAPH leitet analog zu Schleifen und ähnlichen Syntaxelementen in GDL einen Abschnitt zur Textdefinition ein. Absatzformatierungen, wie aus jeder Textverarbeitung werden zu Beginn mit PARAGRAPH gesetzt:

alignment gibt die Textausrichtung an (siehe Wertebereiche).

indent1, indent_left und indent_right geben die Randabstände zu der später in TEXTBLOCK angesetzten Textbreite an. tabulatori setzten feste Sprungmarken innerhalb einer Zeile. Ob diese Maße absolut (in mm) oder maßstäblich sind, wird erst im TEXTBLOCK mit dem Parameter scale_relation festgelegt. Werden keine Tabulatorpositionen definiert und enthält der Text dennoch Tabulatorsprünge, wird eine regelmäßige Sprungmarke alle 12.7mm angenommen.

line_spacing gibt den Abstand der Zeilen zueinander an und wird nicht absolut, sondern als Faktor angegeben. line_spacing=1 setzt demnach die Schrift direkt übereinander. Die Zeilenhöhe ist die Definitionsshöhe, die mit REQUEST ("HEIGHT_OF_STYLE", ...) abrufbar ist.

Das Besondere an PARAGRAPH ist nun, dass jeder Textschnipsel (texti) für 2D mit PEN und STYLE, für 3D mit PEN, STYLE und MATERIAL individuelle Attribute annehmen kann. Und das ohne die exakte Positionierung der Textschnipsel berechnen zu müssen. Sie werden nacheinander ohne Zwischenraum auf gleicher Grundlinie aneinandergefügt. Dabei kann zwischen jedem kleinen Textfragment ein Attribut geändert werden.

texti kann ein Ausdruck mit einem string-Ergebnis, eine Textvariable oder ein Klartext sein. Siehe auch Besonderheiten. Jede Programmzeile in GDL darf nur 255 Zeichen beinhalten. Das beschränkt auch die Eingabezeilen innerhalb von PARAGRAPH. Das stellt aber kein Hindernis dar beliebig lange Texte zu definieren, da alle Einzeltexte innerhalb eines PARAGRAPH... ENDPARAGRAPH -Konstruktes ohne Zeilenumbruch aneinandergefügt werden. Lange Texte verteilt man so auf mehrere Zeilen. Siehe Beispiel.

Werden innerhalb von PARAGRAPH keine Attribute gesetzt, gelten die bis vor PARAGRAPH gesetzten Attribute oder ggf. die Standardwerte (STYLE 0 und SYMB_VIEW_PEN).
Aufklappen Example
PARAGRAPH "Titel" 4,
  5, 2, 2, 1
  PEN 1
  SET STYLE "TypA"
  "Dies ist ein Beispiel für eine Wohnungsliste, "
  "die nun einfach mit echten Exponenten in den "
  "Einheiten darstellbar ist."
  SET STYLE "TypN"
  "\nIm Fließtext, der pro Einzelstring nicht mehr "
  "als 255 Zeichen lang sein darf, können einige "
  "Sonderzeichen gesetzt werden:"
  PEN 2
  "\n\\n"
  PEN 1
  ": Zeilenumbruch"
  PEN 2
  "\n\\t"
  PEN 1
  ": Tabulator"
  PEN 2
  "\n\\"
  PEN 1
  ": Backslash"
  SET STYLE "TypA"
  "\nWie man sieht ist auch ein freier Wechsel der "
  "Farben innerhalb eines Textes kein Problem mehr."
  ENDPARAGRAPH


Ein ausführliches Beispiel findet sich unter RICHTEXT2.
Aufklappen Specialities
In ArchiCAD® 9 sind 2 bugs im PARAGRAPH-Befehl:

1. Es MUSS mindestens 1 Text definiert werden. Das Konstrukt
PARAGRAPH "Absatz01" 2, 0, 0, 0, 1
 ENDPARAGRAPH

führt zum Absturz.

2. Ist in einem Objektparameter z.B. namens "ausgabetext" der Text abgelegt, kann es unter Umständen bei der Verwendung allein dieses Parameters dazu kommen, dass sämtliche Attributedefinitionen der PARAGRAPH-Befehle ignoriert werden. Tritt dies auf kann dies mit folgendem Workaround behoben werden:
PARAGRAPH "Absatz01" 2, 0, 0, 0, 1
 PEN 2
 SET STYLE "Typ02"
 ausgabetext+""
 ENDPARAGRAPH

Durch das Anfügen eines Leerstrings an den Textparameter erkennt der Interpreter offensichtlich den Text korrekt.

Generell scheint sich der GDL-Interpreter schwer zu tun innerhalb des PARAGRAPH... ENDPARAGRAPH Abschnittes Text von Befehlen oder Variablen/Parametern zu unterscheiden. Z.B. wird die Zeile STR(27.2,5,2) mit Fehler quittiert. ""+STR(27.2,5,2) umschifft das Mißverständnis.

3. Blocksatz i.V.m. Tabulatoren scheint Probleme zu Verursachen. So kommt es vor, dass der Text aus seiner in TEXTBLOCK definierten Breite ausbricht oder diese gar verbreitert. Auch die Positionierung des Textes an den erwarteten Tabulatorpositionen scheint dann verschoben. In ArchiCAD® 10 ist zumindest letzteres Phänomen behoben.
Aufklappen Attributes
PEN, STYLE, MATERIAL
Aufklappen Context
2D-Skript, 3D-Skript
Aufklappen ArchiCAD®
since 9.0
Aufklappen Tips and Tricks
In dem Text sind einige Formatierungszeichen erlaubt. Sie werden auf die maximale Textlänge von 255 Zeichen pro Programmzeile angerechnet. Sonst gibt es keine Längenbeschränkung.

"\n" : Neue Zeile/Zeilenumbruch
"\t" : Tabulator
"\\" : "\" (Backslash)
Aufklappen References
GDL-Handbuch 9.0 (DE) p. 178
GDL-Handbuch 10.0 (DE) p. 176
GDL-Handbuch 11.0 (DE) p. 182
GDL Reference Guide 9.0 (INT) p. 173
GDL Reference Guide 10.0 (INT) p. 175
GDL Reference Guide 11.0 (INT) p. 175
 





Abb.1: Das Zusammenspiel der Parameter von PARAGRAPH (1-6), TEXTBLOCK (7-10) und REQUEST ("TEXTBLOCK_INFO", ...) (14-15).

1: einzug1
2: einzug_links
3: einzug_rechts
4: zeilenabstand
5: tabulator1
6: tabulator2

7: breite (nominal)
8: anker
9: Breite der Zeichen = C*zeichenbreite
10: Abstand der Zeichen = C*zeichenabstand
11: Zeichenbreite (C) nach Zeichensatzdefinition (systemdedingt).
12: zeichenhöhe. Siehe DEFINE STYLE{2}.
13: schrifthöhe. Siehe REQUEST ("HEIGHT_OF_STYLE", ...).

14: textbreite. Siehe REQUEST ("TEXTBLOCK_INFO", ...).
15: texthöhe. Siehe REQUEST ("TEXTBLOCK_INFO", ...).

Alle Werte sind abhängig von größenbezug.