青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

l

成都手游碼農一枚
隨筆 - 32, 文章 - 0, 評論 - 117, 引用 - 0
數據加載中……

[cocos2d-x]將ccb場景的plist文件轉換為lua的table格式。

//僅僅是一個練手,無實質性作用

#include "stdafx.h"

enum ValueType
{
    VT_NONE,
    VT_VALUE,    /* real integer true false  */
    VT_STRING, 
    VT_DICT,
    VT_ARRAY,
};

class CBaseValue
{
public:
    CBaseValue(ValueType vt)
        : m_eType(vt)
    {

    }

    virtual std::string toString() = 0;

    virtual ~CBaseValue()
    {
    }

protected:
    ValueType m_eType;
};

class CValue : public CBaseValue
{
public:
    CValue(const std::string& value)
        : CBaseValue(VT_VALUE)
        , m_sValue(value)
    {
    }

    std::string toString()
    {
        return m_sValue;
    }

protected:
    std::string m_sValue;
};

class CString : public CBaseValue
{
public:
    CString(const std::string& value)
        : CBaseValue(VT_STRING)
        , m_sValue("\"" + value + "\"")
    {
    }

    std::string toString()
    {
        return m_sValue;
    }

protected:
    std::string m_sValue;
};

class CArray : public CBaseValue
{
public:
    CArray(int depth = 0)
        : CBaseValue(VT_ARRAY)
        , m_nDepth(depth)
    {
    }

    ~CArray()
    {
        std::for_each(m_aValues.begin(), m_aValues.end(), [](CBaseValue* value)
        {
            delete value;
        });
    }

    void add(CBaseValue* value)
    {
        m_aValues.push_back(value);
    }

    std::string toString()
    {
        std::string prefix(m_nDepth, '\t');
        std::string text = "{\n";
        prefix.push_back('\t');
        std::for_each(m_aValues.begin(), m_aValues.end(), [&](CBaseValue* value)
        {
            text += prefix + value->toString() + ",\n";
        });
        prefix.pop_back();
        text += prefix + "}";

        return text;
    }

protected:
    int m_nDepth;
    std::vector<CBaseValue*>  m_aValues;
};

class CDict : public CBaseValue
{
public:
    CDict(int depth = 0)
        : CBaseValue(VT_DICT)
        , m_nDepth(depth)
    {
    }

    ~CDict()
    {
        std::for_each(m_mapValues.begin(), m_mapValues.end(), [](std::pair<std::string, CBaseValue*> keyValue)
        {
            delete keyValue.second;
        });
    }

    void add(const std::string& key, CBaseValue* value)
    {
        m_mapValues.insert(std::make_pair(key, value));
    }

    std::string toString()
    {
        std::string prefix(m_nDepth, '\t');
        std::string text = "{\n";
        prefix.push_back('\t');
        std::for_each(m_mapValues.begin(), m_mapValues.end(), [&](const std::pair<std::string, CBaseValue*> keyValue)
        {
            text += prefix + keyValue.first + " = ";
            text += keyValue.second->toString() + ",\n";
        });
        prefix.pop_back();
        text += prefix + "}";

        return text;
    }

protected:
    int m_nDepth;
    std::map<std::string, CBaseValue*>  m_mapValues;
};

CArray* parseArray(pugi::xml_node& node, int depth = 0);
CDict* parseDict(pugi::xml_node& node, int depth = 0);

CBaseValue* parseValue(pugi::xml_node& node, int depth = 0)
{
    std::string name = node.name();

    if (name == "real" || name == "integer")
    {
        return new CValue(node.text().get());
    }
    else if (name == "true")
    {
        return new CValue("true");
    }
    else if (name == "false")
    {
        return new CValue("false");
    }
    else if (name == "string")
    {
        return new CString(node.text().get());
    }
    else if (name == "array")
    {
        return parseArray(node, depth + 1);
    }
    else if (name == "dict")
    {
        return parseDict(node, depth + 1);
    }
    else
    {
        assert(false && "error type");
    }
    return NULL;
}

