187 lines
5.2 KiB
Perl
187 lines
5.2 KiB
Perl
#
|
|
# This file is part of the LibreOffice project.
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# This file incorporates work covered by the following license notice:
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed
|
|
# with this work for additional information regarding copyright
|
|
# ownership. The ASF licenses this file to you under the Apache
|
|
# License, Version 2.0 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
#
|
|
|
|
package installer::converter;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use installer::globals;
|
|
|
|
#############################
|
|
# Converter
|
|
#############################
|
|
|
|
sub convert_array_to_hash
|
|
{
|
|
my ($arrayref) = @_;
|
|
|
|
my %newhash = ();
|
|
|
|
for (@{$arrayref})
|
|
{
|
|
next unless /^\s*([\w-]+?)\s+(.*?)\s*$/;
|
|
$newhash{$1} = $2;
|
|
}
|
|
|
|
return \%newhash;
|
|
}
|
|
|
|
#############################################################################
|
|
# Converting a string list with separator $listseparator
|
|
# into an array
|
|
#############################################################################
|
|
|
|
sub convert_stringlist_into_array
|
|
{
|
|
my ( $includestringref, $listseparator ) = @_;
|
|
|
|
return [map "$_\n", split /\Q$listseparator\E\s*/, ${$includestringref}];
|
|
}
|
|
|
|
#############################################################################
|
|
# Converting a string list with separator $listseparator
|
|
# into a hash with values 1.
|
|
#############################################################################
|
|
|
|
sub convert_stringlist_into_hash
|
|
{
|
|
my ( $includestringref, $listseparator ) = @_;
|
|
|
|
return {map {$_, 1} split /\Q$listseparator\E\s*/, ${$includestringref}};
|
|
}
|
|
|
|
#############################################################################
|
|
# Converting an array into a space separated string
|
|
#############################################################################
|
|
|
|
sub convert_array_to_space_separated_string
|
|
{
|
|
my ( $arrayref ) = @_;
|
|
|
|
my $newstring;
|
|
for (@{$arrayref}) {
|
|
my $tmp = $_;
|
|
$tmp =~ s/\s+$//;
|
|
$newstring .= "$tmp ";
|
|
}
|
|
$newstring =~ s/ $//;
|
|
|
|
return $newstring;
|
|
}
|
|
|
|
#############################################################################
|
|
# The file name contains for some files "/". If this programs runs on
|
|
# a windows platform, this has to be converted to "\".
|
|
#############################################################################
|
|
|
|
sub convert_slash_to_backslash
|
|
{
|
|
my ($filesarrayref) = @_;
|
|
|
|
for my $onefile (@{$filesarrayref})
|
|
{
|
|
if ( $onefile->{'Name'} ) { $onefile->{'Name'} =~ s/\//\\/g; }
|
|
}
|
|
}
|
|
|
|
############################################################################
|
|
# Creating a copy of an existing file object
|
|
# No converter
|
|
############################################################################
|
|
|
|
sub copy_item_object
|
|
{
|
|
my ($olditemhashref, $newitemhashref) = @_;
|
|
|
|
$newitemhashref = {%{$olditemhashref}};
|
|
}
|
|
|
|
#################################################################
|
|
# Windows paths must not contain the following structure:
|
|
# c:\dirA\dirB\..\dirC
|
|
# This has to be exchanged to
|
|
# c:\dirA\dirC
|
|
#################################################################
|
|
|
|
sub make_path_conform
|
|
{
|
|
my ( $path ) = @_;
|
|
my $s = $installer::globals::separator;
|
|
|
|
while ($path =~ s/[^\.\Q$s\E]+?\Q$s\E\.\.(?:\Q$s\E|$)//g) {}
|
|
|
|
return $path;
|
|
}
|
|
|
|
#################################################################
|
|
# Copying an item collector
|
|
# A reference to an array consisting of references to hashes.
|
|
#################################################################
|
|
|
|
sub copy_collector
|
|
{
|
|
return [map { {%{$_}} } @{$_[0]}];
|
|
}
|
|
|
|
#################################################################
|
|
# Combining two arrays, first wins
|
|
#################################################################
|
|
|
|
sub combine_arrays_from_references_first_win
|
|
{
|
|
my ( $arrayref1, $arrayref2 ) = @_;
|
|
|
|
my $hashref1 = convert_array_to_hash($arrayref1);
|
|
my $hashref2 = convert_array_to_hash($arrayref2);
|
|
|
|
# add key-value pairs from hash1 to hash2 (overwrites existing keys)
|
|
@{$hashref2}{keys %{$hashref1}} = values %{$hashref1};
|
|
|
|
return [map { "$_ $hashref2->{$_}\n" } keys %{$hashref2}];
|
|
}
|
|
|
|
#################################################################
|
|
# Replacing separators, that are included into quotes
|
|
#################################################################
|
|
|
|
sub replace_masked_separator
|
|
{
|
|
my ($string, $separator, $replacementstring) = @_;
|
|
|
|
$string =~ s/\\\Q$separator\E/$replacementstring/g;
|
|
|
|
return $string;
|
|
}
|
|
|
|
#################################################################
|
|
# Resolving separators, that were replaced
|
|
# in function mask_separator_in_quotes
|
|
#################################################################
|
|
|
|
sub resolve_masked_separator
|
|
{
|
|
my ($arrayref, $separator, $replacementstring) = @_;
|
|
|
|
for (@{$arrayref})
|
|
{
|
|
s/$replacementstring/$separator/g;
|
|
}
|
|
}
|
|
|
|
1;
|