You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ja...@apache.org on 2002/03/05 22:17:43 UTC

cvs commit: xml-xerces/perl typemaps.i

jasons      02/03/05 13:17:43

  Modified:    perl     typemaps.i
  Log:
  	* typemaps.i (Repository):
  	Fixed $source and $target to use new terms
  	Fixed DOMString typemap to not use pointers
  
  Revision  Changes    Path
  1.6       +80 -20    xml-xerces/perl/typemaps.i
  
  Index: typemaps.i
  ===================================================================
  RCS file: /home/cvs/xml-xerces/perl/typemaps.i,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- typemaps.i	3 Nov 2001 04:33:58 -0000	1.5
  +++ typemaps.i	5 Mar 2002 21:17:42 -0000	1.6
  @@ -12,9 +12,9 @@
   /*                                                                         */
   /***************************************************************************/
   %typemap(perl5, in) DOMString * (DOMString temp) {
  -  if (SvPOK($source)||SvIOK($source)||SvNOK($source)) {
  +  if (SvPOK($input)||SvIOK($input)||SvNOK($input)) {
       STRLEN length;
  -    char *ptr = (char *)SvPV($source,length);
  +    char *ptr = (char *)SvPV($input,length);
       if (DEBUG_UTF8_IN) {
   	printf("Perl in length = %d: ",length);
   	for (unsigned int i=0;i<length;i++){
  @@ -23,7 +23,7 @@
   	printf("\n");
       }
       XMLCh* temp_XMLCh;
  -    if (SvUTF8($source)) {
  +    if (SvUTF8($input)) {
   	unsigned int charsEaten = 0;
           unsigned char* sizes = new unsigned char[length+1];
           temp_XMLCh = new XMLCh[length+1];
  @@ -59,8 +59,8 @@
   	temp = DOMString(temp_XMLCh);
   	delete [] temp_XMLCh;
       }
  -    $target = &temp;
  -  } else if(SWIG_ConvertPtr($source,(void **) &$target,SWIGTYPE_p_DOMString)) {
  +    $1 = &temp;
  +  } else if(SWIG_ConvertPtr($input,(void **) &$1,SWIGTYPE_p_DOMString)) {
       croak("Type error in argument 2 of $name, Expected perl-string or DOMString.");
       XSRETURN(1);
     }
  @@ -84,10 +84,10 @@
   /*************************************************************************/
   %typemap(perl5, out) DOMString {
     unsigned int charsEaten = 0;
  -  int length  = $source->length();      // string length
  +  int length  = $1.length();      // string length
     XMLByte* res = new XMLByte[length * UTF8_MAXLEN];          // output string
     unsigned int total_chars =
  -    UTF8_TRANSCODER->transcodeTo((const XMLCh*) $source->rawBuffer(), 
  +    UTF8_TRANSCODER->transcodeTo((const XMLCh*) $1.rawBuffer(), 
   				   (unsigned int) length,
   				   (XMLByte*) res,
   				   (unsigned int) length*UTF8_MAXLEN,
  @@ -102,10 +102,9 @@
         }
         printf("\n");
     }
  -  $target = sv_newmortal();
  -  sv_setpv((SV*)$target, (char *)res );
  -  SvUTF8_on((SV*)$target);
  -  delete $source;
  +  $result = sv_newmortal();
  +  sv_setpv((SV*)$result, (char *)res );
  +  SvUTF8_on((SV*)$result);
     ++argvi;
   }
   
  @@ -116,6 +115,67 @@
   /***************************************************/
   %typemap(perl5, out) const DOMString = DOMString;
   
  +/***************************************************************************/
  +/*                                                                         */
  +/* FOR FUNCTIONS TAKING DOMString AS AN ARGUMENT --                        */
  +/*    NOW YOU CAN JUST SUPPLY A STRING                                     */ 
  +/* THIS TYPEMAP CONVERTS PERL-STRINGS TO DOMStrings AUTOMATICALLY          */
  +/*                                                                         */
  +/***************************************************************************/
  +%typemap(perl5, in) DOMString * (DOMString temp) {
  +  if (SvPOK($input)||SvIOK($input)||SvNOK($input)) {
  +    STRLEN length;
  +    char *ptr = (char *)SvPV($input,length);
  +    if (DEBUG_UTF8_IN) {
  +	printf("Perl in length = %d: ",length);
  +	for (unsigned int i=0;i<length;i++){
  +	    printf("<0x%.4X>",ptr[i]);
  +	}
  +	printf("\n");
  +    }
  +    XMLCh* temp_XMLCh;
  +    if (SvUTF8($input)) {
  +	unsigned int charsEaten = 0;
  +        unsigned char* sizes = new unsigned char[length+1];
  +        temp_XMLCh = new XMLCh[length+1];
  +	unsigned int chars_stored = 
  +	    UTF8_TRANSCODER->transcodeFrom((const XMLByte*) ptr,
  +					   (unsigned int) length,
  +					   (XMLCh*) temp_XMLCh, 
  +					   (unsigned int) length,
  +					   charsEaten,
  +					   (unsigned char*)sizes
  +					   );
  +	delete [] sizes;
  +	if (DEBUG_UTF8_IN) {
  +	    printf("Xerces in length = %d: ",chars_stored);
  +	    for (unsigned int i=0;i<chars_stored;i++){
  +		printf("<0x%.4X>",temp_XMLCh[i]);
  +	    }
  +	    printf("\n");
  +	}
  +	    // indicate the end of the string
  +	temp_XMLCh[chars_stored] = '\0';
  +	temp = DOMString(temp_XMLCh,chars_stored);
  +	delete [] temp_XMLCh;
  +    } else {
  +	temp_XMLCh = XMLString::transcode(ptr);
  +	if (DEBUG_UTF8_IN) {
  +	    printf("Xerces: ");
  +	    for (int i=0;temp_XMLCh[i];i++){
  +		printf("<0x%.4X>",temp_XMLCh[i]);
  +	    }
  +	    printf("\n");
  +	}
  +	temp = DOMString(temp_XMLCh);
  +	delete [] temp_XMLCh;
  +    }
  +    $1 = &temp;
  +  } else if(SWIG_ConvertPtr($input,(void **) &$1,SWIGTYPE_p_DOMString)) {
  +    croak("Type error in argument 2 of $name, Expected perl-string or DOMString.");
  +    XSRETURN(1);
  +  }
  +}
   
   
   /***********/
  @@ -155,9 +215,9 @@
   /*                  */
   /********************/
   %typemap(perl5, in) XMLCh * {
  -  if (SvPOK($source)||SvIOK($source)||SvNOK($source)) {
  +  if (SvPOK($input)||SvIOK($input)||SvNOK($input)) {
       STRLEN length;
  -    char *ptr = (char *)SvPV($source,length);
  +    char *ptr = (char *)SvPV($input,length);
       if (DEBUG_UTF8_IN) {
   	printf("Perl in length = %d: ",length);
   	for (unsigned int i=0;i<length;i++){
  @@ -165,7 +225,7 @@
   	}
   	printf("\n");
       }
  -    if (SvUTF8($source)) {
  +    if (SvUTF8($input)) {
   	unsigned int charsEaten = 0;
           unsigned char* sizes = new unsigned char[length+1];
           $1 = new XMLCh[length+1];
  @@ -213,10 +273,10 @@
   // 
   %typemap(perl5, out) XMLCh * {
     unsigned int charsEaten = 0;
  -  int length  = XMLString::stringLen($source);      // string length
  +  int length  = XMLString::stringLen($1);      // string length
     XMLByte* res = new XMLByte[length * UTF8_MAXLEN];          // output string
     unsigned int total_chars =
  -    UTF8_TRANSCODER->transcodeTo((const XMLCh*) $source, 
  +    UTF8_TRANSCODER->transcodeTo((const XMLCh*) $1, 
   				   (unsigned int) length,
   				   (XMLByte*) res,
   				   (unsigned int) length*UTF8_MAXLEN,
  @@ -231,9 +291,9 @@
         }
         printf("\n");
     }
  -  $target = sv_newmortal();
  -  sv_setpv((SV*)$target, (char *)res );
  -  SvUTF8_on((SV*)$target);
  +  $result = sv_newmortal();
  +  sv_setpv((SV*)$result, (char *)res );
  +  SvUTF8_on((SV*)$result);
     delete[] res;
     ++argvi;
   }
  @@ -268,5 +328,5 @@
   // BY SWIG
   // 
   %typemap(perl5, in) SV * {
  -  $target = $source;
  +  $1 = $input;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org