1 | #! /usr/bin/perl
|
2 |
|
3 | use Getopt::Long;
|
4 |
|
5 | my $qf='';
|
6 |
|
7 | GetOptions("questions=s"=>\$qf,
|
8 | );
|
9 |
|
10 | my %q=();
|
11 | my %global=();
|
12 | my $k='';
|
13 | my %boucle=();
|
14 |
|
15 | open(QUEST,$qf) or die "Error opening $qf : $!";
|
16 | while(<QUEST>) {
|
17 | chomp;
|
18 | $ko=$k;
|
19 | if(/^\%([\+=])\s*$/) {
|
20 | $k=$1;
|
21 | die "Cles imbriquees : $k dans $ko" if($ko && $ko !~ /^[\+=]$/);
|
22 | }
|
23 | if(/^\s*\\begin\{(question|questionmultx?)\}\{([^}]+)\}/) {
|
24 | $k=$2;
|
25 | die "Cles imbriquees : $k dans $ko" if($ko && $ko !~ /^[\+=]$/);
|
26 | die "Cle double : $k" if($q{$k});
|
27 | $global{$k}=$q{'+'};
|
28 | $q{'+'}=[];
|
29 | $boucle{$k}=$q{'='};
|
30 | $q{'='}=[];
|
31 | }
|
32 | if(/^\%<([^\s]+)/) {
|
33 | die "Cles imbriquees : $1 dans $k" if($k);
|
34 | $k=$1;
|
35 | }
|
36 | push @{$q{$k}},$_ if($k);
|
37 | if(/^\s*\\end\{(question|questionmultx?)\}/) {
|
38 | die "Cle non ouverte" if(! $k);
|
39 | $k='';
|
40 | }
|
41 | if(/^\%>([^\s]+)/) {
|
42 | die "Cle mal ouverte : $1 / $k" if($k ne $1);
|
43 | $k='';
|
44 | }
|
45 | }
|
46 | close(QUEST);
|
47 |
|
48 | sub inclusion {
|
49 | my ($k,$gr)=@_;
|
50 | die "Question introuvable : $k" if(!$q{$k});
|
51 | print join("\n",@{$global{$k}})."\n\n" if(@{$global{$k}});
|
52 | push @{$q{'BOUCLE'}},@{$boucle{$k}};
|
53 | print "\\element{$gr}{\n" if($gr);
|
54 | print join("\n",@{$q{$k}})."\n";
|
55 | print "}\n\n" if($gr);
|
56 | }
|
57 |
|
58 | %groupes=();
|
59 |
|
60 | $groupe_courant = 'grq';
|
61 |
|
62 | while (<>) {
|
63 | chomp;
|
64 |
|
65 | if (/^\s*\\exemplaire\{/) {
|
66 | print("\n");
|
67 | for my $g ( keys %groupes ) {
|
68 | print("\\setgroupmode{$g}{cyclic}\n");
|
69 | print("\\element{$groupes{$g}->{in}}{\n\n\\insertgroup[1]{$g}\n\n}\n");
|
70 | print("\n");
|
71 | }
|
72 | }
|
73 |
|
74 | print "$_\n";
|
75 | if (/^\%[Q]\[(.+)\]\{(.+)\}/) {
|
76 | my $q = $1;
|
77 | my $g = $2;
|
78 | $groupes{$g}->{in}=$groupe_courant;
|
79 | $groupes{$g}->{n}++;
|
80 | inclusion( $q, $g );
|
81 | } elsif (/^\%[Q]\[(.+)\]\[(.+)\]/) {
|
82 | inclusion( $1, $2 );
|
83 | } elsif (/^\%([QT])\[(.+)\]/) {
|
84 | inclusion( $2, ( $1 eq 'T' ? '' : $groupe_courant ) );
|
85 | } elsif (/^\%G=([^\s]+)/) {
|
86 | $groupe_courant=$1;
|
87 | }
|
88 | }
|