38 char tmp[1024], *cptr;
41 printf(
"%s(%s, %g, %g, vp, errmsg, %d)\n", __func__, filename, height, width, verbose);
44 if(filename==NULL || vp==NULL)
return(NULL);
48 fp=fopen(filename,
"w");
50 if(errmsg!=NULL) strcpy(errmsg,
"cannot open file for write");
54 strcpy(tmp,
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
57 strcat(tmp,
"<svg version=\"1.1\" baseProfile=\"full\"\n");
58 strcat(tmp,
" xmlns=\"https://www.w3.org/2000/svg\"\n");
59 strcat(tmp,
" xmlns:xlink=\"https://www.w3.org/1999/xlink\"\n");
60 strcat(tmp,
" xmlns:ev=\"https://www.w3.org/2001/xml-events\"");
61 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
62 fclose(fp); remove(filename);
return(NULL);}
64 sprintf(tmp,
"\n viewBox=\"0 0 %d %d\"",
66 strcat(tmp,
"\n preserveAspectRatio=\"xMinYMin meet\"");
67 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
68 fclose(fp); remove(filename);
return(NULL);}
71 sprintf(tmp,
"\n width=\"%gcm\"", width);
72 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
73 fclose(fp); remove(filename);
return(NULL);}
76 sprintf(tmp,
"\n height=\"%gcm\"", height);
77 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
78 fclose(fp); remove(filename);
return(NULL);}
82 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
83 fclose(fp); remove(filename);
return(NULL);}
86 cptr=strrchr(filename,
'/');
if(cptr==NULL) cptr=strrchr(filename,
'\\');
87 if(cptr!=NULL) cptr++;
else cptr=(
char*)filename;
89 sprintf(tmp,
" <title>%s</title>\n", cptr);
90 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
91 fclose(fp); remove(filename);
return(NULL);}
96 fclose(fp); remove(filename);
return(NULL);}
133 const char *filename,
135 const char *XHTML_title,
143 char tmp[2048], line[256];
146 printf(
"%s(%s, %s, errmsg, %d)\n", __func__, filename, XHTML_title, verbose);
151 if(filename==NULL)
return(NULL);
152 if(XHTML_title==NULL) XHTML_title=filename;
155 fp=fopen(filename,
"w");
157 if(errmsg!=NULL) strcpy(errmsg,
"cannot open file for write");
161 strcpy(tmp,
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
162 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
163 fclose(fp); remove(filename);
return(NULL);}
165 strcpy(tmp,
"<!DOCTYPE html PUBLIC\n");
166 strcat(tmp,
" \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n");
167 strcat(tmp,
" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");
168 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
169 fclose(fp); remove(filename);
return(NULL);}
171 strcpy(tmp,
"<html xmlns=\"https://www.w3.org/1999/xhtml\"\n");
172 strcat(tmp,
" xmlns:svg=\"https://www.w3.org/2000/svg\"\n");
173 strcat(tmp,
" xmlns:xlink=\"https://www.w3.org/1999/xlink\"\n");
174 strcat(tmp,
" xmlns:ev=\"https://www.w3.org/2001/xml-events\"\n");
175 strcat(tmp,
" xml:lang=\"en\" lang=\"en\">\n");
176 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
177 fclose(fp); remove(filename);
return(NULL);}
179 strcpy(tmp,
"<head>\n");
180 sprintf(line,
" <title>%s</title>\n", XHTML_title); strcat(tmp, line);
181 sprintf(line,
" <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\" />\n"); strcat(tmp, line);
182 sprintf(line,
" <meta http-equiv=\"content-language\" content=\"en-gb\" />\n"); strcat(tmp, line);
183 strcat(tmp,
" <object id=\"AdobeSVG\" classid=\"clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2\"> </object>\n");
184 strcat(tmp,
" <?import namespace=\"svg\" urn=\"https://www.w3.org/2000/svg\" implementation=\"#AdobeSVG\"?>\n");
185 strcat(tmp,
"</head>\n\n");
186 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
187 fclose(fp); remove(filename);
return(NULL);}
189 strcpy(tmp,
"<body>\n\n");
190 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0) {
191 fclose(fp); remove(filename);
return(NULL);}
195 fclose(fp); remove(filename);
return(NULL);}
249 printf(
"%s(fp, %g, %g, vp, errmsg, %d)\n", __func__, height, width, verbose);
252 if(fp==NULL || vp==NULL)
return(1);
255 strcpy(tmp,
"<svg:svg version=\"1.1\" baseProfile=\"full\"");
256 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0)
return(2);
259 strcat(tmp,
"\n preserveAspectRatio=\"xMinYMin meet\"");
260 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0)
return(3);
263 sprintf(tmp,
"\n width=\"%gcm\"", width);
264 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0)
return(4);
267 sprintf(tmp,
"\n height=\"%gcm\"", height);
268 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0)
return(5);
272 if(
svg_write(fp, tmp, errmsg, verbose-5)!=0)
return(6);
int svg_xhtml_svg_open(FILE *fp, const double height, const double width, struct svg_viewports *vp, char *errmsg, int verbose)
FILE * svg_initiate(const char *filename, const double height, const double width, struct svg_viewports *vp, char *errmsg, int verbose)