MIDI-XML
view release on metacpan or search on metacpan
lib/MIDI/XML.pm view on Meta::CPAN
package MIDI::XML;
use strict;
use 5.006;
use Carp;
use XML::DOM;
use XML::Parser;
use Class::ISA;
our @ISA = qw();
our @EXPORT = qw();
our @EXPORT_OK = qw();
our $VERSION = 0.03;
=head1 NAME
MIDI::XML - Module for representing MIDI-XML objects.
=head1 SYNOPSIS
use MIDI::XML;
$document = MIDI::XML->parsefile($file);
=head1 DESCRIPTION
=head2 EXPORT
None by default.
=cut
my %sax_handlers = (
'Init' => \&handle_init,
'Final' => \&handle_final,
'Start' => \&handle_start,
'End' => \&handle_end,
'Char' => \&handle_char,
'Proc' => \&handle_proc,
'Comment' => \&handle_comment,
'CdataStart' => \&handle_cdata_start,
'CdataEnd' => \&handle_cdata_end,
'Default' => \&handle_default,
'Unparsed' => \&handle_unparsed,
'Notation' => \&handle_notation,
'ExternEnt' => \&handle_extern_ent,
'ExternEntFin' => \&handle_extern_ent_fin,
'Entity' => \&handle_entity,
'Element' => \&handle_element,
'Attlist' => \&handle_attlist,
'Doctype' => \&handle_doctype,
'DoctypeFin' => \&handle_doctype_fin,
'XMLDecl' => \&handle_xml_decl,
);
my @elem_stack;
my $Document;
my %attributeAsElement = (
'Absolute' => 1,
'Delta' => 1,
'Format' => 1,
'FrameRate' => 1,
'TicksPerBeat' => 1,
'TicksPerFrame' => 1,
'TimestampType' => 1,
'TrackCount' => 1,
);
#=================================================================
# Init (Expat)
sub handle_init() {
my ($expat) = @_;
$Document = MIDI::XML::Document->new();
push @elem_stack,$Document;
}
#=================================================================
# Final (Expat)
sub handle_final() {
my ($expat) = @_;
}
#=================================================================
# Start (Expat, Tag [, Attr, Val [,...]])
sub handle_start() {
my ($expat, $tag, %attrs) = @_;
my $Element = $Document->createElement($tag);
foreach my $attr (keys %attrs) {
$Element->setAttribute($attr,$attrs{$attr});
}
if($attributeAsElement{$tag}) {
$elem_stack[-1]->attribute_as_element($tag,$Element) if(@elem_stack);
} else {
$elem_stack[-1]->appendChild($Element) if(@elem_stack);
}
push @elem_stack,$Element;
}
#=================================================================
# End (Expat, Tag)
sub handle_end() {
my ($expat, $tag) = @_;
my $Element = pop @elem_stack;
}
#=================================================================
# Char (Expat, String)
sub handle_char() {
my ($expat, $string) = @_;
$elem_stack[-1]->appendChild($Document->createTextNode($string));
}
#=================================================================
# Proc (Expat, Target, Data)
sub handle_proc() {
my ($expat, $target, $data) = @_;
$elem_stack[-1]->appendChild($Document->createProcessingInstruction($target, $data));
}
#=================================================================
# Comment (Expat, Data)
sub handle_comment() {
my ($expat, $data) = @_;
$elem_stack[-1]->appendChild($Document->createComment($data));
}
#=================================================================
# CdataStart (Expat)
sub handle_cdata_start() {
my ($expat) = @_;
}
#=================================================================
# CdataEnd (Expat)
sub handle_cdata_end() {
my ($expat) = @_;
}
#=================================================================
# Default (Expat, String)
sub handle_default() {
my ($expat, $string) = @_;
}
#=================================================================
# Unparsed (Expat, Entity, Base, Sysid, Pubid, Notation)
sub handle_unparsed() {
my ($expat, $entity, $base, $sysid, $pubid, $notation) = @_;
}
#=================================================================
# Notation (Expat, Notation, Base, Sysid, Pubid)
sub handle_notation() {
my ($expat, $notation, $base, $sysid, $pubid) = @_;
}
#=================================================================
# ExternEnt (Expat, Base, Sysid, Pubid)
sub handle_extern_ent() {
my ($expat, $base, $sysid, $pubid) = @_;
}
#=================================================================
# ExternEntFin (Expat)
sub handle_extern_ent_fin() {
my ($expat) = @_;
}
#=================================================================
# Entity (Expat, Name, Val, Sysid, Pubid, Ndata, IsParam)
sub handle_entity() {
my ($expat, $name, $val, $sysid, $pubid, $ndata, $isParam) = @_;
}
#=================================================================
# Element (Expat, Name, Model)
sub handle_element() {
my ($expat, $name, $model) = @_;
}
#=================================================================
# Attlist (Expat, Elname, Attname, Type, Default, Fixed)
sub handle_attlist() {
my ($expat, $elname, $attname, $type, $default, $fixed) = @_;
}
#=================================================================
( run in 0.648 second using v1.01-cache-2.11-cpan-9581c071862 )