Subversion Repositories wimsdev

Rev

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