1 #*************************************************************************
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 # Copyright 2008 by Sun Microsystems, Inc.
7 # OpenOffice.org - a multi-platform office productivity suite
9 # $RCSfile: converter.pm,v $
13 # This file is part of OpenOffice.org.
15 # OpenOffice.org is free software: you can redistribute it and/or modify
16 # it under the terms of the GNU Lesser General Public License version 3
17 # only, as published by the Free Software Foundation.
19 # OpenOffice.org is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 # GNU Lesser General Public License version 3 for more details
23 # (a copy is included in the LICENSE file that accompanied this code).
25 # You should have received a copy of the GNU Lesser General Public License
26 # version 3 along with OpenOffice.org. If not, see
27 # <http://www.openoffice.org/license.html>
28 # for a copy of the LGPLv3 License.
30 #*************************************************************************
32 package installer
::converter
;
34 use installer
::globals
;
36 #############################
38 #############################
40 sub convert_array_to_hash
46 for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
48 my $line = ${$arrayref}[$i];
50 if ( $line =~ /^\s*([\w-]+?)\s+(.*?)\s*$/ )
54 $newhash{$key} = $value;
61 sub convert_hash_into_array
68 foreach $key (keys %{$hashref})
70 my $value = $hashref->{$key};
71 my $input = "$key = $value\n";
78 #############################################################################
79 # Converting a string list with separator $listseparator
81 #############################################################################
83 sub convert_stringlist_into_array_without_linebreak_and_quotes
85 my ( $includestringref, $listseparator ) = @_;
89 my $last = ${$includestringref};
91 while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
96 push(@newarray, $first);
100 push(@newarray, $last);
105 #############################################################################
106 # Converting a string list with separator $listseparator
108 #############################################################################
110 sub convert_stringlist_into_array
112 my ( $includestringref, $listseparator ) = @_;
116 my $last = ${$includestringref};
118 while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
122 # Problem with two directly following listseparators. For example a path with two ";;" directly behind each other
123 $first =~ s/^$listseparator//;
124 push(@newarray, "$first\n");
127 push(@newarray, "$last\n");
132 #############################################################################
133 # Converting a string list with separator $listseparator
135 #############################################################################
137 sub convert_stringlist_into_array_without_newline
139 my ( $includestringref, $listseparator ) = @_;
143 my $last = ${$includestringref};
145 while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
149 push(@newarray, "$first");
152 push(@newarray, "$last");
157 #############################################################################
158 # Converting a string list with separator $listseparator
159 # into a hash with values 1.
160 #############################################################################
162 sub convert_stringlist_into_hash
164 my ( $includestringref, $listseparator ) = @_;
168 my $last = ${$includestringref};
170 while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
174 $newhash{$first} = 1;
182 #############################################################################
183 # Converting a string list with separator $listseparator
185 #############################################################################
187 sub convert_whitespace_stringlist_into_array
189 my ( $includestringref ) = @_;
193 my $last = ${$includestringref};
195 while ( $last =~ /^\s*(\S+?)\s+(\S+)\s*$/) # "$" for minimal matching
199 push(@newarray, "$first\n");
202 push(@newarray, "$last\n");
207 #############################################################################
208 # Converting an array into a comma separated string
209 #############################################################################
211 sub convert_array_to_comma_separated_string
213 my ( $arrayref ) = @_;
217 for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
219 my $arrayentry = ${$arrayref}[$i];
220 $arrayentry =~ s/\s*$//;
221 $newstring = $newstring . $arrayentry . ",";
224 $newstring =~ s/\,\s*$//;
229 #############################################################################
230 # Converting an array into a space separated string
231 #############################################################################
233 sub convert_array_to_space_separated_string
235 my ( $arrayref ) = @_;
239 for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
241 my $arrayentry = ${$arrayref}[$i];
242 $arrayentry =~ s/\s*$//;
243 $newstring = $newstring . $arrayentry . " ";
246 $newstring =~ s/\s*$//;
251 #############################################################################
252 # The file name contains for some files "/". If this programs runs on
253 # a windows platform, this has to be converted to "\".
254 #############################################################################
256 sub convert_slash_to_backslash
258 my ($filesarrayref) = @_;
260 for ( my $i = 0; $i <= $#{$filesarrayref}; $i++ )
262 my $onefile = ${$filesarrayref}[$i];
263 if ( $onefile->{'Name'} ) { $onefile->{'Name'} =~ s/\//\\/g
; }
267 ############################################################################
268 # Creating a copy of an existing file object
270 ############################################################################
274 my ($olditemhashref, $newitemhashref) = @_;
276 foreach $key (keys %{$olditemhashref})
278 my $value = $olditemhashref->{$key};
279 $newitemhashref->{$key} = $value;
283 #################################################################
284 # Windows pathes must not contain the following structure:
285 # c:\dirA\dirB\..\dirC
286 # This has to be exchanged to
288 #################################################################
290 sub make_path_conform
296 while ( $path =~ /(^.*)(\Q$installer::globals::separator\E.*?[^\.])(\Q$installer::globals::separator\E\.\.)(\Q$installer::globals::separator\E.*$)/ )
301 # $2 must not end with a "." ! Problem with "..\.."
303 $path = $part1 . $part2;
309 #################################################################
310 # Copying an item collector
311 # A reference to an array consisting of references to hashes.
312 #################################################################
316 my ( $oldcollector ) = @_;
318 my @newcollector = ();
320 for ( my $i = 0; $i <= $#{$oldcollector}; $i++ )
325 foreach $key (keys %{${$oldcollector}[$i]})
327 $newhash{$key} = ${$oldcollector}[$i]->{$key};
330 push(@newcollector, \
%newhash);
333 return \
@newcollector;
336 #################################################################
338 #################################################################
340 sub copy_array_from_references
342 my ( $arrayref ) = @_;
346 for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
348 push(@newarray, ${$arrayref}[$i]);
354 ###########################################################
356 ###########################################################
358 sub copy_hash_from_references
365 foreach $key (keys %{$hashref})
367 $newhash{$key} = $hashref->{$key};
373 #################################################################
374 # Combining two arrays, first wins
375 #################################################################
377 sub combine_arrays_from_references_first_win
379 my ( $arrayref1, $arrayref2 ) = @_;
381 my $hashref1 = convert_array_to_hash
($arrayref1);
382 my $hashref2 = convert_array_to_hash
($arrayref2);
386 # starting with second hash
387 foreach my $key ( keys %{$hashref2} ) { $commonhash{$key} = $hashref2->{$key}; }
388 # overwriting with first hash
389 foreach my $key ( keys %{$hashref1} ) { $commonhash{$key} = $hashref1->{$key}; }
391 # Creating the new array
392 foreach my $key ( keys %commonhash ) { push(@newarray, "$key $commonhash{$key}\n"); }
397 #################################################################
398 # Combining two arrays
399 #################################################################
401 sub combine_arrays_from_references
403 my ( $arrayref1, $arrayref2 ) = @_;
407 for ( my $i = 0; $i <= $#{$arrayref1}; $i++ )
409 push(@newarray, ${$arrayref1}[$i]);
412 for ( my $i = 0; $i <= $#{$arrayref2}; $i++ )
414 push(@newarray, ${$arrayref2}[$i]);
420 #################################################################
421 # Returning the current ending number of a directory
422 #################################################################
424 sub get_number_from_directory
426 my ( $directory ) = @_;
430 if ( $directory =~ /\_(\d+)\s*$/ )
438 #################################################################
439 # Replacing separators, that are included into quotes
440 #################################################################
442 sub replace_masked_separator
444 my ($string, $separator, $replacementstring) = @_;
446 $string =~ s/\\\Q$separator\E/$replacementstring/g;
451 #################################################################
452 # Resolving separators, that were replaced
453 # in function mask_separator_in_quotes
454 #################################################################
456 sub resolve_masked_separator
458 my ($arrayref, $separator, $replacementstring) = @_;
460 for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
462 ${$arrayref}[$i] =~ s/$replacementstring/$separator/g