Loading src/html.cpp +32 −38 Original line number Diff line number Diff line Loading @@ -368,7 +368,7 @@ NEXTDOCEL: goto NEXTDOCEL; } } #include <iostream> libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { DocElements *firstEl = nullptr, *lastEl = nullptr; Loading @@ -389,75 +389,52 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { HTMLException excp; size_t close=_Data.size(); for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ 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::back_inserter(((TextElement*)(lastEl->element))->_Text)); } if(strncmp(_Data.data()+ii,"<!--",4)==0){ ii+=4; ii+=3; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"-->",3)==0 ) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((CommentElement*)lastEl->element)->_Comment)); close=ii+2; ii+=2; break; } ++ii; } }else if(strncmp(_Data.data()+ii,"<script",7)==0){ ii+=4; size_t start=ii; addelement(&firstEl,&lastEl,new ScriptElement()); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_CLOSE) { addelement(&firstEl,&lastEl,new ScriptElement()); std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); _serialelize(tel,(ScriptElement*)lastEl->element); break; } ++ii; } size_t close=ii; while(ii<_Data.size()){ if( strncmp(_Data.data()+ii,"</script",8)==0 ) { addelement(&firstEl,&lastEl,new ScriptElement()); lastEl->terminator=true; std::copy(_Data.begin()+start,_Data.begin()+ii, std::copy(_Data.begin()+close,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_CLOSE) { std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); break; } ++ii; } close=++ii; ii+=8; break; } ++ii; } }else { addelement(&firstEl,&lastEl,new HtmlElement()); size_t start=ii; addelement(&firstEl,&lastEl,new HtmlElement()); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_TERMINATE){ lastEl->terminator=true; Loading @@ -466,13 +443,30 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); close=++ii; break; } ++ii; } } }else if(_Data[ii]!='\r' || _Data[ii]!='\n' || _Data[ii]!=' '){ size_t start=ii; while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_OPEN) { --ii; std::vector<char> buf; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(buf)); addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element))->_Text)); break; } ++ii; } } } int iii=0; for(DocElements *cext=firstEl; cext; cext=cext->nextel){ std::cout << iii++ << std::endl; } Element *first = firstEl->element; Loading Loading
src/html.cpp +32 −38 Original line number Diff line number Diff line Loading @@ -368,7 +368,7 @@ NEXTDOCEL: goto NEXTDOCEL; } } #include <iostream> libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { DocElements *firstEl = nullptr, *lastEl = nullptr; Loading @@ -389,75 +389,52 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { HTMLException excp; size_t close=_Data.size(); for(size_t ii=0; ii<_Data.size(); ++ii){ if(_Data[ii]==HTMLTAG_OPEN){ 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::back_inserter(((TextElement*)(lastEl->element))->_Text)); } if(strncmp(_Data.data()+ii,"<!--",4)==0){ ii+=4; ii+=3; size_t start=ii; while(ii<_Data.size()){ if(strncmp(_Data.data()+ii,"-->",3)==0 ) { addelement(&firstEl,&lastEl,new CommentElement()); std::copy(_Data.begin()+start,_Data.begin()+ii, std::back_inserter(((CommentElement*)lastEl->element)->_Comment)); close=ii+2; ii+=2; break; } ++ii; } }else if(strncmp(_Data.data()+ii,"<script",7)==0){ ii+=4; size_t start=ii; addelement(&firstEl,&lastEl,new ScriptElement()); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_CLOSE) { addelement(&firstEl,&lastEl,new ScriptElement()); std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); _serialelize(tel,(ScriptElement*)lastEl->element); break; } ++ii; } size_t close=ii; while(ii<_Data.size()){ if( strncmp(_Data.data()+ii,"</script",8)==0 ) { addelement(&firstEl,&lastEl,new ScriptElement()); lastEl->terminator=true; std::copy(_Data.begin()+start,_Data.begin()+ii, std::copy(_Data.begin()+close,_Data.begin()+ii, std::back_inserter(((ScriptElement*)lastEl->element)->_Script)); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_CLOSE) { std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); break; } ++ii; } close=++ii; ii+=8; break; } ++ii; } }else { addelement(&firstEl,&lastEl,new HtmlElement()); size_t start=ii; addelement(&firstEl,&lastEl,new HtmlElement()); while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_TERMINATE){ lastEl->terminator=true; Loading @@ -466,13 +443,30 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { std::vector<char> tel; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); _serialelize(tel,(HtmlElement*)lastEl->element); close=++ii; break; } ++ii; } } }else if(_Data[ii]!='\r' || _Data[ii]!='\n' || _Data[ii]!=' '){ size_t start=ii; while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_OPEN) { --ii; std::vector<char> buf; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(buf)); addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element))->_Text)); break; } ++ii; } } } int iii=0; for(DocElements *cext=firstEl; cext; cext=cext->nextel){ std::cout << iii++ << std::endl; } Element *first = firstEl->element; Loading