download JavaMLHandlers.pm
Language: Perl
LOC: 260
Project Info
JavaML
Server: SourceForge
Type: cvs
...avaml\javaml\java‑ml\tools\
   call-graph.xsl
   chart-to-svg.xsl
   class-hierarchy.xsl
   ..._XML_Tree_Viewer_35.xsl
   foo.xsl
   identity.xsl
   ...ml-extract-comments.xsl
   javaml-to-csharp.xsl
   javaml-to-html.xsl
   javaml-to-plain-source.xsl
   JavaMLHandlers.pm
   method-rename.xsl
   ...ds-for-each-complex.xsl
   methods-for-each.xsl
   methods.xsl
   module-dependencies.xsl
   ...le-dependency-graph.xsl
   null-xform.xsl
   pretty-printer.xsl
   print-date.xsl
   ReflectDump.java
   showtree-19991008.xsl
   strip-attributes.sgmltrans
   xml-flatten.xslt

# $Id: JavaMLHandlers.pm,v 1.1.1.1 2002/01/13 18:59:44 gjbadros Exp $
#

package JavaMLHandlers;

use vars qw{ $AUTOLOAD };

sub new {
    my $type = shift;
    my $self = ( $#_ == 0 ) ? shift : { @_ };

    return bless $self, $type;
}

my $meth_name = undef;
my $meth_visibility = undef;
my $meth_id = undef;
my $meth_modifiers = undef;
my $meth_num_brackets = undef;
my @meth_formals = ();
my $meth_type = undef;

my $formal_name = undef;
my $formal_final = undef;
my $formal_id = undef;
my $formal_type = undef;

my $send_target = undef;

my $field_name = undef;

open(DEBUG,">java-ml-handers.debug");

# Basic PerlSAX
sub start_document            { print DEBUG "start_document\n"; }
sub end_document              { print DEBUG "end_document\n"; }
sub characters                { print DEBUG "characters\n"; }
sub processing_instruction    { print DEBUG "processing_instruction\n"; }
sub ignorable_whitespace      { print DEBUG "ignorable_whitespace\n"; }

sub start_element {
  my ($self, $element) = @_;
  my $name = $element->{Name};
  my $href_attribs = $element->{Attributes};
  if (0) {
  } elsif ($name eq "java-source-program") {
  } elsif ($name eq "import") {
    my $module = $href_attribs->{module};
    print "import $module;\n";
  } elsif ($name eq "class") {
    my $visibility = $href_attribs->{visibility};
    my $name = $href_attribs->{name};
    my $superclass = $href_attribs->{superclass};
    delete $href_attribs->{visibility};
    delete $href_attribs->{name};
    delete $href_attribs->{superclass};
    print "$visibility ", join(" ", values %$href_attribs), " class $name";
    if (defined($superclass)) {
      print " extends $superclass ";
    }
    print " {\n";
  } elsif ($name eq "implement") {
  } elsif ($name eq "field") {
  } elsif ($name eq "constructor") {
  } elsif ($name eq "method") {
    $meth_name = $href_attribs->{name};
    $meth_visibility = $href_attribs->{visibility};
    $meth_id = $href_attribs->{id};
    $meth_num_brackets = $href_attribs->{num_brackets};
    delete $href_attribs->{name};
    delete $href_attribs->{visibility};
    delete $href_attribs->{id};
    delete $href_attribs->{num_brackets};
    $meth_modifiers = join(" ", values %$href_attribs);
  } elsif ($name eq "comment") {
  } elsif ($name eq "formal-arguments") {
  } elsif ($name eq "formal-argument") {
    $formal_name = $href_attribs->{name};
    $formal_final = 1 if $href_attribs->{final};
    $formal_id = $href_attribs->{id};
  } elsif ($name eq "send") {
  } elsif ($name eq "target") {
    $send_target = $href_attribs;
  } elsif ($name eq "return") {
  } elsif ($name eq "statements") {
    if (defined($meth_name)) {
      print "$meth_visibility $meth_modifiers ", join(" ", values %$href_attribs), "$meth_type $meth_name (",
      join(",",@meth_formals), ")";
      $meth_visibility = undef;
      $meth_name = undef;
      $meth_id = undef;
      $meth_num_brackets = undef;
      $meth_modifiers = undef;
      $meth_type = undef;
      @meth_formals = ();
      print "\n";
    }
    print "{\n";
  } elsif ($name eq "throw") {
  } elsif ($name eq "throws") {
  } elsif ($name eq "new") {
  } elsif ($name eq "type") {
    if (!defined($formal_name)) {
      $meth_type = $href_attribs->{name};
    } else {
      $formal_type = $href_attribs->{name};
    }
  } elsif ($name eq "new-array") {
  } elsif ($name eq "dim-expr") {
  } elsif ($name eq "local-variable") {
  } elsif ($name eq "arguments") {
    print "(";
  } elsif ($name eq "literal-string") {
    print $href_attribs->{value};
  } elsif ($name eq "literal-number") {
    print $href_attribs->{value};
  } elsif ($name eq "var-ref") {
  } elsif ($name eq "field-access") {
    $field_name = $href_attribs->{field};
  } elsif ($name eq "var-set") {
  } elsif ($name eq "field-set") {
  } elsif ($name eq "package-decl") {
  } elsif ($name eq "assignment-expr") {
  } elsif ($name eq "lvalue") {
  } elsif ($name eq "binary-expr") {
  } elsif ($name eq "paren") {
  } elsif ($name eq "unary-expr") {
  } elsif ($name eq "cast-expr") {
  } elsif ($name eq "literal-false") {
  } elsif ($name eq "literal-true") {
  } elsif ($name eq "literal-null") {
  } elsif ($name eq "if") {
  } elsif ($name eq "test") {
  } elsif ($name eq "true-case") {
  } elsif ($name eq "false-case") {
  } elsif ($name eq "array-ref") {
  } elsif ($name eq "base") {
  } elsif ($name eq "offset") {
  } elsif ($name eq "static-initializer") {
  } elsif ($name eq "super-call") {
  } elsif ($name eq "this-call") {
  } elsif ($name eq "super") {
  } elsif ($name eq "this") {
  } elsif ($name eq "loop") {
  } elsif ($name eq "init") {
  } elsif ($name eq "update") {
  } elsif ($name eq "do-loop") {
  } elsif ($name eq "try") {
  } elsif ($name eq "catch") {
  } elsif ($name eq "finally") {
  } elsif ($name eq "continue") {
  } elsif ($name eq "break") {
  } elsif ($name eq "conditional-expr") {
  }
}

sub end_element {
  my ($self, $element) = @_;
  my $name = $element->{Name};
  if (0) {
  } elsif ($name eq "java-source-program") {
  } elsif ($name eq "import") {
  } elsif ($name eq "class") {
    print "}\n";
  } elsif ($name eq "implement") {
  } elsif ($name eq "field") {
  } elsif ($name eq "constructor") {
  } elsif ($name eq "method") {
  } elsif ($name eq "comment") {
  } elsif ($name eq "formal-arguments") {
  } elsif ($name eq "formal-argument") {
    push @meth_formals, "$formal_type $formal_name";
  } elsif ($name eq "send") {
  } elsif ($name eq "target") {
  } elsif ($name eq "return") {
  } elsif ($name eq "statements") {
    print "}\n";
  } elsif ($name eq "throw") {
  } elsif ($name eq "throws") {
  } elsif ($name eq "new") {
  } elsif ($name eq "type") {
  } elsif ($name eq "new-array") {
  } elsif ($name eq "dim-expr") {
  } elsif ($name eq "local-variable") {
  } elsif ($name eq "arguments") {
    print ")";
  } elsif ($name eq "literal-string") {
  } elsif ($name eq "literal-number") {
  } elsif ($name eq "var-ref") {
  } elsif ($name eq "field-access") {
    $field_name = undef;
  } elsif ($name eq "var-set") {
  } elsif ($name eq "field-set") {
  } elsif ($name eq "package-decl") {
  } elsif ($name eq "assignment-expr") {
  } elsif ($name eq "lvalue") {
  } elsif ($name eq "binary-expr") {
  } elsif ($name eq "paren") {
  } elsif ($name eq "unary-expr") {
  } elsif ($name eq "cast-expr") {
  } elsif ($name eq "literal-false") {
    print "false";
  } elsif ($name eq "literal-true") {
    print "true";
  } elsif ($name eq "literal-null") {
    print "null";
  } elsif ($name eq "if") {
  } elsif ($name eq "test") {
  } elsif ($name eq "true-case") {
  } elsif ($name eq "false-case") {
  } elsif ($name eq "array-ref") {
  } elsif ($name eq "base") {
  } elsif ($name eq "offset") {
  } elsif ($name eq "static-initializer") {
  } elsif ($name eq "super-call") {
  } elsif ($name eq "this-call") {
  } elsif ($name eq "super") {
  } elsif ($name eq "this") {
  } elsif ($name eq "loop") {
  } elsif ($name eq "init") {
  } elsif ($name eq "update") {
  } elsif ($name eq "do-loop") {
  } elsif ($name eq "try") {
  } elsif ($name eq "catch") {
  } elsif ($name eq "finally") {
  } elsif ($name eq "continue") {
  } elsif ($name eq "break") {
  } elsif ($name eq "conditional-expr") {
  }
}


# Additional expat callbacks in XML::Parser::PerlSAX
sub comment                   { print DEBUG "comment\n"; }
sub notation_decl             { print DEBUG "notation_decl\n"; }
sub unparsed_entity_decl      { print DEBUG "unparsed_entity_decl\n"; }
sub entity_decl               { print DEBUG "entity_decl\n"; }
sub element_decl              { print DEBUG "element_decl\n"; }
sub doctype_decl              { print DEBUG "doctype_decl\n"; }
sub xml_decl                  { print DEBUG "xml_decl\n"; }

# Additional SP/nsgmls callbacks in XML::ESISParser
sub start_subdoc              { print DEBUG "start_subdoc\n"; }
sub end_subdoc                { print DEBUG "start_subdoc\n"; }
sub appinfo                   { print DEBUG "appinfo\n"; }
sub internal_entity_ref       { print DEBUG "sdata\n"; }
sub external_entity_ref       { print DEBUG "sdata\n"; }
sub record_end                { print DEBUG "record_end\n"; }
sub internal_entity_decl      { print DEBUG "internal_entity_decl\n"; }
sub external_entity_decl      { print DEBUG "external_entity_decl\n"; }
sub external_sgml_entity_decl { print DEBUG "external_sgml_entity_decl\n"; }
sub subdoc_entity_decl        { print DEBUG "subdoc_entity_decl\n"; }
sub notation                  { print DEBUG "notation\n"; }
sub error                     { print DEBUG "error\n"; }
sub conforming                { print DEBUG "conforming\n"; }

# Others
sub AUTOLOAD {
    my $self = shift;

    my $method = $AUTOLOAD;
    $method =~ s/.*:://;
    return if $method eq 'DESTROY';

    print "UNRECOGNIZED $method\n";
}

1;

__END__

=head1 NAME

JavaMLHandlers -- Covert JavaML back to normal Java
(modified from XML::Handler::Sample)

=head1 SYNOPSIS

 use XML::Parser::PerlSAX;
 use JavaMLHandlers;

 $my_handler = XML::Handler::Sample->new;

 XML::Parser::PerlSAX->new->parse(Source => { SystemId => 'REC-xml-19980210.xml' },
                                  Handler => $my_handler);

=head1 DESCRIPTION

SAX handlers to convert JavaML markup back to plain Java source code.

=head1 AUTHOR

Greg J. Badros <gjb@cs.washington.edu>

=head1 SEE ALSO

perl(1), XML::Handler::Sample(3), PerlSAX.pod(3)

=cut

About Koders | Resources | Downloads | Support | Black Duck | Submit Project | Terms of Service | DMCA | Privacy Policy | Site Map| Contact Us