diff options
Diffstat (limited to 'solenv/bin/modules/par2script/work.pm')
-rw-r--r-- | solenv/bin/modules/par2script/work.pm | 423 |
1 files changed, 0 insertions, 423 deletions
diff --git a/solenv/bin/modules/par2script/work.pm b/solenv/bin/modules/par2script/work.pm deleted file mode 100644 index f8b97087f..000000000 --- a/solenv/bin/modules/par2script/work.pm +++ /dev/null @@ -1,423 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# 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. -# -#************************************************************************* - - -package par2script::work; - -use par2script::existence; -use par2script::globals; -use par2script::remover; - -############################################ -# par2script working module -############################################ - -sub analyze_comma_separated_list -{ - my ($list, $listref) = @_; # second parameter is optional - - my @list = (); - my $locallistref; - - if (!( $listref )) { $locallistref = \@list; } - else { $locallistref = $listref; } - - par2script::remover::remove_leading_and_ending_comma(\$list); - par2script::remover::remove_leading_and_ending_whitespaces(\$list); - - while ( $list =~ /^\s*(.*?)\s*\,\s*(.*)\s*$/ ) - { - my $oneentry = $1; - $list = $2; - par2script::remover::remove_leading_and_ending_whitespaces(\$oneentry); - push(@{$locallistref}, $oneentry); - } - - # the last entry - - par2script::remover::remove_leading_and_ending_whitespaces(\$list); - push(@{$locallistref}, $list); - - return $locallistref; -} - -############################################ -# setting list of include pathes -############################################ - -sub setincludes -{ - my ($list) = @_; - - # input is the comma separated list of include pathes - - my $includes = analyze_comma_separated_list($list); - - return $includes; -} - -############################################ -# setting list of all par files -############################################ - -sub setparfiles -{ - my ($filename) = @_; - - # input is the name of the list file - $filename =~ s/\@//; # removing the leading \@ - - my $filecontent = par2script::files::read_file($filename); - - my @parfiles = (); - my $parfilesref = \@parfiles; - - foreach ( @{$filecontent} ) { $parfilesref = analyze_comma_separated_list($_, $parfilesref); } - - return $parfilesref; -} - -############################################ -# finding the correct include path -# for the par files -############################################ - -sub make_complete_pathes_for_parfiles -{ - my ($parfiles, $includes) = @_; - - my $oneparfile; - - foreach $oneparfile ( @{$parfiles} ) - { - my $foundparfile = 0; - my $includepath; - - foreach $includepath ( @{$includes} ) - { - my $parfile = "$includepath/$oneparfile"; - - if ( -f $parfile ) - { - $foundparfile = 1; - $oneparfile = $parfile; - last; - } - } - - if ( ! $foundparfile ) - { - die "ERROR: Could not find parfile ${$parfiles}[$i] in includes pathes: $par2script::globals::includepathlist !\n"; - } - } -} - -###################################################### -# collecting one special item in the par files and -# including it into the "definitions" hash -###################################################### - -sub collect_definitions -{ - my ($parfilecontent) = @_; - - my $multidefinitionerror = 0; - my @multidefinitiongids = (); - - my %itemhash; - - # create empty item hashes - foreach $oneitem ( @par2script::globals::allitems ) { - my %items; - $par2script::globals::definitions{$oneitem} = \%items; - } - - for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ ) - { - my $line = ${$parfilecontent}[$i]; - my $oneitem, $gid; - - $line =~ /^\s*$/ && next; # skip blank lines - - # lines should be well formed: - if ($line =~ m/^\s*(\w+)\s+(\w+)\s*$/) - { - $oneitem = $1; - $gid = $2; - } else { - chomp ($line); - my $invalid = $line; - $invalid =~ s/[\s\w]*//g; - par2script::exiter::exit_program("ERROR: malformed par file, invalid character '$invalid', expecting <token> <gid> but saw '$line'", "test_par_syntax"); - } -# print STDERR "line '$line' -> '$oneitem' '$gid'\n"; - - # hunt badness variously - if ( ! defined $par2script::globals::definitions{$oneitem} ) - { - par2script::exiter::exit_program("ERROR: invalid scp2 fragment item type '$oneitem' in line: '$line'", "test_par_syntax"); - } - - # no hyphen allowed in gids -> cannot happen here because (\w+) is required for gids - if ( $gid =~ /-/ ) { par2script::exiter::exit_program("ERROR: No hyphen allowed in global id: $gid", "test_of_hyphen"); } - - my %oneitemhash; - - while (! ( ${$parfilecontent}[$i] =~ /^\s*End\s*$/i ) ) - { - if ( ${$parfilecontent}[$i] =~ /^\s*(.+?)\s*\=\s*(.+?)\s*\;\s*$/ ) # only oneliner! - { - $itemkey = $1; - $itemvalue = $2; - - if ( $oneitem eq "Directory" ) { if ( $itemkey =~ "DosName" ) { $itemkey =~ s/DosName/HostName/; } } - if (( $oneitem eq "Directory" ) || ( $oneitem eq "File" ) || ( $oneitem eq "Unixlink" )) { if ( $itemvalue eq "PD_PROGDIR" ) { $itemvalue = "PREDEFINED_PROGDIR"; }} - if (( $itemkey eq "Styles" ) && ( $itemvalue =~ /^\s*(\w+)(\s*\;\s*)$/ )) { $itemvalue = "($1)$2"; } - - $oneitemhash{$itemkey} = $itemvalue; - } - $i++; - } - - my $allitemhash = \$par2script::globals::definitions{$oneitem}; - - # test of uniqueness - if ( defined ($par2script::globals::definitions{$oneitem}->{$gid}) ) - { - $multidefinitionerror = 1; - push(@multidefinitiongids, $gid); - } - - $par2script::globals::definitions{$oneitem}->{$gid} = \%oneitemhash; - } - - if ( $multidefinitionerror ) { par2script::exiter::multidefinitionerror(\@multidefinitiongids); } - - # foreach $key (keys %par2script::globals::definitions) - # { - # print "Key: $key \n"; - # - # foreach $key (keys %{$par2script::globals::definitions{$key}}) - # { - # print "\t$key \n"; - # } - # } -} - -###################################################### -# Filling content into the script -###################################################### - -sub put_oneitem_into_script -{ - my ( $script, $item, $itemhash, $itemkey ) = @_; - - push(@{$script}, "$item $itemkey\n" ); - my $content = ""; - foreach $content (sort keys %{$itemhash->{$itemkey}}) { push(@{$script}, "\t$content = $itemhash->{$itemkey}->{$content};\n" ); } - push(@{$script}, "End\n" ); - push(@{$script}, "\n" ); -} - -###################################################### -# Creating the script -###################################################### - -sub create_script -{ - my @script = (); - my $oneitem; - - foreach $oneitem ( @par2script::globals::allitems ) - { - if ( exists($par2script::globals::definitions{$oneitem}) ) - { - if ( $oneitem eq "Shortcut" ) { next; } # "Shortcuts" after "Files" - - if (( $oneitem eq "Module" ) || ( $oneitem eq "Directory" )) { write_sorted_items(\@script, $oneitem); } - else { write_unsorted_items(\@script, $oneitem); } - } - } - - return \@script; -} - -###################################################### -# Adding script content for the unsorted items -###################################################### - -sub write_unsorted_items -{ - my ( $script, $oneitem ) = @_; - - my $itemhash = $par2script::globals::definitions{$oneitem}; - - my $itemkey = ""; - foreach $itemkey (sort keys %{$itemhash}) - { - put_oneitem_into_script($script, $oneitem, $itemhash, $itemkey); - - # special handling for Shortcuts after Files - if (( $oneitem eq "File" ) && ( exists($par2script::globals::definitions{"Shortcut"}) )) - { - my $shortcutkey; - foreach $shortcutkey ( keys %{$par2script::globals::definitions{"Shortcut"}} ) - { - if ( $par2script::globals::definitions{"Shortcut"}->{$shortcutkey}->{'FileID'} eq $itemkey ) - { - put_oneitem_into_script($script, "Shortcut", $par2script::globals::definitions{"Shortcut"}, $shortcutkey); - - # and Shortcut to Shortcut also - my $internshortcutkey; - foreach $internshortcutkey ( keys %{$par2script::globals::definitions{"Shortcut"}} ) - { - if ( $par2script::globals::definitions{"Shortcut"}->{$internshortcutkey}->{'ShortcutID'} eq $shortcutkey ) - { - put_oneitem_into_script($script, "Shortcut", $par2script::globals::definitions{"Shortcut"}, $internshortcutkey); - } - } - } - } - } - } -} - -###################################################### -# Collecting all children of a specified parent -###################################################### - -sub collect_children -{ - my ( $itemhash, $parent, $order ) = @_; - - my $item; - foreach $item ( keys %{$itemhash} ) - { - if ( $itemhash->{$item}->{'ParentID'} eq $parent ) - { - push(@{$order}, $item); - my $newparent = $item; - collect_children($itemhash, $newparent, $order); - } - } -} - -###################################################### -# Adding script content for the sorted items -###################################################### - -sub write_sorted_items -{ - my ( $script, $oneitem ) = @_; - - my $itemhash = $par2script::globals::definitions{$oneitem}; - - my @itemorder = (); - my @startparents = (); - - if ( $oneitem eq "Module" ) { push(@startparents, ""); } - elsif ( $oneitem eq "Directory" ) { push(@startparents, "PREDEFINED_PROGDIR"); } - else { die "ERROR: No root parent defined for item type $oneitem !\n"; } - - # supporting more than one toplevel item - my $parent; - foreach $parent ( @startparents ) { collect_children($itemhash, $parent, \@itemorder); } - - my $itemkey; - foreach $itemkey ( @itemorder ) { put_oneitem_into_script($script, $oneitem, $itemhash, $itemkey); } -} - -####################################################################### -# Collecting all assigned gids of the type "item" from the modules -# in the par files. Using a hash! -####################################################################### - -sub collect_assigned_gids -{ - my $allmodules = $par2script::globals::definitions{'Module'}; - - my $item; - foreach $item ( @par2script::globals::items_assigned_at_modules ) - { - if ( ! exists($par2script::globals::searchkeys{$item}) ) { par2script::exiter::exit_program("ERROR: Unknown type \"$item\" at modules.", "collect_assigned_gids"); } - - my $searchkey = $par2script::globals::searchkeys{$item}; - - my %assignitems = (); - my $modulegid = ""; - - foreach $modulegid (keys %{$allmodules} ) - { - # print "Module $modulegid\n"; - # my $content = ""; - # foreach $content (sort keys %{$allmodules->{$modulegid}}) { print "\t$content = $allmodules->{$modulegid}->{$content};\n"; } - # print "End\n"; - # print "\n"; - - if ( exists($allmodules->{$modulegid}->{$searchkey}) ) - { - my $list = $allmodules->{$modulegid}->{$searchkey}; - if ( $list =~ /^\s*\((.*?)\)\s*(.*?)\s*$/ ) { $list = $1; } - else { par2script::exiter::exit_program("ERROR: Invalid module list: $list", "collect_assigned_gids"); } - my $allassigneditems = par2script::converter::convert_stringlist_into_array_2($list, ","); - - my $gid; - foreach $gid ( @{$allassigneditems} ) - { - if ( exists($assignitems{$gid}) ) { $assignitems{$gid} = $assignitems{$gid} + 1; } - else { $assignitems{$gid} = 1; } - } - } - } - - $par2script::globals::assignedgids{$item} = \%assignitems; - } -} - -################################################## -# Collecting the content of all par files. -# Then the files do not need to be opened twice. -################################################## - -sub read_all_parfiles -{ - my ($parfiles) = @_; - - my @parfilecontent = (); - my $parfilename; - - foreach $parfilename ( @{$parfiles} ) - { - my $parfile = par2script::files::read_file($parfilename); - foreach ( @{$parfile} ) { push(@parfilecontent, $_); } - push(@parfilecontent, "\n"); - } - - return \@parfilecontent; -} - -1; |