Skip to content
Snippets Groups Projects
Commit dfcf5eb1 authored by Jason Edward Stewart's avatar Jason Edward Stewart
Browse files

cruft

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@437635 13f79535-47bb-0310-9956-ffa450edef68
parent 2dc5e672
No related branches found
No related tags found
No related merge requests found
//
// FOR Perl*Handler MEMBER FUNCTIONS, SO PERL SCALAR DOESN'T GET WRAPPED
//
%typemap(in) SV * {
$1 = $input;
}
// The typecheck functions are for use by SWIG's auto-overloading support
%typemap(typecheck, precedence=60)
SV*
{
$1 = SvOK($input) ? 1 : 0;
}
// The typecheck functions are for use by SWIG's auto-overloading support
%typemap(typecheck, precedence=60)
SV*
{
$1 = SvOK($input) ? 1 : 0;
}
// %typemap(typecheck, precedence=70)
// as long as the SV is not undef, convert it to a string
%typecheck(SWIG_TYPECHECK_UNISTRING)
XMLCh*, const XMLCh*
{
$1 = SvOK($input) ? 1 : 0;
}
/*
* Handle Callbacks - until directors work in Perl
*/
// Define a macro to rewrite setErrorHandler() for all classes
%define SET_ERRORHANDLER(class)
%feature("shadow") XERCES_CPP_NAMESPACE::class::setErrorHandler {
sub setErrorHandler {
my ($self,$handler) = @_;
my $callback = XML::Xerces::PerlErrorCallbackHandler->new($handler);
$XML::Xerces::REMEMBER{tied(% {$self})}->{__ERROR_HANDLER} = $callback;
return XML::Xercesc::class ##_setErrorHandler($self,$callback);
}
}
%enddef
SET_ERRORHANDLER(Parser)
SET_ERRORHANDLER(SAX2XMLReader)
SET_ERRORHANDLER(SAXParser)
SET_ERRORHANDLER(DOMBuilder)
SET_ERRORHANDLER(DOMWriter)
SET_ERRORHANDLER(XercesDOMParser)
// Define a macro to rewrite setEntityResolver() for all classes
%define SET_ENTITYRESOLVER(class)
%feature("shadow") XERCES_CPP_NAMESPACE::class::setEntityResolver {
sub setEntityResolver {
my ($self,$handler) = @_;
my $callback = XML::Xerces::PerlEntityResolverHandler->new($handler);
$XML::Xerces::REMEMBER{tied(% {$self})}->{__ENTITY_RESOLVER} = $callback;
return XML::Xercesc::class ##_setEntityResolver($self,$callback);
}
}
%enddef
SET_ENTITYRESOLVER(Parser)
SET_ENTITYRESOLVER(SAX2XMLReader)
SET_ENTITYRESOLVER(SAXParser)
SET_ENTITYRESOLVER(DOMBuilder)
SET_ENTITYRESOLVER(XercesDOMParser)
// Define a macro to rewrite all methods that return a list of DOMNodes
// we need the "defined ## $result hack because defined is a cpp operator
%define DOMLIST_METHOD(class,method)
%feature("shadow") XERCES_CPP_NAMESPACE::class::method {
sub method {
my $result = XML::Xercesc:: ## class ## _ ## method (@_);
unless (defined ## $result) {
return () if wantarray;
return undef; # if *not* wantarray
}
return $result->to_list() if wantarray;
return $result; # if *not* wantarray
}
}
%enddef
DOMLIST_METHOD(DOMDocument,getElementsByTagName)
DOMLIST_METHOD(DOMDocument,getElementsByTagNameNS)
DOMLIST_METHOD(DOMElement,getElementsByTagName)
DOMLIST_METHOD(DOMElement,getElementsByTagNameNS)
DOMLIST_METHOD(DOMNode,getChildNodes)
// Define a macro to rewrite all methods that return a map of DOMNodes
// we need the "defined ## $result hack because defined is a cpp operator
%define DOMMAP_METHOD(class,method)
%feature("shadow") XERCES_CPP_NAMESPACE::class::method {
sub method {
my $result = XML::Xercesc:: ## class ## _ ## method (@_);
unless (defined ## $result) {
return () if wantarray;
return undef; # if *not* wantarray
}
return $result->to_hash() if wantarray;
return $result; # if *not* wantarray
}
}
%enddef
DOMMAP_METHOD(DOMDocumentType,getEntities)
DOMMAP_METHOD(DOMDocumentType,getNotations)
DOMMAP_METHOD(DOMNode,getAttributes)
/*
* have the document remember the parser, so that if the parser
* goes out of scope before the document, the document will not
* be freed
*/
%feature("shadow") XERCES_CPP_NAMESPACE::AbstractDOMParser::getDocument %{
# hold a reference to the parser internally, so that the
# document can exist after the parser has gone out of scope
sub getDocument {
my ($self) = @_;
my $result = XML::Xercesc::AbstractDOMParser_getDocument($self);
# the DOMDocument destructor will automatically delete this entry if we
# store it using the underlying tied() object
$XML::Xerces::REMEMBER{tied(% {$result})}->{__PARSER} = $self;
return $result;
}
%}
%feature("shadowpre") MemBufInputSource %{
# SYSTEM ID is *optional*
if (scalar @_ == 1) {
push(@_,'FAKE_SYSTEM_ID');
}
%}
/*
* The Node iterators defined in DOM Level2 must also be remembered
*/
%define CREATE_DOMITERATOR(method)
%feature("shadow") XERCES_CPP_NAMESPACE::DOMDocumentTraversal:: ## method {
sub method {
my ($self,$root,$what,$filter,$expand) = @_;
my $callback = XML::Xerces::PerlNodeFilterCallbackHandler->new($filter);
$XML::Xerces::REMEMBER{tied(% {$self})}->{__NODE_FILTER} = $callback;
my @args = ($self,$root,$what,$callback,$expand);
if ($args[0]->isa('XML::Xerces::DOMDocument')) {
# $args[0] = $args[0]->toDOMDocumentTraversal();
}
return XML::Xercesc::DOMDocumentTraversal_ ## method(@args);
}
}
%enddef
CREATE_DOMITERATOR(createNodeIterator)
CREATE_DOMITERATOR(createTreeWalker)
%feature("shadow") XERCES_CPP_NAMESPACE::SAXParser::setDocumentHandler %{
sub setDocumentHandler {
my ($self,$handler) = @_;
my $callback = XML::Xerces::PerlDocumentCallbackHandler->new($handler);
$XML::Xerces::REMEMBER{tied(% {$self})}->{__DOCUMENT_HANDLER} = $callback;
my @args = ($self,$callback);
return XML::Xercesc::SAXParser_setDocumentHandler(@args);
}
%}
%feature("shadow") XERCES_CPP_NAMESPACE::SAX2XMLReader::setContentHandler %{
sub setContentHandler {
my ($self,$handler) = @_;
my $callback = XML::Xerces::PerlContentCallbackHandler->new($handler);
$XML::Xerces::REMEMBER{tied(% {$self})}->{__CONTENT_HANDLER} = $callback;
my @args = ($self,$callback);
return XML::Xercesc::SAX2XMLReader_setContentHandler(@args);
}
%}
%feature("shadowpre") Wrapper4InputSource %{
# we never handle the memory
# so we tell Perl to forget about the InputSource
$_[0]->DISOWN();
%}
%feature("shadowpre") createDocument %{
if (UNIVERSAL::isa($_[3],"XML::Xerces::DOMDocumentType")) {
# die "createDOMDocument: expected XML::Xerces::DOMDocumentType for arg 3";
$_[3]->DISOWN();
}
%}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment