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

📄 expat.xs

📁 one of the linux gd libraries
💻 XS
📖 第 1 页 / 共 3 页
字号:
intXML_ParsePartial(parser, sv)	XML_Parser			parser	SV *				sv    CODE:	{	  STRLEN len;	  char *s = SvPV(sv, len);	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  RETVAL = XML_Parse(parser, s, len, 0);	  if (! RETVAL)	    append_error(parser, NULL);	}    OUTPUT:	RETVALintXML_ParseDone(parser)	XML_Parser			parser    CODE:	{	  RETVAL = XML_Parse(parser, "", 0, 1);	  if (! RETVAL)	    append_error(parser, NULL);	}    OUTPUT:	RETVALSV *XML_SetStartElementHandler(parser, start_sv)	XML_Parser			parser	SV *				start_sv    CODE:	{	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(start_sv);	  PUSHRET;	}SV *XML_SetEndElementHandler(parser, end_sv)	XML_Parser			parser	SV *				end_sv    CODE:	{	  CallbackVector *cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(end_sv);	  PUSHRET;	}SV *XML_SetCharacterDataHandler(parser, char_sv)	XML_Parser			parser	SV *				char_sv    CODE:	{	  XML_CharacterDataHandler charhndl = (XML_CharacterDataHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(char_sv);	  if (SvTRUE(char_sv))	    charhndl = characterData;	  XML_SetCharacterDataHandler(parser, charhndl);	  PUSHRET;	}SV *XML_SetProcessingInstructionHandler(parser, proc_sv)	XML_Parser			parser	SV *				proc_sv    CODE:	{	  XML_ProcessingInstructionHandler prochndl =	    (XML_ProcessingInstructionHandler) 0;	  CallbackVector* cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(proc_sv);	  if (SvTRUE(proc_sv))	    prochndl = processingInstruction;	  XML_SetProcessingInstructionHandler(parser, prochndl);	  PUSHRET;	}SV *XML_SetCommentHandler(parser, cmnt_sv)	XML_Parser			parser	SV *				cmnt_sv    CODE:	{	  XML_CommentHandler cmnthndl = (XML_CommentHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(cmnt_sv);	  if (SvTRUE(cmnt_sv))	    cmnthndl = commenthandle;	  XML_SetCommentHandler(parser, cmnthndl);	  PUSHRET;	}SV *XML_SetDefaultHandler(parser, dflt_sv)	XML_Parser			parser	SV *				dflt_sv    CODE:	{	  XML_DefaultHandler dflthndl = (XML_DefaultHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(dflt_sv);	  if (SvTRUE(dflt_sv))	    dflthndl = defaulthandle;	  if (cbv->no_expand)	    XML_SetDefaultHandler(parser, dflthndl);	  else	    XML_SetDefaultHandlerExpand(parser, dflthndl);	  PUSHRET;	}SV *XML_SetUnparsedEntityDeclHandler(parser, unprsd_sv)	XML_Parser			parser	SV *				unprsd_sv    CODE:	{	  XML_UnparsedEntityDeclHandler unprsdhndl =	    (XML_UnparsedEntityDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(unprsd_sv);	  if (SvTRUE(unprsd_sv))	    unprsdhndl = unparsedEntityDecl;	  XML_SetUnparsedEntityDeclHandler(parser, unprsdhndl);	  PUSHRET;	}SV *XML_SetNotationDeclHandler(parser, notation_sv)	XML_Parser			parser	SV *				notation_sv    CODE:	{	  XML_NotationDeclHandler nothndlr = (XML_NotationDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(notation_sv);	  if (SvTRUE(notation_sv))	    nothndlr = notationDecl;	  XML_SetNotationDeclHandler(parser, nothndlr);	  PUSHRET;	}SV *XML_SetExternalEntityRefHandler(parser, extent_sv)	XML_Parser			parser	SV *				extent_sv    CODE:	{	  XML_ExternalEntityRefHandler exthndlr =	    (XML_ExternalEntityRefHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(extent_sv);	  if (SvTRUE(extent_sv))	    exthndlr = externalEntityRef;	  XML_SetExternalEntityRefHandler(parser, exthndlr);	  PUSHRET;	}SV *XML_SetExtEntFinishHandler(parser, extfin_sv)	XML_Parser			parser	SV *				extfin_sv    CODE:	{	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  /* There is no corresponding handler for this in expat. This is	     called from the externalEntityRef function above after parsing	     the external entity. */	  XMLP_UPD(extfin_sv);	  PUSHRET;	}	   SV *XML_SetEntityDeclHandler(parser, entdcl_sv)	XML_Parser			parser	SV *				entdcl_sv    CODE:	{	  XML_EntityDeclHandler enthndlr =	    (XML_EntityDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(entdcl_sv);	  if (SvTRUE(entdcl_sv))	    enthndlr = entityDecl;	  XML_SetEntityDeclHandler(parser, enthndlr);	  PUSHRET;	}SV *XML_SetElementDeclHandler(parser, eledcl_sv)	XML_Parser			parser	SV *				eledcl_sv    CODE:	{	  XML_ElementDeclHandler eldeclhndlr =	    (XML_ElementDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(eledcl_sv);	  if (SvTRUE(eledcl_sv))	    eldeclhndlr = elementDecl;	  XML_SetElementDeclHandler(parser, eldeclhndlr);	  PUSHRET;	}SV *XML_SetAttListDeclHandler(parser, attdcl_sv)	XML_Parser			parser	SV *				attdcl_sv    CODE:	{	  XML_AttlistDeclHandler attdeclhndlr =	    (XML_AttlistDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(attdcl_sv);	  if (SvTRUE(attdcl_sv))	    attdeclhndlr = attributeDecl;	  XML_SetAttlistDeclHandler(parser, attdeclhndlr);	  PUSHRET;	}SV *XML_SetDoctypeHandler(parser, doctyp_sv)	XML_Parser			parser	SV *				doctyp_sv    CODE:	{	  XML_StartDoctypeDeclHandler dtsthndlr =	    (XML_StartDoctypeDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  int set = 0;	  XMLP_UPD(doctyp_sv);	  if (SvTRUE(doctyp_sv))	    dtsthndlr = doctypeStart;	  XML_SetStartDoctypeDeclHandler(parser, dtsthndlr);	  PUSHRET;	}SV *XML_SetEndDoctypeHandler(parser, doctypfin_sv)	XML_Parser parser	SV * doctypfin_sv         CODE:	{	  XML_EndDoctypeDeclHandler dtendhndlr =	    (XML_EndDoctypeDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector*) XML_GetUserData(parser);	  XMLP_UPD(doctypfin_sv);	  if (SvTRUE(doctypfin_sv))	    dtendhndlr = doctypeEnd;	  XML_SetEndDoctypeDeclHandler(parser, dtendhndlr);	  PUSHRET;	}SV *XML_SetXMLDeclHandler(parser, xmldec_sv)	XML_Parser			parser	SV *				xmldec_sv    CODE:	{	  XML_XmlDeclHandler xmldechndlr =	    (XML_XmlDeclHandler) 0;	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  XMLP_UPD(xmldec_sv);	  if (SvTRUE(xmldec_sv))	    xmldechndlr = xmlDecl;	  XML_SetXmlDeclHandler(parser, xmldechndlr);	  PUSHRET;	}voidXML_SetBase(parser, base)	XML_Parser			parser	SV *				base    CODE:	{	  char * b;	  if (! SvOK(base)) {	    b = (char *) 0;	  }	  else {	    b = SvPV(base, PL_na);	  }	  XML_SetBase(parser, b);	}	SV *XML_GetBase(parser)	XML_Parser			parser    CODE:	{	  const char *ret = XML_GetBase(parser);	  if (ret) {	    ST(0) = sv_newmortal();	    sv_setpv(ST(0), ret);	  }	  else {	    ST(0) = &PL_sv_undef;	  }	}voidXML_PositionContext(parser, lines)	XML_Parser			parser	int				lines    PREINIT:	int parsepos;        int size;        const char *pos = XML_GetInputContext(parser, &parsepos, &size);	const char *markbeg;	const char *limit;	const char *markend;	int length, relpos;	int  cnt;    PPCODE:	  if (! pos)            return;	  for (markbeg = &pos[parsepos], cnt = 0; markbeg >= pos; markbeg--)	    {	      if (*markbeg == '\n')		{		  cnt++;		  if (cnt > lines)		    break;		}	    }	  markbeg++;          relpos = 0;	  limit = &pos[size];	  for (markend = &pos[parsepos + 1], cnt = 0;	       markend < limit;	       markend++)	    {	      if (*markend == '\n')		{		  if (cnt == 0)                     relpos = (markend - markbeg) + 1;		  cnt++;		  if (cnt > lines)		    {		      markend++;		      break;		    }		}	    }	  length = markend - markbeg;          if (relpos == 0)            relpos = length;          EXTEND(sp, 2);	  PUSHs(sv_2mortal(newSVpvn((char *) markbeg, length)));	  PUSHs(sv_2mortal(newSViv(relpos)));SV *GenerateNSName(name, namespace, table, list)	SV *				name	SV *				namespace	SV *				table	SV *				list    CODE:	{	  STRLEN	nmlen, nslen;	  char *	nmstr;	  char *	nsstr;	  char *	buff;	  char *	bp;	  char *	blim;	  nmstr = SvPV(name, nmlen);	  nsstr = SvPV(namespace, nslen);	  /* Form a namespace-name string that looks like expat's */	  New(321, buff, nmlen + nslen + 2, char);	  bp = buff;	  blim = bp + nslen;	  while (bp < blim)	    *bp++ = *nsstr++;	  *bp++ = NSDELIM;	  blim = bp + nmlen;	  while (bp < blim)	    *bp++ = *nmstr++;	  *bp = '\0';	  RETVAL = gen_ns_name(buff, (HV *) SvRV(table), (AV *) SvRV(list));	  Safefree(buff);	}	    OUTPUT:	RETVALvoidXML_DefaultCurrent(parser)	XML_Parser			parser    CODE:	{	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  XML_DefaultCurrent(parser);	}SV *XML_RecognizedString(parser)	XML_Parser			parser    CODE:	{	  XML_DefaultHandler dflthndl = (XML_DefaultHandler) 0;	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  if (cbv->dflt_sv) {	    dflthndl = defaulthandle;	  }	  if (cbv->recstring) {	    sv_setpvn(cbv->recstring, "", 0);	  }	  if (cbv->no_expand)	    XML_SetDefaultHandler(parser, recString);	  else	    XML_SetDefaultHandlerExpand(parser, recString);	      	  XML_DefaultCurrent(parser);	  if (cbv->no_expand)	    XML_SetDefaultHandler(parser, dflthndl);	  else	    XML_SetDefaultHandlerExpand(parser, dflthndl);	  RETVAL = newSVsv(cbv->recstring);	}    OUTPUT:	RETVALintXML_GetErrorCode(parser)	XML_Parser			parserintXML_GetCurrentLineNumber(parser)	XML_Parser			parserintXML_GetCurrentColumnNumber(parser)	XML_Parser			parserlongXML_GetCurrentByteIndex(parser)	XML_Parser			parserintXML_GetSpecifiedAttributeCount(parser)	XML_Parser			parserchar *XML_ErrorString(code)	int				code    CODE:	const char *ret = XML_ErrorString(code);	ST(0) = sv_newmortal();	sv_setpv((SV*)ST(0), ret);SV *XML_LoadEncoding(data, size)	char *				data	int				size    CODE:	{	  Encmap_Header *emh = (Encmap_Header *) data;	  unsigned pfxsize, bmsize;	  if (size < sizeof(Encmap_Header)	      || ntohl(emh->magic) != ENCMAP_MAGIC) {	    RETVAL = &PL_sv_undef;	  }	  else {	    Encinfo	*entry;	    SV		*sv;	    PrefixMap	*pfx;	    unsigned short *bm;	    int namelen;	    int i;	    pfxsize = ntohs(emh->pfsize);	    bmsize  = ntohs(emh->bmsize);	    if (size != (sizeof(Encmap_Header)			 + pfxsize * sizeof(PrefixMap)			 + bmsize * sizeof(unsigned short))) {	      RETVAL = &PL_sv_undef;	    }	    else {	      /* Convert to uppercase and get name length */	      for (i = 0; i < sizeof(emh->name); i++) {		char c = emh->name[i];		  if (c == (char) 0)		    break;		if (c >= 'a' && c <= 'z')		  emh->name[i] -= 'a' - 'A';	      }	      namelen = i;	      RETVAL = newSVpvn(emh->name, namelen);	      New(322, entry, 1, Encinfo);	      entry->prefixes_size = pfxsize;	      entry->bytemap_size  = bmsize;	      for (i = 0; i < 256; i++) {		entry->firstmap[i] = ntohl(emh->map[i]);	      }	      pfx = (PrefixMap *) &data[sizeof(Encmap_Header)];	      bm = (unsigned short *) (((char *) pfx)				       + sizeof(PrefixMap) * pfxsize);	      New(323, entry->prefixes, pfxsize, PrefixMap);	      New(324, entry->bytemap, bmsize, unsigned short);	      for (i = 0; i < pfxsize; i++, pfx++) {		PrefixMap *dest = &entry->prefixes[i];		dest->min = pfx->min;		dest->len = pfx->len;		dest->bmap_start = ntohs(pfx->bmap_start);		Copy(pfx->ispfx, dest->ispfx,		     sizeof(pfx->ispfx) + sizeof(pfx->ischar), unsigned char);	      }	      for (i = 0; i < bmsize; i++)		entry->bytemap[i] = ntohs(bm[i]);	      sv = newSViv(0);	      sv_setref_pv(sv, "XML::Parser::Encinfo", (void *) entry);	  	      if (! EncodingTable) {		EncodingTable		  = perl_get_hv("XML::Parser::Expat::Encoding_Table",				FALSE);		if (! EncodingTable)		  croak("Can't find XML::Parser::Expat::Encoding_Table");	      }	      hv_store(EncodingTable, emh->name, namelen, sv, 0);	    }	  }	}    OUTPUT:	RETVALvoidXML_FreeEncoding(enc)	Encinfo *			enc    CODE:	Safefree(enc->bytemap);	Safefree(enc->prefixes);	Safefree(enc);SV *XML_OriginalString(parser)	XML_Parser			parser    CODE:	{	  int parsepos, size;	  const char *buff = XML_GetInputContext(parser, &parsepos, &size);	  if (buff) {	    RETVAL = newSVpvn((char *) &buff[parsepos],			      XML_GetCurrentByteCount(parser));	  }	  else {	    RETVAL = newSVpv("", 0);	  }	}    OUTPUT:	RETVALSV *XML_SetStartCdataHandler(parser, startcd_sv)	XML_Parser			parser	SV *				startcd_sv    CODE:	{	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  XML_StartCdataSectionHandler scdhndl =	    (XML_StartCdataSectionHandler) 0;	  XMLP_UPD(startcd_sv);	  if (SvTRUE(startcd_sv))	    scdhndl = startCdata;	  XML_SetStartCdataSectionHandler(parser, scdhndl);	  PUSHRET;	}SV *XML_SetEndCdataHandler(parser, endcd_sv)	XML_Parser			parser	SV *				endcd_sv    CODE:	{	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  XML_EndCdataSectionHandler ecdhndl =	    (XML_EndCdataSectionHandler) 0;	  XMLP_UPD(endcd_sv);	  if (SvTRUE(endcd_sv))	    ecdhndl = endCdata;	  XML_SetEndCdataSectionHandler(parser, ecdhndl);	  PUSHRET;	}voidXML_UnsetAllHandlers(parser)	XML_Parser			parser    CODE:	{	  CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  	  suspend_callbacks(cbv);	  if (cbv->ns) {	    XML_SetNamespaceDeclHandler(cbv->p,					(XML_StartNamespaceDeclHandler) 0,					(XML_EndNamespaceDeclHandler) 0);	  }	  XML_SetElementHandler(parser,				(XML_StartElementHandler) 0,				(XML_EndElementHandler) 0);	  XML_SetUnknownEncodingHandler(parser,					(XML_UnknownEncodingHandler) 0,					(void *) 0);	}intXML_ElementIndex(parser)        XML_Parser                      parser    CODE:        {          CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);          RETVAL = cbv->st_serial_stack[cbv->st_serial_stackptr];        }    OUTPUT:        RETVALvoidXML_SkipUntil(parser, index)         XML_Parser			parser         unsigned int			index    CODE:        {          CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  if (index <= cbv->st_serial)	    return;	  cbv->skip_until = index;	  suspend_callbacks(cbv);	}intXML_Do_External_Parse(parser, result)	XML_Parser			parser	SV *				result    CODE:	{	  int type;          CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser);	  	  if (SvROK(result) && SvOBJECT(SvRV(result))) {	    RETVAL = parse_stream(parser, result);	  }	  else if (isGV(result)) {	    RETVAL = parse_stream(parser,				  sv_2mortal(newRV((SV*) GvIOp(result))));	  }	  else if (SvPOK(result)) {	    STRLEN  eslen;	    int pret;	    char *entstr = SvPV(result, eslen);	    RETVAL = XML_Parse(parser, entstr, eslen, 1);	  }	}    OUTPUT:        RETVAL

⌨️ 快捷键说明

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