void
  SVGTextPathElement::glTextTraverse(svgl::Context * svglContext, svgl::GLInfo* glinfo, svgl::TextInfo* textinfo)
  {
    _textinfo = textinfo;
    buildBezier(svglContext, glinfo, textinfo);

    for(dom::Node *n = getFirstChild(); n; n=n->getNextSibling()) {
      _currentPCDATA = 0;
      dom::Text * pcdata = dynamic_cast<dom::Text*>(n);
      if(pcdata) {
	_currentPCDATA = pcdata;
	//SVGTransformable::glTraverse(svglContext, glinfo);
	SVGStylable::glTraverse(svglContext, glinfo, false, true);
      }
      else {
	SVGTextContentElement *e = dynamic_cast<SVGTextContentElement*>(n);
	if(e) {
	  //std::cerr << "text may not be at the right place since transforms are not traversed" __FL__;
	  e->glTextTraverse(svglContext, glinfo, _textinfo);
	  //textinfo->dx = textinfo->distanceIterator->x;
	  //textinfo->dy = textinfo->distanceIterator->y;
	}
      }
    }

    delete _textinfo->distanceIterator;
    _textinfo->distanceIterator=0;

  }
  void
  SVGTRefElement::glTextTraverse(svgl::Context * svglContext, svgl::GLInfo* glinfo, svgl::TextInfo* textinfo)
  {
    for(dom::Node *n = getFirstChild(); n; n=n->getNextSibling()) {
      dom::Text * pcdata = dynamic_cast<dom::Text*>(n);
      if(pcdata) {
	glTextTraversePCDATA(svglContext, glinfo, textinfo, pcdata );
      }
      else {
	SVGTextContentElement *e = dynamic_cast<SVGTextContentElement*>(n);
	if(e) {
	  e->glTextTraverse(svglContext, glinfo, textinfo);
	}
      }
    }
  }