[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Encore les espaces insecables et po4a/man (fut: [rfr] man://dpkg/dpkg-name.1)



On Sun, Aug 15, 2004 at 11:46:47PM +0200, Nicolas François wrote:
> On Sun, Aug 15, 2004 at 12:50:45PM -0700, Martin Quinson wrote:
> > Dis donc, je vais pas m'attirer des ennuis si je fais ca dans un bloc
> > .nf/.fi (qui demande du verbatim?)
> 
> Dans un .nf, il me semble que ça ne change rien : - est un hyphen
> et \- un tiret.

Certes, mais quid des '\ ' dont on parlait ici ? Je veux dire que si je suis
dans un nf/fi, il faut peut etre pas que je s/\\ \n/\\ /sg, si ?

> Une page de man qui peut être intéressante pour tester po4a : ps.1
> (au passage, il y a un .nf dans cette page de manuel parce que l'auteur
> veut gérer le formatage lui même, et je me retrouve avec plein
> d'hyphens)
> 
> Cette page utilise le préprocesseur tbl (comme fd.4, proc.5, perlmint.1,
> mouse.4, ...) :
> $ grog ps.1
> groff -t -man ps.1
> 
> Ça fait donc des balises en plus. Désolé ;)

Je crois bien que je gere le tbl. le source de perlmint.1 est un fichier
pod. Si tu lance po4a sur le groff resultant, il [devrait] se rend[re]
compte de la supercherie, et t'envoi gentiment sur les rose.

J'ai pas toutes les pages que tu cites sur ma machine, mais je vais regarder
demain. Si je le fais maintennat, je vais jamais bosser.

> IL y a d'autres préprocesseurs : mdoc (assez courant, netkit-ftp.1,
> mktemp.1, ...), eqn (mag.1), ms (beaucoup plus rare: dr_progress.1p d'un
> paquet video-dvdrip non officiel)

J'avais cru comprendre que mdoc etait un jeu completement separe de macro,
plus ou moins incompatibles. Si je m'a gourre, on peut rajouter le support
assez simplement.

Du coup, po4a detecte et refuse les pages en mdoc. Y'en a pas tant que ca,
d'ailleurs, car po4a donnait ce resultat lors de la derniere campagne de
tests:

# of pages         : 4323
	
Ignored pages      : 1432 (33%)
parser fails       :  850 (20% of all; 29% of unignored)
			
works perfectly    : 1660 (38% of all; 57% of unignored; 81% of processed)
change wrapping    :  239 ( 5% of all;  8% of unignored; 12% of processed)

undetected problems:  142 ( 3% of all;  5% of unignored;  7% of processed)

Voir Locale::Po4a::Man(1) pour la legende. Ces tests commencent a dater un
peu. Depuis le temps que j'ajoute des macros, je pense que l'analyseur
refuse moins de pages de nos jours.

Ah si, dis donc, au maximum, on a 850 pages en mdoc, tout de meme. 

> > /me recrute un expert groff pour po4a...
> C'est super chiant le groff, je me demande pourquoi ça existe encore ;)

C'est pour ca que je recrute. Pour l'instant, c'est a moi de tout faire ;)

> Je vais voir si je peux rentrer dans le code de po4a (j'aime pas le
> perl, mon médecin me l'a déconseillé)

Surtout, si t'es d'accord pour regarder de plus pres, on va changer de liste
pour arreter de gonfler celle la. Celle de po4a (qui est anglophone) me
semble plus adapte. 

Pour le code, tu n'as pas vraiment besoin de plonger dans le source. Voici
le code qui prend soin des "Displays and keeps" du paquet ms:

$macro{'DS'}=$macro{'LD'}=$macro{'DE'}=\&untranslated;
$macro{'ID'}=$macro{'BD'}=$macro{'CD'}=\&untranslated;
$macro{'RD'}=$macro{'KS'}=$macro{'KE'}=\&untranslated;
$macro{'KF'}=$macro{'B1'}=$macro{'B2'}=\&untranslated;

Y'a une table de hachage sur le nom de la macro, et chaque case est un
pointeur sur fonction qui fait le boulot. T'as aussi no_arg() pour ce qui ne
doit jamais prendre d'argument (mais je l'utilise assez peu, je colle
untranslated a la place car j'en ai marre de debuger le groff des autres).
Y'a bien evidement translate_joined, qui prend tous les arguments et les
traduit comme un seul paragraphe (fou le nombre d'auteurs qui sont pas
foutus de "proteger les espaces la ou il faut un seul arg"). Et
translate_each, qui fait un paragraphe par argument.


Et y'a aussi bien evidement moyen de declarer une fonction au vol. Tu recois
tous les arguments de la macro en argument, et il faut faire un
$self->pushmacro sur ce que tu veux coller dans le document traduit. Ca
s'arrange pour echapper les espaces qui doivent l'etre et tout.

Si tu veux voir des bouts atterrir dans le fichier po en plus de dans le
document produit, il faut utiliser $self->t() dessus. 

$macro{'TH'}= sub {
    my $self=shift;
    my ($th,$title,$section,$date,$source,$manual)=@_;
    #.TH      title     section   date     source   manual
    $self->pushmacro($th,
                     $self->t($title),
		     $section,
		     $self->t($date),
                     $self->t($source),
	             $self->t($manual));
};

Mais franchement, des macros ou y'a besoin de faire une nouvelle fonction,
y'en a une vingtaine, pour l'instant. Et je veux bien les faire, si tu
m'explique ce que ca doit faire.


Bref, t'as vraiment pas besoin d'etre un as en perl.

Mt.

-- 
If you can't do it in ANSI C, it isn't worth doing.

Attachment: signature.asc
Description: Digital signature


Reply to: