User:Jimp/vector.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
$.holdReady(true);
mediaWiki.loader.load("https://toolserver.org/~netaction/wikitrust.js");

// [[User:ais523/bracketmatch.js]] - Colour matching brackets in a copy of the edit box.
// By [[User:ais523]], on a suggestion by [[User:Absidy]].

addOnloadHook(function(){
  var p=document.getElementById('wikiPreview');
  if(p==null) p=document.getElementById('viewsourcetext');
  if(p)
    p.innerHTML+="<div id='bm_parseres'><a href='javascript:bm_parsebrackets();'>Parse</a></div>";
  try
  {
    var edh=document.getElementsByClassName('editHelp')[0];
    if(bm_useparsebutton)
      edh.innerHTML='<input id="bm_parsebutton" name="bm_parsebutton"'+
        ' type="button" tabindex="6" value="Show parsed" title="Show how braces parse in this text" '+
        ' onclick="bm_showparsed()"/>&nbsp;&nbsp;'+edh.innerHTML;
  } catch(x) {}
});

function bm_parsebrackets()
{
  var t=document.getElementById('wpTextbox1').value;
  var a=sajax_init_object();
  var p='action=expandtemplates&generatexml=1&format=json&callback=bm_callback&text='+encodeURIComponent(t);
  a.open('POST', mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php');
  a.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  a.setRequestHeader("Content-length", p.length);
  a.setRequestHeader("Connection", "close");
  a.onreadystatechange=function(){bm_apirespond(a)};
  a.send(p);
}

function bm_showparsed()
{
  bm_parsebrackets();
  return 0;
}

function bm_apirespond(a)
{
  try
  {
    if(a.readyState==4)
      eval(a.responseText);
  }
  catch(e)
  {
    document.getElementById('bm_parseres').innerHTML=
      "Could not parse due to a server error. <a href='javascript:bm_parsebrackets();'>Parse</a>";
  }
}

var colang;

function bm_hexdigit(n)
{
  var i=Math.floor(n);
  if(i<10) return i+'';
  if(i==10) return 'A';
  if(i==11) return 'B';
  if(i==12) return 'C';
  if(i==13) return 'D';
  if(i==14) return 'E';
  if(i==15) return 'F';
}

function bm_tohex(n)
{
  var i=Math.floor(n);
  return bm_hexdigit(i/16)+bm_hexdigit(i%16);
}

function bm_gencol(ang)
{
  var r=Math.sin(ang)+1;
  var g=Math.sin(ang+3.14159*2/3)+1;
  var b=Math.sin(ang-3.14159*2/3)+1;
  return bm_tohex(r*127.5)+bm_tohex(g*127.5)+bm_tohex(b*127.5);
}

function bm_callback(o)
{
  var subs={"tplarg":"{{{",
            "/tplarg":"}}}",
            "template":"{{",
            "/template":"}}",
            "part":"|",
            "ext":"&"+"lt;",
            "/attr":"&"+"gt;",
            "attr/":"&"+"gt;"};
  var h=o.parsetree["*"].split("<");
  var i=h.length;
  var r;
  var n;
  var sp=0;
  var st=new Array();
  var col;
  colang=0;
  while(--i)
  {
    col="";
    n=1;
    h[i]=h[i].split(">");
    h[i][0]=h[i][0].split(" ");
    r=subs[h[i][0][0]];
    if(r==undefined) r="";
    if(r=='}}}'||r=='}}')
    {
      st[sp]=bm_gencol(colang);
      col=st[sp];
      sp++;
      colang+=2.4; //golden angle in radians, approx
    }
    else if(r=='{{{'||r=='{{')
    {
      sp--;
      col=st[sp];
      n=2;
    }
    if(col!="")
      r="<font color='#"+col+"' id='bm_f"+col+n+"' onclick='bm_highlight(\""+col+"\",\"black\")'>"+r+"</font>";
    h[i][0]=r;
    h[i]=h[i].join("");
  }
  document.getElementById('bm_parseres').innerHTML=
    "<div style='border:1px solid blue'><tt>"+h.join("").split("\n").join("<br />")+
    "</tt></div><div><a href='javascript:bm_parsebrackets();'>Parse</a></div>";
}

function bm_highlight(x,c)
{
  document.getElementById('bm_f'+x+'1').style.backgroundColor=c;
  document.getElementById('bm_f'+x+'2').style.backgroundColor=c;
  if(c=="black")
    window.setTimeout("bm_highlight('"+x+"','transparent')",3000);
}

// This script converts American English spellings into British spellings.
// PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/EngvarB]] (click on the link above) before using.

// Feedback and constructive criticism are welcome. 
// As I am a scripting newbie, any technical advice on the 'hows and the wherefores' are especially welcome.

/*************
*** Regex menu framework
*** by [[m:user:Pathoschild]] <http://meta.wikimedia.org/wiki/User:Pathoschild/Scripts/Regex_menu_framework>
***	- adds a sidebar menu of user-defined scripts.
*************/
mw.loader.load('https://meta.wikimedia.org/w/index.php?title=User:Pathoschild/Scripts/Regex_menu_framework.js&action=raw&ctype=text/javascript');
 
/* menu links */
// In the function below, add more lines like "regexTool('link text','function_name()')" to add
// links to the sidebar menu. The function name is the function defined in rfmscripts() below.
function rmflinks() {
	regexTool('Custom regex','custom()'); // a default tool which performs regex input in a dynamic form
	regexTool('Edit my regexes ↗','function opennew(url) { window.open(url); }; opennew(mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=User:" + wgUserName + "/EngvarB.js&action=edit");');

	regexTool('• Protect words','Ohc_ENGVARprotectwords()');
	regexTool('• Flip Convert','Ohc_flip()');
	regexTool('• AUS spelling','SetEnglish("A")');
	regexTool('• BRITISH spelling','SetEnglish("B")');
	regexTool('• BRITISH (Oxford)','SetEnglish("Ox")');
	regexTool('• CANADIAN','SetEnglish("C")');

	//Fix formatting of links in the sidebar
	var r = document.getElementById('p-regex')
	if (r){
		r.className += ' portal'
		var d = r.getElementsByTagName('div')
		if (d[0]) d[0].className += ' pBody body'
	}
}
 
/* scripts */
// Below, define the functions linked to from rmflinks() above. These functions can use any JavaScript,
// but there is a set of simplified tools documented at
// http://meta.wikimedia.org/wiki/User:Pathoschild/Script:Regex_menu_framework .

function Ohc_ENGVARprotectwords(){
	Ohc_ENGVARprotectall()
	var table = [
		'( ag)(ing)',
		'(ai)(rplane)',
		'(al)(uminum)',
		'(ad)(renalin\\b)',
		'(an)(nex\\b)',
		'(anti)([\\w]+\\b)',
		'(ar)(mor)',
		'(ar)(tifact)',
		'(ana|breatha|cata|hydro|para)(lyz)',
		'(be)(stsell)',
		'(di)(arrhea)',
		'(de|of)(fense)',
		'(pr)(actic[ei])',
		'(fu)(ror\\b)',
		'(gr)(ay)',
		'(gu)(erilla)',
		'(je)(welry)',
		'(ma)(neuver)', 
		'(lo)(uver)', 
		'(pe)(dia|dic)',
		'(pe)(dophil)',
		'(sk)(eptic)',
		'(mo)(llusk)',
		'(in)(quiry)',
		'(va)(por)',
		'(li)(coric)',
		'(on)(stage)',
		'(break|drop|clean|line|lock|pick)(out|up)',
		'(he)(mo)',
		'(or)(thopedic)',
		'(ar)(cheo)',
		'(pa)(leonto)',
		'(en)(ology)',
		'(es)(ophag)',
		'(es)(trogen)',
		'(es)(the)',
		'(ho)(meopath)',
		'(me)(dieval)',
		'(om)(elet\\b)',
		'(ri)(gor)',
		'(an|leuk|septic|tox)(emi)',
		'(sp)(ecialty)',
		'(su)(lfur)',
		'(lik|liv|rat|sal|siz|shak)(able)',
		'(clam|glam|harb|neighb|rum|savi?)(or)',
		'(behavi|col|fl?av|hon|hum|lab)(or)',
		'(behavi|col|fl?av|hon|hum|lab)(or)', //repeating to catch second instances within protected strings (quotations in particular)
		'(mo)(l[dt])',
		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)(er)',
		'(cent)(er)',
		'(me)(ter)',
		'(centi|milli|deci|pico|hecto)(liter)',
		'(dema|peda|mono|syna)(gog)',
		'(ana|cata|dia|epi|homo|mono|pro)(log)',
		'(iz)(e[drs]?|ation|ing)',
		'(iz)(e[drs]?|ation|ing)', //repeating to catch second instances within protected strings (quotations in particular)
		'(bev|fu|jew|lev|mod|pan|rev|trav)(el\\w)',
		'([a-z]{2,8}\\wel)(e[dr]|est|ing)',
		'(counci|dia)(le[dr]|ling|lor)',
		'(app|di|enthr|equ|journ|riv|sign|tot)(ale[dr]|aling)',
	];

	for (i=0; i<table.length; i++) {
		var expr = [
			['(<.+?>[^<]+?)',				'([^<]+?<\\/.+?>)'],
			['(\\|[ ]*?(?:image|title)[ ]*?=[^\\|]*?)',			'([^\\|]*?\\|)'],
			['(\\[Category:[^\\]]*?)',			'([^\\]]*?\\])'],
			['(\\[(?:[Ff]ile|[Ii]mage):[^\\.]*?)',		'([^\\.]{0,20}\\.)'],
			['({[^{]{0,6}(?:[Qq]uot[^\\|]{1,7}\\s?|[Qq]|sic)\\|[^}]*?)', '([^}]*?})'], 
		];
		for (j=0; j<expr.length; j++) {
			try {
				var re = new RegExp(expr[j][0] + table[i] + expr[j][1], 'g')
				regex(re, '$1$2♫$3$4')
			}
			catch(err) {

				txt="There was an error on function Ohc_ENGVARprotectwords(), when changing '"+ expr[j][0] + table[i] + expr[j][1] + "' => '$1$2♫$3$4'.\n\n";
				txt+="Error: " + err.message + "\n\n";
				txt+="Click OK to continue.\n\n";
				alert(txt);
			}
		}
	}
}

