common/tools/raptor/XML/SAX/ParserFactory.pm
author MattD <mattd@symbian.org>
Tue, 04 Aug 2009 14:40:11 +0100
changeset 307 989c70555820
permissions -rw-r--r--
raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
307
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     1
# $Id: ParserFactory.pm,v 1.13 2002/11/19 18:25:47 matt Exp $
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     2
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     3
package XML::SAX::ParserFactory;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     4
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     5
use strict;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     6
use vars qw($VERSION);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     7
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     8
$VERSION = '1.01';
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
     9
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    10
use Symbol qw(gensym);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    11
use XML::SAX;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    12
use XML::SAX::Exception;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    13
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    14
sub new {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    15
    my $class = shift;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    16
    my %params = @_; # TODO : Fix this in spec.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    17
    my $self = bless \%params, $class;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    18
    $self->{KnownParsers} = XML::SAX->parsers();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    19
    return $self;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    20
}
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    21
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    22
sub parser {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    23
    my $self = shift;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    24
    my @parser_params = @_;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    25
    if (!ref($self)) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    26
        $self = $self->new();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    27
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    28
    
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    29
    my $parser_class = $self->_parser_class();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    30
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    31
    my $version = '';
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    32
    if ($parser_class =~ s/\s*\(([\d\.]+)\)\s*$//) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    33
        $version = " $1";
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    34
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    35
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    36
    {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    37
        no strict 'refs';
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    38
        if (!keys %{"${parser_class}::"}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    39
            eval "use $parser_class $version;";
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    40
        }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    41
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    42
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    43
    return $parser_class->new(@parser_params);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    44
}
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    45
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    46
sub require_feature {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    47
    my $self = shift;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    48
    my ($feature) = @_;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    49
    $self->{RequiredFeatures}{$feature}++;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    50
    return $self;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    51
}
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    52
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    53
sub _parser_class {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    54
    my $self = shift;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    55
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    56
    # First try ParserPackage
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    57
    if ($XML::SAX::ParserPackage) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    58
        return $XML::SAX::ParserPackage;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    59
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    60
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    61
    # Now check if required/preferred is there
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    62
    if ($self->{RequiredFeatures}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    63
        my %required = %{$self->{RequiredFeatures}};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    64
        # note - we never go onto the next try (ParserDetails.ini),
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    65
        # because if we can't provide the requested feature
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    66
        # we need to throw an exception.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    67
        PARSER:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    68
        foreach my $parser (reverse @{$self->{KnownParsers}}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    69
            foreach my $feature (keys %required) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    70
                if (!exists $parser->{Features}{$feature}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    71
                    next PARSER;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    72
                }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    73
            }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    74
            # got here - all features must exist!
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    75
            return $parser->{Name};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    76
        }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    77
        # TODO : should this be NotSupported() ?
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    78
        throw XML::SAX::Exception (
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    79
                Message => "Unable to provide required features",
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    80
            );
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    81
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    82
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    83
    # Next try SAX.ini
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    84
    for my $dir (@INC) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    85
        my $fh = gensym();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    86
        if (open($fh, "$dir/SAX.ini")) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    87
            my $param_list = XML::SAX->_parse_ini_file($fh);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    88
            my $params = $param_list->[0]->{Features};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    89
            if ($params->{ParserPackage}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    90
                return $params->{ParserPackage};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    91
            }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    92
            else {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    93
                # we have required features (or nothing?)
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    94
                PARSER:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    95
                foreach my $parser (reverse @{$self->{KnownParsers}}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    96
                    foreach my $feature (keys %$params) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    97
                        if (!exists $parser->{Features}{$feature}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    98
                            next PARSER;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
    99
                        }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   100
                    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   101
                    return $parser->{Name};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   102
                }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   103
                XML::SAX->do_warn("Unable to provide SAX.ini required features. Using fallback\n");
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   104
            } 
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   105
            last; # stop after first INI found
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   106
        }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   107
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   108
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   109
    if (@{$self->{KnownParsers}}) {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   110
        return $self->{KnownParsers}[-1]{Name};
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   111
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   112
    else {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   113
        return "XML::SAX::PurePerl"; # backup plan!
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   114
    }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   115
}
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   116
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   117
1;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   118
__END__
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   119
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   120
=head1 NAME
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   121
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   122
XML::SAX::ParserFactory - Obtain a SAX parser
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   123
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   124
=head1 SYNOPSIS
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   125
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   126
  use XML::SAX::ParserFactory;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   127
  use XML::SAX::XYZHandler;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   128
  my $handler = XML::SAX::XYZHandler->new();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   129
  my $p = XML::SAX::ParserFactory->parser(Handler => $handler);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   130
  $p->parse_uri("foo.xml");
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   131
  # or $p->parse_string("<foo/>") or $p->parse_file($fh);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   132
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   133
=head1 DESCRIPTION
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   134
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   135
XML::SAX::ParserFactory is a factory class for providing an application
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   136
with a Perl SAX2 XML parser. It is akin to DBI - a front end for other
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   137
parser classes. Each new SAX2 parser installed will register itself
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   138
with XML::SAX, and then it will become available to all applications
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   139
that use XML::SAX::ParserFactory to obtain a SAX parser.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   140
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   141
Unlike DBI however, XML/SAX parsers almost all work alike (especially
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   142
if they subclass XML::SAX::Base, as they should), so rather than
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   143
specifying the parser you want in the call to C<parser()>, XML::SAX
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   144
has several ways to automatically choose which parser to use:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   145
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   146
=over 4
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   147
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   148
=item * $XML::SAX::ParserPackage
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   149
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   150
If this package variable is set, then this package is C<require()>d
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   151
and an instance of this package is returned by calling the C<new()>
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   152
class method in that package. If it cannot be loaded or there is
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   153
an error, an exception will be thrown. The variable can also contain
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   154
a version number:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   155
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   156
  $XML::SAX::ParserPackage = "XML::SAX::Expat (0.72)";
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   157
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   158
And the number will be treated as a minimum version number.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   159
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   160
=item * Required features
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   161
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   162
It is possible to require features from the parsers. For example, you
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   163
may wish for a parser that supports validation via a DTD. To do that,
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   164
use the following code:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   165
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   166
  use XML::SAX::ParserFactory;
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   167
  my $factory = XML::SAX::ParserFactory->new();
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   168
  $factory->require_feature('http://xml.org/sax/features/validation');
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   169
  my $parser = $factory->parser(...);
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   170
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   171
Alternatively, specify the required features in the call to the
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   172
ParserFactory constructor:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   173
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   174
  my $factory = XML::SAX::ParserFactory->new(
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   175
          RequiredFeatures => {
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   176
               'http://xml.org/sax/features/validation' => 1,
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   177
               }
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   178
          );
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   179
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   180
If the features you have asked for are unavailable (for example the
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   181
user might not have a validating parser installed), then an
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   182
exception will be thrown.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   183
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   184
The list of known parsers is searched in reverse order, so it will
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   185
always return the last installed parser that supports all of your
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   186
requested features (Note: this is subject to change if someone
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   187
comes up with a better way of making this work).
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   188
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   189
=item * SAX.ini
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   190
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   191
ParserFactory will search @INC for a file called SAX.ini, which
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   192
is in a simple format:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   193
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   194
  # a comment looks like this,
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   195
  ; or like this, and are stripped anywhere in the file
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   196
  key = value # SAX.in contains key/value pairs.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   197
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   198
All whitespace is non-significant.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   199
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   200
This file can contain either a line:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   201
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   202
  ParserPackage = MyParserModule (1.02)
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   203
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   204
Where MyParserModule is the module to load and use for the parser,
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   205
and the number in brackets is a minimum version to load.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   206
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   207
Or you can list required features:
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   208
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   209
  http://xml.org/sax/features/validation = 1
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   210
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   211
And each feature with a true value will be required.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   212
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   213
=item * Fallback
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   214
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   215
If none of the above works, the last parser installed on the user's
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   216
system will be used. The XML::SAX package ships with a pure perl
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   217
XML parser, XML::SAX::PurePerl, so that there will always be a
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   218
fallback parser.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   219
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   220
=back
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   221
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   222
=head1 AUTHOR
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   223
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   224
Matt Sergeant, matt@sergeant.org
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   225
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   226
=head1 LICENSE
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   227
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   228
This is free software, you may use it and distribute it under the same
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   229
terms as Perl itself.
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   230
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   231
=cut
989c70555820 raptor parser.pl - adding XML::SAX perl modules (public domain code - http://www.saxproject.org/faq.html) so we don't have to patch up every single build machine.
MattD <mattd@symbian.org>
parents:
diff changeset
   232