www.pudn.com > uoth_src.zip > xmltok_ns.c


const ENCODING *NS(XmlGetUtf8InternalEncoding)(void) 
{ 
  return &ns(internal_utf8_encoding).enc; 
} 
 
const ENCODING *NS(XmlGetUtf16InternalEncoding)(void) 
{ 
#if BYTEORDER == 1234 
  return &ns(internal_little2_encoding).enc; 
#elif BYTEORDER == 4321 
  return &ns(internal_big2_encoding).enc; 
#else 
  const short n = 1; 
  return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc; 
#endif 
} 
 
static 
const ENCODING *NS(encodings)[] = { 
  &ns(latin1_encoding).enc, 
  &ns(ascii_encoding).enc, 
  &ns(utf8_encoding).enc, 
  &ns(big2_encoding).enc, 
  &ns(big2_encoding).enc, 
  &ns(little2_encoding).enc, 
  &ns(utf8_encoding).enc /* NO_ENC */ 
}; 
 
static 
int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, 
		       const char **nextTokPtr) 
{ 
  return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); 
} 
 
static 
int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, 
		       const char **nextTokPtr) 
{ 
  return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); 
} 
 
int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) 
{ 
  int i = getEncodingIndex(name); 
  if (i == UNKNOWN_ENC) 
    return 0; 
  SET_INIT_ENC_INDEX(p, i); 
  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); 
  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); 
  p->initEnc.updatePosition = initUpdatePosition; 
  p->encPtr = encPtr; 
  *encPtr = &(p->initEnc); 
  return 1; 
} 
 
static 
const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) 
{ 
#define ENCODING_MAX 128 
  char buf[ENCODING_MAX]; 
  char *p = buf; 
  int i; 
  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); 
  if (ptr != end) 
    return 0; 
  *p = 0; 
  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) 
    return enc; 
  i = getEncodingIndex(buf); 
  if (i == UNKNOWN_ENC) 
    return 0; 
  return NS(encodings)[i]; 
} 
 
int NS(XmlParseXmlDecl)(int isGeneralTextEntity, 
			const ENCODING *enc, 
			const char *ptr, 
			const char *end, 
			const char **badPtr, 
			const char **versionPtr, 
			const char **versionEndPtr, 
			const char **encodingName, 
			const ENCODING **encoding, 
			int *standalone) 
{ 
  return doParseXmlDecl(NS(findEncoding), 
			isGeneralTextEntity, 
			enc, 
			ptr, 
			end, 
			badPtr, 
			versionPtr, 
			versionEndPtr, 
			encodingName, 
			encoding, 
			standalone); 
}