Non-greedy matching for votestrings.
[usenet/usevote.git] / UVformats.pm
CommitLineData
ac7e2c54
TH
1#----------------------------------------------------------------------
2 package UVformats;
3#----------------------------------------------------------------------
4
5=head1 NAME
6
7UVformats - Methoden zur Stringformatierung
8
9=head1 SYNOPSIS
10
11 value <name-of-key>
12 append <name-of-key>
13
14 fill-left <width> <character>
15 fill-right <width> <character>
16 fill-center <width> <character>
17
18 justify <name-of-key> <width>
19 justify-before <name-of-key> <width>
20 justify-behind <name-of-key> <width>
21
22 first-words <width>
23 drop-words <width>
24 create-lines <width>
25
26 multi-graph <width> <position> <count>
27 multi-line <width> <count>
28
29 quote <string>
30 replace <original-string> <replacement-string>
31 sprintf <format-string>
32
33 generate_date_header
34
35=head1 DESCRIPTION
36
37Dieses Modul stellt verschiedenste Methoden bereit, um die Strings in
38den Templates auf die unterschiedlichste Art zu formatieren.
39
40Dieses Modul beschraenkt sich auf die Beschreibung der Funktionen. Ihre
41Einbindung wird in UVtemplates beschrieben.
42
43=head1 FUNCTIONS
44
45=over 3
46
47=cut
48
49#----------------------------------------------------------------------
50
51use strict;
52use vars qw(@ISA @EXPORT $VERSION $functions);
53
54use Exporter;
55$VERSION = 0.01;
56
57@ISA = qw(Exporter);
58@EXPORT = qw( getFunctions );
59
60use Text::Wrap;
61#use POSIX qw(strftime);
62use Email::Date;
63
64#----------------------------------------------------------------------
65
66sub getFunctions{
67 return $functions;
68}
69
70#----------------------------------------------------------------------
71=item value
72
73Gibt den Wert eines Schluessel zurueck.
74
75 new-key := value 'old-key' | <other-functions> ...
76
77Diese Funktion sollte dann eingesetzt werden, wenn man einen virtuellen
78Schluessel erzeugen will. D.h. der Bezeichner nicht im Template als
79Schluessel vorhanden ist. Durch den Einsatz von value wird der Wert eines
80anderen Schluessel kopiert und kann dann weiter formatiert werden.
81
82=cut
83
84sub value{
85 my ($data, $value, $key) = @_;
86 return $data->getKey($key);
87}
88
89#----------------------------------------------------------------------
90
91=item append
92
93Den Wert eines anderen Schluessels an den bisherigen String anhaengen.
94
95 ... | append 'other-key' | ...
96
97Per default wird als Trenner der beiden String ein Leerzeichen verwendet.
98Soll dieses entfallen oder ein anderes Zeichen benutzt werden, so kann
99ein dementsprechender drittere Parameter angegeben werden.
100
101 ... | append 'other-key' '' | ...
102 ... | append 'other-key' '_' | ...
103
104Im ersten Beispiel wird der Wert von C<other-key> nahtlos hinzugefuegt.
105Im zweiten statt des Leerzeichens '_' benutzt.
106
107=cut
108
109sub append{
110 my ($data, $value, $key, $sep) = @_;
111
112 $sep = ' ' unless defined($sep);
113
114 return $value. $sep. $data->getConvKey($key);
115}
116
117#----------------------------------------------------------------------
118
119=item fill-left, fill-right, fill-center
120
121Fuellt den String entsprechend mit Zeichen auf bis die gewuenschte
122Laenge erreicht ist. Bei C<fill-left> werden die Zeichen vorranggestellt,
123bei C<fill-right> angehaengt. C<fill-center> verteilt die Zeichen
124gleichmaessig vor und nach dem String.
125
126 ... | fill-left 72 '.' | ...
127
128Wird kein zweiter Parameter angegeben, wird automatisch das Leerzeichen
129benutzt.
130
131 ... | fill-right 60 | ...
132
133Ist der String bereits laenger als gewuenscht, wird er nicht weiter
134veraendert und auch nicht verkuerzt.
135
136=cut
137
138sub fill_left{
139 my ($data, $value, $width, $char) = @_;
140
141 $width ||= 72;
142 $char = ' ' unless (defined($char) && length($char) == 1);
143
144 my $fill = $width - length($value);
145
146 $value = $char x $fill . $value if ($fill > 0);
147
148 return $value;
149}
150
151sub fill_right{
152 my ($data, $value, $width, $char) = @_;
153
154 $width ||= 72;
155 $char ||= ' ';
156
157 my $fill = $width - length($value);
158
159 $value .= $char x $fill if ($fill > 0);
160
161 return $value;
162}
163
164sub fill_both{
165 my ($data, $value, $width, $char) = @_;
166
167 $width ||= 72;
168 $char ||= ' ';
169
170 my $fill = $width - length($value);
171
172 if ($fill > 0){
173 my $left = int($fill / 2);
174 my $right = $fill - $left;
175
176 $value = $char x $left . $value . $char x $right;
177 }
178
179 return $value;
180}
181
182#----------------------------------------------------------------------
183
184=item justify, justify-before, justify-behind
185
186Fuegt zwischen den existierenden String und dem Wert des angegebenen
187Schluessel genau so viele Leerzeichen ein, damit die gewuenschte
188Stringlaenge erreicht wird.
189
190 ... | justify-behind 'key' 72 | ...
191
192C<justify-behind> haengt den Wert des Schluessel an das Ende des Strings,
193C<justify-before> stellt es davor.
194
195 justify-behind: existing-string.........value-of-key
196 justify-before: value-of-key.........existing-string
197
198C<justify> ist lediglich ein Alias auf C<justify-behind>.
199
200