1/* $Id$ $Revision$ */
2/* vim:set shiftwidth=4 ts=8: */
3
4/*************************************************************************
5 * Copyright (c) 2011 AT&T Intellectual Property
6 * All rights reserved. This program and the accompanying materials
7 * are made available under the terms of the Eclipse Public License v1.0
8 * which accompanies this distribution, and is available at
9 * http://www.eclipse.org/legal/epl-v10.html
10 *
11 * Contributors: See CVS logs. Details at http://www.graphviz.org/
12 *************************************************************************/
13
14#ifndef GV_CONST_H
15#define GV_CONST_H
16
17#define SMALLBUF 128
18#define LPAREN '('
19#define RPAREN ')'
20#define LBRACE '{'
21#define RBRACE '}'
22
23/* node,edge types */
24#ifdef NORMAL
25#undef NORMAL
26#endif
27#define NORMAL 0 /* an original input node */
28#define VIRTUAL 1 /* virtual nodes in long edge chains */
29#define SLACKNODE 2 /* encode edges in node position phase */
30#define REVERSED 3 /* reverse of an original edge */
31#define FLATORDER 4 /* for ordered edges */
32#define CLUSTER_EDGE 5 /* for ranking clusters */
33#define IGNORED 6 /* concentrated multi-edges */
34
35/* collapsed node classifications */
36#define NOCMD 0 /* default */
37#define SAMERANK 1 /* place on same rank */
38#define MINRANK 2 /* place on "least" rank */
39#define SOURCERANK 3 /* strict version of MINRANK */
40#define MAXRANK 4 /* place on "greatest" rank */
41#define SINKRANK 5 /* strict version of MAXRANK */
42#define LEAFSET 6 /* set of collapsed leaf nodes */
43#define CLUSTER 7 /* set of clustered nodes */
44
45/* type of cluster rank assignment */
46#define LOCAL 100
47#define GLOBAL 101
48#define NOCLUST 102
49
50/* default attributes */
51#define DEFAULT_COLOR "black"
52#define DEFAULT_ACTIVEPENCOLOR "#808080"
53#define DEFAULT_ACTIVEFILLCOLOR "#fcfcfc"
54#define DEFAULT_ACTIVEFONTCOLOR "black"
55#define DEFAULT_SELECTEDPENCOLOR "#303030"
56#define DEFAULT_SELECTEDFILLCOLOR "#e8e8e8"
57#define DEFAULT_SELECTEDFONTCOLOR "black"
58#define DEFAULT_DELETEDPENCOLOR "#e0e0e0"
59#define DEFAULT_DELETEDFILLCOLOR "#f0f0f0"
60#define DEFAULT_DELETEDFONTCOLOR "darkgrey"
61#define DEFAULT_VISITEDPENCOLOR "#101010"
62#define DEFAULT_VISITEDFILLCOLOR "#f8f8f8"
63#define DEFAULT_VISITEDFONTCOLOR "black"
64#define DEFAULT_FONTSIZE 14.0
65#define DEFAULT_LABEL_FONTSIZE 11.0 /* for head/taillabel */
66#define MIN_FONTSIZE 1.0
67#if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
68#define DEFAULT_FONTNAME "TimesNewRomanPSMT"
69#else
70#define DEFAULT_FONTNAME "Times-Roman"
71#endif
72#define DEFAULT_FILL "lightgrey"
73#define LINESPACING 1.20
74
75#define DEFAULT_NODEHEIGHT 0.5
76#define MIN_NODEHEIGHT 0.02
77#define DEFAULT_NODEWIDTH 0.75
78#define MIN_NODEWIDTH 0.01
79#define DEFAULT_NODESHAPE "ellipse"
80
81#define NODENAME_ESC "\\N"
82
83#define DEFAULT_LAYERSEP ":\t "
84#define DEFAULT_LAYERLISTSEP ","
85
86#define DEFAULT_NODESEP 0.25
87#define MIN_NODESEP 0.02
88#define DEFAULT_RANKSEP 0.5
89#define MIN_RANKSEP 0.02
90
91
92/* default margin for paged formats such as PostScript - in points = 0.5in */
93#define DEFAULT_PRINT_MARGIN 36
94/* default margin for embedded formats such as PNG - in points */
95#define DEFAULT_EMBED_MARGIN 0
96/* default padding around graph - in points */
97#define DEFAULT_GRAPH_PAD 4
98
99#define SELF_EDGE_SIZE 18
100#define MC_SCALE 256 /* for mincross */
101
102#define PORT_LABEL_DISTANCE 10
103#define PORT_LABEL_ANGLE -25 /* degrees; pos is CCW, neg is CW */
104
105/* default polygon sample size for overlap removal and maps */
106#define DFLT_SAMPLE 20
107
108/* arrow types */
109#define ARR_NONE 0
110
111/* sides (e.g. of cluster margins) */
112#define BOTTOM_IX 0
113#define RIGHT_IX 1
114#define TOP_IX 2
115#define LEFT_IX 3
116
117/* sides of boxes for SHAPE_path */
118#define BOTTOM (1<<BOTTOM_IX)
119#define RIGHT (1<<RIGHT_IX)
120#define TOP (1<<TOP_IX)
121#define LEFT (1<<LEFT_IX)
122
123#define CCW -1 /* counter clock-wise */
124#define CW 1 /* clock-wise */
125
126/* Obj types for renderers */
127#define NONE 0
128#define NODE 1
129#define EDGE 2
130#define CLST 3
131
132/* output languages */
133#define HPGL 2 /* HP Graphics Language */
134#define PCL 3 /* Printer Control Language */
135#define MIF 4 /* Adobe FrameMaker */
136#define PIC_format 5 /* symbol PIC is used by compilers for
137 Position Independent Code */
138#define TK 15 /* TK canvas */
139
140#define VTX 21 /* visual thought */
141#define METAPOST 22
142#define DIA 24 /* dia drawing tool */
143
144#define QPDF 30 /* Quartz paged PDF */
145#define QEPDF 31 /* Quartz embedded PDF */
146
147#define QBM_FIRST 100 /* first Quartz bitmap format, inclusive */
148#define QBM_LAST 200 /* last Quartz bitmap format, exclusive */
149
150#define GVRENDER_PLUGIN 300 /* a plugin supported language */
151#define NO_SUPPORT 999 /* no support */
152
153/* for clusters */
154#define CL_BACK 10 /* cost of backward pointing edge */
155#define CL_OFFSET 8 /* margin of cluster box in PS points */
156#ifndef _WIN32
157#define CL_CROSS 1000 /* cost of cluster skeleton edge crossing */
158#else
159#define CL_CROSS 100 /* avoid 16 bit overflow */
160#endif
161
162/* edge types */
163#define REGULAREDGE 1
164#define FLATEDGE 2
165#define SELFWPEDGE 4
166#define SELFNPEDGE 8
167#define SELFEDGE 8
168#define EDGETYPEMASK 15 /* the OR of the above */
169
170/* for graph server */
171#define SERVER_NN 200
172#define SERVER_NE 500
173
174/* for neato */
175#define Spring_coeff 1.0
176#define MYHUGE (1.0e+37)
177#define MAXDIM 10
178
179/* drawing phases */
180#define GVBEGIN 0
181#define GVSPLINES 1
182
183/* existence of labels */
184#define EDGE_LABEL (1 << 0)
185#define HEAD_LABEL (1 << 1)
186#define TAIL_LABEL (1 << 2)
187#define GRAPH_LABEL (1 << 3)
188#define NODE_XLABEL (1 << 4)
189#define EDGE_XLABEL (1 << 5)
190
191/* type of graph label: GD_label_pos */
192#define LABEL_AT_BOTTOM 0
193#define LABEL_AT_TOP 1
194#define LABEL_AT_LEFT 2
195#define LABEL_AT_RIGHT 4
196
197/* values specifying rankdir */
198#define RANKDIR_TB 0
199#define RANKDIR_LR 1
200#define RANKDIR_BT 2
201#define RANKDIR_RL 3
202
203/* allowed charsets */
204#define CHAR_UTF8 0
205#define CHAR_LATIN1 1
206#define CHAR_BIG5 2
207
208/* style flags (0-23)*/
209#define FILLED (1 << 0)
210#define RADIAL (1 << 1)
211#define ROUNDED (1 << 2)
212#define DIAGONALS (1 << 3)
213#define AUXLABELS (1 << 4)
214#define INVISIBLE (1 << 5)
215#define STRIPED (1 << 6)
216#define DOTTED (1 << 7)
217#define DASHED (1 << 8)
218#define WEDGED (1 << 9)
219#define UNDERLINE (1 << 10)
220#define FIXEDSHAPE (1 << 11)
221
222#define SHAPE_MASK (127 << 24)
223
224/* shape (1-127) */
225#define DOGEAR (1 << 24)
226#define TAB (2 << 24)
227#define FOLDER (3 << 24)
228#define BOX3D (4 << 24)
229#define COMPONENT (5 << 24)
230#define PROMOTER (6 << 24)
231#define CDS (7 << 24)
232#define TERMINATOR (8 << 24)
233#define UTR (9 << 24)
234#define PRIMERSITE (10 << 24)
235#define RESTRICTIONSITE (11 << 24)
236#define FIVEPOVERHANG (12 << 24)
237#define THREEPOVERHANG (13 << 24)
238#define NOVERHANG (14 << 24)
239#define ASSEMBLY (15 << 24)
240#define SIGNATURE (16 << 24)
241#define INSULATOR (17 << 24)
242#define RIBOSITE (18 << 24)
243#define RNASTAB (19 << 24)
244#define PROTEASESITE (20 << 24)
245#define PROTEINSTAB (21 << 24)
246#define RPROMOTER (22 << 24)
247#define RARROW (23 << 24)
248#define LARROW (24 << 24)
249#define LPROMOTER (25 << 24)
250#define CYLINDER (26 << 24)
251
252/* fill types */
253#define FILL 1
254#define GRADIENT 2
255#define RGRADIENT 3
256#define NO_POLY 4 /* bit flag: if set, do fill only */
257
258/* label types */
259#define LT_NONE (0 << 1)
260#define LT_HTML (1 << 1)
261#define LT_RECD (2 << 1)
262
263/* Flags stored in GD_flags
264 * Bit(s): 0 unused
265 * 1-3 ET_
266 * 4 NEW_RANK
267 */
268
269/* edge types */
270#define ET_NONE (0 << 1)
271#define ET_LINE (1 << 1)
272#define ET_CURVED (2 << 1)
273#define ET_PLINE (3 << 1)
274#define ET_ORTHO (4 << 1)
275#define ET_SPLINE (5 << 1)
276#define ET_COMPOUND (6 << 1)
277
278/* New ranking is used */
279#define NEW_RANK (1 << 4)
280/******/
281
282/* user-specified node position: ND_pinned */
283#define P_SET 1 /* position supplied by user */
284#define P_FIX 2 /* position fixed during topological layout */
285#define P_PIN 3 /* position fixed */
286
287#define GAP 4 /* whitespace in POINTS around labels and between peripheries */
288
289/* fontsize at which text is omitted entirely */
290#define FONTSIZE_MUCH_TOO_SMALL 0.15
291/* fontsize at which text is rendered by a simple line */
292#define FONTSIZE_TOO_SMALL 1.5
293
294#endif
295