static int pssvg_convert_one(grd5_grad_custom_t *grd5_gradc, svg_t *svg, pssvg_opt_t opt) { gstack_t *rgbrec; int err = 0; if ((rgbrec = rectify_rgb(grd5_gradc, opt)) == NULL) err++; else { gstack_t *oprec; if ((oprec = rectify_op(grd5_gradc)) == NULL) err++; else { err += (grdxsvg(rgbrec, oprec, svg) != 0); gstack_destroy(oprec); } gstack_destroy(rgbrec); } if (err) btrace("failed conversion of rectified stops to svg"); else if (opt.verbose) printf(" '%s', %i%% smooth; %i colour, %i opacity converted to %i RGBA\n", svg->name, (int)round(grd5_gradc->interp/40.96), grd5_gradc->colour.n, grd5_gradc->transp.n, svg_num_stops(svg)); return err; }
extern int gimpsvg(const char *infile, const char *outfile, gimpsvg_opt_t opt) { gradient_t *gradient; svg_t *svg; int err; /* load the gradient */ if ((gradient = grad_load_gradient(infile)) == NULL) { btrace("failed to load gradient from %s", (infile ? infile : "<stdin>")); return 1; } /* create a svg struct */ if ((svg = svg_new()) == NULL) { btrace("failed to get new cpt strcture"); return 1; } /* transfer the gradient data to the svg_t struct */ if ((err = gimpsvg_convert(gradient, svg, opt)) != 0) { switch (err) { case ERR_SEGMENT_RGBA: btrace("error gretting colour from segment"); break; case ERR_NULL: btrace("null structure"); break; case ERR_INSERT: btrace("failed structure insert"); break; default: btrace("unknown error"); } return 1; } if (opt.verbose) printf("converted to %i stops\n",svg_num_stops(svg)); /* write the cpt file */ if (svg_write(outfile, 1, (const svg_t**)(&svg), &(opt.preview)) != 0) { btrace("failed to write gradient to %s", (outfile ? outfile : "<stdout>")); return 1; } /* tidy */ svg_destroy(svg); grad_free_gradient(gradient); return 0; }