summaryrefslogtreecommitdiff
path: root/oovbaapi
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2007-12-07 10:17:00 +0000
committerVladimir Glazounov <vg@openoffice.org>2007-12-07 10:17:00 +0000
commit3464b8ec60f175fb4c77a795e41d7395fa8d4e88 (patch)
tree8db65ade425b8528c9d136910b87141cd8735dff /oovbaapi
parentd4f72f3394cd92ac231242cbb6d7b3320cbd7469 (diff)
INTEGRATION: CWS npower8 (1.1.2); FILE ADDED
2007/07/17 08:26:28 npower 1.1.2.1: due to continuing problems with the combination of xslt, gcj, 64bit systems kendy re-wrote the transformation in perl resulting in a much faster cleaner solution.. thanks kendy!!
Diffstat (limited to 'oovbaapi')
-rw-r--r--oovbaapi/genconstidl/api-to-idl.pl209
1 files changed, 209 insertions, 0 deletions
diff --git a/oovbaapi/genconstidl/api-to-idl.pl b/oovbaapi/genconstidl/api-to-idl.pl
new file mode 100644
index 000000000000..4fe061ccb878
--- /dev/null
+++ b/oovbaapi/genconstidl/api-to-idl.pl
@@ -0,0 +1,209 @@
+:
+ eval 'exec perl -S $0 ${1+"$@"}'
+ if 0;
+#*************************************************************************
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: api-to-idl.pl,v $
+#
+# $Revision: 1.2 $
+#
+# last change: $Author: vg $ $Date: 2007-12-07 11:17:00 $
+#
+# The Contents of this file are made available subject to
+# the terms of GNU Lesser General Public License Version 2.1.
+#
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2005 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#*************************************************************************
+
+sub usage() {
+ print "Usage: api-to-idl.pl source.api destination_path\n";
+ print;
+ print "This tool converts oovbaapi *.api files into *.idl's.\n";
+ exit 1;
+}
+
+my $src = shift;
+my $dest = shift;
+
+if ( !defined( $src ) || !defined( $dest ) || $src eq "-h" || $src eq "--help" ) {
+ usage();
+}
+
+# Parsing functions
+my $state = "";
+my $source = "";
+my $name = "";
+my $value = "";
+
+my %result;
+
+# Process element start event
+sub start_element($) {
+ my ($el) = @_;
+
+ @element_attr = split( /\s+/, $el );
+ my $element = $element_attr[0];
+
+ if ( $element eq "element" ) {
+ if ( $element_attr[1] =~ /type="?([^"]*)"?/ && $1 eq "constant" ) {
+ $state = "constant";
+ $source = "";
+ $name = "";
+ $value = "";
+ }
+ }
+ elsif ( $state eq "constant" && $element eq "source" ) {
+ $state = "source";
+ if ( $element_attr[1] =~ /id="?([^"]*)"?/ ) {
+ chomp( $source = $1 );
+ }
+ }
+ elsif ( $state eq "source" && $element eq "name" ) {
+ $state = "name";
+ }
+ elsif ( $state eq "source" && $element eq "value" ) {
+ $state = "value";
+ }
+}
+
+# Process element end event
+sub end_element($) {
+ my ($element) = @_;
+
+ if ( $state eq "name" && $element eq "name" ) {
+ $state = "source";
+ }
+ elsif ( $state eq "value" && $element eq "value" ) {
+ $state = "source";
+ }
+ elsif ( $state ne "" && $element eq "element" ) {
+ $state = "";
+
+ my @destination = split( /\./, $source );
+ my $module = shift( @destination );
+ my $type = shift( @destination );
+
+ $module =~ tr/[A-Z]/[a-z]/;
+
+ $result{$module} = {} unless exists $result{$module};
+ $result{$module}{$type} = [] unless exists $result{$module}{$type};
+
+ push( @{$result{$module}{$type}},
+ { "name" => $name, "value" => $value } );
+ }
+}
+
+# Process characters
+sub characters($) {
+ my ($data) = @_;
+
+ if ( $state eq "name" ) {
+ chomp( $name = $data );
+ }
+ elsif ( $state eq "value" ) {
+ chomp( $value = $data );
+ }
+}
+
+# Create idls from the parsed data
+sub generate_idls($) {
+ my ($path) = @_;
+
+ foreach $module ( keys %result ) {
+ foreach $type ( keys %{$result{$module}} ) {
+ my $fname = $path . "/" . $type . ".idl";
+ open( IDL, ">$fname" ) || die "Cannot write $fname.";
+
+ print IDL "module org { module openoffice { module $module {\n";
+ print IDL " constants $type {\n";
+ foreach $constant ( @{$result{$module}{$type}} ) {
+ print IDL " const long $constant->{'name'} = $constant->{'value'};\n";
+ }
+ print IDL " };\n}; }; };\n";
+
+ close( IDL );
+ }
+ }
+}
+
+# Parse the input
+open( IN, "<$src" ) || die "Cannot open $src.";
+
+my $in_comment = 0;
+my $line = "";
+while (<IN>) {
+ # ignore comments
+ s/<!--[^>]*-->//g;
+ if ( /<!--/ ) {
+ $in_comment = 1;
+ s/<!--.*//;
+ }
+ elsif ( /-->/ && $in_comment ) {
+ $in_comment = 0;
+ s/.*-->//;
+ }
+ elsif ( $in_comment ) {
+ next;
+ }
+ # ignore empty lines
+ chomp;
+ s/^\s*//;
+ s/\s*$//;
+ next if ( $_ eq "" );
+
+ # take care of lines where element continues
+ if ( $line ne "" ) {
+ $line .= " " . $_;
+ }
+ else {
+ $line = $_;
+ }
+ next if ( !/>$/ );
+
+ # the actual parsing
+ my @starts = split( /</, $line );
+ $line = "";
+ foreach $start ( @starts ) {
+ next if ( $start eq "" );
+
+ @ends = split( />/, $start );
+ my $element = $ends[0];
+ my $data = $ends[1];
+
+ # start or end element
+ if ( $element =~ /^\/(.*)/ ) {
+ end_element( $1 );
+ }
+ else {
+ start_element( $element );
+ }
+
+ # the data
+ characters( $data );
+ }
+}
+close( IN );
+
+# Generate the output
+generate_idls($dest);