Commit 9901abcf authored by jan.koester's avatar jan.koester
Browse files

test

parent f92c97de
Loading
Loading
Loading
Loading
+51 −38
Original line number Diff line number Diff line
@@ -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;
@@ -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++]);
                    };
                }
            }
        }
    }
@@ -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;
        }
    }
@@ -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);
                }
            }
    }
}