Graphviz 13.0.0~dev.20241220.2304
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1
3/*************************************************************************
4 * Copyright (c) 2011 AT&T Intellectual Property
5 * All rights reserved. This program and the accompanying materials
6 * are made available under the terms of the Eclipse Public License v1.0
7 * which accompanies this distribution, and is available at
8 * https://www.eclipse.org/legal/epl-v10.html
9 *
10 * Contributors: Details at https://graphviz.org
11 *************************************************************************/
12
13#pragma once
14
15#include "config.h"
16
17#include <stdbool.h>
18#include <stddef.h>
19#include <util/agxbuf.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#ifdef GVDLL
26#ifdef GVC_EXPORTS
27#define UTILS_API __declspec(dllexport)
28#else
29#define UTILS_API __declspec(dllimport)
30#endif
31#endif
32
33#ifndef UTILS_API
34#define UTILS_API /* nothing */
35#endif
36
37// options to tweak the behavior of XML escaping
38typedef struct {
39 // assume no embedded escapes, and escape "\n" and "\r"
40 unsigned raw : 1;
41 // escape '-'
42 unsigned dash : 1;
43 // escape consecutive ' '
44 unsigned nbsp : 1;
45 // anticipate non-ASCII characters that need to be encoded
46 unsigned utf8 : 1;
48
49UTILS_API pointf Bezier(pointf *, double, pointf *, pointf *);
50
52UTILS_API double attach_attrs_and_arrows(graph_t *, bool *, bool *);
53
63UTILS_API int xml_escape(const char *s, xml_flags_t flags,
64 int (*cb)(void *state, const char *s), void *state);
65
66UTILS_API void write_plain(GVJ_t *job, graph_t *g, FILE *f, bool extend);
67
69UTILS_API double yDir(double y, double yOff);
70UTILS_API char *ps_string(char *s, int);
71UTILS_API char *strdup_and_subst_obj(char *str, void *obj);
72UTILS_API void epsf_emit_body(GVJ_t *job, usershape_t *us);
73UTILS_API void epsf_define(GVJ_t *job);
74UTILS_API void undoClusterEdges(graph_t *g);
75UTILS_API Dt_t *mkClustMap(Agraph_t *g);
76UTILS_API Agraph_t *findCluster(Dt_t *map, char *name);
77UTILS_API attrsym_t *safe_dcl(graph_t *g, int obj_kind, char *name,
78 char *defaultValue);
79
80UTILS_API int late_int(void *obj, Agsym_t *attr, int defaultValue, int minimum);
81UTILS_API double late_double(void *obj, Agsym_t *attr, double defaultValue,
82 double minimum);
83UTILS_API char *late_nnstring(void *obj, Agsym_t *attr, char *defaultValue);
84UTILS_API char *late_string(void *obj, Agsym_t *attr, char *defaultValue);
85UTILS_API bool late_bool(void *obj, Agsym_t *attr, bool defaultValue);
86UTILS_API double get_inputscale(graph_t *g);
87
88// routines for supporting “union-find”, a.k.a. “disjoint-set forest”
89// https://en.wikipedia.org/wiki/Disjoint-set_data_structure
90UTILS_API Agnode_t *UF_find(Agnode_t *);
91UTILS_API Agnode_t *UF_union(Agnode_t *, Agnode_t *);
92UTILS_API void UF_singleton(Agnode_t *);
93UTILS_API void UF_setname(Agnode_t *, Agnode_t *);
94
95UTILS_API const char *safefile(const char *filename);
96
97UTILS_API bool mapBool(const char *p, bool defaultValue);
98UTILS_API bool mapbool(const char *p);
99UTILS_API int maptoken(char *, char **, int *);
100
101UTILS_API bool findStopColor(const char *colorlist, char *clrs[2],
102 double *frac);
103UTILS_API int test_toggle(void);
104
105UTILS_API void common_init_node(node_t *n);
106UTILS_API void common_init_edge(edge_t *e);
107
108UTILS_API void updateBB(graph_t *g, textlabel_t *lp);
109UTILS_API void compute_bb(Agraph_t *);
110UTILS_API boxf polyBB(polygon_t *poly);
111UTILS_API bool overlap_node(node_t *n, boxf b);
112UTILS_API bool overlap_label(textlabel_t *lp, boxf b);
113UTILS_API bool overlap_edge(edge_t *e, boxf b);
114
115UTILS_API void get_gradient_points(pointf *A, pointf *G, size_t n, double angle,
116 int flags);
117
118UTILS_API void processClusterEdges(graph_t *g);
119
120UTILS_API char *latin1ToUTF8(char *);
121UTILS_API char *htmlEntityUTF8(char *, graph_t *g);
122UTILS_API char *utf8ToLatin1(char *ins);
123UTILS_API char *scanEntity(char *t, agxbuf *xb);
124
125UTILS_API pointf dotneato_closest(splines *spl, pointf p);
126
127UTILS_API Agsym_t *setAttr(graph_t *, void *, char *name, char *value,
128 Agsym_t *);
129UTILS_API void setEdgeType(graph_t *g, int defaultValue);
130UTILS_API bool is_a_cluster(Agraph_t *g);
131
132/* from postproc.c */
133UTILS_API void gv_nodesize(Agnode_t *n, bool flip);
134
135#ifndef HAVE_DRAND48
136UTILS_API double drand48(void);
137#endif
138
139/* from timing.c */
140UTILS_API void start_timer(void);
141UTILS_API double elapsed_sec(void);
142
143/* from psusershape.c */
144UTILS_API void cat_libfile(GVJ_t *job, const char **arglib,
145 const char **stdlib);
146
147#undef UTILS_API
148
149#ifdef __cplusplus
150}
151#endif
static void ins(Dict_t *d, Dtlink_t **set, Agedge_t *e)
Definition edge.c:150
#define A(n, t)
Definition expr.h:76
static int flags
Definition gc.c:61
#define G
Definition gdefs.h:7
textitem scanner parser str
Definition htmlparse.y:224
graph or subgraph
Definition cgraph.h:425
string attribute descriptor symbol in Agattr_s.dict
Definition cgraph.h:637
Definition geom.h:41
Definition cdt.h:100
unsigned dash
Definition utils.h:42
unsigned utf8
Definition utils.h:46
unsigned raw
Definition utils.h:40
unsigned nbsp
Definition utils.h:44
Definition grammar.c:93
void processClusterEdges(graph_t *g)
Definition utils.c:936
void undoClusterEdges(graph_t *g)
Definition utils.c:1035
char * scanEntity(char *t, agxbuf *xb)
Definition utils.c:1087
char * late_string(void *obj, Agsym_t *attr, char *defaultValue)
Definition utils.c:78
char * strdup_and_subst_obj(char *str, void *obj)
Definition labels.c:385
bool mapbool(const char *p)
Definition utils.c:335
char * htmlEntityUTF8(char *, graph_t *g)
Definition utils.c:1192
void UF_setname(Agnode_t *, Agnode_t *)
Definition utils.c:143
Agnode_t * UF_union(Agnode_t *, Agnode_t *)
Definition utils.c:108
Dt_t * mkClustMap(Agraph_t *g)
Definition utils.c:1603
void setEdgeType(graph_t *g, int defaultValue)
Definition utils.c:1434
boxf polyBB(polygon_t *poly)
Definition utils.c:599
int xml_escape(const char *s, xml_flags_t flags, int(*cb)(void *state, const char *s), void *state)
Definition xml.c:179
void common_init_node(node_t *n)
Definition utils.c:421
bool overlap_label(textlabel_t *lp, boxf b)
Definition utils.c:1334
double elapsed_sec(void)
Definition timing.c:48
Agsym_t * setAttr(graph_t *, void *, char *name, char *value, Agsym_t *)
Definition utils.c:699
bool findStopColor(const char *colorlist, char *clrs[2], double *frac)
Definition emit.c:4019
bool late_bool(void *obj, Agsym_t *attr, bool defaultValue)
Definition utils.c:91
bool overlap_node(node_t *n, boxf b)
Definition utils.c:1322
Agnode_t * UF_find(Agnode_t *)
Definition utils.c:98
void UF_singleton(Agnode_t *)
Definition utils.c:136
void common_init_edge(edge_t *e)
Definition utils.c:504
const char * safefile(const char *filename)
Definition utils.c:258
pointf Bezier(pointf *, double, pointf *, pointf *)
Definition utils.c:168
void epsf_define(GVJ_t *job)
double attach_attrs_and_arrows(graph_t *, bool *, bool *)
Definition output.c:232
char * late_nnstring(void *obj, Agsym_t *attr, char *defaultValue)
Definition utils.c:84
attrsym_t * safe_dcl(graph_t *g, int obj_kind, char *name, char *defaultValue)
Definition utils.c:1070
double yDir(double y, double yOff)
Definition output.c:32
void compute_bb(Agraph_t *)
Definition utils.c:628
double get_inputscale(graph_t *g)
Definition utils.c:71
void start_timer(void)
Definition timing.c:43
void updateBB(graph_t *g, textlabel_t *lp)
Definition utils.c:619
int late_int(void *obj, Agsym_t *attr, int defaultValue, int minimum)
Definition utils.c:33
bool overlap_edge(edge_t *e, boxf b)
Definition utils.c:1369
void cat_libfile(GVJ_t *job, const char **arglib, const char **stdlib)
char * ps_string(char *s, int)
char * latin1ToUTF8(char *)
Converts string from Latin1 encoding to utf8. Also translates HTML entities.
Definition utils.c:1271
void gv_nodesize(Agnode_t *n, bool flip)
Definition utils.c:1547
bool mapBool(const char *p, bool defaultValue)
Definition utils.c:319
double late_double(void *obj, Agsym_t *attr, double defaultValue, double minimum)
Definition utils.c:48
void epsf_emit_body(GVJ_t *job, usershape_t *us)
void write_plain(GVJ_t *job, graph_t *g, FILE *f, bool extend)
Definition output.c:117
int maptoken(char *, char **, int *)
Definition utils.c:309
pointf dotneato_closest(splines *spl, pointf p)
Definition utils.c:340
void get_gradient_points(pointf *A, pointf *G, size_t n, double angle, int flags)
Definition utils.c:1457
char * utf8ToLatin1(char *ins)
Definition utils.c:1304
int test_toggle(void)
Definition utils.c:410
bool is_a_cluster(Agraph_t *g)
Definition utils.c:690
Agraph_t * findCluster(Dt_t *map, char *name)
Definition utils.c:1613
double drand48(void)
Definition utils.c:1561