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#ifdef __cplusplus
15extern "C" {
16#endif
17
18#ifndef TABLE_H
19#define TABLE_H
20
21#define FIXED_FLAG 1
22#define HALIGN_RIGHT (1 << 1)
23#define HALIGN_LEFT (1 << 2)
24#define HALIGN_MASK (HALIGN_RIGHT | HALIGN_LEFT)
25#define HALIGN_TEXT HALIGN_MASK
26#define VALIGN_TOP (1 << 3)
27#define VALIGN_BOTTOM (1 << 4)
28#define VALIGN_MASK (VALIGN_TOP | VALIGN_BOTTOM)
29#define BORDER_SET (1 << 5)
30#define PAD_SET (1 << 6)
31#define SPACE_SET (1 << 7)
32#define BALIGN_RIGHT (1 << 8)
33#define BALIGN_LEFT (1 << 9)
34#define BALIGN_MASK (BALIGN_RIGHT | BALIGN_LEFT)
35#define BORDER_LEFT (1 << 10)
36#define BORDER_TOP (1 << 11)
37#define BORDER_RIGHT (1 << 12)
38#define BORDER_BOTTOM (1 << 13)
39#define BORDER_MASK (BORDER_LEFT|BORDER_TOP|BORDER_RIGHT|BORDER_BOTTOM)
40
41#define UNSET_ALIGN 0
42
43 /* spans of text within a cell
44 * NOTE: As required, the str field in span is utf-8.
45 * This translation is done when libexpat scans the input.
46 */
47
48 /* line of textspan_t's */
49 typedef struct {
50 textspan_t *items;
51 short nitems;
52 char just;
53 double size; /* width of span */
54 double lfsize; /* offset from previous baseline to current one */
55 } htextspan_t;
56
57 typedef struct {
58 htextspan_t *spans;
59 short nspans;
60 char simple;
61 boxf box;
62 } htmltxt_t;
63
64 typedef struct {
65 boxf box;
66 char *src;
67 char *scale;
68 } htmlimg_t;
69
70 typedef struct {
71 char *href; /* pointer to an external resource */
72 char *port;
73 char *target;
74 char *title;
75 char *id;
76 char *bgcolor;
77 char *pencolor;
78 int gradientangle;
79 signed char space;
80 unsigned char border;
81 unsigned char pad;
82 unsigned char sides; /* set of sides exposed to field */
83 unsigned short flags;
84 unsigned short width;
85 unsigned short height;
86 unsigned short style;
87 boxf box; /* its geometric placement in points */
88 } htmldata_t;
89
90#define HTML_UNSET 0
91#define HTML_TBL 1
92#define HTML_TEXT 2
93#define HTML_IMAGE 3
94
95#define HTML_VRULE 1
96#define HTML_HRULE 2
97
98 typedef struct htmlcell_t htmlcell_t;
99 typedef struct htmltbl_t htmltbl_t;
100
101 struct htmltbl_t {
102 htmldata_t data;
103 union {
104 struct {
105 htmlcell_t *parent; /* enclosing cell */
106 htmlcell_t **cells; /* cells */
107 } n;
108 struct {
109 htmltbl_t *prev; /* stack */
110 Dt_t *rows; /* cells */
111 } p;
112 } u;
113 signed char cb; /* cell border */
114 int *heights; /* heights of the rows */
115 int *widths; /* widths of the columns */
116 int rc; /* number of rows */
117 int cc; /* number of columns */
118 textfont_t *font; /* font info */
119 unsigned char flags;
120 };
121
122 struct htmllabel_t {
123 union {
124 htmltbl_t *tbl;
125 htmltxt_t *txt;
126 htmlimg_t *img;
127 } u;
128 char kind;
129 };
130
131 struct htmlcell_t {
132 htmldata_t data;
133 unsigned short cspan;
134 unsigned short rspan;
135 unsigned short col;
136 unsigned short row;
137 htmllabel_t child;
138 htmltbl_t *parent;
139 unsigned char ruled;
140 };
141
142/* During parsing, table contents are stored as rows of cells.
143 * A row is a list of cells
144 * Rows is a list of rows.
145 * pitems are used for both lists.
146 */
147 typedef struct {
148 Dtlink_t link;
149 union {
150 Dt_t *rp;
151 htmlcell_t *cp;
152 } u;
153 unsigned char ruled;
154 } pitem;
155
156 typedef struct {
157 pointf pos;
158 textfont_t finfo;
159 void *obj;
160 graph_t *g;
161 char *imgscale;
162 char *objid;
163 boolean objid_set;
164 } htmlenv_t;
165
166 extern htmllabel_t *parseHTML(char *, int *, htmlenv_t *);
167
168 extern int make_html_label(void *obj, textlabel_t * lp);
169 extern void emit_html_label(GVJ_t * job, htmllabel_t * lp, textlabel_t *);
170
171 extern void free_html_label(htmllabel_t *, int);
172 extern void free_html_data(htmldata_t *);
173 extern void free_html_text(htmltxt_t *);
174
175 extern boxf *html_port(node_t * n, char *pname, int* sides);
176 extern int html_path(node_t * n, port* p, int side, boxf * rv, int *k);
177 extern int html_inside(node_t * n, pointf p, edge_t * e);
178
179#endif
180
181#ifdef __cplusplus
182}
183#endif
184