function Ohc_ENGVARCprotectwords(){
	Ohc_ENGVARprotectall()
	var table = [
		'(\\bage)(ing)',
		'(aero)(plane)',
		'(al)(uminium)',
		'(ad)(renalin\\b)',
		'(an)(nex\\b)',
		'(anti)([\\w]+\\b)',
		'(ar)(mor)',
		'(ar)(tifact)',
		'(ana|breatha|cata|hydro|para)(lys)',
		'(be)(stsell)',
		'(di)(arrhoea)',
		'(de|of)(fense)',
		'(pr)(actic[ei])',
		'(fu)(ror\\b)',
		'(gr)(ay)',
		'(gu)(erilla)',
		'(je)(welry)',
		'(ma)(neuver)', 
		'(lo)(uver)', 
		'(pae)(dia|dic)',
		'(pae)(dophil)',
		'(sk)(eptic)',
		'(mo)(llusk)',
		'(in)(quiry)',
		'(va)(por)',
		'(li)(quoric)',
		'(on)(stage)',
		'(break|drop|clean|line|lock|pick)(out|up)',
		'(hae)(mo)',
		'(or)(thopaedic)',
		'(ar)(chaeo)',
		'(pa)(leonto)',
		'(en)(ology)',
		'(es)(ophag)',
		'(es)(trogen)',
		'(es)(the)',
		'(ho)(moeopath)',
		'(me)(diaeval)',
		'(om)(elet\\b)',
		'(ri)(gor)',
		'(an|leuk|septic|tox)(aemi)',
		'(sp)(eciality)',
		'(su)(lfur)',
		'(lik|liv|rat|sal|siz|shak)(able)',
		'(clam|glam|harb|neighb|rum|savi?)(or)',
		'(behavi|col|fl?av|hon|hum|lab)(or)',
		'(behavi|col|fl?av|hon|hum|lab)(or)', //repeating to catch second instances within protected strings (quotations in particular)
		'(mo)(l[dt])',
		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)(er)',
		'(cent)(er)',
		'(me)(ter)',
		'(centi|milli|deci|pico|hecto)(liter)',
		'(dema|peda|mono|syna)(gog)',
		'(ana|cata|dia|epi|homo|mono|pro)(log)',
		'(is)(e[drs]?|ation|ing)',
		'(is)(e[drs]?|ation|ing)', //repeating to catch second instances within protected strings (quotations in particular)
		'(bev|fu|jew|lev|mod|pan|rev|trav)(el\\w)',
		'([a-z]{2,8}\\wel)(e[dr]|est|ing)',
		'(counci|dia)(le[dr]|ling|lor)',
		'(app|di|enthr|equ|journ|riv|sign|tot)(ale[dr]|aling)',
	];

	for (i=0; i<table.length; i++) {
		var expr = [
			['(<.+?>[^<]+?)',				'([^<]+?<\\/.+?>)'],
			['(\\|[ ]*?(?:image|title)[ ]*?=[^\\|]*?)',			'([^\\|]*?\\|)'],
			['(\\[Category:[^\\]]*?)',			'([^\\]]*?\\])'],
			['(\\[(?:[Ff]ile|[Ii]mage):[^\\.]*?)',		'([^\\.]{0,20}\\.)'],
			['({[^{]{0,6}(?:[Qq]uot[^\\|]{1,7}\\s?|[Qq]|sic)\\|[^}]*?)', '([^}]*?})'], 
		];
		for (j=0; j<expr.length; j++) {
			try {
				var re = new RegExp(expr[j][0] + table[i] + expr[j][1], 'g')
				regex(re, '$1$2♫$3$4')
			}
			catch(err) {

				txt="There was an error on function Ohc_ENGVAR-Cprotectwords(), when changing '"+ expr[j][0] + table[i] + expr[j][1] + "' => '$1$2♫$3$4'.\n\n";
				txt+="Error: " + err.message + "\n\n";
				txt+="Click OK to continue.\n\n";
				alert(txt);
			}
		}
	}
}