CArray* parseArray(pugi::xml_node& node, int depth)
{
    CArray* array = new CArray(depth);

    for (auto i = node.begin(); i != node.end(); )
    {
        /* value */
        assert(i != node.end());
        CBaseValue* value = parseValue(*i, depth);

        ++i;

        array->add(value);
    }

    return array;
}

CDict* parseDict(pugi::xml_node& node, int depth)
{
    CDict* dict = new CDict(depth);

    for (auto i = node.begin(); i != node.end(); )
    {
        /* key */
        assert(i->name() == std::string("key"));
        std::string key = std::string("[\"") + i->text().get() + "\"]";

        ++i;

        /* value */
        assert(i != node.end());
        CBaseValue* value = parseValue(*i, depth);

        ++i;

        dict->add(key, value);
    }

    return dict;
}

CDict* parseCCB(const std::string& filename)
{
    pugi::xml_document doc;

    if (doc.load_file(filename.c_str()))
    {
        auto plist = doc.child("plist");
        
        /* <plist> == <dict> */
        if (plist)
        {
            return parseDict(plist.child("dict"));
        }
    }

    return NULL;
}

bool ccbToLua(const std::string& filename, std::ostream& os = std::cout)
{
    CDict* dict = parseCCB(filename);
    if (dict)
    {
        os << "return" << std::endl;
        os << dict->toString() << std::endl;
        delete dict;
    }

    return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::ofstream os("test.out.lua");
    ccbToLua("test.ccb", os);
    os.close();
    return 0;
}

