Loading src/html.cpp +66 −15 Original line number Diff line number Diff line Loading @@ -390,14 +390,13 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ if(int(ii-close)>1){ if(int(ii-close)>0){ std::vector<char> buf; std::copy(_Data.begin()+close,_Data.begin()+ii,std::back_inserter(buf)); addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::inserter<std::vector<char>>(((TextElement*)(lastEl->element))->_Text, ((TextElement*)lastEl->element)->_Text.begin())); } } if(strncmp(_Data.data()+ii,"<!--",4)==0){ ii+=4; Loading @@ -412,7 +411,20 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } ++ii; } }else if(_Data[ii]==HTMLTAG_OPEN){ }else if(strncmp(_Data.data()+ii,"<script",7)==0){ ii+=4; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"</script>",9)==0 ) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); close=ii+9; break; } ++ii; } }else { addelement(&firstEl,&lastEl,new HtmlElement()); size_t start=ii; while(ii<_Data.size()){ Loading @@ -431,6 +443,8 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } } } } Element *first = firstEl->element; _buildtreenode(firstEl,lastEl); Loading Loading @@ -698,9 +712,11 @@ void libhtmlpp::HtmlElement::appendChild(const Element& el){ bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){ if(!hel) return false; if( _TagName.size() != hel->_TagName.size()) return false; if(strncmp(_TagName.data(),hel->_TagName.data(),_TagName.size())==0) if(_TagName==hel->_TagName) return true; return false; } Loading @@ -708,7 +724,7 @@ bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){ bool libhtmlpp::HtmlElement::operator==(const HtmlElement &hel){ if(_TagName.size() != hel._TagName.size()) return false; if(strncmp(_TagName.data(),hel._TagName.data(),_TagName.size())==0) if(_TagName==hel._TagName) return true; return false; } Loading Loading @@ -1093,6 +1109,41 @@ int libhtmlpp::CommentElement::getType() const{ return ElementType::CommentEl; } libhtmlpp::ScriptElement::ScriptElement() : Element(){ } libhtmlpp::ScriptElement::ScriptElement(const ScriptElement &scriptsrc) : Element(){ _copy(this,&scriptsrc); } libhtmlpp::ScriptElement::~ScriptElement(){ } libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element& hel){ _copy(this,&hel); return *this; } libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element* hel){ _copy(this,hel); return *this; } void libhtmlpp::ScriptElement::setScript(const char* txt){ std::copy(txt,txt+strlen(txt), std::insert_iterator<std::vector<char>>(_Script,_Script.begin())); } const char * libhtmlpp::ScriptElement::getScript(){ _CStr=_Script; _CStr.push_back('\0'); return _CStr.data(); } int libhtmlpp::ScriptElement::getType() const{ return ScriptEL; } libhtmlpp::HtmlPage::HtmlPage(){ Loading src/html.h +23 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ namespace libhtmlpp { enum ElementType{ TextEl=0, HtmlEl=1, CommentEl=2 CommentEl=2, ScriptEL=3 }; class Element { Loading Loading @@ -186,6 +187,27 @@ namespace libhtmlpp { friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src); }; class ScriptElement : public Element{ public: ScriptElement(); ScriptElement(const ScriptElement &scriptsrc); ~ScriptElement(); ScriptElement& operator=(const Element &hel); ScriptElement& operator=(const Element *hel); const char *getScript(); void setScript(const char *txt); int getType() const; protected: std::vector<char> _Script; std::vector<char> _CStr; friend class HtmlString; friend void print(Element* el, HtmlString &output,bool formated); friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src); }; void print(Element* el, HtmlString &output,bool formated=false); class HtmlString { Loading Loading
src/html.cpp +66 −15 Original line number Diff line number Diff line Loading @@ -390,14 +390,13 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ if(int(ii-close)>1){ if(int(ii-close)>0){ std::vector<char> buf; std::copy(_Data.begin()+close,_Data.begin()+ii,std::back_inserter(buf)); addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::inserter<std::vector<char>>(((TextElement*)(lastEl->element))->_Text, ((TextElement*)lastEl->element)->_Text.begin())); } } if(strncmp(_Data.data()+ii,"<!--",4)==0){ ii+=4; Loading @@ -412,7 +411,20 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } ++ii; } }else if(_Data[ii]==HTMLTAG_OPEN){ }else if(strncmp(_Data.data()+ii,"<script",7)==0){ ii+=4; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"</script>",9)==0 ) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); close=ii+9; break; } ++ii; } }else { addelement(&firstEl,&lastEl,new HtmlElement()); size_t start=ii; while(ii<_Data.size()){ Loading @@ -431,6 +443,8 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } } } } Element *first = firstEl->element; _buildtreenode(firstEl,lastEl); Loading Loading @@ -698,9 +712,11 @@ void libhtmlpp::HtmlElement::appendChild(const Element& el){ bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){ if(!hel) return false; if( _TagName.size() != hel->_TagName.size()) return false; if(strncmp(_TagName.data(),hel->_TagName.data(),_TagName.size())==0) if(_TagName==hel->_TagName) return true; return false; } Loading @@ -708,7 +724,7 @@ bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){ bool libhtmlpp::HtmlElement::operator==(const HtmlElement &hel){ if(_TagName.size() != hel._TagName.size()) return false; if(strncmp(_TagName.data(),hel._TagName.data(),_TagName.size())==0) if(_TagName==hel._TagName) return true; return false; } Loading Loading @@ -1093,6 +1109,41 @@ int libhtmlpp::CommentElement::getType() const{ return ElementType::CommentEl; } libhtmlpp::ScriptElement::ScriptElement() : Element(){ } libhtmlpp::ScriptElement::ScriptElement(const ScriptElement &scriptsrc) : Element(){ _copy(this,&scriptsrc); } libhtmlpp::ScriptElement::~ScriptElement(){ } libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element& hel){ _copy(this,&hel); return *this; } libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element* hel){ _copy(this,hel); return *this; } void libhtmlpp::ScriptElement::setScript(const char* txt){ std::copy(txt,txt+strlen(txt), std::insert_iterator<std::vector<char>>(_Script,_Script.begin())); } const char * libhtmlpp::ScriptElement::getScript(){ _CStr=_Script; _CStr.push_back('\0'); return _CStr.data(); } int libhtmlpp::ScriptElement::getType() const{ return ScriptEL; } libhtmlpp::HtmlPage::HtmlPage(){ Loading
src/html.h +23 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ namespace libhtmlpp { enum ElementType{ TextEl=0, HtmlEl=1, CommentEl=2 CommentEl=2, ScriptEL=3 }; class Element { Loading Loading @@ -186,6 +187,27 @@ namespace libhtmlpp { friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src); }; class ScriptElement : public Element{ public: ScriptElement(); ScriptElement(const ScriptElement &scriptsrc); ~ScriptElement(); ScriptElement& operator=(const Element &hel); ScriptElement& operator=(const Element *hel); const char *getScript(); void setScript(const char *txt); int getType() const; protected: std::vector<char> _Script; std::vector<char> _CStr; friend class HtmlString; friend void print(Element* el, HtmlString &output,bool formated); friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src); }; void print(Element* el, HtmlString &output,bool formated=false); class HtmlString { Loading