Graphviz 12.0.1~dev.20240715.2254
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 <cgraph/agxbuf.h>
18#include <stdbool.h>
19#include <stddef.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 *);
50UTILS_API void attach_attrs_and_arrows(graph_t *, bool *, bool *);
51
61UTILS_API int xml_escape(const char *s, xml_flags_t flags,
62 int (*cb)(void *state, const char *s), void *state);
63
64UTILS_API void write_plain(GVJ_t *job, graph_t *g, FILE *f, bool extend);
65UTILS_API double yDir(double y);
66UTILS_API char *ps_string(char *s, int);
67UTILS_API char *strdup_and_subst_obj(char *str, void *obj);
68UTILS_API void epsf_emit_body(GVJ_t *job, usershape_t *us);
69UTILS_API void epsf_define(GVJ_t *job);
70UTILS_API void undoClusterEdges(graph_t *g);
71UTILS_API Dt_t *mkClustMap(Agraph_t *g);
72UTILS_API Agraph_t *findCluster(Dt_t *map, char *name);
73UTILS_API attrsym_t *safe_dcl(graph_t *g, int obj_kind, char *name,
74 char *defaultValue);
75
76UTILS_API int late_int(void *obj, Agsym_t *attr, int defaultValue, int minimum);
77UTILS_API double late_double(void *obj, Agsym_t *attr, double defaultValue,
78 double minimum);
79UTILS_API char *late_nnstring(void *obj, Agsym_t *attr, char *defaultValue);
80UTILS_API char *late_string(void *obj, Agsym_t *attr, char *defaultValue);
81UTILS_API bool late_bool(void *obj, Agsym_t *attr, bool defaultValue);
82UTILS_API double get_inputscale(graph_t *g);
83
84UTILS_API Agnode_t *UF_find(Agnode_t *);
85UTILS_API Agnode_t *UF_union(Agnode_t *, Agnode_t *);
86UTILS_API void UF_singleton(Agnode_t *);
87UTILS_API void UF_setname(Agnode_t *, Agnode_t *);
88
89UTILS_API const char *safefile(const char *filename);
90
91UTILS_API bool mapBool(const char *p, bool defaultValue);
92UTILS_API bool mapbool(const char *p);
93UTILS_API int maptoken(char *, char **, int *);
94
95UTILS_API bool findStopColor(char *colorlist, char *clrs[2], double *frac);
96UTILS_API int test_toggle(void);
97
98UTILS_API void common_init_node(node_t *n);
99UTILS_API void common_init_edge(edge_t *e);
100
101UTILS_API void updateBB(graph_t *g, textlabel_t *lp);
102UTILS_API void compute_bb(Agraph_t *);
103UTILS_API boxf polyBB(polygon_t *poly);
104UTILS_API bool overlap_node(node_t *n, boxf b);
105UTILS_API bool overlap_label(textlabel_t *lp, boxf b);
106UTILS_API bool overlap_edge(edge_t *e, boxf b);
107
108UTILS_API void get_gradient_points(pointf *A, pointf *G, size_t n, double angle,
109 int flags);
110
111UTILS_API void processClusterEdges(graph_t *g);
112
113UTILS_API char *latin1ToUTF8(char *);
114UTILS_API char *htmlEntityUTF8(char *, graph_t *g);
115UTILS_API char *utf8ToLatin1(char *ins);
116UTILS_API char *scanEntity(char *t, agxbuf *xb);
117
118UTILS_API pointf dotneato_closest(splines *spl, pointf p);
119
120UTILS_API Agsym_t *setAttr(graph_t *, void *, char *name, char *value,
121 Agsym_t *);
122UTILS_API void setEdgeType(graph_t *g, int defaultValue);
123UTILS_API bool is_a_cluster(Agraph_t *g);
124
125/* from postproc.c */
126UTILS_API void gv_nodesize(Agnode_t *n, bool flip);
127
128#ifndef HAVE_DRAND48
129UTILS_API double drand48(void);
130#endif
131
132/* from timing.c */
133UTILS_API void start_timer(void);
134UTILS_API double elapsed_sec(void);
135
136/* from psusershape.c */
137UTILS_API void cat_libfile(GVJ_t *job, const char **arglib,
138 const char **stdlib);
139
140#undef UTILS_API
141
142#ifdef __cplusplus
143}
144#endif
static void ins(Dict_t *d, Dtlink_t **set, Agedge_t *e)
Definition edge.c:149
#define A(n, t)
Definition expr.h:76
static int flags
Definition gc.c:61
#define G
Definition gdefs.h:7
static lexstate_t state
Definition htmllex.c:61
agxbuf * str
Definition htmlparse.c:97
graph or subgraph
Definition cgraph.h:425
string attribute descriptor symbol in Agattr_s.dict
Definition cgraph.h:639
Definition cdt.h:104
Definition geom.h:41
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
void attach_attrs_and_arrows(graph_t *, bool *, bool *)
Definition output.c:229
char * strdup_and_subst_obj(char *str, void *obj)
Definition labels.c:385
bool mapbool(const char *p)
Definition utils.c:336
char * htmlEntityUTF8(char *, graph_t *g)
Definition utils.c:1199
void UF_setname(Agnode_t *, Agnode_t *)
Definition utils.c:144
Agnode_t * UF_union(Agnode_t *, Agnode_t *)
Definition utils.c:109
Dt_t * mkClustMap(Agraph_t *g)
Definition utils.c:1612
void setEdgeType(graph_t *g, int defaultValue)
Definition utils.c:1443
boxf polyBB(polygon_t *poly)
Definition utils.c:600
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:422
bool overlap_label(textlabel_t *lp, boxf b)
Definition utils.c:1341
double elapsed_sec(void)
Definition timing.c:48
Agsym_t * setAttr(graph_t *, void *, char *name, char *value, Agsym_t *)
Definition utils.c:700
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:1329
Agnode_t * UF_find(Agnode_t *)
Definition utils.c:99
void UF_singleton(Agnode_t *)
Definition utils.c:137
void common_init_edge(edge_t *e)
Definition utils.c:505
const char * safefile(const char *filename)
Definition utils.c:259
pointf Bezier(pointf *, double, pointf *, pointf *)
Definition utils.c:169
void epsf_define(GVJ_t *job)
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
void compute_bb(Agraph_t *)
Definition utils.c:629
double get_inputscale(graph_t *g)
Definition utils.c:71
double yDir(double y)
Definition output.c:28
void start_timer(void)
Definition timing.c:43
void updateBB(graph_t *g, textlabel_t *lp)
Definition utils.c:620
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:1378
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:1278
void gv_nodesize(Agnode_t *n, bool flip)
Definition utils.c:1556
bool mapBool(const char *p, bool defaultValue)
Definition utils.c:320
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:114
int maptoken(char *, char **, int *)
Definition utils.c:310
pointf dotneato_closest(splines *spl, pointf p)
Definition utils.c:341
void get_gradient_points(pointf *A, pointf *G, size_t n, double angle, int flags)
Definition utils.c:1466
char * utf8ToLatin1(char *ins)
Definition utils.c:1311
int test_toggle(void)
Definition utils.c:411
bool is_a_cluster(Agraph_t *g)
Definition utils.c:691
bool findStopColor(char *colorlist, char *clrs[2], double *frac)
Definition emit.c:4038
Agraph_t * findCluster(Dt_t *map, char *name)
Definition utils.c:1622
double drand48(void)
Definition utils.c:1570