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