Rinchi-CPlusPlus-Preprocessor
view release on metacpan or search on metacpan
lib/Rinchi/CPlusPlus/Preprocessor.pm view on Meta::CPAN
=head1 NAME
Rinchi::CPlusPlus::Preprocessor - A C++ to XML SAX preprocessor.
=head1 SYNOPSIS
use CPlusPlus::Preprocessor;
my @args = (
'test.pl',
'-I/usr/include',
'-Uccc',
);
my $closed = 0;
my $cpp = new Rinchi::CPlusPlus::Preprocessor;
$cpp->setHandlers('Start' => \&startElementHandler,
'End' => \&endElementHandler,
'Char' => \&characterDataHandler,
'Proc' => \&processingInstructionHandler,
'Comment' => \&commentHandler,
'CdataStart' => \&startCdataHandler,
'CdataEnd' => \&endCdataHandler,
'XMLDecl' => \&xmlDeclHandler,
);
$cpp->process_file('test_src/include_test_1.h',\@args);
sub startElementHandler() {
my ($tag, $hasChild, %attrs) = @_;
print "<$tag";
foreach my $attr (sort keys %attrs) {
my $val = $attrs{$attr};
$val =~ s/&/&/g;
$val =~ s/</</g;
$val =~ s/>/>/g;
$val =~ s/\"/"/g;
$val =~ s/\'/'/g;
print " $attr=\"$val\"";
}
if ($hasChild == 0) {
print " />";
$closed = 1;
} else {
print ">";
$closed = 0;
}
}
sub endElementHandler() {
my ($tag) = @_;
if ($closed == 0) {
print "</$tag>\n";
} else {
$closed = 0;
}
}
sub characterDataHandler() {
my ($cdata) = @_;
print $cdata;
}
sub processingInstructionHandler() {
my ($target,$data) = @_;
print "<?$target $data?>\n";
}
sub commentHandler() {
my ($string) = @_;
print "<!-- $string -->\n";
}
sub startCdataHandler() {
print "<![CDATA[";
}
sub endCdataHandler() {
print "]]>";
}
sub xmlDeclHandler() {
my ($version, $encoding, $standalone) = @_;
print "<?xml version=\"$version\" encoding=\"$encoding\" standalone=\"$standalone\"?>\n";
}
=cut
=head1 DESCRIPTION
This module provides an interface to a C++ preprocessor.
=head2 EXPORT
None by default.
=head1 METHODS
=over 4
=item new
Constructor for CPlusPlus::Preprocessor. Options are TBD.
=cut
sub new {
my ($class, %args) = @_;
my $self = bless \%args, $class;
$args{'_State_'} = 0;
$args{'Context'} = [];
$args{'ErrorMessage'} ||= '';
$args{'_Setters'} = \%Handler_Setters;
# $args{Parser} = ParserCreate($self, $args{ProtocolEncoding},
# $args{Namespaces});
$self;
}
=item setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
This method registers handlers for the various events. If no handlers are
( run in 1.634 second using v1.01-cache-2.11-cpan-9581c071862 )