Subversion Repositories wimsdev

Rev

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