POD2::Base~[pt](3) Modulo basico para traduco~es de documentaca~o Perl

SINOPSE

    use POD2::Base;
    $pod2 = POD2::Base->new({ lang => 'EO' });
    @dirs = $pod2->pod_dirs;
    $re = $pod2->search_perlfunc_re;

DESCRICA~O

Este codigo e uma abstraca~o do codigo em POD2::IT e POD2::FR, modulos que pertencem aos projetos italiano e frances de traduca~o dos documentos que acompanham o interpretador Perl.

Com o pacote de traduca~o ja instalado, a documentaca~o traduzida pode ser acessada atraves do comando:

    $ perldoc POD2::<lang>::<podname>

(onde <lang> e uma abreviaca~o para linguagem como IT, FR, TLH, etc.)

Isto funciona seguramente ate para as verso~es antigas do perldoc. Na~o e muito conveniente mas sempre funciona.

Para incrementar o suporte para leitura destes documentos traduzidos, o programa perldoc (desde a versa~o 3.14_01) foi atualizado para encontrar PODs traduzidos assim:

    $ perldoc -L IT <podpage>
    $ perldoc -L FR -f <function>
    $ perldoc -L TLH -q <FAQregex>

(Nota: Este suporte foi distribuido junto da versa~o 5.10.0 do interpretador Perl recentemente disponilizado no CPAN.)

O objetivo desta classe e prover uma base minima para ajudar o "perldoc" e os autores de projetos de traduca~o a fazerem seu trabalho.

SUBCLASSES

Se voce quer escrever um pacote de traduca~o (e tem algumas necessidades de personalizaca~o), seu trabalho pode ser diminuido se voce criar uma subclasse de "POD2::Base".

Por exemplo, um exemplo minimo e ilustrado abaixo.

    package POD2::TLH; # Klingon
    use POD2::Base;
    our @ISA = qw( POD2::Base );
    sub search_perlfunc_re { # ajuda 'perldoc -f' a funcionar
        return 'Klingon Listing of Perl Functions';
    }
    1;

E enta~o

    $ perldoc -L tlh perlintro

vai lhe apresentar a introduca~o de Perl na linguagem Klingon (desde que um arquivo POD2/TLH/perlintro.pod tenha sido distribuido junto com POD2/TLH.pm) e

    $ perldoc -L tlh -f pack

vai encontrar a documentaca~o em Klingon de "pack" (se POD2/TLH/perlfunc.pod foi disponibilizado tambem).

METODOS

Este modulo foi projetado como uma classe OO com uma API bem pequena.
new
    $pod2 = POD2::Base->new(\%args);
    $pod2 = POD2::ANY->new();

O constructor. A criaca~o de uma instancia pode se fazer de modo similar a:

    $pod2 = POD2::Base->new({ lang => 'tlh' });

onde as opco~es suportadas sa~o:

  • ``lang''

    Especifica o codigo da linguagem em que estamos interessados. Este parametro e obrigatorio, mas pode ser extraido do nome da subclasse, como explicado mais abaixo.

  • ``inc''

    Este parametro e usado para substituir a lista de diretorios para as bibliotecas Perl onde procuram-se os documentos POD (ou seja, @INC). Na maior parte do tempo, voce na~o vai querer mexer com isto. Este parametro e mais util para debugging e testes.

    Espera-se um array ref.

Se "POD2::ANY" e uma subclasse de "POD2::Base", o construtor herdado funcionara sem argumentos extraindo 'ANY' do nome do pacote e usando-o como o codigo da linguagem desejada.

Note que o uso de ``inc'' no construtor congela a lista de diretorios vasculhados pela instancia "POD2::Base". Se na~o e usado, o conteudo atualizado de @INC e usado em cada chamada de "pod_dirs" (de tal forma que mudancas dinamicas no path para as bibliotecas Perl sa~o percebidas). E isto que queriamos dizer com ``Na maior parte do tempo, voce na~o vai querer mexer com isto.''

pod_dirs
    @dirs = $pod2->pod_dirs;
    @dirs = $pod2->pod_dirs(\%options);

Usado por "Pod::Perldoc" para descobrir onde procurar por PODs traduzidos.

O comportamento padra~o de "POD2::Base" e encontrar cada diretorio POD2/<lang>/ sob os diretorios de bibliotecas Perl (@INC) ou na lista dada como o argumento ``inc'' no construtor.

