Loading src/html.cpp +61 −51 Original line number Diff line number Diff line Loading @@ -304,12 +304,12 @@ void libhtmlpp::HtmlString::_buildtreenode(libhtmlpp::DocElements *firstel,libht for (DocElements* curcel=termel->nextel; curcel; curcel=curcel->nextel) { if (curcel->element && curcel->element->_Type==HtmlEl && !curcel->terminator && if (curcel->element && curcel->element->getType()==HtmlEl && !curcel->terminator && *((HtmlElement*)curcel->element) == ((HtmlElement*)termel->element)) { ++i; } if (curcel->element && curcel->element->_Type==HtmlEl && curcel->terminator && if (curcel->element && curcel->element->getType()==HtmlEl && curcel->terminator && *((HtmlElement*)curcel->element) == ((HtmlElement*)termel->element)) { if(i==0){ return curcel; Loading Loading @@ -633,10 +633,6 @@ void libhtmlpp::HtmlEncode(const char* input, HtmlString* output){ libhtmlpp::HtmlElement::HtmlElement(const char *tagname) : Element(){ _childElement=nullptr; _firstAttr=nullptr; _lastAttr=nullptr; _Type=HtmlEl; std::copy(tagname,tagname+strlen(tagname),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); } Loading @@ -644,7 +640,6 @@ libhtmlpp::HtmlElement::HtmlElement() : Element() { _childElement=nullptr; _firstAttr=nullptr; _lastAttr=nullptr; _Type=HtmlEl; } libhtmlpp::HtmlElement::HtmlElement(const libhtmlpp::HtmlElement& hel) : HtmlElement(){ Loading @@ -656,10 +651,6 @@ libhtmlpp::HtmlElement::HtmlElement(const libhtmlpp::HtmlElement* hel) : HtmlEle } libhtmlpp::HtmlElement::~HtmlElement(){ if(_prevElement) _prevElement->_nextElement=_nextElement; if(_nextElement) _nextElement->_prevElement=_prevElement; _nextElement=nullptr; _prevElement=nullptr; Loading @@ -671,20 +662,27 @@ libhtmlpp::HtmlElement::~HtmlElement(){ cura=next; } Element *cur=_childElement; Element *cur=_firstElement; _firstAttr=nullptr; _lastAttr=nullptr; _childElement=nullptr; std::stack<Element*> childs; std::stack<Element*> delelm; DELETEELEMENT: while(cur){ Element *next=cur->nextElement(); Element *next=cur->_nextElement; cur->_firstElement=nullptr; cur->_nextElement=nullptr; cur->_prevElement=nullptr; if(cur->_Type==HtmlEl && ((HtmlElement*)cur)->_childElement){ if(cur->getType()==HtmlEl && ((HtmlElement*)cur)->_childElement){ childs.push(((HtmlElement*)cur)->_childElement); delelm.push(((HtmlElement*)cur)->_childElement); ((HtmlElement*)cur)->_childElement=nullptr; } if(cur!=this) delelm.push(cur); cur=next; } if(!childs.empty()){ Loading @@ -693,14 +691,15 @@ libhtmlpp::HtmlElement::~HtmlElement(){ goto DELETEELEMENT; } while(!delelm.empty()){ if(delelm.empty()) return; Element *itm=delelm.top(); if(itm!=this) while(itm){ itm=delelm.top(); delete itm; delelm.pop(); } _childElement=nullptr; } void libhtmlpp::HtmlElement::setTagname(const char* name){ Loading Loading @@ -728,6 +727,10 @@ void libhtmlpp::HtmlElement::insertChild(libhtmlpp::Element* el){ case CommentEl: _childElement=new CommentElement; break; default: HTMLException ex; ex[HTMLException::Critical] << "insertChild: Unknown html element found !"; throw ex; } _copy(_childElement,el); } Loading @@ -749,6 +752,10 @@ void libhtmlpp::HtmlElement::appendChild(libhtmlpp::Element* el){ break; case CommentEl: curel=new CommentElement; default: HTMLException ex; ex[HTMLException::Critical] << "appendChild: Unknown html element found: "<< el->getType() << " !"; throw ex; } if(prev){ prev->_nextElement=curel; Loading Loading @@ -813,7 +820,7 @@ namespace libhtmlpp { NEWEL: if(src->getType()==libhtmlpp::HtmlEl && dest->getType()==libhtmlpp::HtmlEl){ ((libhtmlpp::HtmlElement*)dest)->setTagname(((libhtmlpp::HtmlElement*)src)->getTagname()); ((libhtmlpp::HtmlElement*)dest)->_TagName=(((libhtmlpp::HtmlElement*)src)->_TagName); for(libhtmlpp::HtmlElement::Attributes *cattr=((libhtmlpp::HtmlElement*)src)->_firstAttr; cattr; cattr=cattr->_nextAttr){ if(!cattr->_Value.empty()) ((libhtmlpp::HtmlElement*)dest)->setAttribute(cattr->_Key.data(),cattr->_Key.size(),cattr->_Value.data(),cattr->_Value.size()); Loading @@ -821,8 +828,8 @@ NEWEL: ((libhtmlpp::HtmlElement*)dest)->setAttribute(cattr->_Key.data(),cattr->_Key.size(),nullptr,0); } if(((libhtmlpp::HtmlElement*)src)->_childElement){ switch(((libhtmlpp::HtmlElement*)src)->_childElement->getType()){ if(dest->getType()==HtmlEl && ((libhtmlpp::HtmlElement*)src)->_childElement){ switch(src->getType()){ case HtmlEl: ((libhtmlpp::HtmlElement*)dest)->_childElement= new HtmlElement; break; Loading @@ -834,7 +841,7 @@ NEWEL: break; default: HTMLException ex; ex[HTMLException::Critical] << "Unknown html element found !"; ex[HTMLException::Critical] << "_copy: Unknown html element found !"; throw ex; } cpyel childel; Loading Loading @@ -969,27 +976,23 @@ libhtmlpp::Element *libhtmlpp::Element::prevElement() const{ return _prevElement; } int libhtmlpp::Element::getType() const{ return _Type; } libhtmlpp::Element::Element(){ _prevElement=nullptr; _nextElement=nullptr; _firstElement=nullptr; _Type=-1; } libhtmlpp::Element::Element(const libhtmlpp::Element& el){ _prevElement=nullptr; _nextElement=nullptr; _firstElement=nullptr; _Type=-1; libhtmlpp::Element::Element(const libhtmlpp::Element& el) : Element() { _copy(this,&el); } libhtmlpp::Element::~Element(){ Element *curel=_firstElement; _firstElement=nullptr; _prevElement=nullptr; _nextElement=nullptr; while(curel){ Element *next=curel->_nextElement; curel->_firstElement=nullptr; Loading @@ -999,17 +1002,12 @@ libhtmlpp::Element::~Element(){ delete curel; curel=next; } _firstElement=nullptr; _prevElement=nullptr; _nextElement=nullptr; }; libhtmlpp::TextElement::TextElement() : Element(){ _Type=TextEl; } libhtmlpp::TextElement::TextElement(const TextElement &texel) : Element(){ _Type=TextEl; _copy(this,&texel); } Loading Loading @@ -1037,12 +1035,15 @@ const char * libhtmlpp::TextElement::getText(){ return _CStr.data(); } int libhtmlpp::TextElement::getType() const{ return ElementType::TextEl; } libhtmlpp::CommentElement::CommentElement() : Element(){ _Type=CommentEl; } libhtmlpp::CommentElement::CommentElement(const CommentElement &comel) : Element(){ _Type=CommentEl; _copy(this,&comel); } Loading Loading @@ -1070,6 +1071,10 @@ const char * libhtmlpp::CommentElement::getComment(){ return _CStr.data(); } int libhtmlpp::CommentElement::getType() const{ return ElementType::CommentEl; } libhtmlpp::HtmlPage::HtmlPage(){ Loading Loading @@ -1191,7 +1196,7 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }; PRINTNEXTEL: switch(el->_Type){ switch(el->getType()){ case HtmlEl:{ printag(el,output); Loading Loading @@ -1394,6 +1399,11 @@ libhtmlpp::HtmlElement::Attributes::Attributes() { libhtmlpp::HtmlElement::Attributes::~Attributes() { } int libhtmlpp::HtmlElement::getType() const{ return ElementType::HtmlEl; } libhtmlpp::HtmlTable::HtmlTable(){ _firstRow=nullptr; _lastRow=nullptr; Loading src/html.h +6 −2 Original line number Diff line number Diff line Loading @@ -62,12 +62,11 @@ namespace libhtmlpp { Element* nextElement() const; Element* prevElement() const; int getType() const; virtual int getType() const=0; protected: Element* _prevElement; Element* _nextElement; Element* _firstElement; int _Type; friend class HtmlElement; friend class TextElement; Loading Loading @@ -107,6 +106,9 @@ namespace libhtmlpp { HtmlElement *getElementbyID(const char *id) const; HtmlElement *getElementbyTag(const char *tag) const; int getType() const; protected: Element* _childElement; Loading Loading @@ -147,6 +149,7 @@ namespace libhtmlpp { const char *getText(); void setText(const char *txt); int getType() const; protected: std::vector<char> _Text; std::vector<char> _CStr; Loading @@ -167,6 +170,7 @@ namespace libhtmlpp { const char *getComment(); void setComment(const char *txt); int getType() const; protected: std::vector<char> _Comment; std::vector<char> _CStr; Loading Loading
src/html.cpp +61 −51 Original line number Diff line number Diff line Loading @@ -304,12 +304,12 @@ void libhtmlpp::HtmlString::_buildtreenode(libhtmlpp::DocElements *firstel,libht for (DocElements* curcel=termel->nextel; curcel; curcel=curcel->nextel) { if (curcel->element && curcel->element->_Type==HtmlEl && !curcel->terminator && if (curcel->element && curcel->element->getType()==HtmlEl && !curcel->terminator && *((HtmlElement*)curcel->element) == ((HtmlElement*)termel->element)) { ++i; } if (curcel->element && curcel->element->_Type==HtmlEl && curcel->terminator && if (curcel->element && curcel->element->getType()==HtmlEl && curcel->terminator && *((HtmlElement*)curcel->element) == ((HtmlElement*)termel->element)) { if(i==0){ return curcel; Loading Loading @@ -633,10 +633,6 @@ void libhtmlpp::HtmlEncode(const char* input, HtmlString* output){ libhtmlpp::HtmlElement::HtmlElement(const char *tagname) : Element(){ _childElement=nullptr; _firstAttr=nullptr; _lastAttr=nullptr; _Type=HtmlEl; std::copy(tagname,tagname+strlen(tagname),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); } Loading @@ -644,7 +640,6 @@ libhtmlpp::HtmlElement::HtmlElement() : Element() { _childElement=nullptr; _firstAttr=nullptr; _lastAttr=nullptr; _Type=HtmlEl; } libhtmlpp::HtmlElement::HtmlElement(const libhtmlpp::HtmlElement& hel) : HtmlElement(){ Loading @@ -656,10 +651,6 @@ libhtmlpp::HtmlElement::HtmlElement(const libhtmlpp::HtmlElement* hel) : HtmlEle } libhtmlpp::HtmlElement::~HtmlElement(){ if(_prevElement) _prevElement->_nextElement=_nextElement; if(_nextElement) _nextElement->_prevElement=_prevElement; _nextElement=nullptr; _prevElement=nullptr; Loading @@ -671,20 +662,27 @@ libhtmlpp::HtmlElement::~HtmlElement(){ cura=next; } Element *cur=_childElement; Element *cur=_firstElement; _firstAttr=nullptr; _lastAttr=nullptr; _childElement=nullptr; std::stack<Element*> childs; std::stack<Element*> delelm; DELETEELEMENT: while(cur){ Element *next=cur->nextElement(); Element *next=cur->_nextElement; cur->_firstElement=nullptr; cur->_nextElement=nullptr; cur->_prevElement=nullptr; if(cur->_Type==HtmlEl && ((HtmlElement*)cur)->_childElement){ if(cur->getType()==HtmlEl && ((HtmlElement*)cur)->_childElement){ childs.push(((HtmlElement*)cur)->_childElement); delelm.push(((HtmlElement*)cur)->_childElement); ((HtmlElement*)cur)->_childElement=nullptr; } if(cur!=this) delelm.push(cur); cur=next; } if(!childs.empty()){ Loading @@ -693,14 +691,15 @@ libhtmlpp::HtmlElement::~HtmlElement(){ goto DELETEELEMENT; } while(!delelm.empty()){ if(delelm.empty()) return; Element *itm=delelm.top(); if(itm!=this) while(itm){ itm=delelm.top(); delete itm; delelm.pop(); } _childElement=nullptr; } void libhtmlpp::HtmlElement::setTagname(const char* name){ Loading Loading @@ -728,6 +727,10 @@ void libhtmlpp::HtmlElement::insertChild(libhtmlpp::Element* el){ case CommentEl: _childElement=new CommentElement; break; default: HTMLException ex; ex[HTMLException::Critical] << "insertChild: Unknown html element found !"; throw ex; } _copy(_childElement,el); } Loading @@ -749,6 +752,10 @@ void libhtmlpp::HtmlElement::appendChild(libhtmlpp::Element* el){ break; case CommentEl: curel=new CommentElement; default: HTMLException ex; ex[HTMLException::Critical] << "appendChild: Unknown html element found: "<< el->getType() << " !"; throw ex; } if(prev){ prev->_nextElement=curel; Loading Loading @@ -813,7 +820,7 @@ namespace libhtmlpp { NEWEL: if(src->getType()==libhtmlpp::HtmlEl && dest->getType()==libhtmlpp::HtmlEl){ ((libhtmlpp::HtmlElement*)dest)->setTagname(((libhtmlpp::HtmlElement*)src)->getTagname()); ((libhtmlpp::HtmlElement*)dest)->_TagName=(((libhtmlpp::HtmlElement*)src)->_TagName); for(libhtmlpp::HtmlElement::Attributes *cattr=((libhtmlpp::HtmlElement*)src)->_firstAttr; cattr; cattr=cattr->_nextAttr){ if(!cattr->_Value.empty()) ((libhtmlpp::HtmlElement*)dest)->setAttribute(cattr->_Key.data(),cattr->_Key.size(),cattr->_Value.data(),cattr->_Value.size()); Loading @@ -821,8 +828,8 @@ NEWEL: ((libhtmlpp::HtmlElement*)dest)->setAttribute(cattr->_Key.data(),cattr->_Key.size(),nullptr,0); } if(((libhtmlpp::HtmlElement*)src)->_childElement){ switch(((libhtmlpp::HtmlElement*)src)->_childElement->getType()){ if(dest->getType()==HtmlEl && ((libhtmlpp::HtmlElement*)src)->_childElement){ switch(src->getType()){ case HtmlEl: ((libhtmlpp::HtmlElement*)dest)->_childElement= new HtmlElement; break; Loading @@ -834,7 +841,7 @@ NEWEL: break; default: HTMLException ex; ex[HTMLException::Critical] << "Unknown html element found !"; ex[HTMLException::Critical] << "_copy: Unknown html element found !"; throw ex; } cpyel childel; Loading Loading @@ -969,27 +976,23 @@ libhtmlpp::Element *libhtmlpp::Element::prevElement() const{ return _prevElement; } int libhtmlpp::Element::getType() const{ return _Type; } libhtmlpp::Element::Element(){ _prevElement=nullptr; _nextElement=nullptr; _firstElement=nullptr; _Type=-1; } libhtmlpp::Element::Element(const libhtmlpp::Element& el){ _prevElement=nullptr; _nextElement=nullptr; _firstElement=nullptr; _Type=-1; libhtmlpp::Element::Element(const libhtmlpp::Element& el) : Element() { _copy(this,&el); } libhtmlpp::Element::~Element(){ Element *curel=_firstElement; _firstElement=nullptr; _prevElement=nullptr; _nextElement=nullptr; while(curel){ Element *next=curel->_nextElement; curel->_firstElement=nullptr; Loading @@ -999,17 +1002,12 @@ libhtmlpp::Element::~Element(){ delete curel; curel=next; } _firstElement=nullptr; _prevElement=nullptr; _nextElement=nullptr; }; libhtmlpp::TextElement::TextElement() : Element(){ _Type=TextEl; } libhtmlpp::TextElement::TextElement(const TextElement &texel) : Element(){ _Type=TextEl; _copy(this,&texel); } Loading Loading @@ -1037,12 +1035,15 @@ const char * libhtmlpp::TextElement::getText(){ return _CStr.data(); } int libhtmlpp::TextElement::getType() const{ return ElementType::TextEl; } libhtmlpp::CommentElement::CommentElement() : Element(){ _Type=CommentEl; } libhtmlpp::CommentElement::CommentElement(const CommentElement &comel) : Element(){ _Type=CommentEl; _copy(this,&comel); } Loading Loading @@ -1070,6 +1071,10 @@ const char * libhtmlpp::CommentElement::getComment(){ return _CStr.data(); } int libhtmlpp::CommentElement::getType() const{ return ElementType::CommentEl; } libhtmlpp::HtmlPage::HtmlPage(){ Loading Loading @@ -1191,7 +1196,7 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }; PRINTNEXTEL: switch(el->_Type){ switch(el->getType()){ case HtmlEl:{ printag(el,output); Loading Loading @@ -1394,6 +1399,11 @@ libhtmlpp::HtmlElement::Attributes::Attributes() { libhtmlpp::HtmlElement::Attributes::~Attributes() { } int libhtmlpp::HtmlElement::getType() const{ return ElementType::HtmlEl; } libhtmlpp::HtmlTable::HtmlTable(){ _firstRow=nullptr; _lastRow=nullptr; Loading
src/html.h +6 −2 Original line number Diff line number Diff line Loading @@ -62,12 +62,11 @@ namespace libhtmlpp { Element* nextElement() const; Element* prevElement() const; int getType() const; virtual int getType() const=0; protected: Element* _prevElement; Element* _nextElement; Element* _firstElement; int _Type; friend class HtmlElement; friend class TextElement; Loading Loading @@ -107,6 +106,9 @@ namespace libhtmlpp { HtmlElement *getElementbyID(const char *id) const; HtmlElement *getElementbyTag(const char *tag) const; int getType() const; protected: Element* _childElement; Loading Loading @@ -147,6 +149,7 @@ namespace libhtmlpp { const char *getText(); void setText(const char *txt); int getType() const; protected: std::vector<char> _Text; std::vector<char> _CStr; Loading @@ -167,6 +170,7 @@ namespace libhtmlpp { const char *getComment(); void setComment(const char *txt); int getType() const; protected: std::vector<char> _Comment; std::vector<char> _CStr; Loading