Using perl Syntax Highlighting
- #!/usr/bin/env perl
- use v5.28;
- use autodie;
- use File::Basename;
- ## Args
- @ARGV == 1 or die "Uso: $0 <archivo TeX to process>\n";
- my $nombre_archivo = shift;
- -f $nombre_archivo or die "ERROR: No encuentro [$nombre_archivo]\n";
- ## Extensión
- my @SuffixList = ('.tex', '', '.ltx');
- my ($name, $path, $ext) = fileparse($nombre_archivo, @SuffixList);
- $ext = '.tex' if not $ext;
- ## Lectura
- open my $ENTRADA, '<', $nombre_archivo;
- my $archivo;
- {
- local $/;
- $archivo = <$ENTRADA>;
- }
- close $ENTRADA;
- ## Regex
- my $anidado = qr/(\{(?>[^\{\}\\]++|\\.|(?R))*+\}) /x;
- my $ifthen = qr/\\ (?:ifthenelse\{\\boolean\{techrep\}\}) /x;
- $archivo =~ s/(?:$ifthen)($anidado)(?:$anidado)/STARTRM$1STOPRM/gmsx;
- $archivo =~ s/(?:STARTRM\{)(.+?)(?:\}STOPRM)/$1/gms;
- ## Escritura
- open my $SALIDA, '>', "$name-out$ext";
- print $SALIDA $archivo;
- close $SALIDA;
- __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Si el archivo de entrada es de la siguiente forma:
Using latex Syntax Highlighting
- \documentclass{article}
- \newboolean{techrep}
- \setboolean{techrep}{false}
- \begin{document}
- \ifthenelse{\boolean{techrep}}{Este es texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \} que no están
- escapadas dentro de el, pero sin las llaves exteriores
- }{Este es texto NO lo deseo, también puede llevar llaves \{ \}
- que no están escapadas} %
- TEXTO TEXTO
- TEXTO TEXTO \ifthenelse{\boolean{techrep}}{Otro texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \}
- que no están escapadas
- }{Este es texto NO lo deseo, también puede llevar llaves \{ \}
- que no están escapadas}
- TEXTO TEXTO TEXTO
- \end{document}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Obtengo de salida (que es más menos lo que busco):
Using latex Syntax Highlighting
- \documentclass{article}
- \newboolean{techrep}
- \setboolean{techrep}{false}
- \begin{document}
- Este es texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \} que no están
- escapadas dentro de el, pero sin las llaves exteriores
- %
- TEXTO TEXTO
- TEXTO TEXTO Otro texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \}
- que no están escapadas
- TEXTO TEXTO TEXTO
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero si el archivo de entrada es de la siguiente forma:
Using latex Syntax Highlighting
- \documentclass{article}
- \newboolean{techrep}
- \setboolean{techrep}{false}
- \begin{document}
- \ifthenelse{\boolean{techrep}}{Este es texto
- con el que {deseo quedarme} incluidas las llaves \{ que no están
- escapadas dentro de el, pero sin las llaves exteriores
- }{Este es texto NO lo deseo, también {puede llevar llaves} \}
- que no están escapadas} %
- TEXTO TEXTO
- TEXTO TEXTO \ifthenelse{\boolean{techrep}}{Otro texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \}
- que no están escapadas
- }{Este es texto {NO lo deseo}, también puede llevar llaves \{
- que no están \} escapadas}
- TEXTO TEXTO TEXTO
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Esperaría que la salida fuera:
Using latex Syntax Highlighting
- \documentclass{article}
- \newboolean{techrep}
- \setboolean{techrep}{false}
- \begin{document}
- Este es texto
- con el que {deseo quedarme} incluidas las llaves \{ que no están
- escapadas dentro de el, pero sin las llaves exteriores %
- TEXTO TEXTO
- TEXTO TEXTO Otro texto
- con el que \{deseo quedarme\} incluidas las llaves \{ \}
- que no están escapadas
- TEXTO TEXTO TEXTO
- \end{document}
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
¿Puedo hacer esto usando solo expresiones regulares? o ¿puedo hacerlo de otra manera?
Saludos