home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xwphescr.zip / XWPH0208.ZIP / src / helpers / xmltok_ns.c < prev    next >
C/C++ Source or Header  |  2002-03-16  |  3KB  |  105 lines

  1. const ENCODING *NS(XmlGetUtf8InternalEncoding)(void)
  2. {
  3.   return &ns(internal_utf8_encoding).enc;
  4. }
  5.  
  6. const ENCODING *NS(XmlGetUtf16InternalEncoding)(void)
  7. {
  8. #if XML_BYTE_ORDER == 12
  9.   return &ns(internal_little2_encoding).enc;
  10. #elif XML_BYTE_ORDER == 21
  11.   return &ns(internal_big2_encoding).enc;
  12. #else
  13.   const short n = 1;
  14.   return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc;
  15. #endif
  16. }
  17.  
  18. static
  19. const ENCODING *NS(encodings)[] = {
  20.   &ns(latin1_encoding).enc,
  21.   &ns(ascii_encoding).enc,
  22.   &ns(utf8_encoding).enc,
  23.   &ns(big2_encoding).enc,
  24.   &ns(big2_encoding).enc,
  25.   &ns(little2_encoding).enc,
  26.   &ns(utf8_encoding).enc /* NO_ENC */
  27. };
  28.  
  29. static int EXPATENTRY NS(initScanProlog)(const ENCODING *enc,
  30.                                          const char *ptr,
  31.                                          const char *end,
  32.                                          const char **nextTokPtr)
  33. {
  34.   return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr);
  35. }
  36.  
  37. static int EXPATENTRY NS(initScanContent)(const ENCODING *enc,
  38.                                           const char *ptr,
  39.                                           const char *end,
  40.                                           const char **nextTokPtr)
  41. {
  42.   return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr);
  43. }
  44.  
  45. int NS(XmlInitEncoding)(INIT_ENCODING *p,
  46.                         const ENCODING **encPtr,
  47.                         const char *name)
  48. {
  49.   int i = getEncodingIndex(name);
  50.   if (i == UNKNOWN_ENC)
  51.     return 0;
  52.   SET_INIT_ENC_INDEX(p, i);
  53.   p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
  54.   p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
  55.   p->initEnc.updatePosition = initUpdatePosition;
  56.   p->encPtr = encPtr;
  57.   *encPtr = &(p->initEnc);
  58.   return 1;
  59. }
  60.  
  61. static
  62. const ENCODING *NS(findEncoding)(const ENCODING *enc,
  63.                                  const char *ptr,
  64.                                  const char *end)
  65. {
  66. #define ENCODING_MAX 128
  67.   char buf[ENCODING_MAX];
  68.   char *p = buf;
  69.   int i;
  70.   XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
  71.   if (ptr != end)
  72.     return 0;
  73.   *p = 0;
  74.   if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
  75.     return enc;
  76.   i = getEncodingIndex(buf);
  77.   if (i == UNKNOWN_ENC)
  78.     return 0;
  79.   return NS(encodings)[i];
  80. }
  81.  
  82. int NS(XmlParseXmlDecl)(int isGeneralTextEntity,
  83.                         const ENCODING *enc,
  84.                         const char *ptr,
  85.                         const char *end,
  86.                         const char **badPtr,
  87.                         const char **versionPtr,
  88.                         const char **versionEndPtr,
  89.                         const char **encodingName,
  90.                         const ENCODING **encoding,
  91.                         int *standalone)
  92. {
  93.   return doParseXmlDecl(NS(findEncoding),
  94.             isGeneralTextEntity,
  95.             enc,
  96.             ptr,
  97.             end,
  98.             badPtr,
  99.             versionPtr,
  100.             versionEndPtr,
  101.             encodingName,
  102.             encoding,
  103.             standalone);
  104. }
  105.