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

script element added

parent da86206e
Loading
Loading
Loading
Loading
+66 −15
Original line number Diff line number Diff line
@@ -390,14 +390,13 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() {

    for(size_t ii=0; ii<_Data.size(); ++ii){
        if(_Data[ii]==HTMLTAG_OPEN){
                if(int(ii-close)>1){
            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::inserter<std::vector<char>>(((TextElement*)(lastEl->element))->_Text,
                                                                                 ((TextElement*)lastEl->element)->_Text.begin()));
            }
        }

            if(strncmp(_Data.data()+ii,"<!--",4)==0){
                ii+=4;
@@ -412,7 +411,20 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() {
                    }
                    ++ii;
                }
        }else if(_Data[ii]==HTMLTAG_OPEN){
            }else if(strncmp(_Data.data()+ii,"<script",7)==0){
                ii+=4;
                size_t start=ii;
                while(ii<_Data.size()){
                    if(strncmp(_Data.data()+ii,"</script>",9)==0 ) {
                        addelement(&firstEl,&lastEl,new CommentElement());
                        std::copy(_Data.begin()+start,_Data.begin()+ii,
                                  std::back_inserter(((ScriptElement*)lastEl->element)->_Script));
                        close=ii+9;
                        break;
                    }
                    ++ii;
                }
            }else {
                addelement(&firstEl,&lastEl,new HtmlElement());
                size_t start=ii;
                while(ii<_Data.size()){
@@ -431,6 +443,8 @@ libhtmlpp::Element *libhtmlpp::HtmlString::_buildTree() {
                }
            }
        }
    }

    Element *first = firstEl->element;

    _buildtreenode(firstEl,lastEl);
@@ -698,9 +712,11 @@ void libhtmlpp::HtmlElement::appendChild(const Element& el){


bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){
    if(!hel)
        return false;
    if( _TagName.size() != hel->_TagName.size())
        return false;
    if(strncmp(_TagName.data(),hel->_TagName.data(),_TagName.size())==0)
    if(_TagName==hel->_TagName)
        return true;
    return false;
}
@@ -708,7 +724,7 @@ bool libhtmlpp::HtmlElement::operator==(const HtmlElement *hel){
bool libhtmlpp::HtmlElement::operator==(const HtmlElement &hel){
    if(_TagName.size() != hel._TagName.size())
        return false;
    if(strncmp(_TagName.data(),hel._TagName.data(),_TagName.size())==0)
    if(_TagName==hel._TagName)
        return true;
    return false;
}
@@ -1093,6 +1109,41 @@ int libhtmlpp::CommentElement::getType() const{
    return ElementType::CommentEl;
}

libhtmlpp::ScriptElement::ScriptElement() : Element(){
}

libhtmlpp::ScriptElement::ScriptElement(const ScriptElement &scriptsrc) : Element(){
    _copy(this,&scriptsrc);
}

libhtmlpp::ScriptElement::~ScriptElement(){
}


libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element& hel){
    _copy(this,&hel);
    return *this;
}

libhtmlpp::ScriptElement & libhtmlpp::ScriptElement::operator=(const libhtmlpp::Element* hel){
    _copy(this,hel);
    return *this;
}

void libhtmlpp::ScriptElement::setScript(const char* txt){
    std::copy(txt,txt+strlen(txt),
              std::insert_iterator<std::vector<char>>(_Script,_Script.begin()));
}

const char * libhtmlpp::ScriptElement::getScript(){
    _CStr=_Script;
    _CStr.push_back('\0');
    return _CStr.data();
}

int libhtmlpp::ScriptElement::getType() const{
    return ScriptEL;
}

libhtmlpp::HtmlPage::HtmlPage(){

+23 −1
Original line number Diff line number Diff line
@@ -43,7 +43,8 @@ namespace libhtmlpp {
    enum ElementType{
        TextEl=0,
        HtmlEl=1,
        CommentEl=2
        CommentEl=2,
        ScriptEL=3
    };

    class Element {
@@ -186,6 +187,27 @@ namespace libhtmlpp {
        friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src);
    };

    class ScriptElement : public Element{
    public:
        ScriptElement();
        ScriptElement(const ScriptElement &scriptsrc);
        ~ScriptElement();

        ScriptElement& operator=(const Element &hel);
        ScriptElement& operator=(const Element *hel);

        const char *getScript();
        void        setScript(const char *txt);

        int         getType() const;
    protected:
        std::vector<char> _Script;
        std::vector<char> _CStr;
        friend class HtmlString;
        friend void  print(Element* el, HtmlString &output,bool formated);
        friend void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src);
    };

    void print(Element* el, HtmlString &output,bool formated=false);

    class HtmlString {