posted on 2013-07-01 23:55 l1989 閱讀(1358) 評論(0)  編輯 收藏 引用 所屬分類: C++游戲

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情成人在线视频| 亚洲人精品午夜| 久久免费高清| 久久精品亚洲一区二区| 性色av一区二区三区| 欧美一区二区三区视频| 久久国产色av| 麻豆成人在线观看| 欧美激情一二三区| 国产精品第三页| 国模私拍一区二区三区| 亚洲高清一区二| 一本色道久久88综合亚洲精品ⅰ| 香蕉亚洲视频| 久久精品国产一区二区电影| 欧美一区二区三区四区视频| 久久久www成人免费无遮挡大片| 久久亚洲精品一区| 欧美激情一二区| 亚洲私拍自拍| 久久一本综合频道| 欧美日韩另类在线| 国模精品一区二区三区| 亚洲精品女av网站| 欧美一区二区在线看| 欧美国产91| 午夜欧美大片免费观看| 欧美国产日韩视频| 国产一区二区三区四区| 亚洲免费电影在线| 久久久久在线| 亚洲一区二区成人| 欧美 日韩 国产精品免费观看| 国产精品v片在线观看不卡| 一区二区三区亚洲| 欧美亚洲视频在线观看| 91久久精品国产91性色tv| 亚洲影院色无极综合| 女人香蕉久久**毛片精品| 国产亚洲欧美一区在线观看| 一区电影在线观看| 欧美成人性网| 欧美综合国产| 国产精品日韩一区| 亚洲视频图片小说| 亚洲福利av| 久久在线观看视频| 激情欧美日韩| 久久久91精品国产一区二区精品| 亚洲精品久久久一区二区三区| 欧美一区二区高清在线观看| 欧美视频精品一区| 日韩一级成人av| 亚洲国产精品成人| 久久中文在线| 亚洲国产精品一区| 蜜臀久久99精品久久久久久9 | 国产欧美日韩一区二区三区| 9人人澡人人爽人人精品| 欧美成人亚洲| 六十路精品视频| 亚洲第一久久影院| 蜜臀av性久久久久蜜臀aⅴ| 欧美在线免费视屏| 伊人久久男人天堂| 欧美大片免费观看| 欧美77777| 亚洲免费观看视频| 亚洲精选91| 国产精品亚洲视频| 久久久爽爽爽美女图片| 午夜精品久久久久久久99水蜜桃| 国产精品久久久久久久午夜片| 一区二区精品在线观看| 99视频精品全国免费| 欧美日韩视频在线一区二区观看视频 | 亚洲欧美激情视频| 宅男66日本亚洲欧美视频| 国产精品v欧美精品v日韩精品| 亚洲一区www| 欧美在线视频播放| 亚洲国产精选| 亚洲免费观看高清完整版在线观看熊| 欧美视频第二页| 久久精品国产久精国产一老狼| 久久精品综合网| 亚洲美女少妇无套啪啪呻吟| 中文国产成人精品| 在线成人国产| 日韩一级在线| 国产色爱av资源综合区| 欧美成人黄色小视频| 欧美日韩人人澡狠狠躁视频| 欧美在线观看你懂的| 蜜臀久久99精品久久久久久9| 亚洲午夜激情网站| 久久久夜色精品亚洲| 亚洲婷婷综合久久一本伊一区| 欧美一级视频精品观看| 99在线精品视频在线观看| 欧美一级黄色录像| 这里是久久伊人| 久久一区二区视频| 亚洲淫性视频| 嫩草国产精品入口| 欧美一区二区在线免费播放| 欧美福利视频在线观看| 久久国产一区二区| 欧美三级电影精品| 亚洲国产精品久久久久秋霞影院 | 亚洲一区二三| 亚洲精品视频在线播放| 香蕉免费一区二区三区在线观看| 99香蕉国产精品偷在线观看| 久久精品国产77777蜜臀| 一区二区精品国产| 久久综合久久美利坚合众国| 午夜伦欧美伦电影理论片| 欧美国产日韩a欧美在线观看| 久久国产精品久久w女人spa| 欧美日韩国产一区二区三区地区| 久久蜜臀精品av| 国产精品高精视频免费| 亚洲精品资源| 亚洲精选在线| 免费观看30秒视频久久| 久久国产精品久久久久久久久久| 久久久久国产精品麻豆ai换脸| 欧美chengren| 狼人天天伊人久久| 国产精品你懂的在线欣赏| 亚洲精品视频一区| 亚洲国产一区二区三区在线播 | 在线观看亚洲精品视频| 午夜视频在线观看一区二区三区| 国产精品99久久99久久久二8| 欧美不卡一卡二卡免费版| 葵司免费一区二区三区四区五区| 国产美女精品视频| 亚洲男人的天堂在线| 香蕉乱码成人久久天堂爱免费 | 99视频一区二区| 欧美国产综合一区二区| 最新高清无码专区| 一本久久精品一区二区| 欧美精品一区二区三区很污很色的 | 欧美日韩一区高清| 在线视频精品| 午夜精品久久久久久久99黑人| 欧美午夜寂寞影院| 亚洲一区日韩在线| 久久精品99无色码中文字幕| 国内自拍一区| 蜜桃久久精品乱码一区二区| 亚洲黄色av| 亚洲视频在线观看免费| 国产精品久久久久久av下载红粉 | 亚洲激情精品| 中文精品视频| 国产日韩一区二区三区在线| 久久久久.com| 亚洲三级电影全部在线观看高清| 中文一区二区| 国产性做久久久久久| 久久亚洲捆绑美女| 亚洲精品一区二区三区99| 午夜精品视频网站| 在线观看亚洲视频| 欧美日韩成人综合| 午夜激情久久久| 欧美激情国产高清| 性欧美1819sex性高清| 一区免费观看视频| 欧美日韩一区免费| 久久久另类综合| 亚洲视频网在线直播| 久久精品91久久香蕉加勒比| 亚洲精品国产精品乱码不99按摩| 国产精品久久二区二区| 久久久久综合| 一区二区三区色| 欧美电影免费观看| 欧美一区二区三区另类 | 久久精品免费观看| 夜久久久久久| 亚洲一区二区三区成人在线视频精品| 免费日本视频一区| 136国产福利精品导航| 欧美视频网址| 久久久视频精品| 亚洲私人黄色宅男| 亚洲人成人99网站| 美女日韩欧美| 欧美在线精品免播放器视频| 日韩视频永久免费观看| 精品成人一区二区三区四区| 国产精品午夜视频| 欧美性猛片xxxx免费看久爱 | 亚洲美女性视频| 激情国产一区|