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

not far away from success

parent 5593a838
Loading
Loading
Loading
Loading
+32 −38
Original line number Diff line number Diff line
@@ -368,7 +368,7 @@ NEXTDOCEL:
        goto NEXTDOCEL;
    }
}

#include <iostream>
libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() {
    DocElements *firstEl = nullptr, *lastEl = nullptr;

@@ -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;
@@ -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;