Wikipedia:AutoEd/htmltowikitext.js

In this article, Wikipedia:AutoEd/htmltowikitext.js and its impact on today's society will be analyzed in detail. From its origins to its evolution and relevance in different areas, Wikipedia:AutoEd/htmltowikitext.js has played a fundamental role in people's lives. Through this article, its multiple facets will be explored and its influence will be examined in various contexts, from the personal to the global level. It will examine how Wikipedia:AutoEd/htmltowikitext.js has shaped the way we interact, communicate and experience the world around us. In addition, possible future scenarios and their meaning for humanity in general will also be considered.
//Convert HTML to wikitext
function autoEdHTMLtoWikitext(str) {
  // <b> and <i> tags
  str = str.replace(/<B*>((?:|<*\/>|<(+)(?:| *)>*<\/\3>)*?)<\/\1*>/gi,  "'''$1'''");
  str = str.replace(/<I*>((?:|<*\/>|<(+)(?:| *)>*<\/\3>)*?)<\/\1*>/gi,  "''$1''");
  // </br>, <\br>, <br\>, <BR />, ...
  str = str.replace(/<+BR*>/gim, '<br />');
  str = str.replace(/<*BR*+*>/gim, '<br />');
  // <.br>, <br.>, <Br>, ...
  str = str.replace(/<*BR*>/gim, '<br>');
  // <br>>, <<br />, <<br >> ...
  str = str.replace(/<*(<br*>)/gim, '$1');
  str = str.replace(/(<br*>)*>/gim, '$1');
  // <hr>
  str = str.replace(/()*<*HR*>/gi, '$1----');
  // str = str.replace(/(.)<*HR*>/gi, '$1\n----'); // Breaks wikitables
  // Not really an HTML-to-wikitext fix, but close enough
  str = str.replace(/(\s*)<*REFERENCES*>/gim, '$1<references />');
  // Repeated references tag
  str = str.replace(/(<references \/>)*\1/gim, '$1');
  // Make sure <H1>, ..., <H6> is after a newline
  str = str.replace(/()*(<H*>)/gim, '$1\n$2');
  // Make sure </H1>, ..., </H6> is before a newline
  str = str.replace(/(<\/H*>)*()/gim, '$1\n$2');
  // Remove newlines from inside <H1>, ..., <H6>
  var loopcount = 0;
  while( str.search( /<H()*>(?:|<\/?*>)*?<\/H\1*>/gim ) >= 0 && loopcount <= 10 ) {
    str = str.replace(/(<H)()(*>(?:|<\/?*>)*?)((?:|<\/?*>)*?<\/H)\2(*>)/gim, '$1$2$3 $4$2$5');
    loopcount++;
  }
  // Replace <H1>, ..., <H6> with wikified section headings
  str = str.replace(/(^|)*<H1*>(*?)<\/H1*>*(|$)/gim, '$1=$2=$3');
  str = str.replace(/(^|)*<H2*>(*?)<\/H2*>*(|$)/gim, '$1==$2==$3');
  str = str.replace(/(^|)*<H3*>(*?)<\/H3*>*(|$)/gim, '$1===$2===$3');
  str = str.replace(/(^|)*<H4*>(*?)<\/H4*>*(|$)/gim, '$1====$2====$3');
  str = str.replace(/(^|)*<H5*>(*?)<\/H5*>*(|$)/gim, '$1=====$2=====$3');
  str = str.replace(/(^|)*<H6*>(*?)<\/H6*>*(|$)/gim, '$1======$2======$3');

  return str;
}