//Convert HTML to wikitext
function autoEdHTMLtoWikitext ( str ) {
// <b> and <i> tags
str = str . replace ( /<B[ ]*>((?:[^<>]|<[a-z][^<>]*\/>|<([a-z]+)(?:| [^<>]*)>[^<>]*<\/\3>)*?)<\/\1[ ]*>/gi , "'''$1'''" );
str = str . replace ( /<I[ ]*>((?:[^<>]|<[a-z][^<>]*\/>|<([a-z]+)(?:| [^<>]*)>[^<>]*<\/\3>)*?)<\/\1[ ]*>/gi , "''$1''" );
// </br>, <\br>, <br\>, <BR />, ...
str = str . replace ( /<[\\\/]+BR[\\\/\s]*>/gim , '<br />' );
str = str . replace ( /<[\\\/\s]*BR[\s]*[\\\/]+[\s]*>/gim , '<br />' );
// <.br>, <br.>, <Br>, ...
str = str . replace ( /<[\s\.]*BR[\s\.]*>/gim , '<br>' );
// <br>>, <<br />, <<br >> ...
str = str . replace ( /<[\s]*(<br[\s\/]*>)/gim , '$1' );
str = str . replace ( /(<br[\s\/]*>)[\s]*>/gim , '$1' );
// <hr>
str = str . replace ( /([\r\n])[\t ]*<[\\\/\. ]*HR[\\\/\. ]*>/gi , '$1----' );
// str = str.replace(/(.)<[\\\/\. ]*HR[\\\/\. ]*>/gi, '$1\n----'); // Breaks wikitables
// Repeated references tag
str = str . replace ( /(<references \/>)[\s]*\1/gim , '$1' );
// Make sure <H1>, ..., <H6> is after a newline
str = str . replace ( /([^\r\n ])[\t ]*(<H[1-6][^<>]*>)/gim , '$1\n$2' );
// Make sure </H1>, ..., </H6> is before a newline
str = str . replace ( /(<\/H[1-6][^<>]*>)[\t ]*([^\r\n ])/gim , '$1\n$2' );
// Remove newlines from inside <H1>, ..., <H6>
var loopcount = 0 ;
while ( str . search ( /<H([1-6])[^<>]*>(?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?<\/H\1[^<>]*>/gim ) >= 0 && loopcount <= 10 ) {
str = str . replace ( /(<H)([1-6])([^<>]*>(?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?)[\r\n]((?:[^<>]|<\/?[^\/h\r\n][^<>]*>)*?<\/H)\2([^<>]*>)/gim , '$1$2$3 $4$2$5' );
loopcount ++ ;
}
// Replace <H1>, ..., <H6> with wikified section headings
str = str . replace ( /(^|[\r\n])[\t ]*<H1[^<>]*>([^\r\n]*?)<\/H1[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1=$2=$3' );
str = str . replace ( /(^|[\r\n])[\t ]*<H2[^<>]*>([^\r\n]*?)<\/H2[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1==$2==$3' );
str = str . replace ( /(^|[\r\n])[\t ]*<H3[^<>]*>([^\r\n]*?)<\/H3[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1===$2===$3' );
str = str . replace ( /(^|[\r\n])[\t ]*<H4[^<>]*>([^\r\n]*?)<\/H4[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1====$2====$3' );
str = str . replace ( /(^|[\r\n])[\t ]*<H5[^<>]*>([^\r\n]*?)<\/H5[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1=====$2=====$3' );
str = str . replace ( /(^|[\r\n])[\t ]*<H6[^<>]*>([^\r\n]*?)<\/H6[\r\n\t ]*>[\t ]*([\r\n]|$)/gim , '$1======$2======$3' );
return str ;
}