[Po4a-devel]Add an option to tweak po references
by Francois Gouget
Currently the po references contain the file and line number:
#: ../wine-user-en-sgml/wine-user.sgml:82
../wine-user-en-sgml/glossary.sgml:171
What this means is that if someone adds a line near the beginning of
wine-user.sgml we will get thousands of lines of diff the next time
po4a-updatepo is run.
I know po tools can probably hide this issue from users (though that
doesn't help me since I use xemacs) but this is still going to be a
problem when comparing two CVS version of the po file. This is also a
big nuisance when trying to merge CVS branches. Look at the output of
the following command to see what I mean:
cvs diff -r1.4 -r1.5 po/pod/fr.po
Also I feel that references that include the line number are less useful
when translating documentation than when translating the strings used in
a program. The strings in a program are often pretty short, sometimes a
single word like 'Close' and searching for such strings is difficult due
to false positives. Thus for programs the line number information is
quite useful. But, when translating the documentation, each msgid is a
paragraph which usually contains at least a full sentence. So it's easy
to find the relevant place in the source SGML file by searching for a
sequence of two or three words.
So I propose to add a 'porefs' option to po4a-updatepo which would allow
the user to control the addition of references. It would have three
possible values:
* none
No references are added
* noline
References are added but all line numbers are set to '1'. I'm
keeping a line number for compatibility with po tools let the user open
the relevant file by double clicking on the reference.
* full
This would be the default and work just as it does today.
Now, the logical place to implement this is the Po.pm module but it was
not possible to pass options to it. So I added a -O option which passes
options to the Po.pm module (via TransTractor,pm) instead of the format
module.
Let me know if this sounds ok or if another approach should be used.
Changelog:
* po4a-updatepo
lib/Locale/Po4a/TransTractor.pm
lib/Locale/Po4a/Po.pm
Francois Gouget <fgouget(a)codeweavers.com>
Add a porefs option to let the user customize the generation of po
references.
Add a -O option to po4a-updatepo so users can pass options to the
Po,pm module.
--
Francois Gouget
fgouget(a)codeweavers.com
Index: po4a-updatepo
===================================================================
RCS file: /cvsroot/po4a/po4a/po4a-updatepo,v
retrieving revision 1.36
diff -u -p -r1.36 po4a-updatepo
--- po4a-updatepo 30 May 2005 07:13:38 -0000 1.36
+++ po4a-updatepo 28 Jun 2005 16:48:11 -0000
@@ -136,7 +136,7 @@ Getopt::Long::config('bundling', 'no_get
# Parse our options
my (@masterfiles,@pofiles);
-my ($help,$help_fmt,$verbose,$debug,$format,@options);
+my ($help,$help_fmt,$verbose,$debug,$format,@options,@po_options);
my $mastchar;
GetOptions('help|h' => \$help,
'help-format' => \$help_fmt,
@@ -148,6 +148,7 @@ GetOptions('help|h' => \$help,
'master-charset|M=s' => \$mastchar,
'option|o=s' => \@options,
+ 'O=s' => \@po_options,
'verbose|v' => \$verbose,
'debug|d' => \$debug,
@@ -169,6 +170,16 @@ foreach (@options) {
$options{$_}=1;
}
}
+
+my %po_options;
+foreach (@po_options) {
+ if (m/^([^=]*)=(.*)$/) {
+ $po_options{$1}="$2";
+ } else {
+ $po_options{$_}=1;
+ }
+}
+$options{'po_options'}=\%po_options;
# parser
my ($doc)=Locale::Po4a::Chooser::new($format,%options);
Index: lib/Locale/Po4a/TransTractor.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/TransTractor.pm,v
retrieving revision 1.67
diff -u -p -r1.67 TransTractor.pm
--- lib/Locale/Po4a/TransTractor.pm 30 May 2005 07:05:23 -0000 1.67
+++ lib/Locale/Po4a/TransTractor.pm 28 Jun 2005 16:48:13 -0000
@@ -330,7 +331,8 @@ sub new {
# private data
$self->{TT}=();
$self->{TT}{po_in}=Locale::Po4a::Po->new();
- $self->{TT}{po_out}=Locale::Po4a::Po->new();
+ $self->{TT}{po_out}=Locale::Po4a::Po->new($options{'po_options'});
+ delete $options{'po_options'};
# Warning, this is an array of array:
# The document is splited on lines, and for each
# [0] is the line content, [1] is the reference [2] the type
Index: lib/Locale/Po4a/Po.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/Po.pm,v
retrieving revision 1.43
diff -u -p -r1.43 Po.pm
--- lib/Locale/Po4a/Po.pm 30 May 2005 07:15:21 -0000 1.43
+++ lib/Locale/Po4a/Po.pm 28 Jun 2005 16:48:12 -0000
@@ -46,6 +46,16 @@ translate everything, including document
package description, debconf templates, and everything which may benefit
from this.
+=head1 OPTIONS ACCEPTED BY THIS MODULE
+
+=over 4
+
+=item porefs
+
+This specifies the reference format. It can be one of 'none' to not produce
+any reference, 'noline' to not specify the line number, and 'full' to
+include complete references.
+
=cut
@@ -93,11 +103,11 @@ a po file we should load.
=cut
sub new {
- my $this = shift;
+ my ($this, $options) = (shift, shift);
my $class = ref($this) || $this;
my $self = {};
bless $self, $class;
- $self->initialize();
+ $self->initialize($options);
my $filename = shift;
$self->read($filename) if defined($filename) && length($filename);
@@ -105,10 +115,18 @@ sub new {
}
sub initialize {
- my $self = shift;
+ my ($self, $options) = (shift, shift);
my $date = `date +'%Y-%m-%d %k:%M%z'`;
chomp $date;
+ $self->{options}{'porefs'}= 'full';
+ foreach my $opt (keys %$options) {
+ if ($options->{$opt}) {
+ die wrap_mod("po4a::po", dgettext ("po4a", "Unknown option: %s"), $opt) unless exists $self->{options}{$opt};
+ $self->{options}{$opt} = $options->{$opt};
+ }
+ }
+
$self->{po}=();
$self->{count}=0;
$self->{header_comment}=
@@ -641,7 +659,7 @@ sub gettext {
my $res;
return "" unless defined($text) && length($text); # Avoid returning the header.
- my $validoption="wrap wrapcol";
+ my $validoption="reference wrap wrapcol";
my %validoption;
map { $validoption{$_}=1 } (split(/ /,$validoption));
@@ -850,7 +868,13 @@ sub push_raw {
$self->{header_comment}=$comment;
return;
}
-
+
+ if ($self->{options}{'porefs'} eq "none") {
+ $reference = "";
+ } elsif ($self->{options}{'porefs'} eq "noline") {
+ $reference =~ s/:[0-9]*/:1/g;
+ }
+
if (defined($self->{po}{$msgid})) {
warn wrap_mod("po4a::po", dgettext("po4a","msgid defined twice: %s"), $msgid) if (0); # FIXME: put a verbose stuff
if ($msgstr && $self->{po}{$msgid}{'msgstr'}
19 years, 5 months
[Po4a-devel]Make the Text::WrapI18N and Term::ReadKey dependencies optional
by Francois Gouget
As discussed.
Changelog:
* lib/Locale/Po4a/Common.pm
Francois Gouget <fgouget(a)codeweavers.com>
Make the Text::WrapI18N and Term::ReadKey dependencies optional
--
Francois Gouget
fgouget(a)codeweavers.com
Index: lib/Locale/Po4a/Common.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/Common.pm,v
retrieving revision 1.9
diff -u -p -r1.9 Common.pm
--- lib/Locale/Po4a/Common.pm 23 Jun 2005 15:42:37 -0000 1.9
+++ lib/Locale/Po4a/Common.pm 28 Jun 2005 16:48:11 -0000
@@ -29,23 +29,30 @@ use vars qw(@ISA @EXPORT);
use 5.006;
use strict;
use warnings;
-use Text::WrapI18N qw(wrap $columns);
-use Term::ReadKey;
-sub setcolumns {
- my ($col,$h,$cp,$hp);
- eval {
- ($col,$h,$cp,$hp) = Term::ReadKey::GetTerminalSize();
- };
- if ($@) {
- # GetTerminalSize failed. Maybe a terminal-less build or such strange condition. Let's play safe.
- $col = 76;
+sub setcolumns() {
+ my $col=$ENV{COLUMNS};
+ if (!defined $col)
+ {
+ my @term=eval "use Term::ReadKey; Term::ReadKey::GetTerminalSize()";
+ $col=$term[0] if (!$@);
+ # If GetTerminalSize() failed we will fallback to a safe default.
+ # This can happen if Term::ReadKey is not available
+ # or this is a terminal-less build or such strange condition.
}
- $columns = $ENV{'COLUMNS'} || $col || 76;
-# print "set col to $columns\n";
+ $col=76 if (!defined $col);
+ eval "use Text::WrapI18N qw(\$columns); \$columns = $col";
}
-sub min {
+sub wrapi18n($$$) {
+ my ($header1, $header2, $msg) = @_;
+ setcolumns();
+ my $wrapped=eval "use Text::WrapI18N qw(wrap); wrap(\$header1, \$header2, \$msg)";
+ $wrapped="$header1$msg" if ($@);
+ return $wrapped;
+}
+
+sub min($$) {
return $_[0] < $_[1] ? $_[0] : $_[1];
}
@@ -123,12 +130,11 @@ This function wraps a message handling t
=cut
-sub wrap_msg {
+sub wrap_msg($@) {
my $msg = shift;
my @args = @_;
-
- setcolumns();
- return wrap("", "", sprintf($msg, @args))."\n";
+
+ return wrapi18n("", "", sprintf($msg, @args))."\n";
}
=item wrap_mod($$@)
@@ -138,14 +144,13 @@ argument, and leaves a space at the left
=cut
-sub wrap_mod {
+sub wrap_mod($$@) {
my ($mod, $msg) = (shift, shift);
my @args = @_;
- setcolumns();
$mod .= ": ";
my $spaces = " " x min(length($mod), 15);
- return wrap($mod, $spaces, sprintf($msg, @args))."\n";
+ return wrapi18n($mod, $spaces, sprintf($msg, @args))."\n";
}
=item wrap_ref_mod($$$@)
@@ -156,11 +161,10 @@ of the message.
=cut
-sub wrap_ref_mod {
+sub wrap_ref_mod($$$@) {
my ($ref, $mod, $msg) = (shift, shift, shift);
my @args = @_;
- setcolumns();
if (!$mod) {
# If we don't get a module name, show the message like wrap_mod does
return wrap_mod($ref, $msg, @args);
@@ -168,7 +172,7 @@ sub wrap_ref_mod {
$ref .= ": ";
my $spaces = " " x min(length($ref), 15);
$msg = "$ref($mod)\n$msg";
- return wrap("", $spaces, sprintf($msg, @args))."\n";
+ return wrapi18n("", $spaces, sprintf($msg, @args))."\n";
}
}
19 years, 6 months
[Po4a-devel]Translating Sgml attributes (take 2)
by Francois Gouget
Here's a new patch for translating the Sgml attributes which includes
the feedback from my last proposal.
* If you specify the attribute to be translated as 'lang' then all the
lang attribtues are going to be translated, no matter which tag they are
found in.
* But this version of the patch also makes it possible to specify a
tag hierarchy like the Xml module. So if you specify "<aaa><bbb>lang",
then only lang attributes located in a bbb tag which is in an aaa tag
are going to be translated.
* Even better, the tag specification is in fact a regular expression
so you can also write "<(article|book)>lang" if you only want lang
attributes located in an article or a book tag to be translated.
* Finally, the above can also be accomplisehd by writing
'<article>lang <book>lang". That is, if more than one context is
specified for a given attribute, then they are or-ed.
* I also modified the msgid string so it reads 'lang=en' as was
discussed last time rather than just 'en' in order to reduce the
probability of collisions (but that may be overkill).
* I also added added a reference to help locating where the attribute
being translated is located in the source Sgml file.
Changelog:
* lib/Locale/Po4a/Sgml.pm
Francois Gouget <fgouget(a)codeweavers.com>
Add support for translating attribute values.
--
Francois Gouget
fgouget(a)codeweavers.com
Index: lib/Locale/Po4a/Sgml.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/Sgml.pm,v
retrieving revision 1.60
diff -u -p -r1.60 Sgml.pm
--- lib/Locale/Po4a/Sgml.pm 30 May 2005 15:59:31 -0000 1.60
+++ lib/Locale/Po4a/Sgml.pm 16 Jun 2005 17:26:03 -0000
@@ -82,6 +82,18 @@ they can be part of an msgid. For exampl
for this category since putting it in the translate section would create
msgids not being whole sentences, which is bad.
+=item attribute
+
+A space separated list of attributes that need to be translated. You can
+specify the attributes by their name (for example, "lang"), but you can also
+prefix it with a tag hierarchy, to specify that this attribute will only be
+translated when it is into the specified tag. For example:
+E<lt>bbbE<gt>E<lt>aaaE<gt>lang specifies that the lang attribute will only be
+translated if it is in an E<lt>aaaE<gt> tag, which is in a E<lt>bbbE<gt> tag.
+The tag names are actually regular expressions so you can also write things
+like E<lt>aaa|bbbbE<gt>lang to only translate lang attributes that are in
+an E<lt>aaaE<gt> or a E<lt>bbbE<gt> tag.
+
=item force
Proceed even if the DTD is unknown.
@@ -273,13 +285,13 @@ sub set_tags_kind {
my $self=shift;
my (%kinds)=@_;
- foreach (qw(translate empty section verbatim ignore)) {
+ foreach (qw(translate empty section verbatim ignore attribute)) {
$self->{SGML}->{k}{$_} = $self->{options}{$_} ? $self->{options}{$_}.' ' : '';
}
foreach (keys %kinds) {
die "po4a::sgml: internal error: set_tags_kind called with unrecognized arg $_"
- if ($_ !~ /^(translate|empty|verbatim|ignore|indent)$/);
+ if ($_ !~ /^(translate|empty|verbatim|ignore|indent|attribute)$/);
$self->{SGML}->{k}{$_} .= $kinds{$_};
}
@@ -425,7 +437,8 @@ sub parse_file {
"varname ".
"wordasword ".
"xref ".
- "year");
+ "year",
+ "attribute" => "<(article|book)>lang");
} else {
if ($self->{options}{'force'}) {
@@ -615,7 +628,7 @@ sub parse_file {
open (IN,$cmd) || die wrap_mod("po4a::sgml", dgettext("po4a", "Can't run nsgmls: %s"), $!);
# The kind of tags
- my (%translate,%empty,%verbatim,%indent,%exist);
+ my (%translate,%empty,%verbatim,%indent,%exist,%attribute);
foreach (split(/ /, ($self->{SGML}->{k}{'translate'}||'') )) {
$translate{uc $_} = 1;
$indent{uc $_} = 1;
@@ -638,7 +651,28 @@ sub parse_file {
foreach (split(/ /, ($self->{SGML}->{k}{'ignore'}) || '')) {
$exist{uc $_} = 1;
}
-
+ foreach (split(/ /, ($self->{SGML}->{k}{'attribute'}) || '')) {
+ my ($attr, $tags);
+ if (m/(^.*>)(\w+)/)
+ {
+ $attr=uc $2;
+ $tags=$1;
+ }
+ else
+ {
+ $attr=uc $_;
+ $tags=".*";
+ }
+ if (exists $attribute{$attr})
+ {
+ $attribute{$attr}.="|$tags";
+ }
+ else
+ {
+ $attribute{$attr} = $tags;
+ }
+ }
+
# What to do before parsing
@@ -703,6 +737,25 @@ sub parse_file {
if ($val->type() eq 'CDATA' ||
$val->type() eq 'IMPLIED') {
if (defined $value && length($value)) {
+ my $name=lc $attr;
+ if (exists $attribute{uc($attr)}) {
+ my $context="";
+ foreach my $o (@open) {
+ next if (!defined $o or $o =~ m%^</%);
+ $o =~ s/ .*/>/;
+ $context.=$o;
+ }
+ $context=join("", $context,
+ "<", lc($event->data->name()), ">");
+ if ($context =~ /^($attribute{uc($attr)})$/) {
+ my $translated = $self->translate("$name=$value", $ref, "attribute $context$name");
+ if ($translated =~ s/^$name=//) {
+ $value=$translated;
+ } else {
+ die wrap_mod("po4a::sgml", dgettext("po4a", "bad translation '%s' for '%s' in '%s'"), $translated, "$context$name", $ref);
+ }
+ }
+ }
if ($value =~ m/"/) { #"
$value = "'".$value."'";
} else {
19 years, 6 months
[Po4a-devel]Common.pm: Remove obsolete load_config export
by Francois Gouget
I noticed that Common.pm exports 'load_config' but I could find no place
where this symbol is defined or used. So I assume this is an obsolete
export which can be removed. I removed it and po4a still seems to be
working so here is the patch.
Changelog:
* lib/Locale/Po4a/Common.pm
Francois Gouget <fgouget(a)codeweavers.com>
Remove obsolete load_config export.
--
Francois Gouget
fgouget(a)codeweavers.com
Index: lib/Locale/Po4a/Common.pm
===================================================================
RCS file: /cvsroot/po4a/po4a/lib/Locale/Po4a/Common.pm,v
retrieving revision 1.8
diff -u -p -r1.8 Common.pm
--- lib/Locale/Po4a/Common.pm 30 May 2005 07:00:34 -0000 1.8
+++ lib/Locale/Po4a/Common.pm 30 May 2005 14:58:50 -0000
@@ -24,7 +24,7 @@ package Locale::Po4a::Common;
require Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
-@EXPORT = qw(wrap_msg wrap_mod wrap_ref_mod textdomain gettext dgettext load_config);
+@EXPORT = qw(wrap_msg wrap_mod wrap_ref_mod textdomain gettext dgettext);
use 5.006;
use strict;
19 years, 6 months
[Po4a-devel]$B$*EA$($7$?$$$3$H$,M-$j$^$9!#(B
by info@qsv21.com
$B$O$8$a$^$7$F!"EvJ}=P2q$N9->l$r3+:E$7$*$+$2$5$^$G9%I>$rF@$F$*$j$^$9!#(B
$B!!!!!!!!!!!!!!!!(Bhttp://www.lovegal3.net/?square2
$B@hF|!"=w@-2q0wMM$+$iITK~$K$D$$$F%"%s%1!<%H$r<h$C$?$N$G$9$,0U30$J7k2L(B
$B$,=P$^$7$?!#(B
$B!VCK@-2q0w$,>/$J$$0Y!"=P2q$($J$$!&!&!&!W(B
$B!V>R2p$5$l$?$1$I!"=;=j$,N%$l$F$$$k$+$i!"(B
$BBT$A9g$o$;>l=j$K9T$1$J$$!&!&!&!W(B
$B!!$3$l$^$G$OCK@-!"=w@-$H$b$KEPO?$K:]$7$F$O?.Mj$N$*$1$kJ}$+$I$&$+$H(B
$B$$$&?3::$r@_$1$F$*$j$^$7$?$,!"@h=R$7$?$H$*$jCK@-2q0w$N?t$,05E]E*$K(B
$B>/$J$/$J$C$F$7$^$C$?$?$a$K!"CK@-2q0w$K8B$C$F$O?3::L5$7$G"(L5NAEPO?(B
$B"($,$G$-$k$h$&$K$$$?$7$^$7$?!#99$K$"$J$?$N6aJU$K$$$k=w@-$r?o;~L5NA(B
$B$G>R2p$5$;$FD:$-$^$9!#(B
$B!!!!!!!!!!!!!!!!"-"-"-<+F0>R2p(B24$B;~4V<uIU"-"-"-(B
$B!!!!!!!!!!!!!!(Bhttp://www.lovegal3.net/?syoukai2
$B$4EPO?D>8e$K$3$A$i$+$i6a=j$N=w@-$r>R2p$5$;$FD:$-$^$9!#(B24$B;~4VBN@)(B
$B$GC4Ev$N<T$,?WB.$K$46a=j$N9b5i=w@->pJs$r8x3+CW$7$^$9!#(B
$B$J$*!"4uK>$r$5$l$J$$>l9g$O(B
$B!!(Bnomore(a)lovegal2.net
$B$^$G$*4j$$$7$^$9!#;j5^!"G[?.Dd;_$N<jB3$-$r$H$i$;$F$$$?$@$-$^$9(B
19 years, 6 months
[Po4a-devel]Winedocs and Po4a dependencies
by Francois Gouget
For the Wine project we are trying to make it as easy as possible for
Wine contributors to modify and rebuild the Wine documentation. The Po4a
dependencies have caused some concern in this regard: for each
dependency the contributor will have to track down which package to
install for his distribution and this makes the initial setup
significantly harder.
Po4a being not very widespread we have checked it in the Winedocs CVS
(http://cvs.sourceforge.net/viewcvs.py/wine/docs/). But Po4a has quite a
few dependencies so this does not help very much. So now we are hoping
to make it possible to reduce the number of po4a dependencies. Here is
the list I came up with, together with some notes for each of them:
* Locale::gettext (perl module)
Needed by po4a for localization.
Provided by liblocale-gettext-perl on Debian, perl-Locale-gettext on
Mandrake and Fedora Core(DAG), perl-gettext on SUSE.
Would you be open to a patch that acted as a wrapper around
Locale::gettext so that po4a would continue to work untranslated if that
module was missing?
The idea we would add a 'Po4aGettext' module that would export
gettext() and dgettext() functions. These would try to load
Locale::gettext in an eval function and use it if that succeeds.
Otherwise the Po4aGettext would simply return the untranslated strings.
The only changes to the other Po4a modules would be replacing 'use
Locale::gettext' with 'use Po4aGettext'.
* Text::WrapI18N (perl module)
Pure perl (so easy to check in) but depends on Text::CharWidth which
is not pure perl.
Provided by libtext-wrapi18n-perl on Debian. Found no RPM packages
providing it.
Text::WrapI18N was not used in po4a 0.16.2. I initially thought it
was used to wrap the text being output to the .po and .sgml files but in
fact it seems to only be used to print messages, warnings and errors.
Why is it needed? Doesn't a simple print work fine?
* Term::ReadKey (perl module)
Provided by libterm-readkey-perl on Debian, perl-Term-ReadKey on
Mandrake and Fedora Core(DAG), perl-TermReadKey on SUSE.
This module is used to determine the size of the terminal. This
information is then used by the wrap functions.
* SGMLS (perl module)
Needed by po4a to interface with the nsgmls parser.
Pure perl (so easy to check in).
Provided by libsgmls-perl on Debian, perl-SGMLSpm on Mandrake and
Fedora Core, perl-SGMLS on SUSE.
This is an essential part of po4a. The easiest way to remove this
dependency would be to check it into the Winedocs repository. So no
action needed on the Po4a side.
* nsgmls (command line tool)
Needed by po4a to parse the Sgml files.
Provided by sp on Debian, sgml-tools or openjade on Mandrake and
Fedora Core, opensp on SUSE.
This is an essential part of po4a. So it will have to remain as a
dependency which is reasonable.
--
Francois Gouget
fgouget(a)codeweavers.com
19 years, 6 months
[Po4a-devel]Sgml and generic file inclusion
by Nicolas François
Hello,
With Martin having no time, but spending a lot of time on po4a, it seems
the right moment to ask this.
First, extracting the file inclusion part from the TeX module to put it in
the Transtractor works.
It has mostly one drawback: the file inclusion has to be done in one line.
For example:
.so foo.1
or:
\include{foo.tex}\input{bar}
should work, but:
<!ENTITY foo SYSTEM
foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo.sgml>
will not work (at least currently; if it is needed, it will work)
To use this file inclusion mechanism, a module will have to implement one
function, which will find the filename and return the piece of text to put
before and after the inclusion of the given file. (it is a littel bit more
complicated, but basically works this way).
For example, the Man module could return "", "foo.1", "" when it receive
".so foo.1"
Other facilities are also provided (for example, the TeX module needs find
a file wether the .tex extension is given or not).
So here are some questions regarding the Sgml module:
Is there any problem with the current implementation of the inclusion?
The Sgml module is quite different from the other modules (the lines are
not shifted one by one, but the file is given in its whole to nsgmls. So
is this module a good choice for testing the file inclusion? Maybe I can
try to implement it in order to be able to use the whole file.
Is there another module which could need inclusion, and could be used to
test if this mechanism is sufficient and generic enough
I will submit the patch to the list, so you can have a look at it. But I'm
a little bit reluctant at committing it before it is tested by at least
two modules.
Kind Regards,
--
Nekral
19 years, 6 months