Rev 11931 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
17747 | georgesk | 1 | #!/usr/local/bin/perl |
7222 | georgesk | 2 | # -*- coding: utf-8 -*- |
3 | |||
4 | open ('TEX', '>/tmp/chemtest.tex'); |
||
5 | print TEX "\\documentclass{article}\n"; |
||
6 | #print TEX "\\usepackage[frenchb]{babel}\n"; |
||
7 | print TEX "\\usepackage{a4wide}\n"; |
||
8 | print TEX "\\usepackage[utf8]{inputenc}\n"; |
||
9 | #print TEX "\\usepackage {lmodern}\n"; |
||
10 | |||
11 | print TEX "\\title{Chemeq, a parser for chemical equations}\n"; |
||
12 | print TEX "\\author{\\copyright{} GPL 2000-2013, Georges Khaznadar |
||
13 | \\emph{georgesk\@debian.org}}\n"; |
||
14 | print TEX "\\begin{document}\n\\maketitle\n\n\\sloppy\n"; |
||
15 | print TEX "\\abstract{Chemtest is a parser which analyses its standard input |
||
16 | and outputs useful strings accounting for informations related to chemical |
||
17 | equations. It can be embedded in educational applications. |
||
18 | Here are listed examples of possible inputs for |
||
19 | chemeq. Some outputs are usefully interpreted by the LaTeX language |
||
20 | in math mode. The other outputs are typeset with \\texttt{teletype fonts}.}\n\n"; |
||
21 | |||
22 | |||
23 | $lignes_de_reponse = 6; |
||
24 | |||
25 | print TEX "Currently, when \\texttt{chemeq} is fed with a chemical equation or a |
||
26 | combination of chemical equations on its standard input, it gives ",$lignes_de_reponse," lines on its standard output.\n"; |
||
27 | print TEX "\~\\\\\[3ex]\n\\hrule\n\\tableofcontents\n\~\\\\\[3ex]\n\\hrule\n"; |
||
28 | |||
29 | while(chomp($essai = <STDIN>)){ |
||
30 | if(length($essai) != 0 && substr($essai,0,1) ne "#"){ |
||
31 | for ($i=0; $i < $lignes_de_reponse; $i++){ |
||
32 | chomp($tmp=<STDIN>); @reponse[$i]=$tmp; |
||
33 | } |
||
34 | $essai_ = $essai; |
||
35 | $essai_ =~ s/\'/\\\'/g; |
||
36 | @args = ("echo \"$essai_\" | chemeq > /tmp/tmp.1"); |
||
37 | system @args; |
||
38 | open (TMP,'/tmp/tmp.1'); |
||
39 | $essai =~ s/\^/\\\^{}/g; |
||
40 | $essai =~ s/\>/\$>\$/g; |
||
41 | $essai =~ s/\_/\\\_{}/g; |
||
42 | $ok=1; |
||
43 | for ($i=0; $i < $lignes_de_reponse; $i++){ |
||
44 | chomp($tmp=<TMP>); @result[$i]=$tmp; |
||
45 | if (@result[$i] ne @reponse[$i]){ |
||
46 | @idem[i]="KO"; |
||
47 | $ok=0; |
||
48 | } |
||
49 | else { |
||
50 | @idem[i]="OK"; |
||
51 | } |
||
52 | } |
||
53 | if ($ok==1){ |
||
54 | print TEX "\\section{OK : \\texttt{$essai}}\n"; |
||
55 | } |
||
56 | else { |
||
57 | print TEX "\\section{ERROR : \\texttt{$essai}}\n"; |
||
58 | } |
||
59 | for ($i=0; $i < $lignes_de_reponse; $i++){ |
||
60 | print TEX @idem[i]," "; |
||
61 | } |
||
62 | print TEX "\\\\\n"; |
||
63 | print TEX "Expected output :\n"; |
||
64 | print TEX "\\begin{enumerate} \n"; |
||
65 | for ($i=0; $i < $lignes_de_reponse; $i++){ |
||
66 | print TEX "\\item "; |
||
67 | if (@reponse[$i] =~ /\\/){ |
||
68 | print TEX "\$\$",@reponse[$i],"\$\$\n"; |
||
69 | } |
||
70 | else { |
||
71 | $buffer = @reponse[$i]; |
||
72 | $buffer =~ s/\^/\\\^{}/g; |
||
73 | $buffer =~ s/\>/\$>\$/g; |
||
74 | $buffer =~ s/\_/\\\_{}/g; |
||
75 | $buffer =~ s/\|/\$|\$/g; |
||
76 | print TEX "\\texttt{", $buffer,"}\n"; |
||
77 | } |
||
78 | } |
||
79 | print TEX "\\end{enumerate}\n"; |
||
80 | if (!$ok){ |
||
81 | print TEX "found output :\n"; |
||
82 | print TEX "\\begin{enumerate} \n"; |
||
83 | for ($i=0; $i < $lignes_de_reponse; $i++){ |
||
84 | print TEX "\\item \\verb|", @reponse[$i], "|\n"; |
||
85 | } |
||
86 | print TEX "\\end{enumerate}\n"; |
||
87 | } |
||
88 | } |
||
89 | } |
||
90 | |||
91 | print TEX "\\end{document}\n"; |
||
92 | |||
93 | close TEX; |
||
94 | |||
95 | system ("(cd /tmp; echo q | latex chemtest.tex)"); |
||
96 | system ("(cd /tmp; echo q | latex chemtest.tex)"); |
||
97 | system ("(cd /tmp; xdvi chemtest.dvi)"); |
||
98 | system ("(cd /tmp;rm -f chemtest* tmp.1)"); |