Commit d0490e40 authored by jan.koester's avatar jan.koester
Browse files

parsing now working

parent c910f467
Loading
Loading
Loading
Loading
+33 −43
Changes for src/html.cpp: 33 added lines, 43 removed lines.
Original line number Diff line number Diff line
@@ -187,7 +187,12 @@ libhtmlpp::DocElements *libhtmlpp::HtmlString::_buildtreenode(DocElements* prev,
        return ret;
    };


    if(!start->terminator){
        if(prev){
            start->element->_prevElement=prev->element;
            prev=start;
        }
    }

    if(start==end)
        return end;
@@ -197,25 +202,18 @@ libhtmlpp::DocElements *libhtmlpp::HtmlString::_buildtreenode(DocElements* prev,
        if(parent){
            ((HtmlElement*)start->element)->_childElement =next->element;
            std::cout << ((HtmlElement*)parent->element)->_TagName <<std::endl;
            start=_buildtreenode(nullptr,next->nextel,next,parent);
            _buildtreenode(nullptr,next->nextel,next,parent);
            next=parent;
        }
    };

    if(!start->terminator){
        if(start->element && prev)
            start->element->_prevElement=prev->element;

        if(start->element && !next->terminator ){
    while(next!=end){
        if(!next->terminator){
            start->element->_nextElement=next->element;
            return _buildtreenode(start,next->nextel,next,end);
            break;
        }

        start->element->_nextElement=nullptr;

        if(next==end)
            return end;

        return _buildtreenode(prev,next->nextel,start,end);
        next=next->nextel;
    }

    return _buildtreenode(prev,next->nextel,next,end);
@@ -303,49 +301,41 @@ GETTAGEND:
        throw excp[HTMLException::Critical] << "no tag in element found!";
    }

    int startpos = -1;
    int startpos =-1,vst=-1,hvst=-1;
    std::string key;
    int vst=-1,hvst=-1;
    size_t i;

    for(i=et; i<in.length(); ++i){
        if(in[i]!=' '){
            break;
        }
    }

    while(i < in.length()) {
        switch (in[i]) {
            case ' ': {
                if (startpos >= 0 ){
                    key = in.substr(startpos, i - startpos);
    while(et < in.length()) {
        switch (in[et]) {
            case ' ' | '>': {
                if(startpos!=-1 && hvst==-1){
                    key=in.substr(startpos,et-startpos);
                    (*out)->setAttribute(key.c_str(),nullptr);
                    startpos=-1;
                }
                break;
            }
            }break;
            case '=': {
                hvst=i;
            }
                if(!key.empty())
                    hvst=et;
            }break;
            case '\"': {
                if(!key.empty() && vst < 0){
                    vst=i;
                }else if(!key.empty() && vst > 0 && hvst > 0) {
                    (*out)->setAttribute(key.c_str(), in.substr(vst+2,((i-vst)+1)).c_str());
                if(hvst!=-1){
                    if( vst==-1 ){
                        vst=et;
                    }else if(!key.empty()){
                        (*out)->setAttribute(key.c_str(),in.substr(vst,et-vst).c_str());
                        key.clear();
                        vst=-1;
                    startpos = -1;
                        hvst=-1;
                    }
                break;
                }
            }break;
            default: {
                if (startpos == -1 && key.empty()) {
                    startpos = i;
                }
                break;
                if(startpos==-1){
                    startpos=et;
                }
           }break;
        }
        ++i;
        ++et;
    }
}