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 15 extern "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