function Ohc_ENGVARprotectall(){
	//protect infobox field names
	regex(/(\|[ ]*?ship hon)(ou?rs[ ]*?\=)/g, '$1♫$2');

	//protect from function re_z-words
	regex(/(enterpri|promi|surpri)(se[drs]?|ing)/g, '$1♫$2'); 
	regex(/\b(ant)(ic|idote|imon|ipath|iq)/g, '$1♫$2');  
	regex(/(nobelpri|imagesi|picsi)(ze)/g, '$1♫$2');  
	regex(/(\|[ ]*?)cleanup([ ]*?\=)/g, '$1clean♫up$2');
	regex(/((?:cite|\|)[ ]*?encyclop)(edia[ ]*?\=)/g, '$1♫$2');
	regex(/(\|[ ]*?enroll?)(ment[ ]*?=)/g, '$1♫$2');  

//	regex(/(foo)(bar)/g, '$1♫$2');
}
function Ohc_ENGVARSimple(){
	//Ohc_ENGVARprotectwords()

	var table = {
		'aging':	'$1ageing',
		'aluminum':	'$1aluminium',
		'adrenalin(\\b)':	'$1adrenaline$2',
		'annex(\\b)':	'$1annexe$2',
		'artifact':	'$1artefact',
		'(ana|breatha|cata|hydro|para)lyz(e|ing|is)':	'$1$2lys$3',
		'bestsell':	'$1best-sell',
		'diarrhea':	'$1diarrhoea',
		'(de|of)fense':	'$1$2fence',
		'(pract)ici':	'$1$2isi',
		'(pract)ic(ed)':	'$1$2is$3',
		'furor(\\b)':	'$1furore$2',
		'(light-|dark-|\\b)gray':	'$1$2grey',
		'guerilla':	'$1guerilla',
		'jewelry':	'$1jewellery',
		'maneuver(ab|ed|ing)':	'$1manoeuvr$2',
		'maneuver':	'$1manoeuvre',
		'louver':	'$1louvre',
		'ped(iatric|ophil)':	'$1paed$2',
		'encyclopedi(a|c)':	'$1encyclopaedi$2',
		'skeptic':	'$1sceptic',
		'mollusk':	'$1mollusc',
		'in(quir(?:e|ing))':	'$1en$2',
		'vapor(s?\\b)':	'$1vapour$2',
		'licorice':	'$1liquorice',

		//composite words
		'(break|drop|clean|line|lock|pick)(out|up)':	'$1$2-$3',

		//oe/ae words
		'gyneco':	'$1gynaeco',
		'hemo(globin|ly|phil|rr)':	'$1haemo$2',
		'orthopedic':	'$1orthopaedic',
		'archeo':	'$1archaeo',
		'paleonto':	'$1palaeonto',
		'enology':	'$1oenology',
		'esophag':	'$1oesophag',
		'estrogen':	'$1oestrogen',
		'(an|)esthe(sia|tic|tist)':	'$1$2aesthe$3',
		'anesthesiologist':	'$1anaesthetist',
		'homeopath':	'$1homoeopath',
//		'medieval(\\b)':	'$1mediaeval$2',
		'omelet(\\b)':	'$1omelette$2',
		'rigor(\\b)':	'$1rigour$2',
		'(an|leuk|septic|tox)emi(a|c)':	'$1$2aemi$3',

		//'f' words
		'sulfur':	'$1sulphur',

		'anymore':	'$1any more',
		'specialty':	'$1speciality',

		// non-redundant e
		'(lik|liv|rat|sal|siz|shak)(able)':	'$1$2e$3',

		//'~our' words
		'(arm|clam|glam|harb|neighb|rum|savi?)or(ed|ful|ing|less|ly|s|\\b)':	'$1$2our$3',
		'(arm|sav)or(ies|y|s|\\b)':	'$1$2our$3',
		'neighborhood':	'$1neighbourhood',
		'behavior(al|s|\\b)':	'$1behaviour$2',
		'favor(abl[ey]|ed|i[\\w]*|s|\\b)':	'$1favour$2',
		'honor(abl[ey]|ed|ing|s|\\b)':	'$1honour$2',
		'(endeav|lab)or(e[dr]|ing|s|\\W)':	'$1$2our$3',
		'mol(d|t)(ed|ing|s|\\W)':	'$1moul$2$3',

		//'~re~' words
		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)er(s?\\W)':	'$1$2re$3',
		'(centi|kilo|micro|milli|nano|-|\\d\\s)meter':	'$1$2metre',
		'(centi|milli|deci|pico|hecto|\\b)liter(s?\\b)':	'$1$2litre$3',
		'(dema|peda|mono|syna)gog(s?\\W)':	'$1$2gogue$3',
//		'(\\W[a-z]{3,12}[^s\\b])iz(e[drs]?|ation(s|al|)|ing)':	'$1$2is$3',
//		'(empha)siz(e|ing)':	'$1$2sis$3', //rem synthesiser conversion - equally common

		//'~l' words where the 'l' doubles as past and present participle
		'((?:\\w{3,9}[-–—]|)(?:fu|pan))el(e[dr]|ist|ing)':	'$1$2ell$3', 
		'(bev|jew|lev|mod|rev|trav)el(e[dr]|ing)':	'$1$2ell$3', 
		'([a-z]{2,8}[^egl ])el(e[dr]|est|ing)(\\b)':	'$1$2ell$3$4',
		'(app|di|enthr|equ|journ|riv|sign|tot)al(e[dr]|ing)':	'$1$2all$3',
	}

	for (var word in table) {
		var txt="";
		try {
			var re = new RegExp('([ \\|\\[\\*])' + word, 'g')
			regex(re, table[word])
		}
		catch(err) {
			txt="There was an error on function Ohc_ENGVARSimple(), when changing '"+ word + "' => '"+ table[word] +"'.\n\n";
			txt+="Error: " + err.message + "\n\n";
			txt+="Click OK to continue.\n\n";
			alert(txt);
		}
	}

	var table = {
		//'~our' words
		'([ \\|\\[\\*])(flav|hum)or(ed|ful|fully|ings?|less|lessly|s?\\W)':	'$1$2our$3',
		'([ \\|\\[\\*])color(e[dr]|ful|fully|ings?|less|lessly)':	'$1colour$2',
		'([ \\|\\[\\*])colors([^\\W\\s]|[\\s]*[^=])':	'$1colours$2',

		//'~re~' words
		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)':	'$1$2r$3',
		'( [\\w\\D]*\\-)(col|flav|hum)ored':	'$1$2oured',
		'([^\\w\\d\\-\\/=])(cent|epicent|recent)er(ed|ing)':	'$1$2r$3',
		'([^\\w\\d\\-\\/=])(cent|epicent|recent)ers':	'$1$2res',
		'([^\\w\\d\\-\\/])(ana|cata|dia|epi|homo|mono|pro)log(ed|ing)':	'$1$2logu$3',
		'([^\\w\\d\\-\\/])(ana|cata|dia|epi|homo|mono|pro)log(s?\\b)':	'$1$2logue$3',

		//'~l' words where the 'l' doubles as past and present participle
		'([ \\|\\[])(counc[ie])l(e[dr]|ing|ors?)(\\b)':	'$1$2ll$3$4',
		'(\\s[\\w]*)ll(ful|ment)':	'$1l$2',
		'(movie theat(er|re))':	'cinema',

		'([ \\|\\[\\*])airplane':	'$1aeroplane',
	}

	for (var word in table) {
		var txt="";
		try {
			var re = new RegExp(word, 'g')
			regex(re, table[word])			
		}
		catch(err) {
			txt="There was an error on function Ohc_ENGVARSimple(), when changing '"+ word + "' => '"+ table[word] +"'.\n\n";
			txt+="Error: " + err.message + "\n\n";
			txt+="Click OK to continue.\n\n";
			alert(txt);
		}
	}

	//remove US spelling from {{convert}} template output
	regex(/({{convert\|[^\}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');
	regex(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^\}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');
	regex(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^\}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	//protestors
	//reconvert special cases
}

function Ohc_ENGVARCSimple(){

	var table = {
		'ageing':	'$1aging',
		'aluminium':	'$1aluminum',
		'adrenalin(\\b)':	'$1adrenaline$2',
		'annex(\\b)':	'$1annexe$2',
		'(ana|breatha|cata|hydro|para)lyz(e|ing|is)':	'$1$2lys$3',
		'diarrhoea':	'$1diarrhea',
		'(de|of)fense':	'$1$2fence',
		'(pract)ici':	'$1$2isi',
		'(pract)ic(ed)':	'$1$2is$3',
		'furor(\\b)':	'$1furore$2',
		'(light-|dark-|\\b)gray':	'$1$2grey',
		'guerilla':	'$1guerilla',
		'maneuver(ab|ed|ing)':	'$1manoeuvr$2',
		'maneuver':	'$1manoeuvre',
		'louver':	'$1louvre',
		'paed(iatric|ophil)':	'$1ped$2',
		'encyclopaedi(a|c)':	'$1encyclopedi$2',
		'skeptic':	'$1sceptic',
		'mollusk':	'$1mollusc',
		'in(quir(?:e|ing))':	'$1en$2',
		'vapor(s?\\b)':	'$1vapour$2',
		'liquorice':	'$1licorice',

		//composite words
//		'onstage':	'$1on-stage',
		'(break|drop|clean|line|lock|pick)(out|up)':	'$1$2-$3',

		//oe/ae words
		'gyneco':	'$1gynaeco',
		'hemo(globin|ly|phil|rr)':	'$1haemo$2',
		'orthopaedic':	'$1orthopedic',
		'archaeo':	'$1archeo',
		'palaeonto':	'$1paleonto',
		'oenology':	'$1enology',
		'oesophag':	'$1esophag',
		'oestrogen':	'$1estrogen',
		'(an|)aesthe(sia|tic|tist)':	'$1$2esthe$3',
		'anaesthesiologist':	'$1anesthetist',
		'homoeopath':	'$1homeopath',
		'omelet(\\b)':	'$1omelette$2',
		'rigor(\\b)':	'$1rigour$2',
		'(an|leuk|septic|tox)aemi(a|c)':	'$1$2emi$3',

		//'f' words
		'sulfur':	'$1sulphur',

		'anymore':	'$1any more',
		'speciality':	'$1specialty',

		// non-redundant e
		'(lik|liv|rat|sal|siz|shak)(able)':	'$1$2e$3',

		//'~our' words
		'(arm|clam|glam|harb|neighb|rum|savi?)or(ed|ful|ing|less|ly|s|\\b)':	'$1$2our$3',
		'(arm|sav)or(ies|y|s|\\b)':	'$1$2our$3',
		'neighborhood':	'$1neighbourhood',
		'behavior(al|s|\\b)':	'$1behaviour$2',
		'favor(abl[ey]|ed|i[\\w]*|s|\\b)':	'$1favour$2',
		'honor(abl[ey]|ed|ing|s|\\b)':	'$1honour$2',
		'(endeav|lab)or(e[dr]|ing|s|\\W)':	'$1$2our$3',
		'mol(d|t)(ed|ing|s|\\W)':	'$1moul$2$3',

		//'~re~' words
		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)er(s?\\W)':	'$1$2re$3',
		'(centi|kilo|micro|milli|nano|-|\\d\\s)meter':	'$1$2metre',
		'(centi|milli|deci|pico|hecto|\\b)liter(s?\\b)':	'$1$2litre$3',
		'(dema|peda|mono|syna)gog(s?\\W)':	'$1$2gogue$3',

		//'~l' words where the 'l' doubles as past and present participle
		'((?:\\w{3,9}[-–—]|)(?:fu|pan))el(e[dr]|ist|ing)':	'$1$2ell$3', 
		'(bev|jew|lev|mod|rev|trav)el(e[dr]|ing)':	'$1$2ell$3', 
		'([a-z]{2,8}[^egl ])el(e[dr]|est|ing)(\\b)':	'$1$2ell$3$4',
		'(app|di|enthr|equ|journ|riv|sign|tot)al(e[dr]|ing)':	'$1$2all$3',
	}

	for (var word in table) {
		var txt="";
		try {
			var re = new RegExp('(\\b)' + word, 'g')
			regex(re, table[word])
		}
		catch(err) {
			txt="There was an error on function Ohc_ENGVAR-CSimple(), when changing '"+ word + "' => '"+ table[word] +"'.\n\n";
			txt+="Error: " + err.message + "\n\n";
			txt+="Click OK to continue.\n\n";
			alert(txt);
		}
	}

	var table = {
		//'~our' words
		'\\b(flav|hum)or(ed|ful|fully|ings?|less|lessly|s?\\W)':	'$1our$2',
		'\\bcolor(e[dr]|ful|fully|ings?|less|lessly)':	'colour$1',
		'([ \\|\\[\\*])colors([^\\W\\s]|[\\s]*[^=])':	'$1colours$2',

		//'~re~' words
		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)':	'$1$2r$3',
		'( [\\w\\D]*\\-)(col|flav|hum)ored':	'$1$2oured',
		'([^\\w\\d\\-\\/=])(cent|epicent|recent)er(ed|ing)':	'$1$2r$3',
		'([^\\w\\d\\-\\/=])(cent|epicent|recent)ers':	'$1$2res',
		'([^\\w\\d\\-\\/])(ana|cata|dia|epi|homo|mono|pro)log(ed|ing)':	'$1$2logu$3',
		'([^\\w\\d\\-\\/])(ana|cata|dia|epi|homo|mono|pro)log(s?\\b)':	'$1$2logue$3',

		//'~l' words where the 'l' doubles as past and present participle
		'\\b(counc[ie])l(e[dr]|ing|ors?)\\b':	'$1ll$2',
		'\\b([\\w]*)ll(ful|ment)':	'$1l$2',
//		'(movie theat(er|re))':	'cinema',

	}

	for (var word in table) {
		var txt="";
		try {
			var re = new RegExp(word, 'g')
			regex(re, table[word])			
		}
		catch(err) {
			txt="There was an error on function Ohc_ENGVAR-CSimple(), when changing '"+ word + "' => '"+ table[word] +"'.\n\n";
			txt+="Error: " + err.message + "\n\n";
			txt+="Click OK to continue.\n\n";
			alert(txt);
		}
	}

	//remove US spelling from {{convert}} template output
	regex(/({{convert\|[^\}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');
	regex(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^\}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');
	regex(/({{(?:pd|pop[ ]+density)[ ]+(?:km|mi)2[^\}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');
}

function SetEnglish(v) {
	Ohc_ENGVARunprotectwords();
	switch (v) {
		case 'Ox':
			Ohc_ENGVARprotectwords();
			Ohc_ENGVARSimple();
			re_zwords();
			Ohc_ENGVARXedit_summary();
			break;
		case 'A':
			Ohc_ENGVARprotectwords();
			Ohc_ENGVARSimple();
			zwords();
			Ohc_ENGVARAedit_summary();
			break;
		case 'B':
			Ohc_ENGVARprotectwords();
			Ohc_ENGVARSimple();
			zwords();
			Ohc_ENGVARBedit_summary();
			break;
		case 'C':
			Ohc_ENGVARCprotectwords();
			Ohc_ENGVARCSimple();
			re_zwords();
			Ohc_ENGVARCedit_summary();
			break;
		case 'P':
			alert('Feature not implemented');
			break;
	}
	Ohc_ENGVARunprotectwords();
	insert_Engvar(v);
	doaction('diff');
//	Ohc_ENGVARedit_summary();
}

function Simpleplus() {
	Ohc_ENGVARunprotectwords();
	Ohc_ENGVARSimple();
	zwords();
	Ohc_ENGVARunprotectwords();
	insert_Engvar('B')
	Ohc_ENGVARedit_summary();
}

function zwords(){
	regex(/([^\w\d\-\.][a-z]{3,12}[^s ])iz(e[drs]?|ations?|abl[ey]|ing)(\W)/g, '$1is$2$3');
	regex(/(empha|synthe)siz(e|ing)/g, '$1sis$2'); 
}
 
function re_zwords(){
	//converts s-words into Oxford z-words
 
	regex(/([^\w\d\-\.\/])(ar|de[mv]|improv|parad|(?:com|)pr[eo][cm]|rev|surm|telev)is(e|ing)/g, '$1$2♫is$3'); 
	regex(/([^\w\d\-\.\/][a-z]{5,12})is(ations?)(\W)/g, '$1iz$2$3');
	regex(/([^\w\d\-\.\/][a-z]{0,12}(?:[aeiou][^aeiosuw]|ph|rd|thes))is(e[drs]?|ing)(\W)/g, '$1iz$2$3');
}
function Ohc_flip(){
// measurements and perception
//	regex(/\[\[(foobar)(s|)\]\]/gi, '$1$2');
 
	//Template:{{convert}}
	regex(/(\{\{convert\|[\d\.,]+?\|(?:(?:sq|cu|)(?:[mck]?m)(?:2|3|))(?:\|(?:sq|cu|)(?:in|ft|yd|mi)(?:2|3|))?(\|\d)?(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1$2|disp=flip'); //rem linking within convert template (area)
	regex(/(\{\{convert\|[\d\.,]+?\|(?:(?:sq|)(?:k?m)(?:2|3|)|hectare))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*?(?=\})/gi, '$1$2|disp=flip'); //putting metres and hectares behind
	regex(/(\{\{convert\|[\d\.,]+?\|(?:hectares?|ha)(?:\|\d)?(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1$2|disp=flip'); //rem linking within convert template (input units only)
	regex(/(\{\{convert\|[\d\.,]+?\|(?:to|by)(?:\|[\d\.,]+?\|(?:[mck]?m))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1$2|disp=flip'); //rem linking within convert template (input ranges only)
	regex(/(\{\{convert\|[\d\.,]+?\|nmi)(\|km mi|)/gi, '$1|mi km'); //putting miles first in nautical mile conversion
	regex(/(\{\{convert\|[\d\.,]+?\|(?:kg|°?F))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]+?)*(?=\})/gi, '$1$2|disp=flip');  //putting pounds and °C first
//	regex(/(\{\{(?:in|ft|mi|[mck]?m)[23]?\sto\s(?:in|ft|mi|[mck]?m)[23]?[^\}]*?)\|wiki=(?:yes|no)/gi, '$1');
}

function Ohc_ENGVARunprotectwords(){
	regex(/(\w)♫(\w)/g, '$1$2');
//	and reconvert
	regex(/([Cc]ite encyclop)aedia/gi, '$1edia');
}

function insert_Engvar(v){
	// Add a template to the article identifying English variant
	var box = document.editform.wpTextbox1;
	var txt = box.value;

        // Build a string with "Month YYYY"
        var dateobj=new Date();
        var month=new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
        var datestr= month[dateobj.getMonth()] + ' ' + dateobj.getFullYear();

       // Matches Use Australian English or EngvarA
       var reA = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+Australian[_ ]+English|[Ee]ngvarA)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
        var reB = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+British[_ ]+English|[Ee]ngvarB)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
        // Matches Use British (Oxford) English or EngvarOx
        var reOx = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+British[_ ]+\\(Oxford\\)[_ ]+English|[Ee]ngvarOx)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
        // Matches Use Canadian English or EngvarC
        var reC = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+Canadian[_ ]+English|[Ee]ngvarC)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');

        switch (v) {
           case 'A':
           // Replace existing variants with Australian
           txt = txt.replace( reOx, '{{Use Australian English|date=' + datestr + '}}');
           txt = txt.replace( reB, '{{Use Australian English|date=' + datestr + '}}');
           txt = txt.replace( reC, '{{Use Australian English|date=' + datestr + '}}');
           // Prepend Australian template if not already tagged
           if( txt.search(reA) == -1 ) {
               txt = '{{Use Australian English|date=' + datestr + '}}\r\n' + txt;
           }
           break;
          case 'Ox':
           // Replace with British (Oxford)
           txt = txt.replace( reA, '{{Use British (Oxford) English|date=' + datestr + '}}');
           txt = txt.replace( reB, '{{Use British (Oxford) English|date=' + datestr + '}}');
           txt = txt.replace( reC, '{{Use British (Oxford) English|date=' + datestr + '}}');
           // Prepend British (Oxford) template if not already tagged
           if( txt.search(reOx) == -1 ) {
               txt = '{{Use British (Oxford) English|date=' + datestr + '}}\r\n' + txt;
           }
           break;
        case 'B':
           // Replace with British
           txt = txt.replace( reA, '{{Use British English|date=' + datestr + '}}');
           txt = txt.replace( reOx, '{{Use British English|date=' + datestr + '}}');
           txt = txt.replace( reC, '{{Use British English|date=' + datestr + '}}');
           // Prepend British template if not already tagged
           if( txt.search(reB) == -1 ) {
               txt = '{{Use British English|date=' + datestr + '}}\r\n' + txt;
           }
           break;
        case 'C':
           // Replace with Canadian
           txt = txt.replace( reA, '{{Use Canadian English|date=' + datestr + '}}');
           txt = txt.replace( reB, '{{Use Canadian English|date=' + datestr + '}}');
           txt = txt.replace( reOx, '{{Use Canadian English|date=' + datestr + '}}');
           // Prepend Canadian template if not already tagged
           if( txt.search(reC) == -1 ) {
               txt = '{{Use Canadian English|date=' + datestr + '}}\r\n' + txt;
           }
           break;
       }

        box.value = txt;
}

function Ohc_ENGVARAedit_summary(){
	//Add a tag to the summary box
	setoptions(minor='true'); //removed ",watch='false'" in response to user notification 13 Nov. 2010
	setreason('[[WP:ENGVAR|all Australian spelling]] by [[User:Ohconfucius/EngvarB|script]]', 'append');
//	doaction('diff');
}
function Ohc_ENGVARBedit_summary(){
	//Add a tag to the summary box
	setoptions(minor='true'); //removed ",watch='false'" in response to user notification 13 Nov. 2010
	setreason('[[WP:ENGVAR|all British spelling]] by [[User:Ohconfucius/EngvarB|script]]', 'append');
//	doaction('diff');
}
function Ohc_ENGVARCedit_summary(){
	//Add a tag to the summary box
	setoptions(minor='true'); //removed ",watch='false'" in response to user notification 13 Nov. 2010
	setreason('[[WP:ENGVAR|all Canadian spelling]] by [[User:Ohconfucius/EngvarB|script]]', 'append');
//	doaction('diff');
}
function Ohc_ENGVARXedit_summary(){
	//Add a tag to the summary box
	setoptions(minor='true'); //removed ",watch='false'" in response to user notification 13 Nov. 2010
	setreason('all to [[Oxford spelling]] by [[User:Ohconfucius/EngvarB|script]]', 'append');
//	doaction('diff');
}