Thomas Huriaux <[EMAIL PROTECTED]> (19/06/2006): > There are two problems here: > 1. If you take for example the string > "What would you like to do about ${BASENAME}?" > it appears twice in templates.master (lines 10 and 18) while being > referenced only once in the po file with the following line: > #: ../templates.master:18 > > This is a bug in intltool-extract, which uses hashes instead of > lists. When a string appears for the second time, it overrides the > definition of the first appearance. > > I'm not sure about how to fix it, so I'd prefer to have Denis' > opinion before trying to work on it.
Here is a first patch (incomplete, waiting for Denis'comments to continue). With this we have the expected behavior, for example (ucf templates) #: ../templates.master:8 ../templates.master:16 There is a bug, the comments are displayed twice, as following: #. Type: select #. Description #. // Type: select #. // Description And last thing to do: to refer to a template number is probably better (in order to know exactly which strings belong to the same template). In my patch, I assume that %loc is only used with rfc822deb (which seems to be true), so I took the liberty to change its content. Cheers, -- Thomas Huriaux
--- /usr/share/intltool-debian/intltool-extract 2006-05-14 00:45:07.000000000 +0200 +++ intltool-extract 2006-06-20 00:49:54.000000000 +0200 @@ -709,7 +709,7 @@ $strcount++; next if (exists($tfields[$cnt]) && $tfields[$cnt] != 1); $messages{$str} = []; - $loc{$str} = $lineno; + push (@{$loc{$str}}, $lineno); $count{$str} = $strcount; $comments{$str} = $tag . $pocomments[$cnt]; } @@ -890,7 +890,7 @@ { @msgids = sort keys %messages; } - for my $message (@msgids) + LOOP: for my $message (@msgids) { my $offsetlines = 1; $offsetlines++ if $message =~ /%/; @@ -901,7 +901,7 @@ $offsetlines++; } } - print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n" + print OUT "# ".($loc{$message}[0] - $offsetlines). " \"$FILE\"\n" if defined $loc{$message}; if (defined ($comments{$message})) { @@ -933,6 +933,10 @@ print OUT "\");\n"; } } + if (defined $loc{$message}) { + shift (@{$loc{$message}}); + redo LOOP if @{$loc{$message}}; + } } }
signature.asc
Description: Digital signature