~ubuntu-branches/ubuntu/wily/389-ds-base/wily

« back to all changes in this revision

Viewing changes to ldap/admin/src/scripts/Resource.pm

  • Committer: Package Import Robot
  • Author(s): Krzysztof Klimonda
  • Date: 2012-03-27 14:26:16 UTC
  • Revision ID: package-import@ubuntu.com-20120327142616-xt24t6nffm3f7ybz
Tags: upstream-1.2.11.7
ImportĀ upstreamĀ versionĀ 1.2.11.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# BEGIN COPYRIGHT BLOCK
 
2
# This Program is free software; you can redistribute it and/or modify it under
 
3
# the terms of the GNU General Public License as published by the Free Software
 
4
# Foundation; version 2 of the License.
 
5
 
6
# This Program is distributed in the hope that it will be useful, but WITHOUT
 
7
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 
8
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 
9
 
10
# You should have received a copy of the GNU General Public License along with
 
11
# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
 
12
# Place, Suite 330, Boston, MA 02111-1307 USA.
 
13
 
14
# In addition, as a special exception, Red Hat, Inc. gives You the additional
 
15
# right to link the code of this Program with code not covered under the GNU
 
16
# General Public License ("Non-GPL Code") and to distribute linked combinations
 
17
# including the two, subject to the limitations in this paragraph. Non-GPL Code
 
18
# permitted under this exception must only link to the code of this Program
 
19
# through those well defined interfaces identified in the file named EXCEPTION
 
20
# found in the source code files (the "Approved Interfaces"). The files of
 
21
# Non-GPL Code may instantiate templates or use macros or inline functions from
 
22
# the Approved Interfaces without causing the resulting work to be covered by
 
23
# the GNU General Public License. Only Red Hat, Inc. may make changes or
 
24
# additions to the list of Approved Interfaces. You must obey the GNU General
 
25
# Public License in all respects for all of the Program code and other code used
 
26
# in conjunction with the Program except the Non-GPL Code covered by this
 
27
# exception. If you modify this file, you may extend this exception to your
 
28
# version of the file, but you are not obligated to do so. If you do not wish to
 
29
# provide this exception without modification, you must delete this exception
 
30
# statement from your version and license this file solely under the GPL without
 
31
# exception. 
 
32
 
33
 
34
# Copyright (C) 2007 Red Hat, Inc.
 
35
# All rights reserved.
 
36
# END COPYRIGHT BLOCK
 
37
#
 
38
 
 
39
# manages resource bundle files - gets values
 
40
# given keys
 
41
 
 
42
package Resource;
 
43
 
 
44
use strict;
 
45
 
 
46
#require    Exporter;
 
47
#@ISA       = qw(Exporter);
 
48
#@EXPORT    = qw();
 
49
 
 
50
sub new {
 
51
    my $type = shift;
 
52
    my $self = {};
 
53
 
 
54
    while (@_) {
 
55
        push @{$self->{filenames}}, shift;
 
56
    }
 
57
 
 
58
    $self = bless $self, $type;
 
59
 
 
60
    if (@{$self->{filenames}}) {
 
61
        $self->read();
 
62
    }
 
63
 
 
64
    return $self;
 
65
}
 
66
 
 
67
# the resource files are read in order given.  Definitions from
 
68
# later files override the same definitions in earlier files.
 
69
sub read {
 
70
    my $self = shift;
 
71
 
 
72
    while (@_) {
 
73
        push @{$self->{filenames}}, shift;
 
74
    }
 
75
 
 
76
    for my $filename (@{$self->{filenames}}) {
 
77
        my $incontinuation = 0;
 
78
        my $curkey;
 
79
        open RES, $filename or die "Error: could not open resource file $filename: $!";
 
80
        my $line;
 
81
        while ($line = <RES>) {
 
82
            my $iscontinuation;
 
83
            chop $line; # trim trailing newline
 
84
            if ($line =~ /^\s*$/) { # skip blank/empty lines
 
85
                $incontinuation = 0;
 
86
                next;
 
87
            }
 
88
            if ($line =~ /^\s*\#/) { # skip comment lines
 
89
                $incontinuation = 0;
 
90
                next;
 
91
            }
 
92
            # read name = value pairs like this
 
93
            # bol whitespace* name whitespace* '=' whitespace* value eol
 
94
            # the value will include any trailing whitespace
 
95
            if ($line =~ /\\$/) {
 
96
                chop $line;
 
97
                $iscontinuation = 1;
 
98
            }
 
99
            if ($incontinuation) {
 
100
                $self->{res}->{$curkey} .= "\n" . $line;
 
101
            } elsif ($line =~ /^\s*(.*?)\s*=\s*(.*?)$/) {
 
102
                # replace \n with real newline
 
103
                if ($curkey) {
 
104
                    $self->{res}->{$curkey} =~ s/\\n/\n/g;
 
105
                }
 
106
                $curkey = $1;
 
107
                $self->{res}->{$curkey} = $2;
 
108
            }
 
109
            if ($iscontinuation) { # if line ends with a backslash, continue the data on the next line
 
110
                $incontinuation = 1;
 
111
            } else {
 
112
                $incontinuation = 0;
 
113
            }
 
114
        }
 
115
        # replace \n with real newline
 
116
        if (defined($curkey)) {
 
117
            $self->{res}->{$curkey} =~ s/\\n/\n/g;
 
118
        }
 
119
        close RES;
 
120
    }
 
121
}
 
122
 
 
123
# given a resource key and optional args, return the value
 
124
# $text = $res->getText('key');
 
125
# or
 
126
# $text = $res->getText('key', @args);
 
127
# or
 
128
# $text = $res->getText($arrayref)
 
129
# where $arrayref is ['key', @args]
 
130
sub getText {
 
131
    my $self = shift;
 
132
    my $key = shift;
 
133
    my @args = @_;
 
134
 
 
135
    if (ref($key) eq 'ARRAY') {
 
136
        my $tmpkey = shift @{$key};
 
137
        @args = @{$key};
 
138
        $key = $tmpkey;
 
139
    }
 
140
 
 
141
    if (!exists($self->{res}->{$key})) {
 
142
        print "Error: unknown resource key $key\n";
 
143
        return undef;
 
144
    }
 
145
 
 
146
    if (!defined($self->{res}->{$key})) {
 
147
        print "Error: resource key $key has no value\n";
 
148
        return undef;
 
149
    }
 
150
 
 
151
    # see if the args themselves are resource keys
 
152
    for (my $ii = 0; $ii < @args; ++$ii) {
 
153
        if (exists($self->{res}->{$args[$ii]})) {
 
154
            $args[$ii] = $self->{res}->{$args[$ii]};
 
155
        }
 
156
    }
 
157
 
 
158
    my $text = sprintf $self->{res}->{$key}, @args;
 
159
 
 
160
    return $text;
 
161
}
 
162
 
 
163
#############################################################################
 
164
# Mandatory TRUE return value.
 
165
#
 
166
1;