MediaWiki:Common.js/User:Bawolff/sandbox/wiki2text

//

mw.loader.load( '/w/index.php?title=' + 'User:Bawolff/mwapilib2.js' + '&action=raw&ctype=text/javascript' );
function filter (text) {
var out = '', char = '';
text = text.replace(/\n/g, '');
var divDepth = 0, tableDepth = 0;
var inTag = false, lastTag = false;
text = text.replace(/<p>/g, '\n\n');
text = text.replace(/<h2>/g, '\n<h2>')
text = text.replace(/<\/h2>/g, '</h2>\n')
for ( var i = 0; i < text.length; i++ ) {
 lastTag =false;
 char = text.charAt(i);
 if (char === '<') {
  inTag = true;
  if (text.charAt(i+1) === 'd' && text.charAt(i+2) === 'i' && text.charAt(i+3) === 'v' ) {
   divDepth++;
  }
  if (text.charAt(i+1) === 't' && text.charAt(i+2) === 'a' && text.charAt(i+3) === 'b' && text.charAt(i+4) === 'l' && text.charAt(i+5) === 'e' ) {
   tableDepth++;
  }
 }
 else if ( char === '>' ){
  inTag = false;
  lastTag = true;
  if (text.charAt(i-1) === 'v' && text.charAt(i-2) === 'i' && text.charAt(i-3) === 'd' && text.charAt(i-4) === '/' ) {
   divDepth--;
  }
  if (text.charAt(i-1) === 'e' && text.charAt(i-2) === 'l' && text.charAt(i-3) === 'b' && text.charAt(i-4) === 'a' && text.charAt(i-5) === 't' && text.charAt(i-6) === '/' ) {
   tableDepth--;
  }
 }


 if (divDepth < 0) {
  throw new Error( 'ahhh! too many div end' );
 }
 if (tableDepth < 0) {
  throw new Error( 'ahhh! too many table end' );
 }

 if (divDepth === 0 && !inTag && !lastTag && tableDepth === 0) out += char;
}
if (inTag || divDepth !== 0 || tableDepth !==0) {
 throw new Error ('malformed input; (divDepth, tableDepth, tag) = ' +divDepth + tableDepth + inTag);
}
out = out.replace(/\n(?:\[edit\]\s)?(?:[sS]ources|[rR]elated\s[nN]ews)\n[\s\S]*$/, ''); // body only
return out;
}

if (mw.config.get('wgAction')==='view') {
$( function () {

if (!api) alert('api didn\'t load');
api().renderPage(prompt("Enter page you want to turn into plain text", "Over 100 dead in Libyan plane crash")).lift(filter).push().lift(alert).pop().
 lift(function (t) { if (t.match(/</)) throw new Error('security error'); document.getElementById('bodyContent').innerHTML += '<pre>' + t + '</pre>'} ).
 exec();
});
}

//