Loading src/html.cpp +51 −38 Original line number Diff line number Diff line Loading @@ -380,6 +380,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { HTMLException excp; for(size_t ii=0; ii<_Data.size(); ++ii){ BUILDTREE_STARTLOOP: if(_Data[ii]==HTMLTAG_OPEN){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ ii+=4; Loading Loading @@ -445,18 +446,26 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { ++ii; } } }else if(_Data[ii]!='\r' && _Data[ii]!='\n' && _Data[ii]!=' '){ size_t start=ii; while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_OPEN) { }else if(_Data[ii]!=' '){ std::vector<char> buf; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(buf)); while(ii<_Data.size()){ switch(_Data[ii]){ case HTMLTAG_OPEN: { if(!buf.empty()){ std::cout.write(buf.data(),buf.size()) << std::endl; addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element))->_Text)); --ii; break; goto BUILDTREE_STARTLOOP; } }; case '\r'|'\n' :{ ++ii; continue; }; default:{ buf.push_back(_Data[ii++]); }; } } } } Loading Loading @@ -504,7 +513,7 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl GETTAGEND: for(et=st; et<in.size(); et++){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' ){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' || in[et]=='\r' || in[et]=='\n'){ break; } } Loading @@ -522,50 +531,54 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl for(size_t i=et; i<in.size(); ++i){ bool value=false; if(in[i]!=' '){ size_t kstart=i,kend=in.size(),vstart=0,vend=0; for(size_t ii=i; ii<in.size(); ++ii){ if (in[ii]=='='){ size_t kstart=std::string::npos,kend=std::string::npos; if(in[i]=='>'){ break; }else if(in[i]!=' ' || in[i]!='\r' || in[i]!='\n'){ kstart=i; size_t vstart=std::string::npos,vend=std::string::npos; while(i<in.size()){ if (in[i]=='='){ value=true; i=ii; kend=ii; kend=i; break; }else if(in[i] == '>'){ kend=i; break; } ++i; } if(value){ while(i<in.size()){ if(in[i]=='\"'){ if (vstart==0){ if (vstart==std::string::npos){ vstart=++i; continue; } }else{ vend=i; break; } ++i; } }else{ while(i<in.size()){ if(in[i] == '>' || in[i] == ' '){ kend=i; break; } ++i; } } std::vector<char> key,val; if(kstart != std::string::npos && kend != std::string::npos){ std::string key,val; std::copy(in.begin()+kstart,in.begin()+kend,std::back_inserter(key)); if(vend!=0){ if(vend != std::string::npos && vstart!=std::string::npos){ std::copy(in.begin()+vstart,in.begin()+vend,std::back_inserter(val)); std::cerr << val << std::endl; } if(val.empty()) out->setAttribute(std::string(key.begin(), key.end()), ""); out->setAttribute(key, ""); else out->setAttribute(std::string(key.begin(), key.end()), std::string(val.begin(), val.end())); out->setAttribute(key,val); } } } } Loading Loading
src/html.cpp +51 −38 Original line number Diff line number Diff line Loading @@ -380,6 +380,7 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { HTMLException excp; for(size_t ii=0; ii<_Data.size(); ++ii){ BUILDTREE_STARTLOOP: if(_Data[ii]==HTMLTAG_OPEN){ if(std::equal(_Data.begin()+ii,_Data.begin()+(ii+4), "<!--")){ ii+=4; Loading Loading @@ -445,18 +446,26 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() { ++ii; } } }else if(_Data[ii]!='\r' && _Data[ii]!='\n' && _Data[ii]!=' '){ size_t start=ii; while(ii<_Data.size()){ if(_Data[ii]==HTMLTAG_OPEN) { }else if(_Data[ii]!=' '){ std::vector<char> buf; std::copy(_Data.begin()+start,_Data.begin()+ii,std::back_inserter(buf)); while(ii<_Data.size()){ switch(_Data[ii]){ case HTMLTAG_OPEN: { if(!buf.empty()){ std::cout.write(buf.data(),buf.size()) << std::endl; addelement(&firstEl,&lastEl,new TextElement()); std::copy(buf.begin(),buf.end(),std::back_inserter(((TextElement*)(lastEl->element))->_Text)); --ii; break; goto BUILDTREE_STARTLOOP; } }; case '\r'|'\n' :{ ++ii; continue; }; default:{ buf.push_back(_Data[ii++]); }; } } } } Loading Loading @@ -504,7 +513,7 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl GETTAGEND: for(et=st; et<in.size(); et++){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' ){ if(in[et]==' ' || in[et]=='/' || in[et]=='>' || in[et]=='\r' || in[et]=='\n'){ break; } } Loading @@ -522,50 +531,54 @@ void libhtmlpp::HtmlString::_serialelize(std::vector<char> in, libhtmlpp::HtmlEl for(size_t i=et; i<in.size(); ++i){ bool value=false; if(in[i]!=' '){ size_t kstart=i,kend=in.size(),vstart=0,vend=0; for(size_t ii=i; ii<in.size(); ++ii){ if (in[ii]=='='){ size_t kstart=std::string::npos,kend=std::string::npos; if(in[i]=='>'){ break; }else if(in[i]!=' ' || in[i]!='\r' || in[i]!='\n'){ kstart=i; size_t vstart=std::string::npos,vend=std::string::npos; while(i<in.size()){ if (in[i]=='='){ value=true; i=ii; kend=ii; kend=i; break; }else if(in[i] == '>'){ kend=i; break; } ++i; } if(value){ while(i<in.size()){ if(in[i]=='\"'){ if (vstart==0){ if (vstart==std::string::npos){ vstart=++i; continue; } }else{ vend=i; break; } ++i; } }else{ while(i<in.size()){ if(in[i] == '>' || in[i] == ' '){ kend=i; break; } ++i; } } std::vector<char> key,val; if(kstart != std::string::npos && kend != std::string::npos){ std::string key,val; std::copy(in.begin()+kstart,in.begin()+kend,std::back_inserter(key)); if(vend!=0){ if(vend != std::string::npos && vstart!=std::string::npos){ std::copy(in.begin()+vstart,in.begin()+vend,std::back_inserter(val)); std::cerr << val << std::endl; } if(val.empty()) out->setAttribute(std::string(key.begin(), key.end()), ""); out->setAttribute(key, ""); else out->setAttribute(std::string(key.begin(), key.end()), std::string(val.begin(), val.end())); out->setAttribute(key,val); } } } } Loading