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/* Common header used by both clients and plugins */
15
16#ifndef GVCINT_H
17#define GVCINT_H
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#include "cdt.h"
24#include "gvcommon.h"
25#include "gvcjob.h"
26#include "color.h"
27
28 /* active plugin headers */
29 typedef struct gvplugin_active_layout_s {
30 gvlayout_engine_t *engine;
31 int id;
32 gvlayout_features_t *features;
33 const char *type;
34 } gvplugin_active_layout_t;
35
36 typedef struct gvplugin_active_textlayout_s {
37 gvtextlayout_engine_t *engine;
38 int id;
39 char *type;
40 } gvplugin_active_textlayout_t;
41
42 typedef struct gvplugin_package_s gvplugin_package_t;
43
44 struct gvplugin_package_s {
45 gvplugin_package_t *next;
46 char *path;
47 char *name;
48 };
49
50 struct gvplugin_available_s {
51 gvplugin_available_t *next; /* next plugin in linked list, or NULL */
52 const char *typestr; /* type string, e.g. "png" or "ps" */
53 int quality; /* Programmer assigned quality ranking within type (+ve or -ve int).
54 First implementation of type should be given "0" quality */
55 gvplugin_package_t *package; /* details of library containing plugin */
56 gvplugin_installed_t *typeptr; /* pointer to jumptable for plugin,
57 or NULL if not yet loaded */
58 };
59
60 struct GVG_s {
61 GVC_t *gvc; /* parent gvc */
62 GVG_t *next; /* next gvg in list */
63
64 char *input_filename; /* or NULL if stdin */
65 int graph_index; /* index of graph within input_file */
66 graph_t *g;
67 };
68
69#define MAXNEST 4
70
71 struct GVC_s {
72 GVCOMMON_t common;
73
74 char *config_path;
75 boolean config_found;
76
77 /* gvParseArgs */
78 char **input_filenames; /* null terminated array of input filenames */
79
80 /* gvNextInputGraph() */
81 GVG_t *gvgs; /* linked list of graphs */
82 GVG_t *gvg; /* current graph */
83
84 /* plugins */
85#define ELEM(x) +1
86 /* APIS expands to "+1 +1 ... +1" to give the number of APIs */
87 gvplugin_available_t *apis[ APIS ]; /* array of linked-list of plugins per api */
88 gvplugin_available_t *api[ APIS ]; /* array of current plugins per api */
89#undef ELEM
90 gvplugin_package_t *packages; /* list of available packages */
91
92 /* externally provided write() displine */
93 size_t (*write_fn) (GVJ_t *job, const char *s, size_t len);
94
95 /* fonts and textlayout */
96 Dtdisc_t textfont_disc;
97 Dt_t *textfont_dt;
98 gvplugin_active_textlayout_t textlayout; /* always use best avail for all jobs */
99// void (*free_layout) (void *layout); /* function for freeing layouts (mostly used by pango) */
100
101/* FIXME - everything below should probably move to GVG_t */
102
103 /* gvrender_config() */
104 GVJ_t *jobs; /* linked list of jobs */
105 GVJ_t *job; /* current job */
106
107 graph_t *g; /* current graph */
108
109 /* gvrender_begin_job() */
110 gvplugin_active_layout_t layout;
111
112 char *graphname; /* name from graph */
113 GVJ_t *active_jobs; /* linked list of active jobs */
114
115 /* pagination */
116 char *pagedir; /* pagination order */
117 pointf margin; /* margins in graph units */
118 pointf pad; /* pad in graph units */
119 pointf pageSize; /* pageSize in graph units, not including margins */
120 point pb; /* page size - including margins (inches) */
121 boxf bb; /* graph bb in graph units, not including margins */
122 int rotation; /* rotation - 0 = portrait, 90 = landscape */
123 boolean graph_sets_pad, graph_sets_margin, graph_sets_pageSize, graph_sets_rotation;
124
125 /* layers */
126 char *layerDelims; /* delimiters in layer names */
127 char *layerListDelims; /* delimiters between layer ranges */
128 char *layers; /* null delimited list of layer names */
129 char **layerIDs; /* array of layer names */
130 int numLayers; /* number of layers */
131 int *layerlist;
132
133 /* default font */
134 char *defaultfontname;
135 double defaultfontsize;
136
137 /* default line style */
138 char **defaultlinestyle;
139
140 /* render defaults set from graph */
141 gvcolor_t bgcolor; /* background color */
142
143 /* whether to mangle font names (at least in SVG), usually false */
144 int fontrenaming;
145 };
146
147extern GVC_t* gvCloneGVC (GVC_t *);
148extern void gvFreeCloneGVC (GVC_t *);
149
150#ifdef _WIN32
151#define DIRSEP "\\"
152#else
153#define DIRSEP "/"
154#endif
155
156#ifdef __cplusplus
157}
158#endif
159#endif /* GVCINT_H */
160