#!/usr/bin/perl -s select(STDOUT); # default $| = 1; use strict; use utf8::all; use Data::Printer; use Getopt::Long; use IO::File; use feature 'switch'; no warnings 'experimental'; our ($out, $config); my ($titulo, $subtitulo, $descricao, @linhas); my %funcoes; # Verifica se os ficheiros foram especificados $config=shift or die(); my %funcoes = lertemplates(); open (CONFIG, $config) or die "Ficheiro configuração não aberto."; my $config_str = join("", ); close CONFIG; # Analisa configuração if ($config_str =~ s/T[ií]tulo\s*:\s*(.*)//i) { $titulo = $1; } if ($config_str =~ s/Subt[ií]tulo\s*:\s*(.*)//i) { $subtitulo = $1; } if ($config_str =~ s/Descri[cç][ãa]o\s*:\s*(.*)//i) { $descricao = $1; } # Para cada alínea while ($config_str =~ /(.*?)\s*\[(.*?)\]\s*(.*\s*)?=\s*(\S(?:.*\S)?)/g) { my $antes = $1; my $depois = $3; my $resposta = $4; my @opcoes; my $lista = $2; # Lê lista de opções while ($lista =~ /([^,]+)\s*(,\s*)?/g) { push(@opcoes, $1); } push(@linhas, [$antes, $depois, $resposta, \@opcoes]); } my $alineas_str; my $num=0; foreach my $linha (@linhas){ my ($antes, $depois, $resposta, $opcoes)= @$linha; my $items_opcoes; # Cria string com opcoes for my $opcao (@$opcoes){ $items_opcoes .= itemOpcao( opcao => $opcao ); } # Cria string de alineas $alineas_str .= alineaOpcoes( nmr => $num+1, antes => $antes, id => $num+1, items_opcoes => $items_opcoes, depois => $depois, resposta => $resposta, ); $num++; } my $result = mkexers( titulo => $titulo, subtitulo => $subtitulo, descricao => $descricao, alineas => $alineas_str, ); print $result; # for (0 .. (@exercicios - 1)) { # print "A fazer ex..."; # my $alineas; # my $sugestoes; # my $result; # given ($exercicios[$_][0]) { #tipo # when (1) { # print "tipo 1\n"; # print "Array: @{$exercicios[$_][3]}\n"; # for (0 .. (@{$exercicios[$_][3]}-1)) { # $alineas .= linhaCompletar( # antes => $exercicios[$_][3][0], # depois => $exercicios[$_][3][1], # resposta => $exercicios[$_][3][2], # nmr => ($_ + 1), # id => ($id++) # ); # } # $result = exCompletarEspacos( # tituloExOri => $exercicios[$_][1], # tituloExTrad => $exercicios[$_][2], # #sugestoes =>, # alineas => $alineas # ); # break; # } # default { # print "default?!\n"; # } # } # print $result; # } ####################### sub aplicafuncao { my $nome = shift; my %params = @_; my $result = $funcoes{$nome}; for (keys %params) { $result =~ s/§$_/$params{$_}/g; } return $result; } sub lertemplates { my $text = join("", ); $text =~ s/__END__.*//s; my %funcoes; while ($text =~ /__(\w+)__(.*?)(?=\s+__|$)/gs) { $funcoes{$1} = $2; eval "sub $1 {aplicafuncao('$1', \@_)}"; } return %funcoes; } __DATA__ __mkexers__ §titulo

§subtitulo

§descricao

§alineas
__alineaOpcoes__

§nmr. §antes §depois quiz answer

__itemOpcao__ __END__ =encoding utf-8 =head1 NOME mkexercices - Cria várias alíneas de escolha múltipla =head1 SYNOPSIS mkexercises -template=t.html -config=e.config > e.html =head1 DESCRIÇÃO Dado um ficheiro de entrada bem definido, o programa gera um ficheiro HTML com um exercício de várias alíneas de escolha múltipla, correspondentes às linhas do ficheiro de configuração. =head2 FORMATO DE ENTRADA DO FICHEIRO DE CONFIGURAÇÂO O ficheiro de entrada deverá conter um título para a página, um subtítulo que descreva o tema dos exercícios e uma pequena descrição do enunciado do exercício. Para além disso, deverá definir as alíneas do exercícios, uma por linha, no seguinte formato: Início da frase [opção 1, opção 2, ...] continuação da frase = opção resultado ou Frase [opção 1, opção 2, ...] = opção resultado ou [opção 1, opção 2, ...] continuação da frase = opção resultado =head3 EXEMPLO [Onde, Aonde] foram os meninos? = Aonde Para [aonde, onde] foram? = onde Eu quero o livro [quadruplicado, quadriplicado]! = quadruplicado =head1 AUTORES André Santos, Diogo Machado, Rui Leite JJoao