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.
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.
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.
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
34
# Copyright (C) 2007 Red Hat, Inc.
35
# All rights reserved.
39
# manages resource bundle files - gets values
55
push @{$self->{filenames}}, shift;
58
$self = bless $self, $type;
60
if (@{$self->{filenames}}) {
67
# the resource files are read in order given. Definitions from
68
# later files override the same definitions in earlier files.
73
push @{$self->{filenames}}, shift;
76
for my $filename (@{$self->{filenames}}) {
77
my $incontinuation = 0;
79
open RES, $filename or die "Error: could not open resource file $filename: $!";
81
while ($line = <RES>) {
83
chop $line; # trim trailing newline
84
if ($line =~ /^\s*$/) { # skip blank/empty lines
88
if ($line =~ /^\s*\#/) { # skip comment lines
92
# read name = value pairs like this
93
# bol whitespace* name whitespace* '=' whitespace* value eol
94
# the value will include any trailing whitespace
99
if ($incontinuation) {
100
$self->{res}->{$curkey} .= "\n" . $line;
101
} elsif ($line =~ /^\s*(.*?)\s*=\s*(.*?)$/) {
102
# replace \n with real newline
104
$self->{res}->{$curkey} =~ s/\\n/\n/g;
107
$self->{res}->{$curkey} = $2;
109
if ($iscontinuation) { # if line ends with a backslash, continue the data on the next line
115
# replace \n with real newline
116
if (defined($curkey)) {
117
$self->{res}->{$curkey} =~ s/\\n/\n/g;
123
# given a resource key and optional args, return the value
124
# $text = $res->getText('key');
126
# $text = $res->getText('key', @args);
128
# $text = $res->getText($arrayref)
129
# where $arrayref is ['key', @args]
135
if (ref($key) eq 'ARRAY') {
136
my $tmpkey = shift @{$key};
141
if (!exists($self->{res}->{$key})) {
142
print "Error: unknown resource key $key\n";
146
if (!defined($self->{res}->{$key})) {
147
print "Error: resource key $key has no value\n";
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]};
158
my $text = sprintf $self->{res}->{$key}, @args;
163
#############################################################################
164
# Mandatory TRUE return value.