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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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一区二区三区免费野_久草精品视频
午夜a成v人精品| 中文字幕亚洲精品在线观看| 五月天亚洲婷婷| 欧美精品v日韩精品v韩国精品v| 日韩美女久久久| 色诱亚洲精品久久久久久| 一区二区三区av电影| 欧美午夜精品久久久久久超碰| 天天综合色天天综合色h| 日韩精品在线看片z| 国产91精品一区二区麻豆网站 | 91在线播放网址| 亚洲综合丁香婷婷六月香| 欧美日韩一区二区电影| 精品影视av免费| 国产精品色在线| 欧美性欧美巨大黑白大战| 精品一区二区在线视频| 国产精品美女久久福利网站| 欧美这里有精品| 黄一区二区三区| 亚洲少妇最新在线视频| 正在播放亚洲一区| 成人午夜电影久久影院| 亚洲成av人片一区二区| 久久女同精品一区二区| 91免费在线播放| 免费高清视频精品| 亚洲欧美日韩国产中文在线| 91精品国产高清一区二区三区| 国产·精品毛片| 性做久久久久久久久| 久久亚洲精华国产精华液| 色久综合一二码| 国产精品一区二区久久不卡 | 亚洲天堂精品视频| 日韩亚洲欧美中文三级| 99久久精品99国产精品| 久久精品99国产国产精| 亚洲激情欧美激情| 久久久久综合网| 欧美丰满高潮xxxx喷水动漫| 成av人片一区二区| 久久99精品久久久久久国产越南 | 成人久久18免费网站麻豆| 日韩不卡一二三区| 亚洲天堂久久久久久久| 国产丝袜欧美中文另类| 日韩小视频在线观看专区| 欧美一a一片一级一片| 成人国产精品免费网站| 捆绑调教一区二区三区| 亚洲电影你懂得| 亚洲美女免费在线| 国产精品电影一区二区三区| 久久久久久一级片| 精品欧美一区二区三区精品久久| 欧美午夜电影网| 91视频在线观看免费| 国产成人精品免费视频网站| 久久成人久久爱| 老司机精品视频导航| 日韩精品视频网站| 亚洲成a人在线观看| 亚洲国产综合在线| 亚洲精品中文字幕在线观看| **网站欧美大片在线观看| 午夜伦理一区二区| 亚洲国产视频在线| 一区二区三区在线观看动漫| 亚洲视频在线一区二区| 国产精品第13页| 日韩毛片一二三区| 国产精品女上位| 国产精品对白交换视频| 最近日韩中文字幕| 亚洲欧美精品午睡沙发| 亚洲精品成人悠悠色影视| 亚洲美女视频在线观看| 一区二区三区在线不卡| 午夜婷婷国产麻豆精品| 视频在线在亚洲| 久久66热偷产精品| 国产精品亚洲视频| yourporn久久国产精品| 99国产精品久久| 欧美性欧美巨大黑白大战| 欧美日韩国产首页| 欧美一区二区三区在线电影| 亚洲精品一区二区三区福利 | 欧美国产一区二区| 国产精品视频一二| 伊人夜夜躁av伊人久久| 亚洲国产日韩av| 蜜桃精品视频在线| 国产精品白丝jk白祙喷水网站| 国产白丝网站精品污在线入口| proumb性欧美在线观看| 欧美天堂亚洲电影院在线播放| 欧美日韩国产首页在线观看| 2022国产精品视频| 国产精品国模大尺度视频| 亚洲免费三区一区二区| 丝袜a∨在线一区二区三区不卡| 极品少妇一区二区| 成人激情午夜影院| 欧美日韩大陆一区二区| 精品久久99ma| 亚洲丝袜精品丝袜在线| 首页国产欧美日韩丝袜| 国产成人精品一区二区三区四区 | 日韩成人免费电影| 国产大片一区二区| 在线观看日韩精品| 精品免费视频.| 综合分类小说区另类春色亚洲小说欧美| 亚洲电影在线免费观看| 狠狠狠色丁香婷婷综合激情| 日本韩国一区二区| 国产视频一区不卡| 午夜精品久久久久久| 成人自拍视频在线| 制服丝袜在线91| 国产精品超碰97尤物18| 蜜臀99久久精品久久久久久软件| 99国产欧美另类久久久精品| 日韩精品一区二区三区老鸭窝| 亚洲精品伦理在线| 国产精品主播直播| 91麻豆精品国产自产在线| 日韩毛片高清在线播放| 免费成人你懂的| 欧美性三三影院| 亚洲视频网在线直播| 黄色日韩三级电影| 欧美日韩你懂得| 亚洲欧美综合在线精品| 国产精品亚洲一区二区三区妖精| 欧美群妇大交群中文字幕| 亚洲日本在线观看| 国产福利一区二区三区视频| 91精品国产一区二区三区香蕉 | 天天亚洲美女在线视频| 99久久伊人网影院| 国产亚洲欧美色| 久久精品国产亚洲a| 欧美丰满嫩嫩电影| 一级做a爱片久久| 91免费观看国产| 国产精品日韩精品欧美在线| 国产一区二区精品久久| 日韩欧美在线网站| 亚洲成人三级小说| 欧美影院一区二区| 夜色激情一区二区| 在线免费观看成人短视频| 中文字幕一区二区视频| 国产成人丝袜美腿| 久久品道一品道久久精品| 国内精品自线一区二区三区视频| 欧美大片在线观看一区| 日韩和欧美的一区| 91精品福利在线一区二区三区| 性做久久久久久| 91精品国产手机| 日韩精品欧美精品| 日韩一级二级三级精品视频| 视频一区二区中文字幕| 欧美美女一区二区| 日韩福利电影在线观看| 日韩欧美不卡在线观看视频| 免费在线观看精品| 日韩三级av在线播放| 美国毛片一区二区| 久久―日本道色综合久久| 国产精品香蕉一区二区三区| 国产欧美精品国产国产专区| 国产成人av电影免费在线观看| 国产精品三级av在线播放| 91视频在线观看| 亚洲第一在线综合网站| 91精品国产色综合久久ai换脸 | 欧美日本韩国一区二区三区视频 | 精品视频免费看| 男人的天堂久久精品| 久久九九国产精品| 99久久国产综合精品麻豆| 亚洲综合男人的天堂| 欧美精品在线视频| 久久91精品国产91久久小草| 国产日产精品1区| 色狠狠桃花综合| 免费观看在线综合色| 久久久久久久久岛国免费| av在线免费不卡| 亚洲成av人片一区二区梦乃| 久久伊人中文字幕| 色婷婷综合中文久久一本| 午夜成人免费视频| 国产亚洲一二三区|