Loading src/html.cpp +36 −27 Original line number Diff line number Diff line Loading @@ -272,13 +272,13 @@ void libhtmlpp::HtmlString::_buildtreenode(std::unique_ptr<libhtmlpp::DocElement if (curcel->element && curcel->element->getType()==HtmlEl && !curcel->terminator && *reinterpret_cast<HtmlElement*>(curcel->element.get()) == *reinterpret_cast<HtmlElement*>(termel->element.get()) ) { reinterpret_cast<HtmlElement*>(termel->element.get()) ) { ++i; } if (curcel->element && curcel->element->getType()==HtmlEl && curcel->terminator && *reinterpret_cast<HtmlElement*>(curcel->element.get()) == *reinterpret_cast<HtmlElement*>(termel->element.get()) ) { reinterpret_cast<HtmlElement*>(termel->element.get()) ) { if(i==0){ return curcel; }else{ Loading @@ -301,6 +301,8 @@ void libhtmlpp::HtmlString::_buildtreenode(std::unique_ptr<libhtmlpp::DocElement }; size_t counter =0 ; NEXTDOCEL: std::cout << "start" << start->element.get() << std::endl; if(!start->element){ HTMLException e; e[HTMLException::Error] << "start not found this shouldn't happend in line: " << counter << "!"; Loading @@ -311,11 +313,12 @@ NEXTDOCEL: DocElements *parent=checkterminator(start,end); if(prev && !start->terminator){ if(prev && start->element && !start->terminator){ start->element->_prevElement=prev->element.get(); } if(parent && parent!=next){ std::cout << "child" << parent << std::endl; ((HtmlElement*)(start->element.get()))->_childElement=std::move(next->element); cpyel childel; childel.start=next->nextel.get(); Loading @@ -324,19 +327,17 @@ NEXTDOCEL: next=parent->nextel.get(); } if(next && next->element) std::cout << next->element->getType() << std::endl; while(next && next->element){ while(next && next!=end){ if(!next->terminator){ start->element->_nextElement=std::move(next->element); prev=start; start=next->nextel.get(); if(start->nextel) next=start->nextel.get(); else next=nullptr; goto NEXTDOCEL; } if(next==end) break; next=next->nextel.get(); }; Loading Loading @@ -372,7 +373,7 @@ void libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ BUILDTREE_STARTLOOP: if(_Data[ii]==HTMLTAG_OPEN){ if(ii + 4 < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ if( (ii + 4) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ size_t start=ii; while(ii<_Data.size()){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+3),"-->")) { Loading @@ -385,7 +386,7 @@ BUILDTREE_STARTLOOP: } ++ii; } }else if(ii+7 < _Data.size() && std::equal(_Data.begin() + ii, _Data.begin() + (ii + 7), "<script")) { }else if((ii+7) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+7),"<script")){ size_t start=ii; while(ii<_Data.size()){ Loading @@ -396,9 +397,7 @@ BUILDTREE_STARTLOOP: std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); ii+=7; _serialelize(tel,(ScriptElement*)lastEl->element.get()); _serialelize(tel,(SvgElement*)lastEl->element.get()); break; } Loading @@ -407,16 +406,17 @@ BUILDTREE_STARTLOOP: size_t close=++ii; while(ii+8<_Data.size()){ while(ii<_Data.size()){ 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.get())->_Script)); std::back_inserter(((SvgElement*)lastEl->element.get())->_Svg)); ii+=8; break; } ++ii; } }else if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4),"<svg")){ }else if( (ii+4) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4),"<svg")){ size_t start=ii; while(ii<_Data.size()){ Loading Loading @@ -447,7 +447,7 @@ BUILDTREE_STARTLOOP: ++ii; } }else { size_t start=+ii; size_t start=ii; addelement(&lastEl); lastEl->element=std::make_unique<HtmlElement>(); bool term=false; Loading @@ -460,7 +460,7 @@ BUILDTREE_STARTLOOP: _serialelize(tel,(HtmlElement*)lastEl->element.get()); break; } if(_Data[ii]!=' '){ if(_Data[ii]!=' ' && _Data[ii]!=HTMLTAG_OPEN){ term=true; } ++ii; Loading @@ -475,13 +475,14 @@ BUILDTREE_STARTLOOP: addelement(&lastEl); lastEl->element=std::make_unique<TextElement>(); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element.get()))->_Text)); goto BUILDTREE_STARTLOOP; } goto BUILDTREE_STARTLOOP; }; case '\r'|'\n' :{ case '\r': case '\n':{ ++ii; continue; }; }break; default:{ buf.push_back(_Data[ii++]); }; Loading @@ -490,6 +491,15 @@ BUILDTREE_STARTLOOP: } } for(DocElements *el=firstEl.get(); el; el=el->nextel.get()){ if(el->element->getType()==HtmlEl) std::cerr << "Html: " << reinterpret_cast<HtmlElement*>(el->element.get())->getTagname() << "Term: "<< el->terminator <<std::endl; else if(el->element->getType()==ScriptEL) std::cerr << "Script: " << reinterpret_cast<ScriptElement*>(el->element.get())->getScript() <<std::endl; else if(el->element->getType()==TextEl) std::cerr << "Text: " << reinterpret_cast<TextElement*>(el->element.get())->getText() <<std::endl; } _buildtreenode(firstEl,lastEl); rootEl=std::move(firstEl->element); Loading Loading @@ -1158,12 +1168,11 @@ libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp:: } void libhtmlpp::ScriptElement::setScript(const std::string& script){ std::copy(script.begin(),script.end(), std::insert_iterator<std::vector<char>>(_Script,_Script.begin())); std::copy(script.begin(),script.end(),std::back_inserter(_Script)); } const std::string libhtmlpp::ScriptElement::getScript(){ return _Script.data(); return std::string(_Script.begin(),_Script.end()); } int libhtmlpp::ScriptElement::getType() const{ Loading Loading
src/html.cpp +36 −27 Original line number Diff line number Diff line Loading @@ -272,13 +272,13 @@ void libhtmlpp::HtmlString::_buildtreenode(std::unique_ptr<libhtmlpp::DocElement if (curcel->element && curcel->element->getType()==HtmlEl && !curcel->terminator && *reinterpret_cast<HtmlElement*>(curcel->element.get()) == *reinterpret_cast<HtmlElement*>(termel->element.get()) ) { reinterpret_cast<HtmlElement*>(termel->element.get()) ) { ++i; } if (curcel->element && curcel->element->getType()==HtmlEl && curcel->terminator && *reinterpret_cast<HtmlElement*>(curcel->element.get()) == *reinterpret_cast<HtmlElement*>(termel->element.get()) ) { reinterpret_cast<HtmlElement*>(termel->element.get()) ) { if(i==0){ return curcel; }else{ Loading @@ -301,6 +301,8 @@ void libhtmlpp::HtmlString::_buildtreenode(std::unique_ptr<libhtmlpp::DocElement }; size_t counter =0 ; NEXTDOCEL: std::cout << "start" << start->element.get() << std::endl; if(!start->element){ HTMLException e; e[HTMLException::Error] << "start not found this shouldn't happend in line: " << counter << "!"; Loading @@ -311,11 +313,12 @@ NEXTDOCEL: DocElements *parent=checkterminator(start,end); if(prev && !start->terminator){ if(prev && start->element && !start->terminator){ start->element->_prevElement=prev->element.get(); } if(parent && parent!=next){ std::cout << "child" << parent << std::endl; ((HtmlElement*)(start->element.get()))->_childElement=std::move(next->element); cpyel childel; childel.start=next->nextel.get(); Loading @@ -324,19 +327,17 @@ NEXTDOCEL: next=parent->nextel.get(); } if(next && next->element) std::cout << next->element->getType() << std::endl; while(next && next->element){ while(next && next!=end){ if(!next->terminator){ start->element->_nextElement=std::move(next->element); prev=start; start=next->nextel.get(); if(start->nextel) next=start->nextel.get(); else next=nullptr; goto NEXTDOCEL; } if(next==end) break; next=next->nextel.get(); }; Loading Loading @@ -372,7 +373,7 @@ void libhtmlpp::HtmlString::_buildTree() { for(size_t ii=0; ii<_Data.size(); ++ii){ BUILDTREE_STARTLOOP: if(_Data[ii]==HTMLTAG_OPEN){ if(ii + 4 < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ if( (ii + 4) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ size_t start=ii; while(ii<_Data.size()){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+3),"-->")) { Loading @@ -385,7 +386,7 @@ BUILDTREE_STARTLOOP: } ++ii; } }else if(ii+7 < _Data.size() && std::equal(_Data.begin() + ii, _Data.begin() + (ii + 7), "<script")) { }else if((ii+7) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+7),"<script")){ size_t start=ii; while(ii<_Data.size()){ Loading @@ -396,9 +397,7 @@ BUILDTREE_STARTLOOP: std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(tel)); ii+=7; _serialelize(tel,(ScriptElement*)lastEl->element.get()); _serialelize(tel,(SvgElement*)lastEl->element.get()); break; } Loading @@ -407,16 +406,17 @@ BUILDTREE_STARTLOOP: size_t close=++ii; while(ii+8<_Data.size()){ while(ii<_Data.size()){ 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.get())->_Script)); std::back_inserter(((SvgElement*)lastEl->element.get())->_Svg)); ii+=8; break; } ++ii; } }else if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4),"<svg")){ }else if( (ii+4) < _Data.size() && std::equal(_Data.begin()+ii,_Data.begin()+(ii+4),"<svg")){ size_t start=ii; while(ii<_Data.size()){ Loading Loading @@ -447,7 +447,7 @@ BUILDTREE_STARTLOOP: ++ii; } }else { size_t start=+ii; size_t start=ii; addelement(&lastEl); lastEl->element=std::make_unique<HtmlElement>(); bool term=false; Loading @@ -460,7 +460,7 @@ BUILDTREE_STARTLOOP: _serialelize(tel,(HtmlElement*)lastEl->element.get()); break; } if(_Data[ii]!=' '){ if(_Data[ii]!=' ' && _Data[ii]!=HTMLTAG_OPEN){ term=true; } ++ii; Loading @@ -475,13 +475,14 @@ BUILDTREE_STARTLOOP: addelement(&lastEl); lastEl->element=std::make_unique<TextElement>(); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element.get()))->_Text)); goto BUILDTREE_STARTLOOP; } goto BUILDTREE_STARTLOOP; }; case '\r'|'\n' :{ case '\r': case '\n':{ ++ii; continue; }; }break; default:{ buf.push_back(_Data[ii++]); }; Loading @@ -490,6 +491,15 @@ BUILDTREE_STARTLOOP: } } for(DocElements *el=firstEl.get(); el; el=el->nextel.get()){ if(el->element->getType()==HtmlEl) std::cerr << "Html: " << reinterpret_cast<HtmlElement*>(el->element.get())->getTagname() << "Term: "<< el->terminator <<std::endl; else if(el->element->getType()==ScriptEL) std::cerr << "Script: " << reinterpret_cast<ScriptElement*>(el->element.get())->getScript() <<std::endl; else if(el->element->getType()==TextEl) std::cerr << "Text: " << reinterpret_cast<TextElement*>(el->element.get())->getText() <<std::endl; } _buildtreenode(firstEl,lastEl); rootEl=std::move(firstEl->element); Loading Loading @@ -1158,12 +1168,11 @@ libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp:: } void libhtmlpp::ScriptElement::setScript(const std::string& script){ std::copy(script.begin(),script.end(), std::insert_iterator<std::vector<char>>(_Script,_Script.begin())); std::copy(script.begin(),script.end(),std::back_inserter(_Script)); } const std::string libhtmlpp::ScriptElement::getScript(){ return _Script.data(); return std::string(_Script.begin(),_Script.end()); } int libhtmlpp::ScriptElement::getType() const{ Loading