As opco~es suportadas sa~o:

  • ``test''

    Por default, o retorno de "pod_dirs" na~o inclui diretorios POD que na~o existem (testados com "-d"). Se um valor falso explicito e dado para esta opca~o (por exemplo, "test => 0"), este teste na~o e feito e "pod_dirs" inclui todos candidatos POD2/<lang>/ abaixo dos diretorios de bibliotecas. (Util para o debugging deste modulo, mas sem outros usos praticos alem deste.)

search_perlfunc_re
    $re = $pod2->search_perlfunc_re;

Para implementar "perldoc -f <function>" o codigo atual de "Pod::Perldoc" usa um string fixo ``Alphabetical Listing of Perl Functions'' ou o retorno deste metodo (em uma regex) para pular a introduca~o e alcancar a listagem das funco~es builtin. Enta~o um pacote de traduca~o com a correspondente traduca~o de perlfunc.pod deve definir este metodo para fazer "perldoc -L <lang> -f <function>" funcionar corretamente.

Ha outros metodos documentados abaixo. Entretanto, eles provavelmente sera~o tornados obsoletos em verso~es futuras quando forem projetados e implementados metodos mais gerais de encontrar e mostrar os metadados sobre os PODs traduzidos.

pod_info
    $hashref = $pod2->pod_info;

Usado pelo proprio "POD2::Base" e seus ancestrais "POD2::IT" e "POD2::FR". O retorno contem alguns metadados sobre os PODs traduzidos usados pelos metodos "print_pod" e "print_pods".

Ao fazer subclasses seguindo o padra~o de "POD2::IT" e "POD2::FR", voce deve redefinir este metodo com a informaca~o atual sobre quais traduco~es POD o pacote atual esta disponibilizando.

print_pods
    $pod2->print_pods;

Mostra (via "print") todos PODs traduzidos e a versa~o correspondente de Perl dos arquivos originais.

print_pod
    $pod2->print_pod(@pages);
    $pod2->print_pod(); # usa @ARGV

Mostra a versa~o de Perl correspondente dos arquivos originais associados aos PODs passados como argumentos.

EXEMPLOS

POD2::TLH

Uma versa~o mais completa de "POD2::TLH" pode-se parecer com isto:

    package POD2::TLH; # Klingon
    use POD2::Base;
    our @ISA = qw( POD2::Base );
    sub search_perlfunc_re {
        return 'Klingon Listing of Perl Functions';
    }
    sub pod_info {
        return { perlintro => '5.8.8' };
    }
    1;

E voce pode experimentar:

    use POD2::TLH;
    my $pod2 = 'POD2::TLH';
    $pod2->print_pods();
    $pod2->print_pod('pod_foo', 'pod_baz', ...);

OS ARQUIVOS INSTALADOS

Se voce quer descobrir quais arquivos PODs de uma dada linguagem que esta~o instalados junto com seu interpretador Perl, voce pode usar um codigo similar a este.

    use File::Find;
    use POD2::Base;
    my $pod2 = POD2::Base->new({ lang => $lang });
    my @files;
    find sub { push @files, $File::Find::name } if -f },
         $pod2->pod_dirs;
    print "$_\n" for @files;

Na distribuica~o "POD2-Base", e incluido um script eg/list.pl com uma versa~o estendida deste codigo.

As regras para encontrar POD em arquivos .pod, .pm e outros pertencem ao modulo Pod::Perldoc. Assim "POD2::Base" na~o tenta repetir esta funcionalidade aqui.

AUTORES

Enrico Sorcinelli <bepi at perl.it> (pelo codigo original em POD2::IT)

Adriano Ferreira <ferreira at cpan.org>

VEJA TAMBEM

POD2::IT, POD2::FR, POD2::LT, POD2::CN, perldoc, perl.

A versa~o original deste documento: POD2::Base.

(O proposito desta traduca~o e servir como um primeiro teste para experimentar o suporte dos varios modules Pod e sites Perl aos PODs traduzidos.)

(This translation was supplied as a front test against the support of the many Pod modules and Perl sites on translated PODs.)

COPYRIGHT E LICENCA

Copyright (C) 2004-2006 Perl.it / Perl Mongers Italia

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.