tiny svg steps

This commit is contained in:
Wolfgang Spraul 2012-06-18 04:47:51 +02:00
parent 691e0427d1
commit 3f98db058e
2 changed files with 16 additions and 27 deletions

View File

@ -17,19 +17,17 @@
#include <libxml/xpath.h> #include <libxml/xpath.h>
#include <libxml/xpathInternals.h> #include <libxml/xpathInternals.h>
static const char* empty_svg = static const xmlChar* empty_svg = (const xmlChar*)
{ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<svg\n" "<svg\n"
" xmlns=\"http://www.w3.org/2000/svg\"\n" " xmlns=\"http://www.w3.org/2000/svg\"\n"
" version=\"2.0\"\n" " version=\"2.0\"\n"
" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n" " xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n"
" viewBox=\"0 0 1000 1000\" width=\"1000\" height=\"1000\"\n" " viewBox=\"0 0 1000 1000\" width=\"1000\" height=\"1000\">\n"
" id=\"fpga\">\n" " <rect width=\"100%\" height=\"100%\" style=\"fill:black;\"/>\n"
" <g id=\"root\" transform=\"translate(0,1000) scale(1,-1)\">\n" " <g id=\"root\" transform=\"translate(0,1000) scale(1,-1)\">\n"
" </g>\n" " </g>\n"
"</svg>\n" "</svg>\n";
};
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
@ -37,20 +35,10 @@ int main(int argc, char** argv)
xmlXPathContextPtr xpathCtx = 0; xmlXPathContextPtr xpathCtx = 0;
xmlXPathObjectPtr xpathObj = 0; xmlXPathObjectPtr xpathObj = 0;
// create or overwrite fpga.svg
{
FILE* f = fopen("fpga.svg", "w+");
if (!f) {
fprintf(stderr, "Cannot create fpga.svg\n");
goto fail;
}
fprintf(f, empty_svg);
fclose(f);
}
xmlInitParser(); xmlInitParser();
doc = xmlParseFile("fpga.svg"); doc = xmlParseDoc(empty_svg);
if (!doc) { if (!doc) {
fprintf(stderr, "Unable to parse fpga.svg.\n"); fprintf(stderr, "Internal error %i.\n", __LINE__);
goto fail_xml; goto fail_xml;
} }
xpathCtx = xmlXPathNewContext(doc); xpathCtx = xmlXPathNewContext(doc);
@ -79,13 +67,15 @@ int main(int argc, char** argv)
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
new_node = xmlNewChild(xpathObj->nodesetval->nodeTab[0], 0 /* xmlNsPtr */, BAD_CAST "use", 0 /* content */); new_node = xmlNewChild(xpathObj->nodesetval->nodeTab[0], 0 /* xmlNsPtr */, BAD_CAST "use", 0 /* content */);
xmlSetProp(new_node, BAD_CAST "xlink:href", BAD_CAST "lib.svg#square"); xmlSetProp(new_node, BAD_CAST "xlink:href", BAD_CAST "lib.svg#IOB");
xmlSetProp(new_node, BAD_CAST "x", xmlXPathCastNumberToString(50+i*50)); xmlSetProp(new_node, BAD_CAST "x", xmlXPathCastNumberToString(50+i*50));
xmlSetProp(new_node, BAD_CAST "y", BAD_CAST "50"); xmlSetProp(new_node, BAD_CAST "y", BAD_CAST "50");
xmlSetProp(new_node, BAD_CAST "width", BAD_CAST "50");
xmlSetProp(new_node, BAD_CAST "height", BAD_CAST "50");
} }
} }
xmlSaveFile("fpga.svg", doc); xmlDocDump(stdout, doc);
xmlXPathFreeObject(xpathObj); xmlXPathFreeObject(xpathObj);
xmlXPathFreeContext(xpathCtx); xmlXPathFreeContext(xpathCtx);
@ -98,6 +88,5 @@ fail_xml:
if (xpathCtx) xmlXPathFreeContext(xpathCtx); if (xpathCtx) xmlXPathFreeContext(xpathCtx);
if (doc) xmlFreeDoc(doc); if (doc) xmlFreeDoc(doc);
xmlCleanupParser(); xmlCleanupParser();
fail:
return EXIT_FAILURE; return EXIT_FAILURE;
} }

10
lib.svg
View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"> <svg xmlns="http://www.w3.org/2000/svg">
<g id="square"> <svg id="IOB" width="1000" height="1000" viewBox="0 0 1000 1000">
<rect x="0" y="0" width="20" height="20" <rect x="100" y="100" width="800" height="800" style="fill:white;"/>
style="fill: black; stroke-width: 2;"/> <text x="200" y="200">hi</text>
</g> </svg>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 223 B

After

Width:  |  Height:  |  Size: 273 B