⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlwf.c

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd   See the file COPYING for copying permission.*/#include <stdio.h>#include <stdlib.h>#include <stddef.h>#include <string.h>#include "expat.h"#include "codepage.h"#include "xmlfile.h"#include "xmltchar.h"#ifdef _MSC_VER#include <crtdbg.h>#endif/* This ensures proper sorting. */#define NSSEP T('\001')static voidcharacterData(void *userData, const XML_Char *s, int len){  FILE *fp = userData;  for (; len > 0; --len, ++s) {    switch (*s) {    case T('&'):      fputts(T("&amp;"), fp);      break;    case T('<'):      fputts(T("&lt;"), fp);      break;    case T('>'):      fputts(T("&gt;"), fp);      break;#ifdef W3C14N    case 13:      fputts(T("&#xD;"), fp);      break;#else    case T('"'):      fputts(T("&quot;"), fp);      break;    case 9:    case 10:    case 13:      ftprintf(fp, T("&#%d;"), *s);      break;#endif    default:      puttc(*s, fp);      break;    }  }}static voidattributeValue(FILE *fp, const XML_Char *s){  puttc(T('='), fp);  puttc(T('"'), fp);  for (;;) {    switch (*s) {    case 0:    case NSSEP:      puttc(T('"'), fp);      return;    case T('&'):      fputts(T("&amp;"), fp);      break;    case T('<'):      fputts(T("&lt;"), fp);      break;    case T('"'):      fputts(T("&quot;"), fp);      break;#ifdef W3C14N    case 9:      fputts(T("&#x9;"), fp);      break;    case 10:      fputts(T("&#xA;"), fp);      break;    case 13:      fputts(T("&#xD;"), fp);      break;#else    case T('>'):      fputts(T("&gt;"), fp);      break;    case 9:    case 10:    case 13:      ftprintf(fp, T("&#%d;"), *s);      break;#endif    default:      puttc(*s, fp);      break;    }    s++;  }}/* Lexicographically comparing UTF-8 encoded attribute values,is equivalent to lexicographically comparing based on the character number. */static intattcmp(const void *att1, const void *att2){  return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2);}static voidstartElement(void *userData, const XML_Char *name, const XML_Char **atts){  int nAtts;  const XML_Char **p;  FILE *fp = userData;  puttc(T('<'), fp);  fputts(name, fp);  p = atts;  while (*p)    ++p;  nAtts = (p - atts) >> 1;  if (nAtts > 1)    qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp);  while (*atts) {    puttc(T(' '), fp);    fputts(*atts++, fp);    attributeValue(fp, *atts);    atts++;  }  puttc(T('>'), fp);}static voidendElement(void *userData, const XML_Char *name){  FILE *fp = userData;  puttc(T('<'), fp);  puttc(T('/'), fp);  fputts(name, fp);  puttc(T('>'), fp);}static intnsattcmp(const void *p1, const void *p2){  const XML_Char *att1 = *(const XML_Char **)p1;  const XML_Char *att2 = *(const XML_Char **)p2;  int sep1 = (tcsrchr(att1, NSSEP) != 0);  int sep2 = (tcsrchr(att1, NSSEP) != 0);  if (sep1 != sep2)    return sep1 - sep2;  return tcscmp(att1, att2);}static voidstartElementNS(void *userData, const XML_Char *name, const XML_Char **atts){  int nAtts;  int nsi;  const XML_Char **p;  FILE *fp = userData;  const XML_Char *sep;  puttc(T('<'), fp);  sep = tcsrchr(name, NSSEP);  if (sep) {    fputts(T("n1:"), fp);    fputts(sep + 1, fp);    fputts(T(" xmlns:n1"), fp);    attributeValue(fp, name);    nsi = 2;  }  else {    fputts(name, fp);    nsi = 1;  }  p = atts;  while (*p)    ++p;  nAtts = (p - atts) >> 1;  if (nAtts > 1)    qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp);  while (*atts) {    name = *atts++;    sep = tcsrchr(name, NSSEP);    puttc(T(' '), fp);    if (sep) {      ftprintf(fp, T("n%d:"), nsi);      fputts(sep + 1, fp);    }    else      fputts(name, fp);    attributeValue(fp, *atts);    if (sep) {      ftprintf(fp, T(" xmlns:n%d"), nsi++);      attributeValue(fp, name);    }    atts++;  }  puttc(T('>'), fp);}static voidendElementNS(void *userData, const XML_Char *name){  FILE *fp = userData;  const XML_Char *sep;  puttc(T('<'), fp);  puttc(T('/'), fp);  sep = tcsrchr(name, NSSEP);  if (sep) {    fputts(T("n1:"), fp);    fputts(sep + 1, fp);  }  else    fputts(name, fp);  puttc(T('>'), fp);}#ifndef W3C14Nstatic voidprocessingInstruction(void *userData, const XML_Char *target,                      const XML_Char *data){  FILE *fp = userData;  puttc(T('<'), fp);  puttc(T('?'), fp);  fputts(target, fp);  puttc(T(' '), fp);  fputts(data, fp);  puttc(T('?'), fp);  puttc(T('>'), fp);}#endif /* not W3C14N */static voiddefaultCharacterData(void *userData, const XML_Char *s, int len){  XML_DefaultCurrent((XML_Parser) userData);}static voiddefaultStartElement(void *userData, const XML_Char *name,                    const XML_Char **atts){  XML_DefaultCurrent((XML_Parser) userData);}static voiddefaultEndElement(void *userData, const XML_Char *name){  XML_DefaultCurrent((XML_Parser) userData);}static voiddefaultProcessingInstruction(void *userData, const XML_Char *target,                             const XML_Char *data){  XML_DefaultCurrent((XML_Parser) userData);}static voidnopCharacterData(void *userData, const XML_Char *s, int len){}static voidnopStartElement(void *userData, const XML_Char *name, const XML_Char **atts){}static voidnopEndElement(void *userData, const XML_Char *name){}static voidnopProcessingInstruction(void *userData, const XML_Char *target,                         const XML_Char *data){}static voidmarkup(void *userData, const XML_Char *s, int len){  FILE *fp = XML_GetUserData((XML_Parser) userData);  for (; len > 0; --len, ++s)    puttc(*s, fp);}static voidmetaLocation(XML_Parser parser){  const XML_Char *uri = XML_GetBase(parser);  if (uri)    ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri);  ftprintf(XML_GetUserData(parser),           T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""),           XML_GetCurrentByteIndex(parser),           XML_GetCurrentByteCount(parser),           XML_GetCurrentLineNumber(parser),           XML_GetCurrentColumnNumber(parser));}static voidmetaStartDocument(void *userData){  fputts(T("<document>\n"), XML_GetUserData((XML_Parser) userData));}static voidmetaEndDocument(void *userData){  fputts(T("</document>\n"), XML_GetUserData((XML_Parser) userData));}static voidmetaStartElement(void *userData, const XML_Char *name,                 const XML_Char **atts){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  const XML_Char **specifiedAttsEnd    = atts + XML_GetSpecifiedAttributeCount(parser);  const XML_Char **idAttPtr;  int idAttIndex = XML_GetIdAttributeIndex(parser);  if (idAttIndex < 0)    idAttPtr = 0;  else    idAttPtr = atts + idAttIndex;      ftprintf(fp, T("<starttag name=\"%s\""), name);  metaLocation(parser);  if (*atts) {    fputts(T(">\n"), fp);    do {      ftprintf(fp, T("<attribute name=\"%s\" value=\""), atts[0]);      characterData(fp, atts[1], tcslen(atts[1]));      if (atts >= specifiedAttsEnd)        fputts(T("\" defaulted=\"yes\"/>\n"), fp);      else if (atts == idAttPtr)        fputts(T("\" id=\"yes\"/>\n"), fp);      else        fputts(T("\"/>\n"), fp);    } while (*(atts += 2));    fputts(T("</starttag>\n"), fp);  }  else    fputts(T("/>\n"), fp);}static voidmetaEndElement(void *userData, const XML_Char *name){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<endtag name=\"%s\""), name);  metaLocation(parser);  fputts(T("/>\n"), fp);}static voidmetaProcessingInstruction(void *userData, const XML_Char *target,                          const XML_Char *data){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  ftprintf(fp, T("<pi target=\"%s\" data=\""), target);  characterData(fp, data, tcslen(data));  puttc(T('"'), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}static voidmetaComment(void *userData, const XML_Char *data){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  fputts(T("<comment data=\""), fp);  characterData(fp, data, tcslen(data));  puttc(T('"'), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}static voidmetaStartCdataSection(void *userData){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  fputts(T("<startcdata"), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}static voidmetaEndCdataSection(void *userData){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  fputts(T("<endcdata"), fp);  metaLocation(parser);  fputts(T("/>\n"), fp);}static voidmetaCharacterData(void *userData, const XML_Char *s, int len){  XML_Parser parser = (XML_Parser) userData;  FILE *fp = XML_GetUserData(parser);  fputts(T("<chars str=\""), fp);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -