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/* Header used by plugins */
15
16#ifndef GVPLUGIN_H
17#define GVPLUGIN_H
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#include "gvcext.h"
24
25/*
26 * Terminology:
27 *
28 * package - e.g. libgvplugin_cairo.so
29 * api - e.g. render
30 * type - e.g. "png", "ps"
31 */
32
33 typedef struct {
34 int id; /* an id that is only unique within a package
35 of plugins of the same api.
36 A renderer-type such as "png" in the cairo package
37 has an id that is different from the "ps" type
38 in the same package */
39 const char *type; /* a string name, such as "png" or "ps" that
40 distinguishes different types within the same
41 (renderer in this case) */
42 int quality; /* an arbitrary integer used for ordering plugins of
43 the same type from different packages */
44 void *engine; /* pointer to the jump table for the plugin */
45 void *features; /* pointer to the feature description
46 void* because type varies by api */
47 } gvplugin_installed_t;
48
49 typedef struct {
50 api_t api;
51 gvplugin_installed_t *types;
52 } gvplugin_api_t;
53
54 typedef struct {
55 char *packagename; /* used when this plugin is builtin and has
56 no pathname */
57 gvplugin_api_t *apis;
58 } gvplugin_library_t;
59
60#ifdef __cplusplus
61}
62#endif
63#endif /* GVPLUGIN_H */
64