<!doctype html>
<html>
 <head>
  <title>balisage</title>
  <meta charset="utf-8"/>
  <style>
  div.cube {
	width:50%;
	float:left;
  }
  textarea
  {
	width:100%;
	height:400px;
	overflow:auto;
  }
  input,select { box-shadow: 0px 0px 5px #7A8960; }
  input:hover,select:hover { box-shadow: 0px 0px 5px #FFEDAE; }
  </style>
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('error_reporting', E_ALL);

$exempleHTML = (isset($_POST['a'])) ? htmlentities($_POST['a']) : 
'<!DOCTYPE html>
<html>
 <head>
  <title>test</title>
 </head>
<body>
<form action="index.php" method="post">
 <input type="text" name="test" value="ok" required/>
</form>
</body>
</html>';
?>
 </head>
 <body>
  <div style="width:100%;">

   <div class="cube">
    <form name="frm" action="balisag.php" method="post">
     <textarea name="a"><?php echo $exempleHTML; ?></textarea><br/>
     <select name="langage">
         <option value="web">Web (HTML/CSS/JS/PHP)</option>
         <option value="ADA">ADA</option>
         <option value="ApacheConf">Apache Configuration file</option>
         <option value="ASM">Assembleur</option>
         <option value="Basic">Basic</option>
         <option value="Batch">Batch file</option>
         <option value="C">C</option>
         <option value="C#">C#</option>
         <option value="Fortran">Fortran</option>
         <option value="Java">Java</option>
         <option value="Lua">Lua</option>
         <option value="Pascal">Pascal</option>
         <option value="Perl">Perl</option>
         <option value="Python">Python</option>
         <option value="Shell">Shell</option>
         <option value="SQL">SQL</option>
     </select>
     <select name="encoding">
         <option value="utf-8">UTF-8</option>
         <option value="iso-8859-1">ISO-8859-1</option>
         <option value="latin5">Latin5</option>
     </select>
     <input type="submit" value="Baliser"/>
    </form>
   </div>

   <div class="cube">
    <textarea id="copie"></textarea>
   </div>

   <a href="index.html" style="float:right">voir la source</a>

   <div style="clear:both;"></div>

   <div id="balisage"><?php 
   /*
    Lance le CGI (qui envoie sur la sortie standard), puis supprime fichier à baliser

    En local les .exe sont dans le dossier bin.
    En prod ils sont compilés ELF, dans un dossier bin qui comporte
    un fichier .htaccess autorisant l'exécution des programmes .cgi
    <Location "cgi">
        Options +ExecCGI
        SetHandler cgi-script
        AddHandler cgi-script .cgi .exe
    </Location>
    Comme droits ils ont 504, 705 pour le dossier, et 404 pour le htaccess
    */
    // Validation du formulaire
    $langage = $enc = '';
    if(isset($_POST['a']) && $_POST['a'] != '' && isset($_POST['langage']) && $_POST['langage'] != '')
    {
        $langage = $_POST['langage'];

        $f1 = "1.$langage";
        file_put_contents($f1, $_POST['a']);

        // (l'exe prend utf-8 par défaut)
        $enc = ($_POST['encoding'] != "utf-8") ? '-enc '.$_POST['encoding'] : '';

        $chem = $_SERVER['DOCUMENT_ROOT'].'/programming/C/balisageHTML';

        $ext = (getenv('SERVER_NAME')=='localhost') ? 'exe':'cgi';
        $cmd = $chem.'/bin/'.$langage."versHTML.$ext $enc $f1";

        system($cmd);
        //echo "cmd:[$cmd]";

        @unlink($f1);
    }
    ?></div>

   <script>
   var copie = document.getElementById('copie');

   <?php 
   if($langage) echo "document.frm.langage.value='$langage';

   // L'exe de balisage remplit le div#balisage. Javascript transfère
   // son contenu dans le textera de copie.
   // Or pour faire apparaitre &lt; correctement il FAUT encoder le &!
   var a = document.getElementById('balisage').innerHTML;
   var text = document.createTextNode(a);
   var div = document.createElement('div'); // méthode du div
       div.appendChild(text);
   copie.innerHTML = div.innerHTML;
   //copie.focus();
   //copie.select();";

    else echo "document.frm.a.focus(); document.frm.a.select();";

   if($enc) echo "document.frm.encoding.value='{$_POST['encoding']}';";
   ?>
   </script>
 
  </div>
 </body>
</html>
145 lignes, 4136 octets. Balisé en 0.92 ms Vitesse : 4515 octets/ms