package Xacobeo::XS;
=head1 NAME
Xacobeo::XS - Functions rewritten in XS.
=head1 SYNOPSIS
use Xacobeo::XS;
Xacobeo::XS->load_text_buffer($textview->get_buffer, $node, $namespaces);
Xacobeo::XS->load_tree_store($treeview->get_store, $node, $namespaces);
=head1 DESCRIPTION
This package provides some functions that are implemented through XS. These
functions are much faster than their Perl counterpart.
=head1 CLASS METHODS
The following class methods are available:
=cut
use 5.006;
use strict;
use warnings;
use parent qw(DynaLoader);
use Gtk2;
use XML::LibXML;
use Exporter 'import';
our @EXPORT_OK = qw(
xacobeo_populate_gtk_text_buffer
xacobeo_populate_gtk_tree_store
);
sub dl_load_flags {return 0x01}
=head2 load_text_buffer
Populates a L<Gtk2::TextBuffer> with the contents of an L<XML::LibXML::Node>.
The elements and attributes are displayed with the prefix corresponding to their
respective namespaces. The XML document is also displayed with proper syntax
highlighting.
Parameters:
=over
=item * $buffer
The text buffer to fill. Must be an instance of L<Gtk2::TextBuffer>.
=item * $node
The node to display in the the text view. Must be an instance of
L<XML::LibXML::Node>.
=item * $namespaces
The namespaces declared in the document. Must be an hash ref where the keys are
the URIs and the values the prefixes of the namespaces.
=back
=cut
sub load_text_buffer {
my $class = shift;
my ($buffer, $node, $namespaces) = @_;
xacobeo_populate_gtk_text_buffer($buffer, $node, $namespaces);
}
=head2 load_tree_store
Populates a L<Gtk2::TreeStore> with the contents of an L<XML::LibXML::Node>. The
tree will display only the nodes of type element. Furthermore, the elements are
displayed with the prefix corresponding to their respective namespaces.
Parameters:
=over
=item * $store
The text store to fill. Must be an instance of L<Gtk2::TreeStore>.
=item * $node
The node to display in the the tree view. Must be an instance of
L<XML::LibXML::Node>.
=item * $namespaces
The namespaces declared in the document. Must be an hash ref where the keys are
the URIs and the values the prefixes of the namespaces.
=back
=cut
sub load_tree_store {
my $class = shift;
my ($store, $node, $namespaces) = @_;
xacobeo_populate_gtk_tree_store($store, $node, $namespaces);
}
=head2 get_node_mark
Returns a unique identifier for the given node.
Parameters:
=over
=item * $node
The node. Must be an instance of L<XML::LibXML::Node>.
=back
=cut
sub get_node_mark {
my $class = shift;
my ($node) = @_;
xacobeo_get_node_mark($node);
}
=head2 get_node_path
Returns a unique XPath path for the given L<XML::LibXML::Node>. The path will
use node names using the right prefixes.
Parameters:
=over
=item * $node
The node for which the path has to be computed. Must be an instance of
L<XML::LibXML::Node>.
=item * $namespaces
The namespaces declared in the document. Must be an hash ref where the keys are
the URIs and the values the prefixes of the namespaces.
=back
=cut
sub get_node_path {
my $class = shift;
my ($node, $namespaces) = @_;
xacobeo_get_node_path($node, $namespaces);
}
__PACKAGE__->bootstrap;
# A true value
1;
=head1 AUTHORS
Emmanuel Rodriguez E<lt>potyl@cpan.orgE<gt>.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2008,2009 by Emmanuel Rodriguez.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.
=cut