示例#1
0
    void t2HTMLParser::parse()
    {
        if(!bLoaded)
            t2PrintError("html文件未被加载, 无法解析");

        parser->parse(html.c_str());

        // --!设计失误 拷贝css地址
        for(auto p : parser->cssFilePaths)
            cssFilePaths.push_back(p);
    }
示例#2
0
    void t2HTMLParser::t2LabelParser::parse(const char* html)
    {
        GumboOutput* output = gumbo_parse(html);

        GumboNode *root = output->root;

        if(root->type != GUMBO_NODE_ELEMENT)
        {
            t2PrintError("html格式有误");
            return;
        }

        // find head
        GumboVector *rootChildren = &root->v.element.children;
        GumboNode *h = NULL, *b = NULL;
        for(int i = 0; i < rootChildren->length; i++)
        {
            GumboNode *child = (GumboNode *) rootChildren->data[i];
            if(child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_HEAD)
                h = child;
            else if(child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_BODY)
                b = child;
        }

        if(!h)
        {
            t2PrintError("html文件缺少<head>标签");
            return;
        }
        head(h);

        // find body
        if(!b)
        {
            t2PrintError("html文件缺少<body>标签");
            return;
        }
        body(b);

        gumbo_destroy_output(&kGumboDefaultOptions, output);
    }
示例#3
0
    void t2HTMLParser::t2LabelParser::head(GumboNode *h)
    {
        GumboVector *headChildren = &h->v.element.children;

        for(int i = 0; i < headChildren->length; i++)
        {
            GumboNode *child = (GumboNode *) headChildren->data[i];

            // find title
            if(child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_TITLE)
            {
                if(child->v.element.children.length != 1)
                {
                    t2PrintError("<empty title>");
                    return;
                }

                // title无子节点
                GumboNode *title = (GumboNode *) child->v.element.children.data[0];
                if(title->type != GUMBO_NODE_TEXT && title->type != GUMBO_NODE_WHITESPACE)
                {
                    t2PrintError("标题只可为空或文字");
                    return;
                }

                t2Window::getInstance()->window->setTitle(title->v.text.text);
            }
            // find css file
            else if(child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_LINK)
            {
                GumboAttribute *href = gumbo_get_attribute(&child->v.element.attributes, "href");
                if(!href)
                    t2PrintError("<link>缺失href属性");

                cssFilePaths.push_back(href->value);
            }
        }
    }
示例#4
0
文件: t2Image.cpp 项目: H1N2/TattyUI
    bool t2Image::loadImage(string path)
    {
        img = nvgCreateImage(t2GetContext(), path.c_str(), 0);

        if(!img)
        {
            bLoaded = false;
            t2PrintError("图片读取失败,可能是路径有误");
            return false;
        }
        else
        {
            bLoaded = true;
            nvgImageSize(t2GetContext(), img, &width, &height);
            return true;
        }
    }
示例#5
0
    void t2LayoutController::updateDiv(t2Div* div, bool bCondition)
    {
        if(div->parent)
        {
            switch(div->parent->layout)
            {
            case T2_LINEAR_LAYOUT:
                linearLayout(div, bCondition);
                break;
            case T2_LIST_LAYOUT:
                listLayout(div, bCondition);
                break;

            default:
                t2PrintError("错误布局代码");
                break;
            }
        }
        // 根节点默认为线性布局
        else
            linearLayout(div);
    }