int svg_init(char *filename, int color) { FILE *fp; init_svg(); char css[256]; LastPSX=-10000; LastPSY=-10000; if((svgfile=fopen(filename,"w"))==NULL){ err_msg("Cannot open file "); return(0); } PltFmtFlag=SVGFMT; fprintf(svgfile,"<!-- Uncomment following when using your own custom external stylesheet.-->\n"); fprintf(svgfile,"<!--\n"); fprintf(svgfile,"<?xml-stylesheet type=\"text/css\" href=\"xppaut-stylesheet.css\" ?>\n"); fprintf(svgfile,"-->\n"); fprintf(svgfile,"<svg xmlns=\"http://www.w3.org/2000/svg\"\n"); fprintf(svgfile," xmlns:xlink=\"http://www.w3.org/1999/xlink\" font-size=\"12pt\" width=\"640\" height=\"400\">\n"); fprintf(svgfile,"\n\n <defs>\n"); fprintf(svgfile," <circle class=\"xpppointP\" id = \"xpppointP\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xppbead\" id = \"xppbead\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointD\" id = \"xpppointD\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointA\" id = \"xpppointA\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointB\" id = \"xpppointB\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointC\" id = \"xpppointC\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointT\" id = \"xpppointT\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointS\" id = \"xpppointS\" r = \"1\" stroke-width = \"1\"/>\n"); fprintf(svgfile," <circle class=\"xpppointK\" id = \"xpppointK\" r = \"3\" stroke-width = \"0.75\"/>\n"); fprintf(svgfile," <circle class=\"xpppointF\" id = \"xpppointF\" r = \"2\" stroke-width = \"0\"/>\n"); fprintf(svgfile," </defs>\n\n"); fprintf(svgfile,"\n\n"); fprintf(svgfile," <!-- Comment out the following style block when using your own custom external stylesheet.-->\n"); fprintf(svgfile," <!-- As a starting point for your custom external stylesheet, consider copying the style \n"); fprintf(svgfile," information (between but not including CDATA tags) to a file named xppaut-stylesheet.css \n"); fprintf(svgfile," -->\n"); fprintf(svgfile," <style type=\"text/css\">\n"); fprintf(svgfile," <![CDATA[\n"); fprintf(svgfile," \n"); fprintf(svgfile," circle.xpppointP {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointD {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointA {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointB {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointC {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointT {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointS {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointK {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," circle.xpppointF {\n"); fprintf(svgfile," stroke-width: 1.0;\n"); fprintf(svgfile," }\n\n"); fprintf(svgfile," line.xppaxes {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppboxaxes {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppdfield {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xpplineb {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xpplinea {\n"); fprintf(svgfile," stroke-dasharray: 2,8;\n"); fprintf(svgfile," stroke-width: 2;\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline0 {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline1 {\n"); fprintf(svgfile," stroke-width: 1;\n"); fprintf(svgfile," stroke: #FF0000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline2 {\n"); fprintf(svgfile," stroke: #F06400;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline3 {\n"); fprintf(svgfile," stroke: #FFA500;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline4 {\n"); fprintf(svgfile," stroke: #FFCD00;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline5 {\n"); fprintf(svgfile," stroke: #C8C800;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline6 {\n"); fprintf(svgfile," stroke: #00FF00;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline7 {\n"); fprintf(svgfile," stroke: #32CD32;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline8 {\n"); fprintf(svgfile," stroke: #00C8C8;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xppline9 {\n"); fprintf(svgfile," stroke: #0000FF;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," line.xpplinec {\n"); fprintf(svgfile," stroke: #000000;\n"); fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," text.xppyaxislabelh {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1em;\n"); fprintf(svgfile," stroke : none;\n"); fprintf(svgfile," fill : none;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," text.xppyaxislabelv {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," text.xppaxestext {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext0 {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 0.5em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext1 {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 0.75em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext2 {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext3 {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1.25em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); fprintf(svgfile," \n"); fprintf(svgfile," text.xpptext4 {\n"); fprintf(svgfile," font-family: sans-serif;\n"); fprintf(svgfile," font-size : 1.5em;\n"); fprintf(svgfile," stroke : #000000;\n"); fprintf(svgfile," fill : #000000;\n"); /*Need to support more than 1 vertical centering tactic!*/ fprintf(svgfile," baseline-shift:-33%%;\n"); /*Supported in Inkscape v0.48.2, but not in Firefox v13*/ fprintf(svgfile," dominant-baseline: central;\n");/*Supported in Firefox v13, but not in Inkscape v0.48.2*/ fprintf(svgfile," }\n"); sprintf(css,"%s/xppaut-stylesheet.css",getenv("HOME")); fp=fopen(css,"r"); if(fp!=NULL) { plintf("Styling svg image according to %s\n",css); char bob[256]; while(!feof(fp)) { bob[0]='\0'; fgets(bob,255,fp); fprintf(svgfile,"%s",bob); } fclose(fp); } fprintf(svgfile," ]]>\n"); fprintf(svgfile," </style>\n\n"); return(1); }
void args_handle(config *cfg, int argc, char **argv) { int fl; while ((fl = getopt(argc, argv, "Acd:fhl:m:rsSx")) != -1) { switch (fl) { case 'A': /* no axis */ cfg->axis = false; break; case 'c': /* use colorblind-safe default colors */ cfg->colorblind = true; break; case 'd': /* dimensions */ parse_dims(cfg, optarg); break; case 'f': /* flip x/y */ cfg->flip_xy = true; break; case 'h': /* help */ usage(NULL); break; case 'l': /* log */ if (strchr(optarg, 'x')) { cfg->log_x = true; } if (strchr(optarg, 'y')) { cfg->log_y = true; } if (strchr(optarg, 'c')) { cfg->log_count = true; } break; case 'm': /* mode */ switch (optarg[0]) { case 'c': cfg->mode = MODE_COUNT; break; case 'd': cfg->mode = MODE_DOT; break; case 'l': cfg->mode = MODE_LINE; break; default: usage("Bad argument to -m: must be 'count', 'dot', or 'line'."); } break; case 'r': /* linear regression */ cfg->regression = true; break; case 's': /* SVG */ cfg->plot_type = PLOT_SVG; break; case 'S': /* disable stream mode */ cfg->stream_mode = false; break; case 'x': /* col 0 is X value */ cfg->x_column = true; break; case '?': default: usage(NULL); } } argc -= (optind - 1); argv += (optind - 1); if (argc > 1) { cfg->in_path = argv[1]; if (0 != strcmp("-", cfg->in_path)) { cfg->in = fopen(cfg->in_path, "r"); if (cfg->in == NULL) { err(1, "fopen"); } } } if (cfg->plot_type == PLOT_SVG) { init_svg(cfg); } else { init_ascii(cfg); } }
/* -- output a EPS (-E) or SVG (-g) file -- */ void write_eps(void) { unsigned i; char *p, title[80]; if (mbf == outbuf || !info['X' - 'A']) return; p_fmt = &cfmt; /* tune format */ if (epsf != 3) { /* if not -z */ strcpy(outfnam, outfn); if (outfnam[0] == '\0') strcpy(outfnam, OUTPUTFILE); cutext(outfnam); i = strlen(outfnam) - 1; if (i == 0 && outfnam[0] == '-') { if (epsf == 1) { error(1, NULL, "Cannot use stdout with '-E' - abort"); exit(EXIT_FAILURE); } fout = stdout; } else { if (outfnam[i] == '=') { p = &info['T' - 'A']->text[2]; while (isspace((unsigned char) *p)) p++; strncpy(&outfnam[i], p, sizeof outfnam - i - 4); outfnam[sizeof outfnam - 5] = '\0'; epsf_fn_adj(&outfnam[i]); } else { if (i >= sizeof outfnam - 4 - 3) i = sizeof outfnam - 4 - 3; sprintf(&outfnam[i + 1], "%03d", ++nepsf); } strcat(outfnam, epsf == 1 ? ".eps" : ".svg"); if ((fout = fopen(outfnam, "w")) == NULL) { error(1, NULL, "Cannot open output file %s - abort", outfnam); exit(EXIT_FAILURE); } } } epsf_title(title, sizeof title); if (epsf == 1) { init_ps(title); fprintf(fout, "0.75 dup scale 0 %.1f T\n", -bposy); write_buffer(); fprintf(fout, "showpage\nrestore\n"); } else { if (epsf == 3 && file_initialized == 0) fputs("<br/>\n", fout); /* new image in the same flow */ init_svg(title); write_buffer(); svg_close(); } if (epsf != 3) close_fout(); else file_initialized = 0; cur_lmarg = 0; cur_scale = 1.0; }