Symbian/SysDefToText/SysDefParser.pm
branchRCL_3
changeset 21 ea3e26ea6629
parent 6 c8ecf89eb77f
--- a/Symbian/SysDefToText/SysDefParser.pm	Sat Feb 20 00:39:01 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-#-------------------------------------------------------------------------------
-# package: SysDefParser
-#
-# usage: Wrapper for an XML parser to dispatch callbacks to a client object which
-#    analyses the parsed XML data. The auxiliary package SysDefParser::Dispatcher
-#    acts as an intermediary between the parser and the client to convert function
-#    callbacks to method callbacks using perl's AUTOLOAD mechanism.
-#
-# public methods:
-#
-#    new(-client => <client reference>, [-parser => <package name>]) : creates a
-#        instance. <client reference> is the instance to which the parser callbacks
-#        are dispatched. <package name> is an optional alternative parser client
-#        package to use instead of the default XML::Parser class.
-#
-#    parse(<fileh>): parse the XML data from filehandle <fileh> dispatching
-#        callbacks to the client object.
-#         
-#-------------------------------------------------------------------------------
-
-package SysDefParser;
-use strict;
-
-sub new
-{
-    my ($class, %args) = @_;
-    my $self = bless {}, $class;
-    $self->{client} = delete $args{-client};
-
-    if (exists $args{-parser})
-    {
-        $args{Pkg} = 'SysDefParser::Dispatcher';
-        require $args{-parser};
-        $self->{parser} = $args{-parser}->createParser(%args);
-    }
-    else
-    {
-        $self->{parser} = $class->_createParser(%args);
-    }
-
-    return $self;
-}
-
-sub _createParser
-{
-    my ($class, %args) = @_;
-    require XML::Parser;
-    return XML::Parser->new
-           (
-               Style        => 'Subs',
-               Pkg          => 'SysDefParser::Dispatcher',
-               ErrorContext => 2
-           );
-}
-
-my $PARSERCLIENT = undef;
-
-sub _client { return $PARSERCLIENT; }
-
-sub parse
-{
-    my ($self, $fileh) = @_;
-
-    # we can't pass any context down to the underlying parser so that we can work out which
-    # object any callbacks from the parser are associated with so, assuming that the parser will
-    # not be called in a re-entrant fashion, we store the context at this point, so that we can
-    # then dispatch the callbacks from the parsers 'parse' method to those methods of the saved
-    # $PARSERCLIENT instance.
-
-    die "Fatal: client object not set\n" if ! defined $self->{client};
-    die "Fatal: parser client object already set\n" if defined $PARSERCLIENT;
-    $PARSERCLIENT = $self->{client};
-
-    # call the parser, callbacks will be dispatched to sub AUTOLOAD in SysDefParser::Dispatcher
-
-    my $rv =$self->{parser}->parse($fileh);
-
-    # finished parsing, unset the context
-
-    $PARSERCLIENT = undef;
-
-    return $rv;
-}
-
-#-------------------------------------------------------------------------------
-# package SysDefParser::Dispatcher
-#
-# usage: Internal package. Uses AUTOLOAD mechanism to receive parser callbacks and
-#    convert them to object method calls on teh client object.
-#
-#-------------------------------------------------------------------------------
-package SysDefParser::Dispatcher;
-use strict;
-
-sub AUTOLOAD
-{
-    my @ARGS = @_;
-
-    my $client = SysDefParser::_client();
-
-    die "Fatal: parser client object not set\n" if ! defined $client;
-
-    # translate the called back function name to the client method name
-    my $clientpkg = ref($client);
-    my $method = $SysDefParser::Dispatcher::AUTOLOAD;
-
-    $method =~ s/^SysDefParser::Dispatcher/$clientpkg/;
-
-    # dispatch the parser's callback to the client object (if implemented by client)
-    $client->$method(@ARGS) if $client->can($method);
-}
-
-#-------------------------------------------------------------------------------
-# -EOF-
-#-------------------------------------------------------------------------------
-1;
\ No newline at end of file