97da5f56bd
2009-01-21 11:00:00 +0100 npower r266639 : replace ScAddress::CONV_XL_R1C1 with formula::FormulaGrammar::CONV_XL_R1C1 2009-01-21 10:58:33 +0100 npower r266638 : fixup access for changes to compiler.[ch]xx 2009-01-21 10:57:46 +0100 npower r266637 : replace the static with non-static member ( to align with the latest m39 ) changes 2009-01-20 11:53:52 +0100 npower r266562 : CWS-TOOLING: rebase CWS npower11 to trunk@266428 (milestone: DEV300:m39) 2009-01-09 23:31:00 +0100 cloph r266122 : fix typo (missing "="), initialize variables to avoid WaE breakage 2009-01-09 11:57:20 +0100 npower r266071 : wae Mac OSX gcc-4.0.1 (PPC) 2009-01-08 11:09:49 +0100 npower r265986 : wae - Mac OSX gcc-4.0.1 (PPC) 2009-01-07 10:33:20 +0100 npower r265952 : wae Mac OSX gcc-4.0.1 2008-12-18 19:14:10 +0100 npower r265712 : wae for wntmsci12 target 2008-12-17 16:14:54 +0100 npower r265640 : add Outline property for Font, also remove growing list of friend classes for ScCellRangeObj and replace by a single class. 2008-12-17 16:11:02 +0100 npower r265639 : fix path variable for 3.1, also tweak the unix logs 2008-12-11 02:39:58 +0100 hanbo r265233 : fix the vba/vba namespace of constants 2008-11-25 17:05:39 +0100 npower r264317 : namespace changes 2008-11-25 14:12:37 +0100 npower r264308 : revert changes made by mistake when migrating cws 2008-11-25 13:30:59 +0100 npower r264296 : i#93944# namespace changes 2008-11-25 13:29:25 +0100 npower r264293 : i#93944# namespace changes 2008-11-25 13:27:08 +0100 npower r264289 : i#93944# namespace changes 2008-11-24 18:24:17 +0100 npower r264263 : svn migration 2008-11-24 18:22:47 +0100 npower r264262 : not needed anymore 2008-11-24 18:21:23 +0100 npower r264261 : svn migration 2008-11-24 18:18:31 +0100 npower r264260 : svn migration
216 lines
5.3 KiB
Perl
216 lines
5.3 KiB
Perl
:
|
|
eval 'exec perl -S $0 ${1+"$@"}'
|
|
if 0;
|
|
#*************************************************************************
|
|
#
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# Copyright 2008 by Sun Microsystems, Inc.
|
|
#
|
|
# OpenOffice.org - a multi-platform office productivity suite
|
|
#
|
|
# $RCSfile: api-to-idl.pl,v $
|
|
#
|
|
# $Revision: 1.3 $
|
|
#
|
|
# This file is part of OpenOffice.org.
|
|
#
|
|
# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Lesser General Public License version 3
|
|
# only, as published by the Free Software Foundation.
|
|
#
|
|
# OpenOffice.org 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 version 3 for more details
|
|
# (a copy is included in the LICENSE file that accompanied this code).
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# version 3 along with OpenOffice.org. If not, see
|
|
# <http://www.openoffice.org/license.html>
|
|
# for a copy of the LGPLv3 License.
|
|
#
|
|
#*************************************************************************
|
|
|
|
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.";
|
|
|
|
if( $module eq "vba" ) {
|
|
print IDL "module ooo { module $module {\n";
|
|
}
|
|
else {
|
|
print IDL "module ooo { module vba { module $module {\n";
|
|
}
|
|
|
|
print IDL " constants $type {\n";
|
|
foreach $constant ( @{$result{$module}{$type}} ) {
|
|
print IDL " const long $constant->{'name'} = $constant->{'value'};\n";
|
|
}
|
|
if( $module eq "vba" ) {
|
|
print IDL " };\n}; };\n";
|
|
}
|
|
else {
|
|
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);
|