亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gameswf_xml.cpp

?? 一個開源的嵌入式flash播放器 具體看文檔和例子就可
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// gameswf_xml.h      -- Rob Savoye <rob@welcomehome.org> 2005// This source code has been donated to the Public Domain.  Do// whatever you want with it.#include <sys/types.h>#include <sys/stat.h>#include "gameswf_log.h"#include "gameswf_action.h"#include "gameswf_impl.h"#include "gameswf_log.h"#include "base/smart_ptr.h"#include "gameswf_string.h"#include "base/tu_config.h"#ifdef HAVE_LIBXML#include <unistd.h>#include "gameswf_xml.h"#include <libxml/xmlmemory.h>#include <libxml/parser.h>#include <libxml/xmlreader.h>namespace gameswf{    //#define DEBUG_MEMORY_ALLOCATION 1  array<as_object *> _xmlobjs;    // FIXME: hack alertXMLAttr::XMLAttr(){#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("\t\tCreating XMLAttr data at %p \n", this);#endif  _name = 0;  _value = 0;}XMLAttr::~XMLAttr(){#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("\t\tDeleting XMLAttr data %s at %p \n", this->_name, this);#endif  //log_msg("%s: %p \n", __FUNCTION__, this);  if (_name) {    delete _name;  }  if (_value) {    delete _value;  }  }  XMLNode::XMLNode(){  //log_msg("%s: %p \n", __FUNCTION__, this);#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("\tCreating XMLNode data at %p \n", this);#endif  _name = 0;  _value = 0;}XMLNode::~XMLNode(){  int i;  //log_msg("%s: %p \n", __FUNCTION__, this);#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("\tDeleting XMLNode data %s at %p\n", this->_name, this);#endif    for (i=0; i<_children.size(); i++) {//     if (_children[i]->_name) {//       delete _children[i]->_name;//     }//     if (_children[i]->_value) {//       delete _children[i]->_value;//     }    delete _children[i];  }  for (i=0; i<_attributes.size(); i++) {    //     if (_attributes[i]->_name) {//       delete _attributes[i]->_name;//     }//     if (_attributes[i]->_value) {//       delete _attributes[i]->_value;//     }    delete _attributes[i];  }  _children.clear();  _attributes.clear();  if (_name) {    delete _name;  }  if (_value) {    delete _value;  }  //  _value.set_undefined();}XML::XML(){#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("Creating XML data at %p \n", this);#endif  //log_msg("%s: %p \n", __FUNCTION__, this);  _loaded = false;  _nodename = 0;}// Parse the ASCII XML string into memoryXML::XML(tu_string xml_in){#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("Creating XML data at %p \n", this);#endif  //log_msg("%s: %p \n", __FUNCTION__, this);  //memset(&_nodes, 0, sizeof(XMLNode));  parseXML(xml_in);}XML::XML(struct node *childNode){#ifdef DEBUG_MEMORY_ALLOCATION  log_msg("\tCreating XML data at %p \n", this);#endif  //log_msg("%s: %p \n", __FUNCTION__, this);}XML::~XML(){#ifdef DEBUG_MEMORY_ALLOCATION  if (this->_nodes) {    log_msg("\tDeleting XML top level node %s at %p \n", this->_nodes->_name, this);  } else {    log_msg("\tDeleting XML top level node at %p \n", this);  }#endif    //log_msg("%s: %p \n", __FUNCTION__, this);  delete _nodes;}// Dispatch event handler(s), if any.boolXML::on_event(event_id id){  // Keep m_as_environment alive during any method calls!  //  smart_ptr<as_object_interface>	this_ptr(this);  #if 0  // First, check for built-in event handler.  as_value	method;  if (get_event_handler(event_id(id), &method))    {/      // Dispatch.      call_method0(method, &m_as_environment, this);          return true;    }    // Check for member function.  // In ActionScript 2.0, event method names are CASE SENSITIVE.  // In ActionScript 1.0, event method names are CASE INSENSITIVE.  const tu_string&	method_name = id.get_function_name();  if (method_name.length() > 0)hostByNameGet    {      as_value	method;      if (get_member(method_name, &method))        {          call_method0(method, &m_as_environment, this);          return true;        }    }#endif  return false;}voidXML::on_event_load(){  // Do the events that (appear to) happen as the movie  // loads.  frame1 tags and actions are executed (even  // before advance() is called).  Then the onLoad event  // is triggered.  {    on_event(event_id::LOAD);  }}XMLNode*XML::extractNode(xmlNodePtr node, bool mem){  xmlAttrPtr attr;  xmlNodePtr childnode;  xmlChar *ptr = NULL;  XMLNode *element, *child;  int len;  element = new XMLNode;              //log_msg("Created new element for %s at %p\n", node->name, element);  memset(element, 0, sizeof (XMLNode));  //log_msg("%s: extracting node %s\n", __FUNCTION__, node->name);  // See if we have any Attributes (properties)  attr = node->properties;  while (attr != NULL) {    //log_msg("extractNode %s has property %s, value is %s\n",    //          node->name, attr->name, attr->children->content);    XMLAttr *attrib = new XMLAttr;    len = memadjust(strlen(reinterpret_cast<const char *>(attr->name))+1);    attrib->_name = (char *)new char[len];    memset(attrib->_name, 0, len);    strcpy(attrib->_name, reinterpret_cast<const char *>(attr->name));    len = memadjust(strlen(reinterpret_cast<const char *>(attr->children->content))+1);    attrib->_value = (char *)new char[len];    memset(attrib->_value, 0, len);    strcpy(attrib->_value, reinterpret_cast<const char *>(attr->children->content));    //log_msg("\tPushing attribute %s for element %s has value %s\n",    //        attr->name, node->name, attr->children->content);    element->_attributes.push_back(attrib);    attr = attr->next;  }  len = memadjust(strlen(reinterpret_cast<const char *>(node->name))+1);  element->_name = (char *)new char[len];  memset(element->_name, 0, len);  strcpy(element->_name, reinterpret_cast<const char *>(node->name));  //element->_name = reinterpret_cast<const char *>(node->name);  if (node->children) {    //ptr = node->children->content;    ptr = xmlNodeGetContent(node->children);    if (ptr != NULL) {      if ((strchr((const char *)ptr, '\n') == 0) && (ptr[0] != 0))      {        if (node->children->content == NULL) {          //log_msg("Node %s has no contents\n", node->name);        } else {          //log_msg("extractChildNode from text for %s has contents %s\n", node->name, ptr);          len = memadjust(strlen(reinterpret_cast<const char *>(ptr))+1);          element->_value = (char *)new char[len];          memset(element->_value, 0, len);          strcpy(element->_value, reinterpret_cast<const char *>(ptr));          //element->_value = reinterpret_cast<const char *>(ptr);        }      }      xmlFree(ptr);    }  }  // See if we have any data (content)  childnode = node->children;  while (childnode != NULL) {    if (childnode->type == XML_ELEMENT_NODE) {      //log_msg("\t\t extracting node %s\n", childnode->name);      child = extractNode(childnode, mem);      //if (child->_value.get_type() != as_value::UNDEFINED) {      if (child->_value != 0) {        //log_msg("\tPushing childNode %s, value %s on element %p\n", child->_name.c_str(), child->_value.to_string(), element);      } else {        //log_msg("\tPushing childNode %s on element %p\n", child->_name.c_str(), element);      }      element->_children.push_back(child);    }    childnode = childnode->next;  }  return element;}// Read in an XML document from the specified sourceboolXML::parseDoc(xmlDocPtr document, bool mem){  XMLNode *top;  xmlNodePtr cur;  if (document == 0) {    log_error("Can't load XML file!\n");    return false;  }  cur = xmlDocGetRootElement(document);    if (cur != NULL) {    top = extractNode(cur, mem);    //_nodes->_name = reinterpret_cast<const char *>(cur->name);    _nodes = top;    //_node_data.push_back(top);    //cur = cur->next;  }    _loaded = true;  return true;}// This reads in an XML file from disk and parses into into a memory resident// tree which can be walked through later.boolXML::parseXML(tu_string xml_in){  bool ret = true;  //log_msg("Parse XML from memory: %s\n", xml_in.c_str());  if (xml_in.size() == 0) {    log_error("XML data is empty!\n");    return false;  }#ifndef USE_DMALLOC  //dump_memory_stats(__FUNCTION__, __LINE__, "before xmlParseMemory");#endif#ifdef USE_XMLREADER  XMLNode *node = 0;  xmlTextReaderPtr reader;  reader = xmlReaderForMemory(xml_in.c_str(), xml_in.size(), NULL, NULL, 0);  if (reader != NULL) {    ret = true;    while (ret) {      ret = xmlTextReaderRead(reader);      node = processNode(reader, node);    }    xmlFreeTextReader(reader);    if (ret != false) {      log_error("%s : couldn't parse\n", xml_in.c_str());      return false;    }  } else {    log_error("Unable to open %s\n", xml_in.c_str());      return false;  }  xmlCleanupParser();  return true;#else#ifdef USE_DOM  xmlInitParser();    _doc = xmlParseMemory(xml_in.c_str(), xml_in.size());  if (_doc == 0) {    log_error("Can't parse XML data!\n");    return false;  }  ret = parseDoc(_doc, true);  xmlCleanupParser();  xmlFreeDoc(_doc);  xmlMemoryDump();#endif#ifndef USE_DMALLOC  //dump_memory_stats(__FUNCTION__, __LINE__, "after xmlParseMemory");#endif  return ret;#endif  }//     XML_READER_TYPE_NONE = 0//     XML_READER_TYPE_ELEMENT = 1,//     XML_READER_TYPE_ATTRIBUTE = 2,//     XML_READER_TYPE_TEXT = 3,//     XML_READER_TYPE_COMMENT = 8,//     XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,//     XML_READER_TYPE_END_ELEMENT = 15,//// processNode:// 2 1 IP 0// processNode:// 3 3 #text 0 192.168.2.50// processNode:// 2 15 IP 0// processNode:// 2 14 #text 0const char *tabs[] = {  "",  "\t",  "\t\t",  "\t\t\t",  "\t\t\t",  "\t\t\t\t",};#ifdef USE_XMLREADER// This is an xmlReader (SAX) based parser. For some reason it core dumps// when compiled with GCC 3.x, but works just fine with GCC 4.x.XMLNode*XML::processNode(xmlTextReaderPtr reader, XMLNode *node){  //log_msg("%s: node is %p\n", __FUNCTION__, node);  static XMLNode *parent[10];  xmlChar *name, *value;  int   depth;  XMLNode *element;  //static int previous_depth = 0;  xmlReaderTypes type;  if (node == 0) {    memset(parent, 0, sizeof(XMLNode *));  }  type = (xmlReaderTypes)xmlTextReaderNodeType(reader);  depth = xmlTextReaderDepth(reader);  value = xmlTextReaderValue(reader);  name = xmlTextReaderName(reader);    if (name == NULL)    name = xmlStrdup(BAD_CAST "--");#if 0  printf("%d %d %s %d\n",         depth,         (int)type,         name,         xmlTextReaderIsEmptyElement(reader));  #endif    //child = node->_children[0];  switch(xmlTextReaderNodeType(reader)) {  case XML_READER_TYPE_NONE:    break;  case XML_READER_TYPE_SIGNIFICANT_WHITESPACE: // This is an empty text node    //log_msg("\tWhitespace at depth %d\n", depth);    break;  case XML_READER_TYPE_END_ELEMENT:     if (depth == 0) {          // This is the last node in the file       element = node;       break;     }     parent[depth]->_children.push_back(element);//       log_msg("Pushing element %s on node %s\n", node->_name, parent[depth]->_name);//       log_msg("End element at depth %d is %s for parent %s %p\n", depth, name,//               parent[depth]->_name, parent[depth]);     element = parent[depth];    break;  case XML_READER_TYPE_ELEMENT:    element = new XMLNode;//      log_msg("%sElement at depth %d is %s for node at %p\n", tabs[depth], depth, name, element);    element->_name = (char *)new char[strlen(reinterpret_cast<const char *>(name))+1];    memset(element->_name, 0, strlen(reinterpret_cast<const char *>(name))+1);    strcpy(element->_name, reinterpret_cast<const char *>(name));    if (node == 0) {      _nodes = element;      parent[0] = element;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美天天综合网| 国产精品水嫩水嫩| 亚洲成av人在线观看| 99精品欧美一区| 一区二区三区影院| 欧美日韩综合在线| 香蕉乱码成人久久天堂爱免费| 欧美伊人久久久久久午夜久久久久| 亚洲激情一二三区| 欧美日韩国产美女| 日本美女视频一区二区| 日韩免费电影一区| 老司机精品视频一区二区三区| 精品成人佐山爱一区二区| 成人在线视频一区二区| 亚洲综合色噜噜狠狠| 在线不卡中文字幕| 国产一区二区在线观看视频| 国产精品久久夜| 欧美性videosxxxxx| 免费人成精品欧美精品| 国产亚洲成年网址在线观看| www.视频一区| 日产国产欧美视频一区精品| 欧美tk丨vk视频| 91麻豆123| 日韩—二三区免费观看av| 久久女同性恋中文字幕| 色综合久久久久综合体| 天天影视涩香欲综合网| 久久精品一区二区三区av| 日本高清不卡在线观看| 黑人精品欧美一区二区蜜桃 | 136国产福利精品导航| 在线亚洲免费视频| 国产一区二区调教| 亚洲一区二区欧美| 国产午夜精品一区二区三区嫩草| 色综合久久中文字幕| 国产麻豆91精品| 亚洲国产色一区| 国产精品无圣光一区二区| 91精品国产麻豆国产自产在线| 国产精品18久久久久久久久 | 麻豆成人91精品二区三区| 国产精品免费人成网站| 欧美一区二区在线免费播放| 高清不卡一区二区| 久久精品国产一区二区三区免费看| 国产精品二三区| 欧美精品一区二区在线播放 | 日韩写真欧美这视频| 色综合色综合色综合| 国产成人免费9x9x人网站视频| 五月天网站亚洲| 自拍av一区二区三区| 国产亚洲精品aa午夜观看| 日韩免费高清视频| 91精品在线免费| 欧美亚洲图片小说| 99精品欧美一区二区三区小说| 国产精品一二三区在线| 青青青伊人色综合久久| 一区二区三区四区蜜桃| 中文字幕中文字幕一区二区 | 国产精品视频你懂的| 欧美成人福利视频| 国产精品夜夜爽| 久久精品国产成人一区二区三区| 香蕉久久夜色精品国产使用方法| 亚洲最新在线观看| 亚洲色图都市小说| 日韩毛片高清在线播放| 国产精品乱码久久久久久| 久久看人人爽人人| xf在线a精品一区二区视频网站| 91麻豆精品国产91久久久使用方法| 色悠久久久久综合欧美99| caoporn国产精品| 99视频有精品| 91视频91自| 日本韩国欧美三级| 在线观看一区二区视频| 在线观看区一区二| 欧美人与禽zozo性伦| 欧美日韩一区二区在线观看视频| 欧洲精品在线观看| 欧美喷水一区二区| 欧美va天堂va视频va在线| 26uuu精品一区二区在线观看| 久久天天做天天爱综合色| 国产亚洲精品福利| 国产精品久久久久7777按摩| 亚洲视频狠狠干| 亚洲国产日韩a在线播放性色| 亚洲va韩国va欧美va| 蜜臀a∨国产成人精品| 久久不见久久见中文字幕免费| 精彩视频一区二区三区| 国产91精品久久久久久久网曝门| 国产91综合网| 日本乱人伦aⅴ精品| 欧洲人成人精品| 日韩写真欧美这视频| 久久久久久久久久久久电影 | 91日韩精品一区| 欧美体内she精视频| 日韩精品一区二区在线观看| 国产日韩欧美电影| 亚洲成在人线在线播放| 免费在线一区观看| 春色校园综合激情亚洲| 色吧成人激情小说| 欧美www视频| 一区二区三区在线视频播放| 日韩极品在线观看| 成人精品亚洲人成在线| 欧美影片第一页| 久久精品欧美日韩精品| 亚洲精品视频在线观看网站| 奇米影视一区二区三区| 成人18视频日本| 欧美日韩aaaaaa| 国产精品国产三级国产有无不卡 | 亚洲福利视频一区| 国产一区在线看| 在线观看视频一区| 精品久久久久久久人人人人传媒| 国产精品久久二区二区| 精品在线你懂的| 91福利社在线观看| 国产亚洲午夜高清国产拍精品| 怡红院av一区二区三区| 国产精品一区二区91| 欧美日韩高清在线| 中文字幕一区二区日韩精品绯色| 日韩精品免费专区| 91麻豆国产香蕉久久精品| 久久久久久久久久久黄色| 亚洲国产日韩a在线播放性色| 国产电影一区二区三区| 欧美一区二区日韩一区二区| 亚洲色图清纯唯美| 国产69精品一区二区亚洲孕妇| 7777精品伊人久久久大香线蕉 | 亚洲精品乱码久久久久久久久| 韩国一区二区在线观看| 欧美精品123区| 一区二区三区视频在线观看| 国产成人av电影| 久久午夜电影网| 蜜臀久久99精品久久久久久9| 一本色道久久加勒比精品| 中文字幕不卡在线播放| 极品销魂美女一区二区三区| 88在线观看91蜜桃国自产| 亚洲二区视频在线| 色综合中文字幕国产| 日韩欧美在线影院| 偷拍日韩校园综合在线| 欧美写真视频网站| 亚洲午夜成aⅴ人片| 色天天综合久久久久综合片| 中文字幕免费在线观看视频一区| 国产在线看一区| 日韩精品中文字幕一区二区三区| 亚洲综合色噜噜狠狠| 在线观看日产精品| 亚洲h精品动漫在线观看| 91精品1区2区| 亚洲综合色噜噜狠狠| 色婷婷综合在线| 亚洲一区二区三区四区在线| 一本色道久久综合精品竹菊| 一区二区三区**美女毛片| 91免费精品国自产拍在线不卡| 国产精品嫩草久久久久| 99久久国产免费看| 亚洲欧洲国产专区| 色婷婷久久综合| 亚洲国产综合色| 91精品麻豆日日躁夜夜躁| 日本欧美在线观看| 欧美一级欧美三级| 九九视频精品免费| 国产欧美一区二区精品婷婷| 高清av一区二区| 亚洲色图第一区| 欧美福利视频导航| 久久99精品久久久久久国产越南| 欧美大胆人体bbbb| 国产成人高清在线| 一区二区三区波多野结衣在线观看| 欧美在线高清视频| 日韩不卡一区二区三区| 2024国产精品| 在线看一区二区| 国产精品69毛片高清亚洲| 亚洲精品欧美在线| 日韩西西人体444www|