Subversion Repositories wimsdev

Rev

Rev 3497 | Rev 3733 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #!/usr/bin/perl
  2.  
  3. use locale;
  4. ##$/ = undef; # slurp
  5. ##lancer du répertoire scipts/help
  6.  
  7. my %name = (
  8.   ) ;
  9. $name = \%name;
  10. $name->{'explanation'}{'fr'}="Explication" ;
  11. $name->{'example'}{'fr'}="Exemple" ;
  12. $name->{'special'}{'fr'}="Méthodes spéciales<br>(énoncé)";
  13. $name->{'syntax'}{'fr'}="Syntaxe";
  14. $name->{'slib'}{'fr'}='SLIB';
  15. $name->{'anstype'}{'fr'}='Types de réponses' ;
  16.  
  17. $name->{'explanation'}{'en'}="Explanation" ;
  18. $name->{'example'}{'en'}="Example" ;
  19. $name->{'special'}{'en'}="Special method<br>(statement)";
  20. $name->{'syntax'}{'en'}="Syntax";
  21. $name->{'slib'}{'en'}='SLIB';
  22. $name->{'anstype'}{'en'}='Answer types' ;
  23.  
  24. $name->{'explanation'}{'cn'}="Explanation" ;
  25. $name->{'example'}{'cn'}="Example" ;
  26. $name->{'special'}{'cn'}="Special method<br>(statement)";
  27. $name->{'syntax'}{'cn'}="Syntax";
  28. $name->{'slib'}{'cn'}='SLIB';
  29. $name->{'anstype'}{'cn'}='Answer types' ;
  30.  
  31. $name->{'explanation'}{'nl'}="Explanation" ;
  32. $name->{'example'}{'nl'}="Example" ;
  33. $name->{'special'}{'nl'}="Special method<br>(statement)";
  34. $name->{'syntax'}{'nl'}="Syntax";
  35. $name->{'slib'}{'nl'}='SLIB';
  36. $name->{'anstype'}{'nl'}='Answer types' ;
  37.  
  38. $name->{'explanation'}{'it'}="Spiegazione" ;
  39. $name->{'example'}{'it'}="Esempio" ;
  40. $name->{'special'}{'it'}="Metodi speciali<br>(enunciato)";
  41. $name->{'syntax'}{'it'}="Sintassi";
  42. $name->{'slib'}{'it'}='SLIB';
  43. $name->{'anstype'}{'it'}='Tipi di risposte' ;
  44.  
  45.  
  46. my $DOSSIER="public_html/scripts/js/editor/scripts_1/bd_js";
  47. my $slibdir="public_html/scripts/slib/";
  48. my $helpdir="public_html/scripts/help";
  49.  
  50. my @Lang=('en','fr','cn', 'nl','it') ;
  51. #@Lang=('en') ;
  52. system(`mkdir -p $DOSSIER`) ;
  53. my @table=('if', 'oefparm0', 'oefparm1', 'oefparm2', 'oefparm3', 'oefparm4', 'oefparm5','oefcommand') ;
  54.  
  55. my %Command = (
  56.   ) ;
  57. $Command = \%Command ;
  58. $Command->{'begin'}{'if'}= "  " ;
  59. $Command->{'end'}{'if'}= "  " ;
  60. $Command->{'begin'}{'oefparm0'}= '\n\\\\' ;
  61. $Command->{'end'}{'oefparm0'}= "\{  =  \}" ;
  62. $Command->{'begin'}{'oefcommand'}= '\n\\\\' ;
  63. $Command->{'end'}{'oefcommand'}= "\{  \}" ;
  64. $Command->{'begin'}{'anstype'}='\n\\\\answer\{  \}\{  \}\{type=' ;
  65. $Command->{'end'}{'anstype'}='\}\{option=  \}\{ weight= \}\n' ;
  66. for my $tag ("oefparm4") {
  67.    $Command->{'begin'}{$tag}= "" ;
  68.    $Command->{'end'}{$tag}= "\(  \)" ;
  69. }
  70. for my $tag ("oefparm2", "oefparm3") {
  71.    $Command->{'begin'}{$tag}= " " ;
  72.    $Command->{'end'}{$tag}= " " ;
  73. }
  74.  
  75. for my $tag ("oefparm5") {
  76.    $Command->{'begin'}{$tag}= '\n\\\\' ;
  77.    $Command->{'end'}{$tag}= "" ;
  78. }
  79.  
  80. for my $tag ("slib") {
  81.    $Command->{'begin'}{$tag}= "slib(" ;
  82.    $Command->{'end'}{$tag}= " )" ;
  83. }
  84.  
  85. my @phtml=("expandlines", "imagefill", "help", "tabs2lines", "rename", "tooltip") ;
  86. for my $tag (@phtml) {
  87.    $Command->{'begin'}{$tag}= "\n\\special\{" ;
  88.    $Command->{'end'}{$tag}= " \}" ;
  89. }
  90.  
  91. ##### generation
  92. #for my $lang (@Lang) {print "oefdoc.pl $lang\n" ;  system(`mkdir -p $DOSSIER/$lang`) ;
  93.  #for my $file (@table) { tableau ($file,$lang,3) ;} ;
  94.  #phtml("$helpdir/$lang/special",$lang,"special",@phtml) ;
  95.  #slib($lang) ;
  96. #}
  97. ### ne pas faire de double boucle ... ????
  98. for my $lang (@Lang) {
  99.    print "oefdoc.pl $lang\n" ;  system(`mkdir -p $DOSSIER/$lang`) ;
  100.    tableau('if',$lang) ;
  101.    tableau('oefparm0',$lang) ;
  102.    tableau('oefparm1',$lang) ;
  103.    tableau('oefparm2',$lang) ;
  104.    tableau('oefparm3',$lang) ;
  105.    tableau('oefparm4',$lang) ;
  106.    tableau('oefparm5',$lang) ;
  107.    tableau('oefcommand',$lang) ;
  108.    phtml("$helpdir/$lang/special",$lang,"special",@phtml) ;
  109.    anstype($lang) ;
  110.    slib($lang) ;
  111. };
  112.  
  113. sub anstype { my ($lang)=@_ ;
  114.  my %HASH = (
  115.   ) ;
  116.  $HELP = \%HELP ;
  117.  my %HELP = (
  118.   ) ;
  119.  $HELP = \%HELP ;
  120.  open (IN, "$helpdir/$lang/reply.phtml") ;
  121.    while (<IN>) {my $line = $_;
  122.     next if ($line =~ /^\!set/) ;
  123.     next if !($line) ;
  124.     if ($line =~ /\\\n/) {
  125.       @L= split( ',', $line) ;
  126.       my $t1 = $L[0] ; $t1=~ s/\|/,/ ;
  127.       my @ta=split(',',$t1) ;
  128.       if ($ta[1]) {@t=split(' ',$ta[1]) ; } else { @t=($L[0])};
  129.       for my $tag (@t) { $HASH{$tag} = cleanup3($L[1] . ' ' . $L[2]); $HELP{$tag}=$ta[0] ;}
  130.      }
  131.    }
  132.  close IN ;
  133.  my $text ='';
  134.  my $Text = "var anstypename='$name->{'anstype'}{$lang}';\n" ;
  135.    $var=join ("$Command->{'end'}{'anstype'}\',\'$Command->{'begin'}{'anstype'}", sort keys(%HASH)) ;
  136.    $Text .="var anstype = [ '$Command->{'begin'}{'anstype'}$var$Command->{'end'}{'anstype'}' ];\n" ;
  137.    for my $tag (keys(%HASH)){
  138.      $text .=begin_js("$Command->{'begin'}{'anstype'}$tag$Command->{'end'}{'anstype'}")
  139.            . title_js($tag,'title')
  140.            . middle_js($HASH{$tag},'out',$lang)
  141.            . end_js("<a target=\"wims_help\" href=\"wims.cgi?lang=$lang&module=adm%2Fcreatexo&modtoolhelp=yes&+special_parm=reply,$HELP{$tag}\">++++</a>") ;
  142.    }
  143.    $Text .= function_js($text,'anstype') ;
  144.   out ("$DOSSIER/$lang/anstype" . "_bd\.js",$Text) ;
  145. }
  146. sub slib {my ($lang)= @_ ;
  147.  my $Text = "var slibname='$name->{'slib'}{$lang}';\n" ;
  148.  @list_keyword=();
  149.  my %HASH = (
  150.   ) ;
  151.  $HASH = \%HASH ;
  152. for my $file (glob("$slibdir/*/*")) {
  153. #for my $file (glob("$slibdir/function/integrate")) {
  154.  $file =~s/$slibdir\///;
  155.  my $text='';
  156.  open (IN, "$slibdir/$file");
  157.  while (<IN>) {my $line=$_;
  158.     if  ($line=~/^ *!exit/) { last ;}
  159.     if ($line=~ s/^ *slib_(\w+) *=//){
  160.      $tag=$1;
  161.      $line=cleanup($line) ;
  162.      if ($tag=~/parms/) {
  163.        $line=~s/\\//;
  164.        $HASH->{nbparm}{$file}=$line;
  165.      } else
  166.      {
  167.        $HASH->{$tag}{$file}=$line ;
  168.      }
  169.      } else {
  170.        next if !($tag) ;
  171.        if ($tag=~/parms/) {
  172.         chomp $line ;
  173.         @parm=split(",", $line) ;
  174.         if ($parm[1] =~ s/\\//) {
  175.           $HASH->{$tag}{$file}.= cleanup3($parm[1]) . ",";
  176.          }
  177.          else
  178.          {  $HASH->{$tag}{$file}.=cleanup3($parm[1]) ;
  179.          }
  180.        # $HASH->{$tag}{$file} .= "\[$parm[0]\]" if ($parm[0]);
  181.        }
  182.        else {
  183.          $HASH->{$tag}{$file} .= cleanup($line);
  184.        }
  185.      }
  186.    }
  187.  close IN;
  188.   push @list_keyword, $file if ($HASH->{'title'}{$file});
  189.  $tag='';
  190.  }
  191.  $var=join ("$Command->{'end'}{'slib'}\',\'$Command->{'begin'}{'slib'}", @list_keyword) ;
  192.  $Text .="var slib = [ '$Command->{'begin'}{'slib'}$var$Command->{'end'}{'slib'}' ];\n" ;
  193.  for my $file (@list_keyword) {
  194.   next if !($HASH->{'title'}{$file}) ;
  195.   my @examples=split("\\\\",$HASH->{'example'}{$file}) ;
  196.   my $example='';
  197.   for my $ex (@examples) {
  198.     next if !($ex) ;
  199.     $example .="<div class=\"exemple\"><div class=\"title\">$name->{'example'}{$lang}</div><code><font color=\"red\">slib($file</font> $ex <font color=\"red\">)</font></code></div>" ;
  200.  }
  201.   $text.=begin_js("$Command->{'begin'}{'slib'}$file$Command->{'end'}{'slib'}")
  202.            . title_js($HASH->{'title'}{$file},'title')
  203.            . syntax_js("<font color=\"red\">slib($file</font> " . $HASH->{'parms'}{$file} . " <font color=\"red\">)</font>",$lang)
  204.            . middle_js($HASH->{'out'}{$file},'out',$lang)
  205.            . middle1_js (cleanup($example),$lang)
  206.            . end_js() ;
  207.   $text =cleanup2($text) ;
  208.  }
  209.  $Text .= function_js($text,'slib') ;
  210.   out ("$DOSSIER/$lang/slib" . "_bd\.js",$Text) ;
  211. }
  212. ##special methode
  213. sub phtml {my ($dir,$lang,$f,@file)=@_ ;
  214.  my $cities=$f;
  215.  my %HASH = (
  216.   example       => {},
  217.   signification => {},
  218.   syntaxe => {},
  219.   ) ;
  220.  $HASH = \%HASH ;
  221.  my $text='';
  222.  my $tag='';
  223.  my $Text="var specialname= '$name->{'special'}{$lang}';\n";
  224.  for my $meth (@file) {
  225.     open (IN, "$dir/$meth.phtml");
  226.     while (<IN>) {my $line=$_;
  227.     next if !($line) ;
  228.     if ($line =~ /^:/) {
  229.     chomp $line;
  230.        $tag=$line; $tag=~ s/://;
  231.     }
  232.     else
  233.     {
  234.      $HASH->{$tag}{$meth} .= cleanup($line) . "\\n" ;
  235.     }
  236.   }
  237. }
  238.  $var=join (" }\', \'\\\\special{", @phtml) ;
  239.  ### cas particulier
  240.  my $meth='embed';
  241.  $embd='\\\\embed{r  }' ;
  242.    open (IN, "$helpdir/$lang/embedans.phtml");
  243.     while (<IN>) {my $line=$_;
  244.     next if !($line) ;
  245.     if ($line =~ /^:/) {
  246.     chomp $line;
  247.        $tag=$line; $tag=~ s/://;
  248.     }
  249.     else
  250.     {
  251.      $HASH->{$tag}{$meth} .= cleanup($line) . "\\n" ;
  252.     }
  253.   }
  254.   close IN ;
  255.  
  256.   $Text .= "var special= [ '$embd', '\\\\special{$var }'];\n" ;
  257.   $text = begin_js("$embd")
  258.         . syntax_js("\\\\embed{r i, option }")
  259.         . (($HASH->{'signification'}{$meth}) ? middle_js($HASH->{'signification'}{$meth},'title',$lang) : '')
  260.         . (($HASH->{'example'}{$meth}) ? middle1_js ($HASH->{'example'}{$meth},'title') : '')
  261.         . end_js() ;
  262.   ## fin cas particulier embed
  263.   for my $meth (@phtml) {
  264.    $text .= begin_js("\\\\special{$meth }")
  265.            . syntax_js("\\\\special{$meth }")
  266.            . (($HASH->{'signification'}{$meth}) ? middle_js($HASH->{'signification'}{$meth},'title',$lang ) : '')
  267.            . (($HASH->{'example'}{$meth}) ? middle1_js ($HASH->{'example'}{$meth},'title') : '')
  268.            . end_js() ;
  269.    
  270.   }
  271.   $Text .= function_js($text,'special') ;
  272.  
  273.   out ("$DOSSIER/$lang/$f" . "_bd\.js",$Text) ;
  274.  
  275. }
  276. ##file : nom du fichier, n nombre de lignes dans chaque record
  277. sub tableau { my ($file, $lang) = @_ ;
  278. ### mettre $file à la place ensuite
  279.   my $file1="$helpdir/$lang/$file";
  280.   my $cities=$file ;
  281.   if ($file =~ /if/){ $cities .= 'f' } ;
  282.   my @list_keyword;
  283.   my $text='';
  284. ##bug s'il n'y a pas de documentation
  285.   open (IN, $file1);
  286.   my $cnt=0 ;
  287.   my $Text = '' ;
  288.   while (<IN>) { my $line=$_;
  289.    chomp $line ;
  290.    next if !($line) ;
  291.    if ($line =~ s /^://) {
  292.      $cnt ++ ;
  293.      if ($cnt == 1 ) { $Text = "var $cities" . "name= '$line';\n ";  }
  294.      next if $cnt < 3 ;
  295.      $line =~ s/:// ;
  296.      if($text) { $text .= end_js() ;}
  297.        $text .= begin_js($Command->{'begin'}{$file} . $line . $Command->{'end'}{$file}) ;
  298.      push @list_keyword, $line;
  299.      $nl=0;
  300.      }
  301.      else  {
  302.        next if $cnt<3 ; if ($line =~ /^(\d)/) { $arg=$1 ; next }  
  303.        $nl ++ ;
  304.        $line = cleanup($line); if ($line =~ /help=/) { $line = '' ;}
  305.        if ($nl==1 && !($file=~/oefcommand/)){
  306.          if ($line) { $text .= syntax_js($line,$lang) ; }
  307.         }
  308.         else {
  309.          if ($line) { $text .= middle_js($line,1,$lang) ; }
  310.            }
  311.          }
  312.    }
  313.   close IN ;
  314.          $text .= end_js() ;
  315.   my $var=join ("$Command->{'end'}{$file}\', \'$Command->{'begin'}{$file}", @list_keyword) ;
  316.   $Text .="var $cities= [ \'$Command->{'begin'}{$file}$var$Command->{'end'}{$file}\' ];\n"
  317.   . function_js($text,$cities) ;
  318.   out ("$DOSSIER/$lang/$cities" . "_bd\.js",$Text) ;
  319. }
  320.  
  321. sub begin_js {my ($t)= @_ ;
  322. "case \'$t\' \:\nchaine_aide="
  323. }
  324. sub syntax_js {my ($line,$lang)=@_ ;
  325.  "\'<div class=\"syntax\"><div class=\"title\">$name->{'syntax'}{$lang}</div><code>$line</code></div>\'+\n"
  326. }
  327. sub middle_js {my ($line,$tag,$lang)=@_ ;
  328.  if ($tag) { $line="<div class=\"title\">$name->{'explanation'}{$lang}</div>$line" }
  329.  "\'<div class=\"explication\">$line</div>\'+\n";
  330. }
  331.  
  332. sub middle1_js {my ($line,$tag,$lang)=@_ ;
  333.  if ($tag) { $line="<div class=\"title\">$name->{'example'}{$lang}</div>$line" }
  334.  "\'<div class=\"exemple\">$line</div>\'+\n";
  335. }
  336.  
  337. sub title_js {my ($line,$tag)=@_ ;
  338.  "\'<div class=\"title\">$line</div>\'+\n";
  339. }
  340.  
  341. sub end_js {my ($text)=@_ ;
  342. "\'$text\' ; return chaine_aide;
  343.            break;
  344.         ////******************** \n
  345.         ";
  346. }
  347. sub function_js {my ($text,$tag)=@_ ;
  348.  "function $tag" . "fun(instruction){
  349.     switch(instruction)
  350.         {
  351.         $text
  352.         }
  353. }"
  354. }
  355.  
  356. sub cleanup { my ($txt)=@_ ;
  357.   $txt=~ s,\\,\\\\,g ;
  358.   $txt=~ s/'/\\'/g ;
  359.   $txt=~ s/\n/ /g ;
  360.   $text=~ s/\\(\w)/\\\\\1/g ;
  361.   return $txt ;
  362. }
  363. sub cleanup2 {my ($txt)=@_ ;
  364.   $txt=~ s/\\\\ / /g ;
  365.   return $txt;
  366. }
  367. sub cleanup3 {my ($txt)=@_ ;
  368.   $txt=~ s/'/\\'/g ;
  369.   return $txt;
  370. }
  371. sub htmltex { my ($TEXT) = @_ ;
  372. $TEXT =~ s/<tt>\\/\\ttb{/g;
  373. $TEXT =~ s/_/\\_/g;
  374. $TEXT =~ s/\^/\\^{}/g;
  375. $TEXT =~ s/\&/\\\&/g;
  376. $TEXT =~ s/<(tt)>/\\text$1\{/g;
  377. $TEXT =~ s/<(em|i)>/\\textit\{/g;
  378. $TEXT =~ s/<b>/\\textbf\{/g;
  379. $TEXT =~ s'</(b|tt|em|i)>'}'g;
  380. $TEXT =~ s/<br>/\\par /g;
  381. $TEXT =~ s/<p>/\\par /g;
  382. $TEXT =~ s/<\/p>/\\par /g;
  383. $TEXT =~ s/<ul>/\\begin{itemize}\n /g;
  384. $TEXT =~ s/<\/ul>/\\end{itemize}\n /g;
  385. $TEXT =~ s/<ol>/\\begin{enumerate}\n /g;
  386. $TEXT =~ s/<\/ol>/\\end{enumerate}\n /g;
  387. $TEXT =~ s/<li>/\\item /g;
  388. $TEXT =~ s/<\/li>/\n /g;
  389. $TEXT =~ s/<\/center>/\\end{center}\n /g;
  390. $TEXT =~ s/<center>/\\begin{center}\n /g;
  391. $TEXT =~ s/<\/center>/\n /g;
  392. $TEXT =~ s/<center>/\n /g;
  393. $TEXT =~ s/<table[^>]*>/\\begin{table}\\begin{tabular}{*{1}{p{30mm}}|*{1}{p{50mm}|}|*{1}{p{50mm}|}}\\hline /g;
  394. $TEXT =~ s/<\/table>/\\\\ \\hline \\end{tabular} \\end{table}/g;
  395. $TEXT =~ s/\$table_tr/\\\\\\hline /g;
  396. $TEXT =~ s/\$table_hdtr/\\\\ \\hline/g;
  397. $TEXT =~ s/\$table_header/\\begin{table}\\begin{tabular}{*{1}{p{30mm}}|*{1}{p{50mm}|}|*{1}{p{50mm}|}}\\hline/g ;
  398. $TEXT =~ s/\$table_end/\\end{tabular}\\end{table}/g;
  399. #$TEXT =~ s/<caption>/\\caption\{ /g;
  400. #$TEXT =~ s/<\/caption>/\}\n /g;
  401. $TEXT =~ s/<tr[^>]*>/\\\\/g;
  402. $TEXT =~ s/<\/tr>/\\\\/g;
  403. $TEXT =~ s/<(td|th) colspan=(\d)( nowrap)?>/\\multicolumn{$2}{|c|}{/g;
  404. $TEXT =~ s/<\/(td|th)>/&/g;
  405. $TEXT =~ s/<(td|th)[^>]*>/&/g;
  406. $TEXT =~ s/&&/&/g;
  407. $TEXT =~ s/\_/_/g;
  408. $TEXT =~ s/&amp;/\\&/g;
  409. $TEXT =~ s'\\\\&'\\\\'g;
  410. $TEXT =~ s/&nbsp;/ /g;
  411. $TEXT =~ s/&eacute;/é/g;
  412. $TEXT =~ s/&egrave;/è/g;
  413. $TEXT =~ s/&agrave;/à/g;
  414. $TEXT =~ s/&ecirc;/ê/g;
  415. $TEXT =~ s/&lt;/</g;
  416. $TEXT =~ s/<(H|h)3>/\\subsection{/g;
  417. $TEXT =~ s/<\/(H|h)3>/}/g;
  418. $TEXT =~ s/<(H|h)4>/\\subsubsection{/g;
  419. $TEXT =~ s/<\/(H|h)4>/}/g;
  420. $TEXT =~ s/<(H|h)2>/\\section{/g;
  421. $TEXT =~ s/<\/(H|h)2>/}/g;
  422. $TEXT =~ s/&gt;/>/g;
  423. $TEXT =~ s/\#//g;
  424. $TEXT =~ s/<hr>/\\hrule/g;
  425. $TEXT =~ s/<pre>/\\begin{verbatim}/g;
  426. $TEXT =~ s/<\/pre>/\\end{verbatim}/g;
  427. $TEXT =~ s/\n{3,}/\n\n/g;
  428. $TEXT =~ s/<a[^>]+>([^<]+)<\/a>/\\url{$1}/g;
  429.  
  430. $TEXT ;
  431. }
  432.  
  433. sub out { my ($bloc, $text) = @_ ;
  434.   open  (OUT, ">$bloc") || die "peut pas créer $bloc";
  435.   print OUT "<!-- Automatically generated by bin/oefdoc.pl -->\n" . $text ; close OUT ;
  436. }
  437.  
  438. sub sortuniq {
  439.   my $prev = "not $_[0]";
  440.   grep { $_ ne $prev && ($prev = $_, 1) } sort @_;
  441. }
  442.