Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Consulta sobre || y or  RESUELTO Responder al tema
Nuevo tema


Página 2 de 2  [ 16 mensajes ]  Ir a página Anterior  1, 2
 
Nota 2012-01-19 08:31 @397

Perlero Nuevo
Registrado: 2010-09-08 21:03 @919
Mensajes: 61
Re: Consulta sobre || y or  RESUELTO
Ya, creo que esto sería la versión final del script. Vine por una consulta y la aclaré con creces.

Solucioné los errores que me daba autodie, y reparé una opción que no funcionaba como quería.

Agradecido por todo.
Pablo.
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
  2.     if 0;
  3.  
  4. use strict;                            # to be sure, that all is safe ... :-)
  5.  
  6. # $Id: tikz2pdf.pl 2012-01-17 08:41:35Z Pablo $
  7. # v. 0.1   Extract tikzpicture, based on pst2pdf by Herbert Voss
  8. # 2012-01-17      (c) Pablo González Luengo
  9. # Thanks to Giuseppe Matarazzo
  10. # Couple to have the complete operation of the script, you need some software (Linux and Windows)
  11. # xpdf (needed to create EPS / PPM)
  12. # gnuplot (not necessary if not called from TiKZ)
  13. # pdftk (not necessary with the-pdftk)
  14. # ImageMagick (required if you want to create JPG / PNG or other format)
  15. #
  16. use File::Path;
  17. use File::Copy;
  18. use File::Basename;
  19. use IO::File;
  20. use Getopt::Long;
  21. use autodie;
  22.  
  23. #----------------------- User part begin ------------------------
  24. my $imageDir = "images";
  25. my $Iext     = ".pdf";                 # leave empty, if not a special one
  26. my $tempDir  = ".";                    # temporary directory
  27. my $verbose  = 1;                      # 0 or 1, logfile
  28. my $clear    = 0;                      # 0 or 1, clears all temporary files
  29. my $DPI      = 75;                     # very low value for the png's
  30. my $Iscale   = 1;                      # for \includegraphics
  31. my $noImages = 0;                      # 1->create no images
  32. my $force    = 0;                      # 1->force create images
  33. my $ppm      = 0;                      # 1->create .ppm files
  34. my $norun    = 0;                      # 1->runs pdflatex
  35. my $miktex   = 0;                      # 1->runs pdlatex for miktex
  36. my $eps      = 0;                      # 1->create .eps files
  37. my $ifiles   = 0;                      # 1->create image files .tex
  38. my $all      = 0;                      # 1->create all images and files for type
  39. my $nopdftk  = 0;                      # 1->create all images and files for type in force mode
  40.  
  41. #----------------------- User part end ---------------------------
  42. #----------------------- program identification, options and help
  43. my $program   = "tikz2pdf";
  44. my $ident     = '$Id: tikz2pdf.pl 2012-01-17 pablo $';
  45. my $copyright = <<END_COPYRIGHT ;
  46. Copyright 2012-01-17 (c) Pablo Gonzalez L <pablgonz\@yahoo.com>
  47. END_COPYRIGHT
  48. my $licensetxt = <<END_LICENSE ;
  49.     This program is free software; you can redistribute it and/or modify
  50.     it under the terms of the GNU General Public License as published by
  51.     the Free Software Foundation; either version 2 of the License, or
  52.     (at your option) any later version.
  53.  
  54.     This program is distributed in the hope that it will be useful, but
  55.     WITHOUT ANY WARRANTY; without even the implied warranty of
  56.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  57.     General Public License for more details.
  58.  
  59.     You should have received a copy of the GNU General Public License
  60.     along with this program; if not, write to the Free Software
  61.     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  62.     MA  02111-1307  USA
  63. END_LICENSE
  64. my $title = "$program $ident\n";
  65. my $usage = <<"END_OF_USAGE";
  66. ${title}Usage: $program <texfile.tex>  [Options]
  67. tikz2pdf run a TeX source, and extract all TiKZ-related part as
  68.         single images  (pdf or eps or ppm, default pdf)
  69.         and then runs pdflatex. See tikz2pdf documentation for more info
  70. Options:
  71.   --help          - display this help and exit
  72.   --version       - display version information and exit
  73.   --license       - display license information and exit
  74.   --imageDir      - the dir for the created images (default images)
  75.   --DPI=<int>     - the dots per inch for a cretaed ppm files (default 75)
  76.   --ppm           - create .ppm files
  77.   --eps           - create .eps files  
  78.   --Iscale=<real> - the value for [scale=] in \\includegraphics
  79.   --noImages      - generate files without compile (need -norun)
  80.   --verbose       - creates long log
  81.   --clear         - delete all temp files
  82.   --norun         - create file-pdf.tex, but, no run pdflatex
  83.   --miktex        - for miktex users -enable-write18
  84.   --ifiles        - create images files (.tex) for all TiKZ enviroment
  85.   --force         - create images whitout pdftk.
  86.   --all           - create all image type and images.tex      
  87.   --nopdftk       - create all image type and images.tex in force mode
  88. Examples:
  89. * $program test.tex --all
  90. * produce test-pdf.tex and ppm,eps,tex and pdf for TiKZ-enviroment in image dir
  91. END_OF_USAGE
  92.  
  93. #
  94. my $result = GetOptions(
  95.     "help",
  96.     "version",
  97.     "license",
  98.     "DPI=i"      => \$DPI,             # numeric
  99.     "Iscale=f"   => \$Iscale,          # real
  100.     "imageDir=s" => \$imageDir,        # string
  101.     "tempDir=s"  => \$tempDir,         # string
  102.     "Iext=s"     => \$Iext,            # string
  103.     "clear"      => \$clear,           # flag
  104.     "noImages"   => \$noImages,        # flag
  105.     "force"      => \$force,           # flag
  106.     "ppm"        => \$ppm,             # flag
  107.     "norun"      => \$norun,           # flag
  108.     "miktex"     => \$miktex,          # flag
  109.     "eps"        => \$eps,             # flag
  110.     "ifiles"     => \$ifiles,          # flag
  111.     "all"        => \$all,             # flag
  112.     "nopdftk"    => \$nopdftk,         # flag
  113.     "verbose"    => \$verbose,
  114. ) or die $usage;
  115.  
  116. # help functions
  117. sub errorUsage { die "Error: @_ (try --help for more information)\n"; }
  118.  
  119. # options for command line
  120. if ($::opt_help) {
  121.     print $usage;
  122.     exit(0);
  123. }
  124. if ($::opt_version) {
  125.     print $title;
  126.     print $copyright;
  127.     exit(0);
  128. }
  129. if ($::opt_license) {
  130.     print $licensetxt;
  131.     exit(0);
  132. }
  133.  
  134. # open file
  135. my $InputFilename = "";
  136. @ARGV > 0 or errorUsage "Input filename missing";
  137. @ARGV < 2 or errorUsage "Unknown option or too many input files";
  138. $InputFilename = $ARGV[0];
  139.  
  140. # end open file
  141. my @SuffixList = ( ".tex", "", ".ltx" );    # possible extensions
  142. my ( $name, $path, $ext ) = fileparse( $ARGV[0], @SuffixList );
  143. if ( $ext eq "" ) { $ext = ".tex"; }   # me need the extension as well
  144. my $TeXfile = "$path$name$ext";
  145. my $Logfile = "$tempDir/$name.plog";   # our own log file
  146. open( LOGfile, ">$Logfile" );
  147. LOG("Parameters:");
  148. LOG("==> imageDir = $imageDir");
  149. LOG("==> Iext     = $Iext");
  150. LOG("==> DPI      = $DPI");
  151. LOG("==> Iscale   = $Iscale");
  152. LOG("==> tempDir  = $tempDir");
  153. LOG("==> verbose  = $verbose");
  154. LOG("==> clear    = $clear");
  155. LOG("==> noImages = $noImages");
  156. LOG("==> force    = $force");
  157. LOG("==> ppm      = $ppm");
  158. LOG("==> norun    = $norun");
  159. LOG("==> miktex   = $miktex");
  160. LOG("==> eps      = $eps");
  161. LOG("==> ifiles   = $ifiles");
  162.  
  163. # General options
  164. if ($ppm) {
  165.     LOG("Generate .ppm files ...");
  166.     $ppm = 1;
  167. }
  168. if ($norun) {
  169.     LOG("no compile file-pdf.tex");
  170.     $norun = 1;
  171. }
  172. if ($miktex) {
  173.     LOG("enable write 18 ...");
  174.     $miktex = 1;
  175. }
  176. if ($eps) {
  177.     LOG("Generate .eps files ...");
  178.     $eps = 1;
  179. }
  180. if ($ifiles) {
  181.     LOG("Generate .tex images files ...");
  182.     $ifiles = 1;
  183. }
  184. if ($all) {
  185.     LOG("Generate all images files ...");
  186.     $ifiles = $eps = $ppm = $clear = 1;
  187. }
  188. if ($nopdftk) {
  189.     LOG("Forced generate all images files ...");
  190.     $force = $ifiles = $eps = $ppm = $clear = 1;
  191. }
  192.  
  193. # Internal counter
  194. my $imgNo = 1;
  195.  
  196. # force mode , compile separte files
  197. if ($force) {
  198.     LOG("Running on [$path][$name][$ext]");
  199.     open my $FILE, '<', "$TeXfile";
  200.     LOG("force generate images...");
  201.     if   ( -d $imageDir ) { LOG("$imageDir exists") }
  202.     else                  { mkdir $imageDir, 0744; }
  203.     savePreamble($name);
  204.     runFile($name);
  205.     close $FILE;
  206.     close LOGfile;
  207. }
  208. else {
  209.     LOG("Running on [$path][$name][$ext]");
  210.     open my $FILE, '<', "$TeXfile";
  211.     if ( !$noImages ) {
  212.         if ( -d $imageDir ) { LOG("$imageDir exists") }
  213.         else {
  214.             mkdir $imageDir, 0744;
  215.             LOG("Imagedir created");
  216.         }
  217.         LOG("go to savePreamble ... ");
  218.         runBurst($tempDir);
  219.         savePreamble($name);
  220.         runFile($name);
  221.         LOG("done!\n go to runFile ...");
  222.         LOG("done!");
  223.         close LOGfile;
  224.     }
  225.     close $FILE;
  226. }
  227.  
  228. #------------ Create filename-pics.pdf, split and generate .ppm
  229. sub runBurst {
  230.     if ($force) { print "Force mode"; }
  231.     else {
  232.  
  233.         # Append preview
  234.         my $entrada = "$TeXfile";
  235.         my $salida  = "$name-pics.tex";
  236.         open my $ENTRADA, '<', "$entrada";
  237.         open my $SALIDA,  '>', "$salida";
  238.         print $SALIDA "\\AtBeginDocument\{\n";
  239.         print $SALIDA "\\RequirePackage\[active,tightpage\]\{preview\}\n";
  240.         print $SALIDA "\\renewcommand\\PreviewBbAdjust\{-600pt -600pt 600pt 600pt\}\n";
  241.         print $SALIDA "\\PreviewEnvironment\{tikzpicture\}\}\n";
  242.  
  243.         while ( my $linea = <$ENTRADA> ) {
  244.             print $SALIDA $linea;
  245.         }
  246.         close $ENTRADA;
  247.         close $SALIDA;
  248.  
  249.         # close preview
  250.  
  251.         if   ($miktex) { system("pdflatex -enable-write18 -interaction=batchmode $tempDir/$name-pics.tex"); }
  252.         else           { system("pdflatex -shell-escape -interaction=batchmode $tempDir/$name-pics.tex"); }
  253.         system("pdfcrop $tempDir/$name-pics.pdf $tempDir/$name-pics.pdf");
  254.         system("pdftk $name-pics.pdf burst output $imageDir/$name-tikz-\%1d.pdf");
  255.  
  256.         if ($ppm) {
  257.             system("pdftoppm -r  $DPI $name-pics.pdf $imageDir/$name-tikz");
  258.         }
  259.     }
  260. }
  261.  
  262. #------------ end pdftk burst
  263. LOG("runpdfTeX ... ");
  264. runpdfTeX( "$path$name", $name );
  265. LOG("all finished ... :-)");
  266.  
  267. # Save preable
  268. sub savePreamble {
  269.     my $filename = pop;
  270.     LOG("----- Start Preamble -----");
  271.     open my $FILEp, '>', "$tempDir/$filename.preamble";
  272.     open my $FILE,  '<', "$name.tex";
  273.     while (<$FILE>) {
  274.         my $i = index( $_, "begin{document}" );
  275.         if ( $i > 0 ) {
  276.             if ( $i > 1 ) { print $FILEp substr( $_, 0, --$i ); }
  277.             if ($force) {
  278.                 print $FILEp "\\pagestyle{empty}\n";
  279.             }
  280.             close $FILEp;
  281.             LOG("----- Close Preamble ------");
  282.             return;
  283.         }
  284.         else {
  285.             print $FILEp "$_";
  286.             LOG("$_");
  287.         }
  288.     }
  289.  
  290.     close $FILE;
  291.     close $FILEp;
  292.     if ($verbose) { LOG("<-----Preamble<----"); }
  293.     return;
  294. }
  295.  
  296. sub searchTiKZ {
  297.     my @TikZ        = ();
  298.     my @TIKZtotal   = ();
  299.     my $depth       = -1;
  300.     my $type        = -1;
  301.     my $EndDocument = 0;
  302.     my $iVerb       = 0;
  303.     open my $FILE, '<', "$name.tex";
  304.     while (<$FILE>) {
  305.  
  306.         if ( !$EndDocument ) {
  307.             chomp;
  308.             my $line = $_;
  309.             if ( !$iVerb ) {
  310.                 $iVerb = ( ( index( $line, "begin{verbatim}" ) > 0 ) or ( index( $line, "begin{lstlisting}" ) > 0 ) );
  311.             }
  312.             if ( !$iVerb ) {
  313.                 my $iTIKZ = index( $line, "begin{tikzpicture}" );
  314.                 if ( $type < 0 ) {
  315.                     if ( $iTIKZ > 0 ) {
  316.                         $type = 2;
  317.                         $line = substr( $line, $iTIKZ - 1 );
  318.                         LOG("TiKZ-line: $line");
  319.                     }
  320.                 }
  321.  
  322.                 if ( $type > 0 ) {
  323.                     LOG("searchTiKZ: set \$type=$type");
  324.                     $iTIKZ = index( $line, "end{tikzpicture}" );
  325.                     if ( $iTIKZ > 0 ) {
  326.                         LOG("searchTiKZ: $line");
  327.                         $type = -1;
  328.                         push @TikZ, substr( $line, 0, $iTIKZ + 16 );
  329.                         LOG("searchTiKZ: set \$type=$type");
  330.                         push @TIKZtotal, [@TikZ];
  331.                         LOG("---->TiKZ---->\n@TikZ\n<----TikZ<----");
  332.                         @TikZ = ();
  333.                     }
  334.                     else { push @TikZ, $line; }    # add line
  335.                 }
  336.                 my $i = index( $line, "end{document}" );
  337.                 if ( $i > 0 ) { $EndDocument++; LOG("EndDocument in searchTiKZ"); }
  338.             }
  339.             if ( ( index( $line, "end{verbatim}" ) > 0 ) or ( index( $line, "end{lstlisting}" ) > 0 ) ) { $iVerb = 0; }
  340.         }
  341.     }
  342.     if ($verbose) {
  343.         LOG("---->TIKZtotal---->");
  344.         for my $aref (@TIKZtotal) {
  345.             my @a = @$aref;
  346.             my $i = 1;
  347.             foreach (@a) { LOG( $a[$i] ); $i = $i + 1; }
  348.         }
  349.         LOG("<----TIKZtotal<----");
  350.     }
  351.     close $FILE;
  352.     return @TIKZtotal;
  353. }
  354.  
  355. # Creating ifile.tex and eps, pdf and ppm for images
  356. if ($force) {
  357.  
  358.     sub runFORCE {
  359.         my $filename = pop;
  360.         if   ($miktex) { system("pdflatex -enable-write18 -interaction=batchmode $tempDir/$filename-tikz"); }
  361.         else           { system("pdflatex -shell-escape -interaction=batchmode $tempDir/$filename-tikz"); }
  362.         if ($ifiles) {
  363.             copy( "$filename-tikz.tex", "$imageDir/$filename-tikz-$imgNo.tex" );
  364.         }
  365.         system("pdfcrop $tempDir/$filename-tikz.pdf $imageDir/$filename-tikz-$imgNo.pdf");
  366.         if ($eps) {
  367.             system("pdftops -level3 -eps $imageDir/$filename-tikz-$imgNo.pdf $imageDir/$filename-tikz-$imgNo.eps");
  368.         }
  369.         if ($ppm) { system("pdftoppm -r $DPI $imageDir/$filename-tikz-$imgNo.pdf $imageDir/$filename-tikz-$imgNo"); }
  370.         $imgNo = $imgNo + 1;
  371.     }
  372. }
  373. else {
  374.  
  375.     # Creating ifiles.tex and .eps for images
  376.     sub runTeX {
  377.         my $filename = pop;
  378.         if ($eps) {
  379.             system("pdftops -level3 -eps $imageDir/$filename-$imgNo.pdf $imageDir/$filename-$imgNo.eps");
  380.         }
  381.         if ($ifiles) {
  382.             copy( "$filename.tex", "$imageDir/$filename-$imgNo.tex" );
  383.         }
  384.         $imgNo = $imgNo + 1;
  385.     }
  386. }
  387.  
  388. sub runFile {
  389.     my $filename  = pop;
  390.     my @TIKZarray = searchTiKZ();
  391.     if ($verbose) {
  392.         LOG("---->TIKZarray---->");
  393.         for my $aref (@TIKZarray) {
  394.             my @a = @$aref;
  395.             my $i = 1;
  396.             foreach (@a) { print LOG $a[$i] . "\n"; $i = $i + 1; }
  397.         }
  398.         LOG("<----TIKZarray<----");
  399.         my $no = @TIKZarray;
  400.         LOG( "TiKZ: " . $no . " TiKZ sequence(s)" );
  401.     }
  402.     for my $aref (@TIKZarray) {
  403.         my @TikZ = @$aref;
  404.         open my $FILEp,   '<', "$tempDir/$filename.preamble";
  405.         open my $FILEsub, '>', "$tempDir/$filename-tikz.tex";
  406.         while (<$FILEp>) { print $FILEsub $_; }
  407.         print $FILEsub "\\begin{document}\n";
  408.         if ($verbose) { LOG("\@TikZ: $_"); }
  409.         foreach (@TikZ) { print $FILEsub "$_\n"; }
  410.         print $FILEsub "\\end{document}";
  411.         close $FILEsub;
  412.         close $FILEp;
  413.  
  414.         if ($force) {
  415.             runFORCE("$name");
  416.         }
  417.         else {
  418.             runTeX("$tempDir/$name-tikz");
  419.         }
  420.     }
  421. }
  422.  
  423. # Renaming ppm need for correct name
  424. my $dren    = "$tempDir/$imageDir";
  425. my $fichero = '';
  426. my $ppmren  = '';
  427. my $renNo   = 1;
  428. if ( opendir( DIR, $dren ) ) {
  429.     foreach ( readdir DIR ) {
  430.         $fichero = $_;
  431.         if ( $fichero =~ /($name-tikz-)(\d+|\d+[-]\d+).ppm/ ) {
  432.             my $renNo   = int($2);
  433.             my $newname = "$1$renNo.ppm";
  434.             $ppmren = rename( "$dren/$fichero", "$dren/$newname" );
  435.         }
  436.     }
  437. }
  438. closedir DIR;
  439.  
  440. # Replace files
  441. sub runpdfTeX() {
  442.     my ( $name, $pdfname ) = @_;
  443.     open my $PDF,  '>', "$tempDir/$pdfname-pdf.tex";
  444.     open my $FILE, '<', "$name.tex";
  445.     print $PDF "\\RequirePackage{grfext}\n";
  446.     print $PDF "\\PrependGraphicsExtensions*{$Iext}\n";
  447.     print $PDF "\\RequirePackage{graphicx}\n";
  448.     print $PDF "\\graphicspath{{$imageDir/}}\n";
  449.     my $ignore      = 0;
  450.     my $IMGno       = 1;
  451.     my $depth       = -1;
  452.     my $type        = -1;
  453.     my $EndDocument = 0;
  454.     my $iVerb       = 0;
  455.  
  456.     while (<$FILE>) {
  457.         if ( !$iVerb ) {
  458.             $iVerb = ( ( index( $_, "begin{verbatim}" ) > 0 ) or ( index( $_, "begin{lstlisting}" ) > 0 ) );
  459.         }
  460.         if ( !$iVerb ) {
  461.             my $i = index( $_, "end{document}" );
  462.             if ( $i > 0 ) { print $PDF $_; $EndDocument++; LOG("EndDocument in runpdfTeX"); }
  463.             if ( !$EndDocument ) {
  464.                 my $iTIKZ = index( $_, "begin{tikzpicture}" );
  465.                 if ( $iTIKZ > 0 ) {
  466.                     $type   = 2;
  467.                     $ignore = 1;
  468.                     if ( $iTIKZ > 1 ) { print $PDF substr( $_, 0, --$iTIKZ ); }
  469.                     print $PDF "\\includegraphics[scale=$Iscale]{$pdfname-tikz-$IMGno}";
  470.                     $IMGno = $IMGno + 1;
  471.                 }
  472.                 if ( !$ignore ) { print $PDF "$_"; }
  473.                 if ( $type == 2 ) {
  474.                     my $iTIKZ = index( $_, "end{tikzpicture}" );
  475.                     if ( $iTIKZ > 0 ) {
  476.                         print $PDF substr( $_, $iTIKZ + 16 );
  477.                         $ignore = 0;
  478.                         $type   = -1;
  479.                     }
  480.                 }
  481.             }
  482.         }
  483.         else { print $PDF $_; }
  484.         if ( ( index( $_, "end{verbatim}" ) > 0 ) or ( index( $_, "end{lstlisting}" ) > 0 ) ) { $iVerb = 0; }
  485.     }
  486.     close $FILE;
  487.     close $PDF;
  488.  
  489.     if ($norun) { print "Done\n"; }
  490.     else {
  491.         system("pdflatex -interaction=batchmode $pdfname-pdf");
  492.         if ($ppm) {
  493.             print "If you need to create JPG/PNG type cd $imageDir and run\n";
  494.             print "mogrify -format jpg *.ppm\n";
  495.         }
  496.         print "Done\n";
  497.     }
  498.     if ($clear) {
  499.         if ($force) {
  500.             unlink "$tempDir/$name-tikz.pdf";
  501.             unlink "$tempDir/$name-tikz.aux";
  502.             unlink "$tempDir/$name-tikz.log";
  503.             unlink "$tempDir/$name-tikz.tex";
  504.             unlink "$tempDir/$name.plog";
  505.             unlink "$tempDir/$name.preamble";
  506.             unlink "$tempDir/$name-pdf.aux";
  507.             unlink "$tempDir/$name-pdf.log";
  508.  
  509.         }
  510.         else {
  511.             unlink "$tempDir/$name.plog";
  512.             unlink "$tempDir/$name.preamble";
  513.             unlink "$tempDir/$name-pdf.aux";
  514.             unlink "$tempDir/$name-pdf.log";
  515.             unlink "$tempDir/doc_data.txt";
  516.             unlink "$tempDir/$name-pics.pdf";
  517.             unlink "$tempDir/$name-pics.tex";
  518.             unlink "$tempDir/$name-pics.aux";
  519.             unlink "$tempDir/$name-pics.log";
  520.             unlink "$tempDir/$name-tikz.tex";
  521.  
  522.         }
  523.     }
  524. }
  525.  
  526. sub LOG() {
  527.     if ($verbose) { print LOGfile "@_\n"; }
  528. }
  529. __END__
  530.  


Última edición por explorer el 2012-01-19 11:28 @519, editado 1 vez en total
Formateado de código con Perltidy


Responder al tema  [ 16 mensajes ]  Ir a página Anterior  1, 2

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO