#!/usr/bin/perl -s BEGIN{ print "This script is deprecated.\n"; exit 0;} our ($o, $pdf, $n,$h, $h1,$d, $debug_frac, $debug_fun, $test); use strict; use Data::Dumper; use Exercise::Gen::Let; use Skel::Data; use Text::RewriteRules; skimport(); my $test = q{ sss f1=[1,2,3,4,5,6]; s f2={1,2,3,4,5,6}; f3={1,2,3,4,5,6}; n f4=[#f,2*#f, 3*#f]; n f5=import(file.txt); f6 =[#f,2*#f, 3*#f]; f7[7]=[#f,2*#f, 3*#f]; s f8[7]=[#f,2*#f, 3*#f]; n a1 = {[20..26]} ; s a2 = import(F/animais.list) ; a1 ~ a2 ; a3[6] ~ a4[6] ~ a5[6]; s a6 = import(F/animais.list) ; a7 = {[10..100]}; ##s file= import `ls` ; a8 = importcol(1,F/femea.tab); a9 = importcol(2,F/femea.tab); a8 ~ a9 ~ a10; n a11 = #a*#peso; include(/home/jj/svn/mex-pedia/UM-epedia/Formula.txt) n a12 = #a(#b)+#c; a13[6] ~ a14[6] = importcol(F/colectivos.tab); a20 = {nada}; }; if($d){ Exercise::Gen::Let::lexdebugstr( $test );} else { Exercise::Gen::Let::parseStr($test); $Data::Dumper::Indent=2; $Data::Dumper::Terse=1; print Dumper(\%Exercise::Gen::Let::sem); } exit 0; my $state = {}; my $base; if($h) {print EXE(); exit 0} if($h1){print GEXER(); exit 0} if($d){print Dumper(Exercise::Gen->new(shift)); exit 0} my $f=shift or die; if($f =~ m/(.*)\.test$/){$test=1; $o ||="$1.tex";$base=$1 } else { $o ||="$f.tex";$base=$f } if($test){ mtest2tex($f,$o)} else { debugexe($f,$o)} if($pdf){ system("ppdflatex $base.tex")== 0 or die("Error in ppdflatex\n"); system("xpdf $base.pdf") == 0 or die("Error no PDF found\n"); } sub debugexe{ my ($f,$o)= @_; my $e=Exercise::Gen->new($f); my $en = $e->latex(); my $en2 = $e->vals(); $en->{tab}=sub{my $r=""; for(@{$en->{_values}}){ # next if $_ eq "tab"; $r.= sprintf("%5s | %20s | %s\n",$_,$en->{$_},$en2->{$_}) unless /^_/}; $r}; open (F,">",$o) or die;; print F LATDEBUG($en); close F; } sub mtest2tex{ my ($f,$o)= @_; my $txt=`cat $f`; my $aux=mtestfile($txt); my %meta= (title => $aux->{title}, _usepackage => $aux->{usepackage} || '%no extra packages' , subtitle => $aux->{subtitle} || '\mbox{}' , data => $aux->{data} || '\today' ); $state->{enunpage} = ENUN({%meta, questions=> $aux->{txt} }); $state->{resultpage}= ENUN({%meta, questions=> $state->{resultpage_q}}); $state->{resolutionpage}=ENUN({%meta,questions=> $state->{resolutionpage_q}}); open (F,">",$o) or die; print F TSKEL($state); close F; } RULES/m mtestfile =begin=> s/(.)(.*)/$1\n$2__FIM/s ;my $r={}; \#[Qq]uest:\s*(\S+)=e=>push(@{$r->{q}},$1); proc_file($1) \#usepackage[[:CBB:]]=e=>$r->{usepackage}=$2;"" \#[Qq]uest[[:CBB:]][[:CBB:]][[:CBB:]]=e=>saveq($2,$4,$6) \n[Tt]itle:\s*(.+)=e=>$r->{title}=$1;"" \n[Vv]ersions:\s*(.+)=e=>$r->{versions}=$1;"" \n(\w+):\s*(.+)=e=>$r->{$1}=$2;"" __FIM=last=> !!s/.__FIM// and $r->{txt}=$_ and return $r ENDRULES sub saveq{ my ($q,$resul,$resol)=@_; $state->{resultpage_q} .=ENU2({_question => $resul}); $state->{resolutionpage_q}.=ENU2({_question => $resol}); ENU2({_question => $q}); } sub proc_file{ my $f=shift; print STDERR "Debug: processing '$f'\n"; die("Error: cant find $f\n") unless -f $f; my $e=Exercise::Gen->new($f) or warn("Fail to process $f\n"); my $aux= $e->latex(); saveq($aux->{_question},$aux->{_resolution}, $aux->{_result}); } __DATA__ __ENU3__ \begin{questao}{} [% _question %] \footnotetext{\thequest:[% _result %]} \end{questao} __ENU2__ \begin{questao}{} [% _question %] \end{questao} __ENU__ \section{Enunciado} [% _question %] __SUG__ \section{Sugestão} [% _sugestion %] __RES__ [% _result %] __LATDEBUG__ [%default:{ _usepackage=>'%not provided', _author=>'', data=>'\today', _obs=>'', }%] \documentclass[portuges,a4paper]{article} \usepackage{babel} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{fancyvrb} %\usepackage{t1enc} \usepackage{jjaulas} \usepackage{graphicx} [% _usepackage %] \begin{document} \begin{exame}{[% _title %]}{[% _author %]\mbox{}}{[%data%]} \subsection*{Enunciado} [% _question %] \subsection*{Sugestão} [% _sugestion %] \subsection*{Resolução} [% _resolution %] \subsection*{Solução} [% _result %] \subsection*{Obs} [% _obs %] \subsection*{Sorteio} {\small \begin{verbatim} [% tab %] \end{verbatim} } \end{exame} \end{document} __EXE__ #title: #author: #let: n a =[ ]; a ~ b; #question: \begin{enumerate} \item \end{enumerate} #sugestion: #resolution: #result: #Verify: #usepackage % latex preambula __GEXER__ template: ~/svn/mtest/Exercise-Gen/example/jj.tskel problems: ~/svn/mtest/ versions: 4 title: Teste Matemática Jun 2011 subtitle: exemplo inocente data: Nov 2011 \section*{Introdução} Este anarco-teste destina-se a preparar os alunos para o prémio nobel (pedir não custa) #quest: EqQua2NV.txt #quest: DerivadaDoProdutoNV.txt #quest: EstaticaNV.txt #quest: DerivadaDaFuncaoCompostaNV.txt #quest{Quanto é $3 \times 9$?}{$9+9+9=27$}{27} __ENUN__ \begin{exame}{[% title %]}{[% subtitle %]}{[%data%]} [% questions %] \end{exame} __TSKEL__ [%default:{_usepackage=>'', -author=> '', }%] \documentclass[portuges,a4paper]{article} \usepackage{babel} \usepackage[mathletters]{ucs} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{fancyvrb} %\usepackage{t1enc} \usepackage{jjaulas} \usepackage{graphicx} [% _usepackage %] \begin{document} %\fvset{fontsize=\small, frame=single, numberblanklines=false} [% enunpage %] \newpage [% resultpage %] \newpage [% resolutionpage %] \end{document} __question__ \begin{questao}{} [% q %] \end{questao} __END__ =head1 NAME mex2tex - Exercise Generator =head1 SYNOPSIS mex2tex -h -- print multi-exercise template mex2tex -h1 -- print multi-test template mex2tex -pdf1 problem.txt mex2tex -pdf1 problem.txt mex2tex -pdf1 math.test ## our ($o, $pdf, $n,$h, $h1,$d, $debug_frac, $debug_fun, $test); =head1 DESCRIPTION =head2 EXPORT =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =head1 SEE ALSO perl(1). =cut