Commit 93fdbaa2 authored by jan.koester's avatar jan.koester
Browse files

fxied all

parent 92d622cb
Loading
Loading
Loading
Loading
+62 −29
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <cstdarg>
#include <compare>
#include <string_view>
#include <array>

#include <algorithm>
#include <fstream>
@@ -59,7 +60,7 @@

namespace libhtmlpp {

    const std::string_view ContainerTypes[]={
    const std::array<std::string_view,21> ContainerTypes{{
        "div",
        "style",
        "span",
@@ -80,8 +81,8 @@ namespace libhtmlpp {
        "header",
        "main",
        "html",
        ""
    };
        "a"
    }};

    class DocElements {
    public:
@@ -275,7 +276,7 @@ void libhtmlpp::HtmlString::_buildtreenode(
    Element *prev_el_in_tree = nullptr;

    auto checkContainer = [&](const std::string &tag) {
        for (size_t i = 0; !ContainerTypes[i].empty(); ++i) {
        for (size_t i = 0; i<ContainerTypes.size(); ++i) {
            if (tag == ContainerTypes[i]) {
                return true;
            }
@@ -342,11 +343,8 @@ void libhtmlpp::HtmlString::_buildtreenode(
            Frame fr = stack.top(); stack.pop();
            HtmlElement *opener_el = static_cast<HtmlElement*>(fr.open->element.get());

            for (DocElements *cnex=fr.open->nextel.get(); cnex; cnex=cnex->nextel.get()) {
                if (fr.open->nextel->element && !fr.open->nextel->terminator) {
            if (fr.open->nextel->element ) {
                opener_el->_childElement = std::move(fr.open->nextel->element);
                    break;
                }
            }

            prev_el_in_tree = opener_el;
@@ -773,32 +771,67 @@ void libhtmlpp::HtmlElement::_serialelize(std::vector<char> in) {
                    std::copy(in.begin()+vstart,in.begin()+vend,std::back_inserter(val));
                }

                std::cout << _TagName.data() << "->" << key << ": " << val << std::endl;

                setAttribute(key,val);
            }
        }
    }
}

size_t libhtmlpp::HtmlElement::parseElement(const std::vector<char> in, std::unique_ptr<libhtmlpp::Element>& el, size_t start,bool &termination){
#include <cctype>
#include <vector>
#include <memory>

size_t libhtmlpp::HtmlElement::parseElement(
    const std::vector<char>& in,
    std::unique_ptr<libhtmlpp::Element>& el,
    size_t start,
    bool& termination
){
    el = std::make_unique<HtmlElement>();
    bool term=false;
    std::vector<char> tel;
    while(start<in.size()){
        if(!term &&  in[start]==HTMLTAG_TERMINATE){
    termination = false;
    bool selfClosing = false;

    size_t i = start;
    if (i >= in.size() || in[i] != HTMLTAG_OPEN) {
        return i;
    }

    ++i;

    while (i < in.size() && std::isspace(static_cast<unsigned char>(in[i]))) ++i;

    if (i < in.size() && in[i] == HTMLTAG_TERMINATE) { // '/'
        termination = true;
        }else if(in[start]==HTMLTAG_CLOSE) {
            reinterpret_cast<HtmlElement*>(el.get())->_serialelize(tel);
            break;
        ++i; // '/' konsumieren
        while (i < in.size() && std::isspace(static_cast<unsigned char>(in[i]))) ++i;
    }
        if(in[start]!=' '){
            term=true;

    std::vector<char> tel;
    while (i < in.size() && in[i] != HTMLTAG_CLOSE) {  // '>'
        tel.emplace_back(in[i]);
        ++i;
    }
        tel.emplace_back(in[start]);
        ++start;

    while (!tel.empty() && std::isspace(static_cast<unsigned char>(tel.back())))
        tel.pop_back();

    if (!termination && !tel.empty() && tel.back() == HTMLTAG_TERMINATE) {
        selfClosing = true;
        tel.pop_back(); // den '/' entfernen
        while (!tel.empty() && std::isspace(static_cast<unsigned char>(tel.back())))
            tel.pop_back();
    }
    return ++start;

    reinterpret_cast<HtmlElement*>(el.get())->_serialelize(tel);

    if (i < in.size() && in[i] == HTMLTAG_CLOSE) ++i;

    return i;
}


namespace libhtmlpp {

    void _copy(libhtmlpp::Element *dest,const libhtmlpp::Element *src){
@@ -1212,7 +1245,7 @@ int libhtmlpp::CommentElement::getType() const{
    return ElementType::CommentEl;
}

size_t libhtmlpp::CommentElement::parseElement(const std::vector<char> in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
size_t libhtmlpp::CommentElement::parseElement(const std::vector<char> &in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
    size_t startel=start+3;
    while(start<in.size()){
        if(std::equal(in.begin()+start,in.begin()+(start+3),"-->")) {
@@ -1268,7 +1301,7 @@ int libhtmlpp::ScriptElement::getType() const{
    return ElementType::ScriptEL;
}

size_t libhtmlpp::ScriptElement::parseElement(const std::vector<char> in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
size_t libhtmlpp::ScriptElement::parseElement(const std::vector<char> &in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
    size_t startel=start;

    while(start<in.size()){
@@ -1341,7 +1374,7 @@ int libhtmlpp::SvgElement::getType() const{
    return ElementType::SvgEL;
}

size_t libhtmlpp::SvgElement::parseElement(const std::vector<char> in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
size_t libhtmlpp::SvgElement::parseElement(const std::vector<char> &in, std::unique_ptr<libhtmlpp::Element>& el, size_t start, bool& termination){
    size_t startel=start;

    while(start<in.size()){
@@ -1413,7 +1446,7 @@ int libhtmlpp::TextArea::getType() const{
    return ElementType::TextAreaEL;
}

size_t libhtmlpp::TextArea::parseElement(const std::vector<char> in, std::unique_ptr<libhtmlpp::Element>& el,size_t start, bool& termination){
size_t libhtmlpp::TextArea::parseElement(const std::vector<char> &in, std::unique_ptr<libhtmlpp::Element>& el,size_t start, bool& termination){
    size_t startel = start;
    while(start < in.size()){
        if(in[start] == HTMLTAG_CLOSE) {
+5 −5
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ namespace libhtmlpp {
        int    getType() const;
        void   remove(Element* el);

        static size_t parseElement(const std::vector<char> in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
        static size_t parseElement(const std::vector<char> &in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
    protected:

        std::unique_ptr<Element>  _childElement=nullptr;
@@ -213,7 +213,7 @@ namespace libhtmlpp {

        int         getType() const;

        static size_t parseElement(const std::vector<char> in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
        static size_t parseElement(const std::vector<char> &in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
    protected:
        std::vector<char> _Comment;
        friend class HtmlString;
@@ -243,7 +243,7 @@ namespace libhtmlpp {
        void         appendChild(const Element* el)=delete;
        void         appendChild(const Element& el)=delete;

        static size_t parseElement(const std::vector<char> in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
        static size_t parseElement(const std::vector<char> &in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
    protected:

        std::unique_ptr<Element> _childElement=nullptr;
@@ -276,7 +276,7 @@ namespace libhtmlpp {
        void         appendChild(const Element* el)=delete;
        void         appendChild(const Element& el)=delete;

        static size_t parseElement(const std::vector<char> in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
        static size_t parseElement(const std::vector<char> &in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
    protected:

        std::unique_ptr<Element> _childElement=nullptr;
@@ -310,7 +310,7 @@ namespace libhtmlpp {
        void         appendChild(const Element* el)=delete;
        void         appendChild(const Element& el)=delete;

        static size_t parseElement(const std::vector<char> in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
        static size_t parseElement(const std::vector<char> &in,std::unique_ptr<libhtmlpp::Element> &el,size_t start,bool &termination);
    protected:

        std::unique_ptr<Element> _childElement=nullptr;