html2xml

by toubia95

HTML

<p>
Coller un text converti en html avec libreoffice.
</p><div>
<textarea id="area1"></textarea>
</div>
<br>
<a href="#" id="convertir">Convertir »</a>
<br>
<br>
<div>
<textarea id="area2"></textarea>
</div>
<br>
<a href="#" id="renum">Remonter les numéros de pages (+1) »</a>
<br>

CSS

/* --- TODO ---
 * - remonter les césures
 */
 
body {
  text-align: center;
}
textarea {
  width: 95%;
  height: 150px;
}
#convertir {
  margin: 100 0;
}

JavaScript

// https://regexr.com/
$( "#convertir" ).click(function() {
  $("#area2").val('');
  var myHtml = $("#area1").val();
  
  // Conserver uniquement le contenu de <body>
  myHtml = myHtml.replace(/<!DOCTYPE(.|\n)*?<\/head>/gi,"");
  // Enlever tous les attributs des balises
  myHtml = myHtml.replace(/<\s*(\w+).*?>/gi, "<$1>");
  // Enlever les balises inutiles
  myHtml = myHtml.replace(/<(|\/)(html|font|span|b|img|div|body)>/gi,"");
  
  // Supprimer les caractères invisibles inutiles
  myHtml = myHtml.replace(/\t/gi,"");
  myHtml = myHtml.replace(/([^>])\n/gi,"$1 ");
  
  // Réencoder les accents
  myHtml = decodeHtml(myHtml);
   
  // Codage en xml
  myHtml = myHtml.replace(/<br>/gi,"<lb/>");
  myHtml = myHtml.replace(/<i>/gi,'<hi rend="I">');
  myHtml = myHtml.replace(/<\/i>/gi,"</hi>");
  myHtml = myHtml.replace(/<p>(\d{1,4})<\/p>/gi,'<pb n="$1">');
  
  // Toilettage
  myHtml = myHtml.replace(/<p>[\s\n\r]+<\/p>/gi,'<lb/>');
  myHtml = myHtml.replace(/(\n)(<p>)/gi,"$1 $2");
  myHtml = myHtml.replace(/  /gi," ");
  myHtml = myHtml.replace(/<p>\n/gi,"<p>");
  myHtml = myHtml.replace(/([^.;])<\/p>(\n<pb n="(\d{1,4})">\n) <p>/gi,"$1<lb/>$2");
  myHtml = myHtml.replace(/<\/hi><hi rend="I">/gi,"");
  myHtml = myHtml.replace(/([. ]+)<\/hi>/gi,"</hi>$1");
  myHtml = myHtml.replace(/\n<\/hi>/gi,"</hi>");
  
  /*
   * <p>[A-ZÀÁÂÄÆÇÈÉÊËÌÍÎÏÒÓÔÖÙÚÛÜŒ ]+<\/p> => <head>
   * intégrer .,' et <lb/>
   */
  
  $("#area2").val(myHtml); 
});

function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
}

/*
$( "#renum" ).click(function() {
  $( "#renum" ).hide();
  var myNum = $("#area2").val();
  myNum = myNum.replace(/<pb n="(\d{1,4})">/gi, remplaceur);
  $("#area2").val(myNum); 
});

function remplaceur(match, p1, offset, string){
  var tempNum = parseInt(p1) + 1;
  return '<pb n="'+tempNum+'">';
}
*/
$( "#renum" ).click(function() {
  $( "#renum" ).hide();
  var myNum = $("#area2").val();
  myNum =...