diff --git a/src/dom/svgreader.cpp b/src/dom/svgreader.cpp
index 4fd0817432bdb0ac62945829411d5334ac5a3fa8..ea4392f50fb494f0b1c0745956421690677dab03 100644 (file)
--- a/src/dom/svgreader.cpp
+++ b/src/dom/svgreader.cpp
#include <stdarg.h>
-#define SVG_NAMESPACE "http://www.w3.org/2000/svg"
namespace org
{
/**
*
*/
-void SvgReader::error(char const *fmt, ...)
+void SVGReader::error(char const *fmt, ...)
{
va_list args;
- fprintf(stderr, "SvgReader:error:");
+ fprintf(stderr, "SVGReader:error: ");
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args) ;
}
+/**
+ *
+ */
+void SVGReader::trace(char const *fmt, ...)
+{
+ va_list args;
+ fprintf(stdout, "SVGReader: ");
+ va_start(args, fmt);
+ vfprintf(stdout, fmt, args);
+ va_end(args) ;
+ fprintf(stdout, "\n");
+}
+
+
//#########################################################################
//# P A R S I N G
//#########################################################################
+
+
/**
* Get the character at the position and record the fact
*/
-XMLCh SvgReader::get(int p)
+XMLCh SVGReader::get(int p)
{
if (p >= parselen)
return 0;
* Test if the given substring exists at the given position
* in parsebuf. Use get() in case of out-of-bounds
*/
-bool SvgReader::match(int pos, char const *str)
+bool SVGReader::match(int pos, char const *str)
{
while (*str)
{
/**
*
*/
-int SvgReader::skipwhite(int p)
+int SVGReader::skipwhite(int p)
{
while (p < parselen)
{
/**
* get a word from the buffer
*/
-int SvgReader::getWord(int p, DOMString &result)
+int SVGReader::getWord(int p, DOMString &result)
{
XMLCh ch = get(p);
if (!uni_is_letter(ch))
/**
* get a word from the buffer
*/
-int SvgReader::getNumber(int p0, double &result)
+int SVGReader::getNumber(int p0, double &result)
{
int p=p0;
/**
* get a word from the buffer
*/
-int SvgReader::getNumber(int p0, double &result)
+int SVGReader::getNumber(int p0, double &result)
{
int p=p0;
}
-bool SvgReader::parseTransform(const DOMString &str)
+bool SVGReader::parseTransform(const DOMString &str)
{
parsebuf = str;
parselen = str.size();
/**
*
*/
-bool SvgReader::parseElement(SVGElementImplPtr parent,
+bool SVGReader::parseElement(SVGElementImplPtr parent,
ElementImplPtr sourceElem)
{
- if (!parent || !sourceElem)
+ if (!parent)
+ {
+ error("NULL dest element");
+ return false;
+ }
+ if (!sourceElem)
{
error("NULL source element");
return false;
//printf("namespaceURI:%s\n", namespaceURI.c_str());
DOMString tagName = sourceElem->getTagName();
printf("tag name:%s\n", tagName.c_str());
-
- ElementImplPtr newElement = NULL;
- if (namespaceURI != SVG_NAMESPACE)
- {
- newElement = new SVGSVGElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else //## SVG!!
+ ElementPtr newElement = doc->createElementNS(namespaceURI, tagName);
+ if (!newElement)
{
+ return false;
+ }
+ NamedNodeMap &attrs = sourceElem->getAttributes();
+ for (unsigned int i=0 ; i<attrs.getLength() ; i++)
+ {
+ NodePtr n = attrs.item(i);
+ newElement->setAttribute(n->getNodeName(), n->getNodeValue());//should be exception here
+ }
+ parent->appendChild(newElement);
- //####################################################
- //## ATTRIBUTES
- //####################################################
- DOMString style = sourceElem->getAttribute("style");
- if (style.size() > 0)
- {
- css::CssReader parser;
- style.insert(0, "{");
- style.append("}");
- //printf("CSS:%s\n", style.c_str());
- if (!parser.parse(style))
- {
- error("parsing style attribute");
- }
- else
- {
- //printf("##parsed!\n");
- }
- }
-
- DOMString transform = sourceElem->getAttribute("transform");
- if (transform.size() > 0)
- {
- if (!parseTransform(transform))
- {
- error("parsing transform attribute");
- }
- else
- {
- //printf("##parsed!\n");
- }
- }
-
- //####################################################
- //## ELEMENT - SPECIFIC
- //####################################################
- if (tagName == "svg")
- {
- newElement = new SVGSVGElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "title")
- {
- newElement = new SVGTitleElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "desc")
- {
- newElement = new SVGDescElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "defs")
- {
- newElement = new SVGDefsElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "style")
- {
- newElement = new SVGStyleElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "g")
- {
- newElement = new SVGGElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- else if (tagName == "path")
- {
- newElement = new SVGPathElementImpl();
- newElement->assign(*sourceElem);
- parent->appendChild(newElement);
- }
- }
NodeList children = sourceElem->getChildNodes();
int nodeCount = children.getLength();
/**
*
*/
-SVGDocumentPtr SvgReader::parse(const DocumentPtr src)
+SVGDocumentPtr SVGReader::parse(const DocumentPtr src)
{
if (!src)
{
DOMImplementationImpl impl;
doc = new SVGDocumentImpl(&impl, SVG_NAMESPACE, "svg" , NULL);
- SVGElementImplPtr destElem = dynamic_cast<SVGElementImpl *>(doc->getRootElement().get());
- ElementImplPtr srcElem = dynamic_cast<ElementImpl *>(src->getDocumentElement().get());
+ SVGElementImplPtr destElem = dynamic_pointer_cast<SVGElementImpl, SVGElement>(doc->getRootElement());
+ ElementImplPtr srcElem = dynamic_pointer_cast<ElementImpl, Element>(src->getDocumentElement());
if (!parseElement(destElem, srcElem))
{
return NULL;
/**
*
*/
-SVGDocumentPtr SvgReader::parse(const DOMString &buf)
+SVGDocumentPtr SVGReader::parse(const DOMString &buf)
{
/* remember, smartptrs are null-testable*/
SVGDocumentPtr svgdoc;
/**
*
*/
-SVGDocumentPtr SvgReader::parseFile(const DOMString &fileName)
+SVGDocumentPtr SVGReader::parseFile(const DOMString &fileName)
{
/* remember, smartptrs are null-testable*/
SVGDocumentPtr svgdoc;
DocumentPtr doc = parser.parseFile(fileName);
if (!doc)
{
+ error("Could not load xml doc");
return svgdoc;
}
svgdoc = parse(doc);