| 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 |  | 
|---|