43#define LOCALNAMEPREFIX '%'
57static const char none[] =
"none";
58static const char black[] =
"black";
69 if (
A[0].x <=
A[n-1].x) {
71 for (
size_t i = 0; i < n; i++) {
83 for (
size_t i = n - 1; i !=
SIZE_MAX; i--) {
107 gvprintf(job,
"\" class=\"%s", kind);
120 switch (
color.type) {
128 if (
color.u.rgba[3] == 0)
148 switch (
color.type) {
188 gvprintf(job,
"\" fill-opacity=\"%f",
193 gvputs(job,
"\" stroke=\"");
196 const double GVPRINT_DOUBLE_THRESHOLD = 0.005;
198 gvputs(job,
"\" stroke-width=\"");
208 gvprintf(job,
"\" stroke-opacity=\"%f",
226 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
227 if ((
s =
agget(job->
gvc->
g,
"stylesheet")) &&
s[0]) {
228 gvputs(job,
"<?xml-stylesheet href=\"");
230 gvputs(job,
"\" type=\"text/css\"?>\n");
232 gvputs(job,
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n"
233 " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
235 gvputs(job,
"<!-- Generated by ");
257 gvprintf(job,
"<svg width=\"%dpt\" height=\"%dpt\"\n",
259 gvprintf(job,
" viewBox=\"%d.00 %d.00 %d.00 %d.00\"",
271 gvputs(job,
" xmlns=\"http://www.w3.org/2000/svg\""
273 " xmlns:xlink=\"http://www.w3.org/1999/xlink\"");
311 gvputs(job,
" transform=\"scale(");
323 gvputs(job,
"</title>\n");
340 gvputs(job,
"</title>\n");
361 gvputs(job,
"</title>\n");
381 gvputs(job,
"</title>\n");
407 if (href && href[0]) {
408 gvputs(job,
" xlink:href=\"");
413 if (tooltip && tooltip[0]) {
414 gvputs(job,
" xlink:title=\"");
419 if (target && target[0]) {
420 gvputs(job,
" target=\"");
440 gvputs(job,
"<text xml:space=\"preserve\"");
441 switch (span->
just) {
443 gvputs(job,
" text-anchor=\"start\"");
446 gvputs(job,
" text-anchor=\"end\"");
450 gvputs(job,
" text-anchor=\"middle\"");
483 gvprintf(job,
" font-family=\"%s", family);
488 gvprintf(job,
" font-weight=\"%s\"", weight);
490 gvprintf(job,
" font-stretch=\"%s\"", stretch);
492 gvprintf(job,
" font-style=\"%s\"", style);
497 gvputs(job,
" font-weight=\"bold\"");
499 gvputs(job,
" font-style=\"italic\"");
502 gvputs(job,
" text-decoration=\"");
508 gvprintf(job,
"%soverline", (comma?
",":
""));
512 gvprintf(job,
"%sline-through", (comma?
",":
""));
516 gvputs(job,
" baseline-shift=\"super\"");
518 gvputs(job,
" baseline-shift=\"sub\"");
528 gvprintf(job,
" fill=\"#%02x%02x%02x\"",
539 gvputs(job,
"<textPath xlink:href=\"#");
541 gvputs(job,
"_p\" startOffset=\"50%\"><tspan x=\"0\" dy=\"");
548 gvputs(job,
"</tspan></textPath>");
554 if (fabs(
offset - 0.0) < 0.0005)
555 gvputs(job,
"<stop offset=\"0\" style=\"stop-color:");
556 else if (fabs(
offset - 1.0) < 0.0005)
557 gvputs(job,
"<stop offset=\"1\" style=\"stop-color:");
559 gvprintf(job,
"<stop offset=\"%.03f\" style=\"stop-color:",
offset);
561 gvputs(job,
";stop-opacity:");
581 G[0].x =
G[0].y =
G[1].x =
G[1].y = 0.;
584 gvputs(job,
"<defs>\n<linearGradient id=\"");
589 gvprintf(job,
"l_%d\" gradientUnits=\"userSpaceOnUse\" ",
id);
603 gvputs(job,
"</linearGradient>\n</defs>\n");
621 ifx = round(50 * (1 + cos(angle)));
622 ify = round(50 * (1 - sin(angle)));
624 gvputs(job,
"<defs>\n<radialGradient id=\"");
629 gvprintf(job,
"r_%d\" cx=\"50%%\" cy=\"50%%\" r=\"75%%\" "
630 "fx=\"%.0f%%\" fy=\"%.0f%%\">\n",
636 gvputs(job,
"</radialGradient>\n</defs>\n");
694 gvputs(job,
" points=\"");
695 for (
size_t i = 0; i < n; i++) {
711 gvputs(job,
" points=\"");
712 for (
size_t i = 0; i < n; i++) {
726 "aliceblue",
"antiquewhite",
"aqua",
"aquamarine",
"azure",
727 "beige",
"bisque",
"black",
"blanchedalmond",
"blue",
728 "blueviolet",
"brown",
"burlywood",
729 "cadetblue",
"chartreuse",
"chocolate",
"coral",
730 "cornflowerblue",
"cornsilk",
"crimson",
"cyan",
731 "darkblue",
"darkcyan",
"darkgoldenrod",
"darkgray",
732 "darkgreen",
"darkgrey",
"darkkhaki",
"darkmagenta",
733 "darkolivegreen",
"darkorange",
"darkorchid",
"darkred",
734 "darksalmon",
"darkseagreen",
"darkslateblue",
"darkslategray",
735 "darkslategrey",
"darkturquoise",
"darkviolet",
"deeppink",
736 "deepskyblue",
"dimgray",
"dimgrey",
"dodgerblue",
737 "firebrick",
"floralwhite",
"forestgreen",
"fuchsia",
738 "gainsboro",
"ghostwhite",
"gold",
"goldenrod",
"gray",
739 "green",
"greenyellow",
"grey",
740 "honeydew",
"hotpink",
"indianred",
741 "indigo",
"ivory",
"khaki",
742 "lavender",
"lavenderblush",
"lawngreen",
"lemonchiffon",
743 "lightblue",
"lightcoral",
"lightcyan",
"lightgoldenrodyellow",
744 "lightgray",
"lightgreen",
"lightgrey",
"lightpink",
745 "lightsalmon",
"lightseagreen",
"lightskyblue",
746 "lightslategray",
"lightslategrey",
"lightsteelblue",
747 "lightyellow",
"lime",
"limegreen",
"linen",
748 "magenta",
"maroon",
"mediumaquamarine",
"mediumblue",
749 "mediumorchid",
"mediumpurple",
"mediumseagreen",
750 "mediumslateblue",
"mediumspringgreen",
"mediumturquoise",
751 "mediumvioletred",
"midnightblue",
"mintcream",
752 "mistyrose",
"moccasin",
753 "navajowhite",
"navy",
"oldlace",
754 "olive",
"olivedrab",
"orange",
"orangered",
"orchid",
755 "palegoldenrod",
"palegreen",
"paleturquoise",
756 "palevioletred",
"papayawhip",
"peachpuff",
"peru",
"pink",
757 "plum",
"powderblue",
"purple",
758 "red",
"rosybrown",
"royalblue",
759 "saddlebrown",
"salmon",
"sandybrown",
"seagreen",
"seashell",
760 "sienna",
"silver",
"skyblue",
"slateblue",
"slategray",
761 "slategrey",
"snow",
"springgreen",
"steelblue",
762 "tan",
"teal",
"thistle",
"tomato",
"transparent",
"turquoise",
764 "wheat",
"white",
"whitesmoke",
765 "yellow",
"yellowgreen"
void get_gradient_points(pointf *A, pointf *G, size_t n, double angle, int flags)
char * agget(void *obj, char *name)
char * agnameof(void *)
returns a string descriptor for the object.
swig_ptr_object_handlers offset
#define GVDEVICE_COMPRESSED_FORMAT
#define GVRENDER_DOES_TOOLTIPS
#define GVRENDER_DOES_LABELS
#define GVDEVICE_DOES_LAYERS
#define GVDEVICE_DOES_TRUECOLOR
#define GVDEVICE_BINARY_FORMAT
#define GVRENDER_DOES_MAPS
#define GVRENDER_DOES_TARGETS
#define GVRENDER_DOES_TRANSFORM
#define GVRENDER_Y_GOES_DOWN
static void color(Agraph_t *g)
size_t gvwrite(GVJ_t *job, const char *s, size_t len)
int gvputc(GVJ_t *job, int c)
int gvputs_xml(GVJ_t *job, const char *s)
int gvputs(GVJ_t *job, const char *s)
void gvprintf(GVJ_t *job, const char *format,...)
void gvprintdouble(GVJ_t *job, double num)
gvdevice_features_t device_features_svgz
static const char transparent[]
static void svg_textspan(GVJ_t *job, pointf p, textspan_t *span)
static int svg_gradstyle(GVJ_t *job, pointf *A, size_t n)
static void svg_end_page(GVJ_t *job)
static void svg_begin_node(GVJ_t *job)
static void svg_print_paint(GVJ_t *job, gvcolor_t color)
static void svg_grstyle(GVJ_t *job, int filled, int gid)
static bool emit_standalone_headers(const GVJ_t *job)
gvrender_features_t render_features_svg
static const char sdasharray[]
static void svg_print_gradient_color(GVJ_t *job, gvcolor_t color)
gvdevice_features_t device_features_svg
static void svg_end_cluster(GVJ_t *job)
static void svg_end_node(GVJ_t *job)
static void svg_begin_cluster(GVJ_t *job)
static void svg_polyline(GVJ_t *job, pointf *A, size_t n)
static void svg_bezier(GVJ_t *job, pointf *A, size_t n, int filled)
static void svg_comment(GVJ_t *job, char *str)
static int gvputs_wrapper(void *state, const char *s)
wrap gvputs to offer a void * first parameter
static void svg_end_edge(GVJ_t *job)
gvrender_engine_t svg_engine
gvplugin_installed_t gvdevice_svg_types[]
static char * svg_knowncolors[]
static void svg_begin_page(GVJ_t *job)
static void svg_bzptarray(GVJ_t *job, pointf *A, size_t n)
static const char sdotarray[]
static void svg_end_anchor(GVJ_t *job)
static void svg_polygon(GVJ_t *job, pointf *A, size_t n, int filled)
static void svg_end_layer(GVJ_t *job)
static void svg_print_id_class(GVJ_t *job, char *id, char *idx, char *kind, void *obj)
static void svg_begin_layer(GVJ_t *job, char *layername, int layerNum, int numLayers)
static void svg_begin_anchor(GVJ_t *job, char *href, char *tooltip, char *target, char *id)
static void svg_begin_edge(GVJ_t *job)
static void svg_begin_graph(GVJ_t *job)
static void svg_ellipse(GVJ_t *job, pointf *A, int filled)
static void svg_begin_job(GVJ_t *job)
gvplugin_installed_t gvrender_svg_types[]
static const char black[]
static void svg_end_graph(GVJ_t *job)
static int svg_rgradstyle(GVJ_t *job)
static void svg_print_stop(GVJ_t *job, double offset, gvcolor_t color)
textitem scanner parser str
char * strdup_and_subst_obj(char *str, void *obj)
platform abstraction for case-insensitive string functions
gvplugin_active_render_t render
unsigned labeledgealigned
PostscriptAlias * postscript_alias
double yoffset_centerline
options to tweak the behavior of XML escaping
unsigned raw
assume no embedded escapes, and escape "\n" and "\r"
int gv_xml_escape(const char *s, xml_flags_t flags, int(*cb)(void *state, const char *s), void *state)
XML escaping functionality.