Loading src/html.cpp +75 −56 Original line number Diff line number Diff line Loading @@ -25,10 +25,9 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include <cstring> #include <cstdio> #include <cstdlib> #include <iostream> #include <cstdarg> #include <compare> #include <algorithm> #include <fstream> Loading @@ -38,6 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "config.h" #include "encode.h" #define HTMLTAG_OPEN '<' #define HTMLTAG_TERMINATE '/' #define HTMLTAG_CLOSE '>' Loading Loading @@ -94,10 +94,6 @@ namespace libhtmlpp { libhtmlpp::HtmlString::HtmlString(){ } libhtmlpp::HtmlString::HtmlString(const char* str) : HtmlString(){ std::copy(str,str+strlen(str),std::insert_iterator<std::vector<char>>(_Data,_Data.begin()) ); } libhtmlpp::HtmlString::HtmlString(char str) : HtmlString(){ _Data.push_back(str); } Loading @@ -117,11 +113,6 @@ libhtmlpp::HtmlString::HtmlString(const libhtmlpp::HtmlString& str) : HtmlString std::copy(str._Data.begin(),str._Data.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); } libhtmlpp::HtmlString::HtmlString(const libhtmlpp::HtmlString* str) : HtmlString(){ std::copy(str->_Data.begin(),str->_Data.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); } void libhtmlpp::HtmlString::push_back(const char src){ _Data.push_back(src); } Loading Loading @@ -152,7 +143,7 @@ bool libhtmlpp::HtmlString::empty(){ } libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator+=(const char *src){ libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator+=(const std::string &src){ append(src); return *this; } Loading @@ -162,15 +153,9 @@ libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator+=(libhtmlpp::HtmlString& return *this; } libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator=(const char *src){ libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator=(const std::string &src){ clear(); std::copy(src,src+strlen(src),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); return *this; } libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator=(const std::string *src){ clear(); std::copy(src->begin(),src->end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); std::copy(src.begin(),src.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); return *this; } Loading Loading @@ -235,7 +220,7 @@ size_t libhtmlpp::HtmlString::size() const{ } const std::string libhtmlpp::HtmlString::str(){ return _Data.data(); return std::string(_Data.data(),_Data.size()); } const std::vector<char>& libhtmlpp::HtmlString::data() { Loading Loading @@ -383,11 +368,11 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ if(strncmp(_Data.data()+ii,"<!--",4)==0){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ ii+=4; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"-->",3)==0 ) { if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+3),"-->")) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((CommentElement*)lastEl->element)->_Comment)); Loading @@ -396,7 +381,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } ++ii; } }else if(strncmp(_Data.data()+ii,"<script",7)==0){ }else if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+7),"<script")){ size_t start=ii; ii+=7; Loading @@ -419,7 +404,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { size_t close=++ii; while(ii<_Data.size()){ if( strncmp(_Data.data()+ii,"</script",8)==0 ) { if( std::equal(_Data.begin()+ii,_Data.begin()+(ii+8),"</script")) { std::copy(_Data.begin()+close,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); Loading Loading @@ -505,7 +490,7 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl } GETTAGEND: for(et=st; et<in.size(); ++et){ for(et=st; et<in.size(); et++){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' ){ break; } Loading Loading @@ -561,7 +546,10 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl if(vend!=0){ std::copy(in.begin()+vstart,in.begin()+vend,std::back_inserter(val)); } out->setAttribute(key.data(),val.data()); if(val.empty()) out->setAttribute(std::string(key.data(),key.size()),""); else out->setAttribute(std::string(key.data(),key.size()),std::string(val.data(),val.size())); } } } Loading Loading @@ -659,13 +647,16 @@ int libhtmlpp::Element::getType() const{ return -1; } void libhtmlpp::HtmlElement::setTagname(const char* name){ void libhtmlpp::HtmlElement::setTagname(const std::string &name){ _TagName.clear(); std::copy(name,name+strlen(name),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); _TagName.resize(name.length()); std::copy(name.begin(),name.end(),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); } const std::string libhtmlpp::HtmlElement::getTagname() const{ return _TagName.data(); if(_TagName.empty()) return ""; return std::string(_TagName.data(),_TagName.size()); } void libhtmlpp::HtmlElement::insertChild(const libhtmlpp::Element* el){ Loading Loading @@ -1211,7 +1202,8 @@ void libhtmlpp::HtmlPage::loadFile(libhtmlpp::HtmlElement &html,const char* path throw excp[HTMLException::Critical] << e.what(); } while (fs.read(tmp, HTML_BLOCKSIZE)) { while (fs.good() && !fs.eof()) { fs.read(tmp, HTML_BLOCKSIZE); data.append(tmp,fs.gcount()); } fs.close(); Loading @@ -1226,12 +1218,6 @@ void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const std::str _copy(&html,el); } void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const char *src){ HtmlString buf=src; Element *el=buf.parse(); _copy(&html,el); } void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const HtmlString &node){ HtmlString buf=node; Element *el=buf.parse(); Loading Loading @@ -1328,7 +1314,6 @@ void libhtmlpp::HtmlPage::_CheckHeader(const HtmlString &page){ } void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { auto isContainer = [](const std::string &tagname) { for(int i=0; ContainerTypes[i]; ++i){ if(tagname==ContainerTypes[i]) Loading @@ -1355,10 +1340,18 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(((HtmlElement*) el)->getTagname()); for (HtmlElement::Attributes* curattr = ((HtmlElement*) el)->_firstAttr; curattr; curattr = curattr->_nextAttr) { output.append(" "); output.append(curattr->_Key.data()); std::copy( curattr->_Key.begin(), curattr->_Key.end(), std::back_inserter(output) ); if(!curattr->_Value.empty()){ output.append("=\""); output.append(curattr->_Value.data()); std::copy( curattr->_Value.begin(), curattr->_Value.end(), std::back_inserter(output) ); output.append("\""); } } Loading @@ -1381,7 +1374,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { //Container must be always terminated fuck html5 if(isContainer(((HtmlElement*) el)->getTagname())){ output.append("</"); output.append(((HtmlElement*) el)->_TagName.data()); std::copy( ((HtmlElement*) el)->_TagName.begin(), ((HtmlElement*) el)->_TagName.end(), std::back_inserter(output) ); output.append(">"); } Loading @@ -1395,7 +1392,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }break; case TextEl :{ output.append(((TextElement*)el)->_Text.data()); std::copy( ((TextElement*)el)->_Text.begin(), ((TextElement*)el)->_Text.end(), std::back_inserter(output) ); if(formated) output.append("\r\n"); Loading @@ -1406,7 +1407,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }break; case CommentEl: { output.append("<!--"); output.append(((CommentElement*)el)->_Comment.data()); std::copy( ((CommentElement*)el)->_Comment.begin(), ((CommentElement*)el)->_Comment.end(), std::back_inserter(output) ); output.append("-->"); if(formated) output.append("\r\n"); Loading @@ -1421,10 +1426,18 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(((ScriptElement*) el)->getTagname()); for (ScriptElement::Attributes* curattr = ((ScriptElement*) el)->_firstAttr; curattr; curattr = curattr->_nextAttr) { output.append(" "); output.append(curattr->_Key.data()); std::copy( curattr->_Key.begin(), curattr->_Key.end(), std::back_inserter(output) ); if(!curattr->_Value.empty()){ output.append("=\""); output.append(curattr->_Value.data()); std::copy( curattr->_Value.begin(), curattr->_Value.end(), std::back_inserter(output) ); output.append("\""); } } Loading @@ -1436,7 +1449,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(" "); } } output.append(((ScriptElement*)el)->_Script.data()); std::copy( ((ScriptElement*)el)->_Script.begin(), ((ScriptElement*)el)->_Script.end(), std::back_inserter(output) ); if(formated){ output.append("\r\n"); for(int i=0; i<lvl; ++i){ Loading Loading @@ -1473,7 +1490,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { } output.append("</"); output.append(((HtmlElement*) el)->_TagName.data()); std::copy( ((HtmlElement*) el)->_TagName.begin(), ((HtmlElement*) el)->_TagName.end(), std::back_inserter(output) ); output.append(">"); if(formated) Loading Loading @@ -1547,12 +1568,10 @@ void libhtmlpp::HtmlElement::setAttribute(const std::string &name, const std::st Attributes* cattr = nullptr; for (Attributes* curattr = _firstAttr; curattr; curattr=curattr->_nextAttr) { if(curattr->_Key.size() == name.length()){ if ( name == curattr->_Key.data() ) { if ( std::equal(curattr->_Key.begin(),curattr->_Key.end(),name.begin()) ) { cattr = curattr; } } } if (!cattr) { if (_lastAttr){ _lastAttr->_nextAttr = new Attributes(); Loading @@ -1562,12 +1581,12 @@ void libhtmlpp::HtmlElement::setAttribute(const std::string &name, const std::st _lastAttr = _firstAttr; } cattr = _lastAttr; cattr->_Key.resize(name.length()); std::copy(name.begin(),name.end(),std::insert_iterator<std::vector<char>>(cattr->_Key,cattr->_Key.begin()) ); } cattr->_Value.resize(value.length()); if(value.length()>0) std::copy(value.begin(),value.end(),std::insert_iterator<std::vector<char>>(cattr->_Value ,cattr->_Value .begin()) ); else cattr->_Value.clear(); } void libhtmlpp::HtmlElement::setIntAttribute(const std::string& name, int value) { Loading @@ -1578,8 +1597,8 @@ void libhtmlpp::HtmlElement::setIntAttribute(const std::string& name, int value) const std::string libhtmlpp::HtmlElement::getAtributte(const std::string& name) const{ for (Attributes* curattr = _firstAttr; curattr; curattr = curattr->_nextAttr) { if ( name==curattr->_Key.data() ) { return curattr->_Value.data(); if ( std::equal(curattr->_Key.begin(),curattr->_Key.end(),name.begin()) ){ return std::string(curattr->_Value.data(),curattr->_Value.size()); } } return ""; Loading src/html.h +3 −7 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ namespace libhtmlpp { void appendChild(const Element* el); void appendChild(const Element& el); void setTagname(const char *name); void setTagname(const std::string &name); const std::string getTagname() const; HtmlElement *getElementbyID(const std::string &id) const; Loading Loading @@ -220,8 +220,6 @@ namespace libhtmlpp { HtmlString(); HtmlString(const HtmlString &str); HtmlString(const HtmlString *str); HtmlString(const char *str); HtmlString(char str); HtmlString(const std::string &str); ~HtmlString(); Loading @@ -233,10 +231,9 @@ namespace libhtmlpp { void insert(size_t pos, char src); HtmlString& operator+=(const char* src); HtmlString& operator+=(const std::string &src); HtmlString& operator+=(HtmlString& hstring); HtmlString& operator=(const char* src); HtmlString& operator=(const std::string *src); HtmlString& operator=(const std::string &src); HtmlString& operator=(const HtmlString& src); char operator[](size_t pos) const; Loading Loading @@ -280,7 +277,6 @@ namespace libhtmlpp { void loadFile(libhtmlpp::HtmlElement &html,const char* path); void saveFile(libhtmlpp::HtmlElement &html,const char* path); void loadString(libhtmlpp::HtmlElement &html,const std::string &src); void loadString(libhtmlpp::HtmlElement &html,const char *src); void loadString(libhtmlpp::HtmlElement &html,const HtmlString &node); void loadString(libhtmlpp::HtmlElement &html,const HtmlString *node); private: Loading Loading
src/html.cpp +75 −56 Original line number Diff line number Diff line Loading @@ -25,10 +25,9 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include <cstring> #include <cstdio> #include <cstdlib> #include <iostream> #include <cstdarg> #include <compare> #include <algorithm> #include <fstream> Loading @@ -38,6 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "config.h" #include "encode.h" #define HTMLTAG_OPEN '<' #define HTMLTAG_TERMINATE '/' #define HTMLTAG_CLOSE '>' Loading Loading @@ -94,10 +94,6 @@ namespace libhtmlpp { libhtmlpp::HtmlString::HtmlString(){ } libhtmlpp::HtmlString::HtmlString(const char* str) : HtmlString(){ std::copy(str,str+strlen(str),std::insert_iterator<std::vector<char>>(_Data,_Data.begin()) ); } libhtmlpp::HtmlString::HtmlString(char str) : HtmlString(){ _Data.push_back(str); } Loading @@ -117,11 +113,6 @@ libhtmlpp::HtmlString::HtmlString(const libhtmlpp::HtmlString& str) : HtmlString std::copy(str._Data.begin(),str._Data.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); } libhtmlpp::HtmlString::HtmlString(const libhtmlpp::HtmlString* str) : HtmlString(){ std::copy(str->_Data.begin(),str->_Data.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); } void libhtmlpp::HtmlString::push_back(const char src){ _Data.push_back(src); } Loading Loading @@ -152,7 +143,7 @@ bool libhtmlpp::HtmlString::empty(){ } libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator+=(const char *src){ libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator+=(const std::string &src){ append(src); return *this; } Loading @@ -162,15 +153,9 @@ libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator+=(libhtmlpp::HtmlString& return *this; } libhtmlpp::HtmlString &libhtmlpp::HtmlString::operator=(const char *src){ libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator=(const std::string &src){ clear(); std::copy(src,src+strlen(src),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); return *this; } libhtmlpp::HtmlString & libhtmlpp::HtmlString::operator=(const std::string *src){ clear(); std::copy(src->begin(),src->end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); std::copy(src.begin(),src.end(),std::insert_iterator<std::vector<char>>(_Data,_Data.begin())); return *this; } Loading Loading @@ -235,7 +220,7 @@ size_t libhtmlpp::HtmlString::size() const{ } const std::string libhtmlpp::HtmlString::str(){ return _Data.data(); return std::string(_Data.data(),_Data.size()); } const std::vector<char>& libhtmlpp::HtmlString::data() { Loading Loading @@ -383,11 +368,11 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ if(strncmp(_Data.data()+ii,"<!--",4)==0){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ ii+=4; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"-->",3)==0 ) { if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+3),"-->")) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((CommentElement*)lastEl->element)->_Comment)); Loading @@ -396,7 +381,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { } ++ii; } }else if(strncmp(_Data.data()+ii,"<script",7)==0){ }else if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+7),"<script")){ size_t start=ii; ii+=7; Loading @@ -419,7 +404,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { size_t close=++ii; while(ii<_Data.size()){ if( strncmp(_Data.data()+ii,"</script",8)==0 ) { if( std::equal(_Data.begin()+ii,_Data.begin()+(ii+8),"</script")) { std::copy(_Data.begin()+close,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); Loading Loading @@ -505,7 +490,7 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl } GETTAGEND: for(et=st; et<in.size(); ++et){ for(et=st; et<in.size(); et++){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' ){ break; } Loading Loading @@ -561,7 +546,10 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl if(vend!=0){ std::copy(in.begin()+vstart,in.begin()+vend,std::back_inserter(val)); } out->setAttribute(key.data(),val.data()); if(val.empty()) out->setAttribute(std::string(key.data(),key.size()),""); else out->setAttribute(std::string(key.data(),key.size()),std::string(val.data(),val.size())); } } } Loading Loading @@ -659,13 +647,16 @@ int libhtmlpp::Element::getType() const{ return -1; } void libhtmlpp::HtmlElement::setTagname(const char* name){ void libhtmlpp::HtmlElement::setTagname(const std::string &name){ _TagName.clear(); std::copy(name,name+strlen(name),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); _TagName.resize(name.length()); std::copy(name.begin(),name.end(),std::insert_iterator<std::vector<char>>(_TagName,_TagName.begin()) ); } const std::string libhtmlpp::HtmlElement::getTagname() const{ return _TagName.data(); if(_TagName.empty()) return ""; return std::string(_TagName.data(),_TagName.size()); } void libhtmlpp::HtmlElement::insertChild(const libhtmlpp::Element* el){ Loading Loading @@ -1211,7 +1202,8 @@ void libhtmlpp::HtmlPage::loadFile(libhtmlpp::HtmlElement &html,const char* path throw excp[HTMLException::Critical] << e.what(); } while (fs.read(tmp, HTML_BLOCKSIZE)) { while (fs.good() && !fs.eof()) { fs.read(tmp, HTML_BLOCKSIZE); data.append(tmp,fs.gcount()); } fs.close(); Loading @@ -1226,12 +1218,6 @@ void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const std::str _copy(&html,el); } void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const char *src){ HtmlString buf=src; Element *el=buf.parse(); _copy(&html,el); } void libhtmlpp::HtmlPage::loadString(libhtmlpp::HtmlElement &html,const HtmlString &node){ HtmlString buf=node; Element *el=buf.parse(); Loading Loading @@ -1328,7 +1314,6 @@ void libhtmlpp::HtmlPage::_CheckHeader(const HtmlString &page){ } void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { auto isContainer = [](const std::string &tagname) { for(int i=0; ContainerTypes[i]; ++i){ if(tagname==ContainerTypes[i]) Loading @@ -1355,10 +1340,18 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(((HtmlElement*) el)->getTagname()); for (HtmlElement::Attributes* curattr = ((HtmlElement*) el)->_firstAttr; curattr; curattr = curattr->_nextAttr) { output.append(" "); output.append(curattr->_Key.data()); std::copy( curattr->_Key.begin(), curattr->_Key.end(), std::back_inserter(output) ); if(!curattr->_Value.empty()){ output.append("=\""); output.append(curattr->_Value.data()); std::copy( curattr->_Value.begin(), curattr->_Value.end(), std::back_inserter(output) ); output.append("\""); } } Loading @@ -1381,7 +1374,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { //Container must be always terminated fuck html5 if(isContainer(((HtmlElement*) el)->getTagname())){ output.append("</"); output.append(((HtmlElement*) el)->_TagName.data()); std::copy( ((HtmlElement*) el)->_TagName.begin(), ((HtmlElement*) el)->_TagName.end(), std::back_inserter(output) ); output.append(">"); } Loading @@ -1395,7 +1392,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }break; case TextEl :{ output.append(((TextElement*)el)->_Text.data()); std::copy( ((TextElement*)el)->_Text.begin(), ((TextElement*)el)->_Text.end(), std::back_inserter(output) ); if(formated) output.append("\r\n"); Loading @@ -1406,7 +1407,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { }break; case CommentEl: { output.append("<!--"); output.append(((CommentElement*)el)->_Comment.data()); std::copy( ((CommentElement*)el)->_Comment.begin(), ((CommentElement*)el)->_Comment.end(), std::back_inserter(output) ); output.append("-->"); if(formated) output.append("\r\n"); Loading @@ -1421,10 +1426,18 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(((ScriptElement*) el)->getTagname()); for (ScriptElement::Attributes* curattr = ((ScriptElement*) el)->_firstAttr; curattr; curattr = curattr->_nextAttr) { output.append(" "); output.append(curattr->_Key.data()); std::copy( curattr->_Key.begin(), curattr->_Key.end(), std::back_inserter(output) ); if(!curattr->_Value.empty()){ output.append("=\""); output.append(curattr->_Value.data()); std::copy( curattr->_Value.begin(), curattr->_Value.end(), std::back_inserter(output) ); output.append("\""); } } Loading @@ -1436,7 +1449,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { output.append(" "); } } output.append(((ScriptElement*)el)->_Script.data()); std::copy( ((ScriptElement*)el)->_Script.begin(), ((ScriptElement*)el)->_Script.end(), std::back_inserter(output) ); if(formated){ output.append("\r\n"); for(int i=0; i<lvl; ++i){ Loading Loading @@ -1473,7 +1490,11 @@ void libhtmlpp::print(Element* el, HtmlString &output,bool formated) { } output.append("</"); output.append(((HtmlElement*) el)->_TagName.data()); std::copy( ((HtmlElement*) el)->_TagName.begin(), ((HtmlElement*) el)->_TagName.end(), std::back_inserter(output) ); output.append(">"); if(formated) Loading Loading @@ -1547,12 +1568,10 @@ void libhtmlpp::HtmlElement::setAttribute(const std::string &name, const std::st Attributes* cattr = nullptr; for (Attributes* curattr = _firstAttr; curattr; curattr=curattr->_nextAttr) { if(curattr->_Key.size() == name.length()){ if ( name == curattr->_Key.data() ) { if ( std::equal(curattr->_Key.begin(),curattr->_Key.end(),name.begin()) ) { cattr = curattr; } } } if (!cattr) { if (_lastAttr){ _lastAttr->_nextAttr = new Attributes(); Loading @@ -1562,12 +1581,12 @@ void libhtmlpp::HtmlElement::setAttribute(const std::string &name, const std::st _lastAttr = _firstAttr; } cattr = _lastAttr; cattr->_Key.resize(name.length()); std::copy(name.begin(),name.end(),std::insert_iterator<std::vector<char>>(cattr->_Key,cattr->_Key.begin()) ); } cattr->_Value.resize(value.length()); if(value.length()>0) std::copy(value.begin(),value.end(),std::insert_iterator<std::vector<char>>(cattr->_Value ,cattr->_Value .begin()) ); else cattr->_Value.clear(); } void libhtmlpp::HtmlElement::setIntAttribute(const std::string& name, int value) { Loading @@ -1578,8 +1597,8 @@ void libhtmlpp::HtmlElement::setIntAttribute(const std::string& name, int value) const std::string libhtmlpp::HtmlElement::getAtributte(const std::string& name) const{ for (Attributes* curattr = _firstAttr; curattr; curattr = curattr->_nextAttr) { if ( name==curattr->_Key.data() ) { return curattr->_Value.data(); if ( std::equal(curattr->_Key.begin(),curattr->_Key.end(),name.begin()) ){ return std::string(curattr->_Value.data(),curattr->_Value.size()); } } return ""; Loading
src/html.h +3 −7 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ namespace libhtmlpp { void appendChild(const Element* el); void appendChild(const Element& el); void setTagname(const char *name); void setTagname(const std::string &name); const std::string getTagname() const; HtmlElement *getElementbyID(const std::string &id) const; Loading Loading @@ -220,8 +220,6 @@ namespace libhtmlpp { HtmlString(); HtmlString(const HtmlString &str); HtmlString(const HtmlString *str); HtmlString(const char *str); HtmlString(char str); HtmlString(const std::string &str); ~HtmlString(); Loading @@ -233,10 +231,9 @@ namespace libhtmlpp { void insert(size_t pos, char src); HtmlString& operator+=(const char* src); HtmlString& operator+=(const std::string &src); HtmlString& operator+=(HtmlString& hstring); HtmlString& operator=(const char* src); HtmlString& operator=(const std::string *src); HtmlString& operator=(const std::string &src); HtmlString& operator=(const HtmlString& src); char operator[](size_t pos) const; Loading Loading @@ -280,7 +277,6 @@ namespace libhtmlpp { void loadFile(libhtmlpp::HtmlElement &html,const char* path); void saveFile(libhtmlpp::HtmlElement &html,const char* path); void loadString(libhtmlpp::HtmlElement &html,const std::string &src); void loadString(libhtmlpp::HtmlElement &html,const char *src); void loadString(libhtmlpp::HtmlElement &html,const HtmlString &node); void loadString(libhtmlpp::HtmlElement &html,const HtmlString *node); private: Loading