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.

// 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. 

// Any advice on improving the scripts are especially welcome.

// <syntaxhighlight lang=javascript>

/**

 * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.

 * @see https://meta.wikimedia.org/wiki/TemplateScript

 * @update-token [[File:Pathoschild/templatescript.js]]

 */

$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', {

	dataType: 'script',

	cache: true

}).then(function () {

	pathoschild.TemplateScript.add([

		{

			category: 'EngvarB', name: 'Flip imperial units', isMinorEdit: true, script: function (editor) {

				ohc_imperial_units(editor);

			}

		},

		{

			category: 'EngvarB', name: 'Flip international units', isMinorEdit: true, script: function (editor) {

				ohc_international_units(editor);

			}

		},

		{

			category: 'EngvarB', name: 'AMERICAN', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "U");

			}

		},

		{

			category: 'EngvarB', name: 'COMMONWEALTH', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "B");

			}

		},

		{

			category: 'EngvarB', name: 'OXFORD', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "O");

			}

		},

		{

			category: 'EngvarB', name: 'CANADIAN', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "C");

			}

		}

	]);

});

// </nowiki>



/** ------------------------------------------------------------------------ **/



// PROTECTION FROM STRING SUBSTITUTION

var protected_map;



function ohc_ENGVAR_protect(editor) {

	// protects categories, templates, link pipings, quotes, etc

	// the sensitive part is stored and replaced with a unique identifier,

	// which is later replaced with the stored part.

	var text = editor.get();

	protected_map = [];



	var replace_string = function (match) {

		protected_map.push(match);

		return '⍌' + (protected_map.length - 1) + '⍍';

	};

	var protect_string = function (string) {

		text = text.replace(string, replace_string);

	};



//	protect_string(/(pre)(string)(post)/gi); // template

	protect_string(/(<blockquote>)(.*?)(<\/blockquote>)/gi);

	protect_string(/({\| *class *= *"wikitable *")([\S\s]*?)(\|})/gi);

	protect_string(/(<table[^<>]*?>)([^<>]*)(<\/table>)/gi);

	protect_string(/(<timeline[^<>]*?>)([^<>]*)(<\/timeline>)/gi);

	protect_string(/(<span\sstyle\s*=[\"])(color)([^>]*>)/gi);

	protect_string(/(=\s*)(color)(\s*:#)/gi);

	protect_string(/(\{)((?:meta |font |)color)([^|]*\|)/gi); //color box templates

	protect_string(/([\s;:\'\"]+)(color)([\s;:\'\"]\w)/gi);

	protect_string(/({{\w*\scolor\|)([^|=\[\]]*)(}})/gi); // 



	protect_string(/(<\/?[ ]*)(center)([ ]*>)/gi); // <center> tags

	protect_string(/(align\/?[ ]*=\/?[ ]*[ "'][ ]*)(center)([ ]*[ "'])/gi); // align="center" in tables



	protect_string(/(\{\{)(Medical cases chart\/bar colors)([^\}]+\}\})/gi);

	protect_string(/(\{\{)(bar percent)(\|[^\}]+\}\})/gi);



	protect_string(/(<ref[^<>]*?>)([^<>]*)(<\/ref>)/gi);

	protect_string(/(<ref name=)([^<>]*)(\/>)/gi);

	protect_string(/([\s(]["“])([^"“”\n]*)(["”])/gi); // double quotes

	protect_string(/({[\w ]{0,12}(?:quot[^|]{1,7}\s?|sic|(?:not a |)typo|as written)\|)([^}]+)(})/gi);



	protect_string(/((?:Category|File|Image):)([^|\]]*)([|\]])/gi); // cats, images

	protect_string(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _](?:map|name)|img|pic)\s*=)([^|}]*)([|}])/gi); // images within templates infoboxes etc

	protect_string(/(cite[ _]encyclopedia\s*\|)/gi);

	protect_string(/((?:url)\s*=)([^|}]*)([|}])/gi); // urls within templates infoboxes etc

	protect_string(/(\[(?:https?:|ftp:))([^\]]*)(])/gi);

	protect_string(/(\[(?:https?:|ftp:))([^\s\]]*)([\s\]])/gi);

	protect_string(/(\[\[)([^|\]]*)(\|)/gi); // pipings

	protect_string(/({(?:See ?also|Main))(\|[^}]*)(})/gi); // see also and main templates

	protect_string(/({{(?:external|wide )image\s?\|)([^}]+)(})/gi);

	protect_string(/({{(?:harvnb|wikisource)\|)([^}]+)(})/gi);

	protect_string(/({{)((?:NYT|WSJ)topic\|[^}]*)(}})/gi);

	protect_string(/({{\w*)([^|=\[\]}]*)(}})/gi); // templates

	protect_string(/({Infobox )((?:[\w ]*)organization)(\s+)/gi);

	protect_string(/({Infobox )((?:[\w]* )artifact)(\s+)/gi);

	

// parameters

	protect_string(/(\|)(\s*colors(?:_label|)\s*)(=)/gi);

	protect_string(/(\|)(\s*background color\s*)(=)/gi);

	protect_string(/([\|\!]\s*style\s*=[^|:"]*)"[^|]*(color|center|gray)([^|]*\|)/gi);

	protect_string(/(\|)(\s*organizations?\s*)(=)/gi);

	protect_string(/(\\|\/?[ ]*)(center)([ ]*\\|)/gi); // |center| in files

	protect_string(/(\|)(\s*analog\s*)(=)/gi);

	protect_string(/(\|)(\s*licen[cs]e ?(?:place|date|)\s*)(=)/gi);

	protect_string(/(\|\s*)(cleanup|color|coordinates\w*)([ ]*=)/gi); // parameters within infoboxes

	protect_string(/(\|(?:[^=|{}]*))(cleanup|encyclopa?edia|enroll?ment|honorific_prefix|honors|lockup\w{1,4}|organi[sz]ation|catalog\snumber)(\s*=)/g);

	protect_string(/(\|\s*)(encyclopedia|\w*colors|(?:org|rom)anization|license)(\s?=)/gi);

	protect_string(/(\|\s*)(local[ _]authority)(\s?=)/gi);

	protect_string(/(\|\s*)([Ss]hip[ _](?:armou?r|honou?rs))([ ]*?=)/g);

	protect_string(/(\|\s*title\s?=)([^|\]]*)(\|)/gi);



//white list

	protect_string(/(Back in the U.S.S.R.)/g); // title of work

	protect_string(/(Born in the U.S.A.)/g); // title of work

	protect_string(/(Dear Mom|Serial Mom)/g); // title of work

	protect_string(/(derailment)/gi);

	protect_string(/(Traveling Wilburys?|Rockerfeller)/g); // proper noun

	protect_string(/(to license)/gi);  // verb

	protect_string(/(improvis)/gi);

	protect_string(/(non-cooperation)/gi);

	protect_string(/(Organisation for Economic Co-operation and Development)/gi);

	protect_string(/(pr[eo]mis(?:e|ing)|paradise)/gi);

	protect_string(/(solid gr[ae]y)/gi);

	protect_string(/(rigor mortis)/gi);

	protect_string(/(revis)/gi);

	protect_string(/((?:analy|peni)ses)/gi);

	protect_string(/(World Health Organization)/gi);



	// protect from hyphenation

	protect_string(/(\breed(?:|s)[^aeiou]|[Rr]eegan)/g);



	// whitelisting: protect from doubling of "L" 

	protect_string(/(conceal|adrenaline|rebel|Rockerfeller)/gi);



	// whitelisting: protect from function ohc_ENGVAR_restore_z

	protect_string(/(?:ar|de[mv]|enterpr|improv|parad|prec|prom|rev|surpr|treat|telev)(?:ise?[drs]?|ing)/gi);

	protect_string(/(?: anti)(?:c|dote|mon|path|q)/g);

	protect_string(/(denise|excell(ed|ing)|rockerfeller)/gi);

	protect_string(/(?:(?:mercury|nobel)pri|imagesi|picsi)(?:ze)/g);



	editor.set(text);

}



function ohc_ENGVAR_unprotect(editor) {

	// restore words protected at runtime

	editor.replace(/[♫]/g, '');



	// restore words protected beforehand

	var text = editor.get();



	var matches;

	do {

		text = text.replace(/⍌([0-9]+)⍍/g, function (match, index) {

			return protected_mapindex];

		});

		matches = text.match(/⍌([0-9]+)⍍/g);

	} while (matches !== null && matches.length > 0);



	editor.set(text);

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_plain(editor) {

	// per https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style

	// redundancies

	editor.replace(/B\.B\.C\./g, 'BBC');

	editor.replace(/U\.S\.A\./g, 'U.S.');

	editor.replace(/U\.S\.S\.R\./g, 'USSR');

	editor.replace(/U\.K\./g, 'UK');

	editor.replace(/E\.U\./g, 'EU');

	editor.replace(/(fill )out/gi, '$1in');



	// agrammatical

	editor.replace(/(comprised )of /gi, '$1');



	// old-fashioned

	editor.replace(/(whil)st /gi, '$1e ');

	editor.replace(/(among)st /gi, '$1 ');



		// hyphenation

//	editor.replace(/(co)(ordinat(e\b|ing|ion))/g, '$1-$2');

//	editor.replace(/\b(re)(e\w[aeiou]\w{4,})/gi, '$1-$2');

//	editor.replace(/\b(over|under)(r\w{4,})/gi, '$1-$2');



	// capitalisation

	// rem geographical regions - too many false positives

//	editor.replace(/(local )authority/g, '$1council');



	editor.replace(/w(estern European Union)/g, 'W$1');

	editor.replace(/(New )s(outh Wales)/g, '$1S$2');

}



function ohc_ENGVAR_simple_b(editor) {

	var table = {

		'aging': '$1ageing',

		'aluminum': '$1aluminium',

		'adrenalin(\\b)': '$1adrenaline$2',

		'annex(\\b)': '$1annexe$2',

		'artifact': '$1artefact',

		'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',

//		'bestsell': '$1best-sell',  //disabled 24/04/24 following comment;word in OED

		'ba(lk)': '$1u$2',

		'diarrhea': '$1diarrhoea',

		'(de|of)fense': '$1$2fence',

		'license': '$1licence',

		'(licen)c(ing|ed)': '$1$2s$3',

		'percent(\\b)': '$1per cent$2',

		'plow(s|ing|\\b)': '$1plough$2',

		'(practi)c(ing|ed)': '$1$2s$3',

		'furor(\\b)': '$1furore$2',

		'(light-|dark-|\\b)gray': '$1$2grey',

		'guerilla': '$1guerrilla',

		'jewelry': '$1jewellery',

		'(judg)(ment)': '$1$2e$3',

		'maneuver(ab|ed|ing)': '$1manoeuvr$2',

		'maneuver': '$1manoeuvre',

		'louve(red|ring)': '$1louv$2',

		'(louv|somb)er': '$1$2re',

		'ped(iatric|ophil)': '$1paed$2',

		'encyclopedi(a|c)': '$1encyclopaedi$2',

		'skeptic': '$1sceptic',

		'mollusk': '$1mollusc',

		'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

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCOM



		'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?|tum)or(ed|ful|ing|less|ly|s|\\b)': '$1$2our$3',

		'(arm|sav)or(ies|y|s|\\b)': '$1$2our$3',

		'(cand|hum|od)or((?:ful|less)(?:ly|)|\\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(dy?|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',

		'(\b(?:[2-9]|\d{2,3}|half|quarter|two|three|four|five|six|seven|eight|nine|ten)\b) (liter|(?:kilo|)meter)': '$1$2re$3',

		'(centi|kilo|micro|milli|nano|-|hundred\\s|\\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',

		'(\b(?:[2-9]|\d{2,3}|one|two|three|four|five|six|seven|eight|nine|ten)\b) story': '$1-storey',

//		'(\\W[a-zA-Z]{3,12}[^s\\b])iz(e[drs]?|ation(s|al|)|ing)': '$1$2is$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-zA-Z]{2,8}[^eglpstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', // added 'p' to avoid changing of "misspelling"

		'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)or(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2our$3',

		'( [\\w\\D]*\\-)(col|flav|hum)ored': '$1$2oured',

		'([^\\w\\d\\-\\/=:])(col)or(\\W)': '$1$2our$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)': '$1$2re$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(s?\\b)': '$1$2re$3',



		// '~logu~' words

		'([^\\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',

		'\\b([a-zA-Z]*)ll(ful|ment)': '$1l$2',

		'(movie theat(er|re))': 'cinema',



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

//		'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother',  // disabled 10 June – frequent false positives

		'([ \\|\\[\\*])sidewalk': '$1pavement'

	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous pound sign; rem incidental intervening space

	editor.replace(/₤ ?(\d)/g, '£$1');

	// reconvert special cases



	editor.replace(/\b(vice) (president|chairman|chancellor|minister)/gi, '$1-$2');

}



function ohc_ENGVAR_simple_c(editor) {

	var table = {

		'ageing': '$1aging', 	

		'aluminum': '$1aluminium',

		'adrenalin(\\b)': '$1adrenaline$2',

		'annex(\\b)': '$1annexe$2',

		'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',

		'(de|of)fense': '$1$2fence',

		'percent(\\b)': '$1per cent$2',

		'license': '$1licence',

		'(licen)c(ing|ed)': '$1$2s$3',

		'(practi)s(ing|ed)': '$1$2c$3',

		'furor(\\b)': '$1furore$2',

		'(light-|dark-|\\b)gray': '$1$2grey',

		'guerilla': '$1guerrilla',

		'maneuver(ab|ed|ing)': '$1manoeuvr$2',

		'maneuver': '$1manoeuvre',

		'louve(red|ring)': '$1louv$2',

		'louver': '$1louvre',

		'encyclopaedi(a|c)': '$1encyclopedi$2',

		'skeptic': '$1sceptic',

		'mollusk': '$1mollusc',

		'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

		'anaesthesiologist': '$1anesthetist',

		'(an)aesthe(sia|tic|tist)': '$1$2esthe$3',

		'archaeo': '$1archeo',

		'diarrhoea': '$1diarrhea',

		'foetus': '$1fetus',

		'gyneco': '$1gynaeco',

		'haemo(globin|ly|phil|rr)': '$1hemo$2',

		'orthopaedic': '$1orthopedic',

		'oenology': '$1enology',

		'oesophag': '$1esophag',

		'oestrogen': '$1estrogen',

		'homoeopath': '$1homeopath',

		'omelet(\\b)': '$1omelette$2',

		'paed(iatric|ophil)': '$1ped$2',

		'palaeonto': '$1paleonto',

		'rigor(\\b)': '$1rigour$2',

		'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',



		// 'f' words

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCON



		'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?|tum)or(ed|ful|ing|less|ly|s|\\b)': '$1$2our$3',

		'(arm|sav)or(ies|y|s|\\b)': '$1$2our$3',

		'(cand|hum|od)or((?:ful|less)(?:ly|)|\\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(dy?|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|-|hundred\\s|\\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-zA-Z]{2,8}[^eglpstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', // added 'p' to avoid changing of "misspelling"

		'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)or(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2our$3',

		'( [\\w\\D]*\\-)(col|flav|hum)ored': '$1$2oured',

		'([^\\w\\d\\-\\/=:])(col)or(\\W)': '$1$2our$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(s?\\b)': '$1$2re$3',



		// '~logu~' words

		'([^\\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',

//		'(movie theat(er|re))': 'cinema',

		'\\b([a-z]*)ll(ful|ment)': '$1l$2'

	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous dollar sign; rem incidental intervening space

	editor.replace(/$ ?(\d)/g, '$$1');

	//editor.replace(/rigour mortis/g, 'rigor mortis');

	// reconvert special cases

}



function ohc_ENGVAR_simple_a(editor) {

	var table = {

		'ageing': '$1aging',

		'aluminium': '$1aluminum',

		'adrenaline(\\b)': '$1adrenalin$2',

		'annexe(\\b)': '$1annex$2',

		'artefact': '$1artifact',

		'(ana|breatha|cata|hydro|para)lys(e|ing)': '$1$2lyz$3',

		'bau(lk)': '$1ba$2',

//		'bestsell': '$1best-sell',  //disabled 24/04/24 following comment;word in OED

		'diarrhoea': '$1diarrhea',

		'(de|of)fence': '$1$2fense',

		'per cent(\\b)': '$1percent$2',

		'licence': '$1license',

		'(licen)c(ing|ed)': '$1$2s$3',

		'(practi)s(ing|ed)': '$1$2c$3',

		'furore(\\b)': '$1furor$2',

		'(light-|dark-|\\b)grey': '$1$2gray',

		'guerilla': '$1guerrilla',

		'jewellery': '$1jewelry',

		'manoeuvr(ab|ed?|ing)': '$1maneuver$2',

		'louv(red|ring)': '$1louve$2',

		'louvre': '$1louver',

		'paed(iatric|ophil)': '$1ped$2',

		'encyclopaedi(a|c)': '$1encyclopedi$2',

		'sceptic': '$1skeptic',

		'mollusc': '$1mollusk',

		'vapour(s?\\b)': '$1vapor$2',

		'liquorice': '$1licorice',



		// composite words

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



		// oe/ae words

		'gynaeco': '$1gyneco',

		'haemo(globin|ly|phil|rr)': '$1hemo$2',

		'orthopaedic': '$1orthopedic',

//		'archaeo': '$1archeo', // disabling per user:coffeeandcrumbs (21/8/2018)

		'palaeonto': '$1paleonto',

		'oenology': '$1enology',

		'oesophag': '$1esophag',

		'oestrogen': '$1estrogen',

		'(an)aesthe(sia|tic|tist)': '$1$2esthe$3',

		'anaesthetist': '$1anesthesiologist',

		'homoeopath': '$1homeopath',

//		'mediaeval(\\b)': '$1medieval$2',

		'omelette(\\b)': '$1omelet$2',

		'rigour(\\b)': '$1rigor$2',

		'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',



		// 'f' words

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCON



		'any more': '$1anymore',

		'speciality': '$1specialty',



		// non-redundant e

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



		// '~our' words

		'(arm|clam|harb|neighb|rum|savi?|tum)our(ed|ful|ing|less|ly|s|\\b)': '$1$2or$3', // removing "glamour" per user:coffeeandcrumbs (21/8/2018)

		'(arm|sav)our(ies|y|s|\\b)': '$1$2or$3',

		'(cand|hum|od)our((?:ful|less)(?:ly|)|\\b)': '$1$2or$3',

		'neighbourhood': '$1neighborhood',

		'behaviour(al|s|\\b)': '$1behavior$2',

		'favour(abl[ey]|ed|i[\\w]*|s|\\b)': '$1favor$2',

		'honour(abl[ey]|ed|ing|s|\\b)': '$1honor$2',

		'(endeav|lab)our(e[dr]|ing|s|\\W)': '$1$2or$3',

		'moul(dy?|t)(ed|ing|s|\\W)': '$1mol$2$3',



		// '~re~' words

		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)re(s?\\W)': '$1$2er$3',

		'(centi|kilo|micro|milli|nano|-|hundred\\s|\\d\\s)metre': '$1$2meter',

		'(centi|milli|deci|pico|hecto|\\b)litre(s?\\b)': '$1$2liter$3',

		'(peda|mono|syna)gogue(s?\\W)': '$1$2gog$3', //rem "demagog"

//		'(\\W[a-zA-Z]{3,12}[^s\\b])iz(e[drs]?|ation(s|al|)|ing)': '$1$2is$3',



		// '~l' words where the 'l' doubles as past and present participle

		'((?:\\w{3,9}[-–—]|)(?:fu|pan))ell(e[dr]|ist|ing)': '$1$2el$3',

		'(bev|jew|lev|mod|rev|trav)ell(e[dr]|ing)': '$1$2el$3',

		'([a-zA-Z]{2,8}[^eglpstz ])ell(e[dr]|est|ing)(\\b)': '$1$2el$3$4', // added 'p' to avoid changing of "misspelling"

//		'(\\bexcel)((?:e[dr]|est|ing)\\b)': '$1l$2', // "excelling/excelled" is US English



		'(di|enthr|equ|initi|journ|riv|sign|tot)all(e[dr]|ing)': '$1$2al$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)our(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2or$3',

		'( [\\w\\D]*\\-)(col|flav|hum)oured': '$1$2ored',

		'([^\\w\\d\\-\\/=:])(col)our(\\W)': '$1$2or$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)re(ed|ing)': '$1$2er$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)re(ed|ing)': '$1$2er$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)re(s?\\b)': '$1$2er$3',



		// '~logu~' words

		'([^\\w\\d\\-\\/])(ana|cata|homo|mono|pro)logu(ed|ing)': '$1$2log$3', // removing "dialogue" per user:coffeeandcrumbs (21/8/2018) and epilog per User:DemonDays64

		'([^\\w\\d\\-\\/])(ana|cata|homo|mono|pro)logue(s?\\b)': '$1$2log$3', // removing "dialogue" per user:coffeeandcrumbs



		// '~l' words where the 'l' doubles as past and present participle

		'([ \\|\\[])(counc[ie])ll(e[dr]|ing|ors?)(\\b)': '$1$2l$3$4',

		'\\b([a-zA-Z]{3,})([^l])l(ful|ment)': '$1$2ll$3', //added specific quantifier – false positive with "ailment"

//		'(movie theat(er|re))': 'cinema', // disabling per user:coffeeandcrumbs



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

//		'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother',  // disabled 10 June – frequent false positives



	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous dollar sign; rem incidental intervening space

	editor.replace(/$ ?(\d)/g, '$$1');



	// reconvert special cases

}



function ohc_ENGVAR_set_variation(editor, variation) {

	ohc_ENGVAR_protect(editor);



	switch (variation) {

		case 'B':

			ohc_ENGVAR_simple_b(editor);

			ohc_ENGVAR_remove_z(editor);

			break;

		case 'O':

			ohc_ENGVAR_simple_b(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		case 'C':

			ohc_ENGVAR_simple_c(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		case 'U':

			ohc_ENGVAR_simple_a(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		default:

			return;

	}



	ohc_ENGVAR_plain(editor);

	ohc_ENGVAR_unprotect(editor);



	ohc_retask_pipes(editor);



	ohc_ENGVAR_insert_template(editor, variation);

	ohc_ENGVAR_edit_summary(editor, variation);



	editor.clickDiff();

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_remove_z(editor) {

	editor.replace(/([^\w\-.][a-z]{3,12}[^s ])iz(e[drs]?|ations?|abl[ey]|ing)(\W)/g, '$1is$2$3');

	editor.replace(/([Oo]rgan|[Rr]ecog)iz(e(?:[drs]?|rs)|ations)(\W)/g, '$1is$2$3');

	editor.replace(/(empha)siz(e|ing)/g, '$1sis$2');

	editor.replace(/(synthe)siz(e[ds]|ing)/g, '$1sis$2');



	editor.replace(/(burgl)ari[sz](ed?|ing)/g, '$1$2');



}



function ohc_ENGVAR_restore_z(editor) {

	// converts 's-words' into 'z-words'

//	editor.replace(/([\w])r([eo])mis(e|ing)/g, '$1r$2m♫is$3'); // Premise, promise et al. //new protection below

	editor.replace(/([^\w\-.\/][a-zA-Z]{5,12})is(ations?)(\W)/g, '$1iz$2$3');

	editor.replace(/([^\w\-.\/][a-zA-Z]{0,12}(?:[aeiou][^aeiosuw]|ph|rd|thes))is(e[drs]?|ing)(\W)/g, '$1iz$2$3');

	editor.replace(/([Oo]rgan|[Rr]ecogn)is(e(?:[drs]?|rs)|ations)(\W)/g, '$1iz$2$3');

}



/** ------------------------------------------------------------------------ **/



function ohc_imperial_units(editor) {

	// measurements and perception

//	editor.replace(/\[\[(foobar)(s|)]]/gi, '$1$2');



	// Template:{{convert}}

//	editor.replace(/({{convert)(\s*\|)/gi, '$1/flip$2'); // rem linking within convert template (area) // needs resolving

	editor.replace(/({{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|disp=flip'); // rem linking within convert template (area)

	editor.replace(/({{convert\|[\d.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|)(?:k?m)(?:2|3|)|hectare))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*?(?=})/gi, '$1$2|disp=flip'); // putting metres and hectares behind

	editor.replace(/({{convert\|[\d.,]+?\|(?:hectares?|ha)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip hectares

	editor.replace(/({{convert\|[\d.,]+?\|(?:kmh|km\/h)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip kmh

	editor.replace(/({{convert\|[\d.,]+?\|(?:to|by|x)(?:\|[\d.,]+?\|(?:[mck]?m))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (input ranges only)

	editor.replace(/({{convert\|[\d.,]+?\|nmi)(2|)(\|mi\2 km\2|\|km\2 mi\2|)(?=[|}])/gi, '$1$2|mi$2 km$2'); // putting miles first in nautical mile conversion

	editor.replace(/({{convert\|[\d.,]+?\|(?:kg|°?F))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]+?)*(?=})/gi, '$1$2|disp=flip'); // putting pounds and °C first

//	editor.replace(/({{(?:in|ft|mi|[mck]?m)[23]?\sto\s(?:in|ft|mi|[mck]?m)[23]?[^}]*?)\|wiki=(?:yes|no)/gi, '$1');



	// manipulating "|disp=flip" parameter where already "flipped"

	editor.replace(/({{convert\|[\d.,]+?\|\w{1,4}(?:\|\w{1,4}|)?(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(\|disp=flip)(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)+(?=})/gi, '$1$3$2'); // reordering flipping parameter within convert template (last parameter)

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:in|ft|yd|mi|acre)(?:2|3|))(?:\|(?:sq|cu|)(?:[mck]?m|ha)(?:2|3|))?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

	editor.replace(/({{convert\|[\d.,]+?\|(?:mi|miles?|mph)(?:\|kph|km\/h|)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

}



function ohc_international_units(editor) {

	// measurements and perception

//	editor.replace(/\[\[(foobar)(s|)]]/gi, '$1$2');



	// Template:{{convert}}

//	editor.replace(/({{convert)(\s*\|)/gi, '$1/flip$2'); // rem linking within convert template (area) // needs resolving

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:in|ft|yd|mi)(?:2|3|))(?:\|(?:sq|cu|)(?:[mck]?m)(?:2|3|))?(\|\d)?(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (area)

	editor.replace(/({{convert\|[\d.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|)mi(?:2|3|)|acre))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*?(?=})/gi, '$1$2|disp=flip'); // putting metres and hectares behind

//	editor.replace(/({{convert\|[\d.,]+?\|(?:hectares?|ha)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip hectares

//	editor.replace(/({{convert\|[\d.,]+?\|mp[gh](?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip kmh

	editor.replace(/({{convert\|[\d.,]+?\|(?:to|by|x)(?:\|[\d.,]+?\|(?:yd|f(?:oo|)t|in))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (input ranges only)

	editor.replace(/({{convert\|[\d.,]+?\|nmi)(2|)(\|mi\2 km\2|\|km\2 mi\2|)(?=[|}])/gi, '$1$2|km$2 mi$2'); // putting miles first in nautical mile conversion

	editor.replace(/({{convert\|[\d.,]+?\|(?:lb|oz|°?F))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]+?)*(?=})/gi, '$1$2|disp=flip'); // putting pounds and °C first

//	editor.replace(/({{(?:in|ft|mi|[mck]?m)[23]?\sto\s(?:in|ft|mi|[mck]?m)[23]?[^}]*?)\|wiki=(?:yes|no)/gi, '$1');



	// manipulating "|disp=flip" parameter where already "flipped"

	editor.replace(/({{convert\|[\d.,]+?\|\w{1,4}(?:\|\w{1,4}|)?(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(\|disp=flip)(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)+(?=})/gi, '$1$3$2'); // reordering flipping parameter within convert template (last parameter)

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:[mck]?m|ha)(?:2|3|))(?:\|(?:sq|cu|)(?:in|ft|yd|mi|acre)(?:2|3|))?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

	editor.replace(/({{convert\|[\d.,]+?(?:\|kph|km\/h|)(?:\|mi|miles?|mph)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

}



/** ------------------------------------------------------------------------ **/



function ohc_retask_pipes(editor) {

	editor.replace(/([^\w\-.]\[\[)(?:(?:[a-zA-Z]+? |)[a-zA-Z]+?[^s ]i[sz]ation)\|((?:[a-zA-Z]+? |)[a-zA-Z]{3,12}[^s ]i[sz](?:e[drs]?|ations?|abl[ey]|ing))/g, '$1$2');

//	editor.replace(/(empha|synthe)siz(e|ing)/g, '$1sis$2');

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_insert_template(editor, variation) {

	// Add a template to the article identifying English variant

	// Build a string with "Month YYYY"

	var date_object = new Date();

	var month_map = 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

	var date_string = month_mapdate_object.getMonth()] + ' ' + date_object.getFullYear();



	var template_string;

	switch (variation) {

		case 'B':

			template_string = '{{EngvarB|date=' + date_string + '}}';

			break;

		case 'O':

			template_string = '{{Use Oxford spelling|date=' + date_string + '}}';

			break;

		case 'C':

			template_string = '{{Use Canadian English|date=' + date_string + '}}';

			break;

		case 'U':

			template_string = '{{Use American English|date=' + date_string + '}}';

			break;

		default:

			return;

	}



	// Matcher for every English variation template

	var template_matcher = new RegExp('{{(?:[_ ]*Template[_ ]*:)?[_ ]*(?:Use[_ ]+(?:British(?:[_ ]+\\(?(?:Oxford|IUPAC)\\)?)?|X|Hong Kong|European|Commonweal?th|Scottish|American|Canadian|Indian|Irish|Hiberno|Jamaican|Nigerian|Bangladeshi|Pakistani|Singapore(?:an)?|South African|Trinidadian|New Zealand|US|U.S.|Oxford|IUPAC)(?:(?:[_ ]+|-)English)?(?:[_ ]+Oxford)?(?:[_ ]+spelling)?|Engvar(?:Au?|Ox?|[BC])|U?BE|EB|Use BrE|En-(?:US|GB(?:-oxendict)?|CA|NZ))(?:/sandbox)?[_ ]*(?:|\\|[ ]*date[ ]*=[^{}|]*)[ ]*}}', 'gi'); //removed Australian 24/9/19



	// If not already tagged

	if (!editor.contains(template_matcher)) {

		// Prepend new template

		editor.prepend(template_string + '\r\n');

	} else {

		// Replace old template

		editor.replace(template_matcher, template_string);

	}

}



function ohc_ENGVAR_edit_summary(editor, variation) {

	// Add a tag to the summary box

	var variation_string;

	switch (variation) {

		case 'B':

			variation_string = 'EngvarB';

			break;

		case 'O':

			variation_string = 'Oxford spelling';

			break;

		case 'C':

			variation_string = 'Canadian English';

			break;

		case 'U':

			variation_string = 'American English';

			break;

		default:

			return;

	}



	editor.appendEditSummary(variation_string);

}

// </syntaxhighlight>
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.

// 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. 

// Any advice on improving the scripts are especially welcome.

// <syntaxhighlight lang=javascript>

/**

 * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.

 * @see https://meta.wikimedia.org/wiki/TemplateScript

 * @update-token [[File:Pathoschild/templatescript.js]]

 */

$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', {

	dataType: 'script',

	cache: true

}).then(function () {

	pathoschild.TemplateScript.add([

		{

			category: 'EngvarB', name: 'Flip imperial units', isMinorEdit: true, script: function (editor) {

				ohc_imperial_units(editor);

			}

		},

		{

			category: 'EngvarB', name: 'Flip international units', isMinorEdit: true, script: function (editor) {

				ohc_international_units(editor);

			}

		},

		{

			category: 'EngvarB', name: 'AMERICAN', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "U");

			}

		},

		{

			category: 'EngvarB', name: 'COMMONWEALTH', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "B");

			}

		},

		{

			category: 'EngvarB', name: 'OXFORD', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "O");

			}

		},

		{

			category: 'EngvarB', name: 'CANADIAN', isMinorEdit: true, script: function (editor) {

				ohc_ENGVAR_set_variation(editor, "C");

			}

		}

	]);

});

// </nowiki>



/** ------------------------------------------------------------------------ **/



// PROTECTION FROM STRING SUBSTITUTION

var protected_map;



function ohc_ENGVAR_protect(editor) {

	// protects categories, templates, link pipings, quotes, etc

	// the sensitive part is stored and replaced with a unique identifier,

	// which is later replaced with the stored part.

	var text = editor.get();

	protected_map = [];



	var replace_string = function (match) {

		protected_map.push(match);

		return '⍌' + (protected_map.length - 1) + '⍍';

	};

	var protect_string = function (string) {

		text = text.replace(string, replace_string);

	};



//	protect_string(/(pre)(string)(post)/gi); // template

	protect_string(/(<blockquote>)(.*?)(<\/blockquote>)/gi);

	protect_string(/({\| *class *= *"wikitable *")([\S\s]*?)(\|})/gi);

	protect_string(/(<table[^<>]*?>)([^<>]*)(<\/table>)/gi);

	protect_string(/(<timeline[^<>]*?>)([^<>]*)(<\/timeline>)/gi);

	protect_string(/(<span\sstyle\s*=[\"])(color)([^>]*>)/gi);

	protect_string(/(=\s*)(color)(\s*:#)/gi);

	protect_string(/(\{)((?:meta |font |)color)([^|]*\|)/gi); //color box templates

	protect_string(/([\s;:\'\"]+)(color)([\s;:\'\"]\w)/gi);

	protect_string(/({{\w*\scolor\|)([^|=\[\]]*)(}})/gi); // 



	protect_string(/(<\/?[ ]*)(center)([ ]*>)/gi); // <center> tags

	protect_string(/(align\/?[ ]*=\/?[ ]*[ "'][ ]*)(center)([ ]*[ "'])/gi); // align="center" in tables



	protect_string(/(\{\{)(Medical cases chart\/bar colors)([^\}]+\}\})/gi);

	protect_string(/(\{\{)(bar percent)(\|[^\}]+\}\})/gi);



	protect_string(/(<ref[^<>]*?>)([^<>]*)(<\/ref>)/gi);

	protect_string(/(<ref name=)([^<>]*)(\/>)/gi);

	protect_string(/([\s(]["“])([^"“”\n]*)(["”])/gi); // double quotes

	protect_string(/({[\w ]{0,12}(?:quot[^|]{1,7}\s?|sic|(?:not a |)typo|as written)\|)([^}]+)(})/gi);



	protect_string(/((?:Category|File|Image):)([^|\]]*)([|\]])/gi); // cats, images

	protect_string(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _](?:map|name)|img|pic)\s*=)([^|}]*)([|}])/gi); // images within templates infoboxes etc

	protect_string(/(cite[ _]encyclopedia\s*\|)/gi);

	protect_string(/((?:url)\s*=)([^|}]*)([|}])/gi); // urls within templates infoboxes etc

	protect_string(/(\[(?:https?:|ftp:))([^\]]*)(])/gi);

	protect_string(/(\[(?:https?:|ftp:))([^\s\]]*)([\s\]])/gi);

	protect_string(/(\[\[)([^|\]]*)(\|)/gi); // pipings

	protect_string(/({(?:See ?also|Main))(\|[^}]*)(})/gi); // see also and main templates

	protect_string(/({{(?:external|wide )image\s?\|)([^}]+)(})/gi);

	protect_string(/({{(?:harvnb|wikisource)\|)([^}]+)(})/gi);

	protect_string(/({{)((?:NYT|WSJ)topic\|[^}]*)(}})/gi);

	protect_string(/({{\w*)([^|=\[\]}]*)(}})/gi); // templates

	protect_string(/({Infobox )((?:[\w ]*)organization)(\s+)/gi);

	protect_string(/({Infobox )((?:[\w]* )artifact)(\s+)/gi);

	

// parameters

	protect_string(/(\|)(\s*colors(?:_label|)\s*)(=)/gi);

	protect_string(/(\|)(\s*background color\s*)(=)/gi);

	protect_string(/([\|\!]\s*style\s*=[^|:"]*)"[^|]*(color|center|gray)([^|]*\|)/gi);

	protect_string(/(\|)(\s*organizations?\s*)(=)/gi);

	protect_string(/(\\|\/?[ ]*)(center)([ ]*\\|)/gi); // |center| in files

	protect_string(/(\|)(\s*analog\s*)(=)/gi);

	protect_string(/(\|)(\s*licen[cs]e ?(?:place|date|)\s*)(=)/gi);

	protect_string(/(\|\s*)(cleanup|color|coordinates\w*)([ ]*=)/gi); // parameters within infoboxes

	protect_string(/(\|(?:[^=|{}]*))(cleanup|encyclopa?edia|enroll?ment|honorific_prefix|honors|lockup\w{1,4}|organi[sz]ation|catalog\snumber)(\s*=)/g);

	protect_string(/(\|\s*)(encyclopedia|\w*colors|(?:org|rom)anization|license)(\s?=)/gi);

	protect_string(/(\|\s*)(local[ _]authority)(\s?=)/gi);

	protect_string(/(\|\s*)([Ss]hip[ _](?:armou?r|honou?rs))([ ]*?=)/g);

	protect_string(/(\|\s*title\s?=)([^|\]]*)(\|)/gi);



//white list

	protect_string(/(Back in the U.S.S.R.)/g); // title of work

	protect_string(/(Born in the U.S.A.)/g); // title of work

	protect_string(/(Dear Mom|Serial Mom)/g); // title of work

	protect_string(/(derailment)/gi);

	protect_string(/(Traveling Wilburys?|Rockerfeller)/g); // proper noun

	protect_string(/(to license)/gi);  // verb

	protect_string(/(improvis)/gi);

	protect_string(/(non-cooperation)/gi);

	protect_string(/(Organisation for Economic Co-operation and Development)/gi);

	protect_string(/(pr[eo]mis(?:e|ing)|paradise)/gi);

	protect_string(/(solid gr[ae]y)/gi);

	protect_string(/(rigor mortis)/gi);

	protect_string(/(revis)/gi);

	protect_string(/((?:analy|peni)ses)/gi);

	protect_string(/(World Health Organization)/gi);



	// protect from hyphenation

	protect_string(/(\breed(?:|s)[^aeiou]|[Rr]eegan)/g);



	// whitelisting: protect from doubling of "L" 

	protect_string(/(conceal|adrenaline|rebel|Rockerfeller)/gi);



	// whitelisting: protect from function ohc_ENGVAR_restore_z

	protect_string(/(?:ar|de[mv]|enterpr|improv|parad|prec|prom|rev|surpr|treat|telev)(?:ise?[drs]?|ing)/gi);

	protect_string(/(?: anti)(?:c|dote|mon|path|q)/g);

	protect_string(/(denise|excell(ed|ing)|rockerfeller)/gi);

	protect_string(/(?:(?:mercury|nobel)pri|imagesi|picsi)(?:ze)/g);



	editor.set(text);

}



function ohc_ENGVAR_unprotect(editor) {

	// restore words protected at runtime

	editor.replace(/[♫]/g, '');



	// restore words protected beforehand

	var text = editor.get();



	var matches;

	do {

		text = text.replace(/⍌([0-9]+)⍍/g, function (match, index) {

			return protected_mapindex];

		});

		matches = text.match(/⍌([0-9]+)⍍/g);

	} while (matches !== null && matches.length > 0);



	editor.set(text);

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_plain(editor) {

	// per https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style

	// redundancies

	editor.replace(/B\.B\.C\./g, 'BBC');

	editor.replace(/U\.S\.A\./g, 'U.S.');

	editor.replace(/U\.S\.S\.R\./g, 'USSR');

	editor.replace(/U\.K\./g, 'UK');

	editor.replace(/E\.U\./g, 'EU');

	editor.replace(/(fill )out/gi, '$1in');



	// agrammatical

	editor.replace(/(comprised )of /gi, '$1');



	// old-fashioned

	editor.replace(/(whil)st /gi, '$1e ');

	editor.replace(/(among)st /gi, '$1 ');



		// hyphenation

//	editor.replace(/(co)(ordinat(e\b|ing|ion))/g, '$1-$2');

//	editor.replace(/\b(re)(e\w[aeiou]\w{4,})/gi, '$1-$2');

//	editor.replace(/\b(over|under)(r\w{4,})/gi, '$1-$2');



	// capitalisation

	// rem geographical regions - too many false positives

//	editor.replace(/(local )authority/g, '$1council');



	editor.replace(/w(estern European Union)/g, 'W$1');

	editor.replace(/(New )s(outh Wales)/g, '$1S$2');

}



function ohc_ENGVAR_simple_b(editor) {

	var table = {

		'aging': '$1ageing',

		'aluminum': '$1aluminium',

		'adrenalin(\\b)': '$1adrenaline$2',

		'annex(\\b)': '$1annexe$2',

		'artifact': '$1artefact',

		'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',

//		'bestsell': '$1best-sell',  //disabled 24/04/24 following comment;word in OED

		'ba(lk)': '$1u$2',

		'diarrhea': '$1diarrhoea',

		'(de|of)fense': '$1$2fence',

		'license': '$1licence',

		'(licen)c(ing|ed)': '$1$2s$3',

		'percent(\\b)': '$1per cent$2',

		'plow(s|ing|\\b)': '$1plough$2',

		'(practi)c(ing|ed)': '$1$2s$3',

		'furor(\\b)': '$1furore$2',

		'(light-|dark-|\\b)gray': '$1$2grey',

		'guerilla': '$1guerrilla',

		'jewelry': '$1jewellery',

		'(judg)(ment)': '$1$2e$3',

		'maneuver(ab|ed|ing)': '$1manoeuvr$2',

		'maneuver': '$1manoeuvre',

		'louve(red|ring)': '$1louv$2',

		'(louv|somb)er': '$1$2re',

		'ped(iatric|ophil)': '$1paed$2',

		'encyclopedi(a|c)': '$1encyclopaedi$2',

		'skeptic': '$1sceptic',

		'mollusk': '$1mollusc',

		'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

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCOM



		'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?|tum)or(ed|ful|ing|less|ly|s|\\b)': '$1$2our$3',

		'(arm|sav)or(ies|y|s|\\b)': '$1$2our$3',

		'(cand|hum|od)or((?:ful|less)(?:ly|)|\\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(dy?|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',

		'(\b(?:[2-9]|\d{2,3}|half|quarter|two|three|four|five|six|seven|eight|nine|ten)\b) (liter|(?:kilo|)meter)': '$1$2re$3',

		'(centi|kilo|micro|milli|nano|-|hundred\\s|\\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',

		'(\b(?:[2-9]|\d{2,3}|one|two|three|four|five|six|seven|eight|nine|ten)\b) story': '$1-storey',

//		'(\\W[a-zA-Z]{3,12}[^s\\b])iz(e[drs]?|ation(s|al|)|ing)': '$1$2is$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-zA-Z]{2,8}[^eglpstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', // added 'p' to avoid changing of "misspelling"

		'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)or(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2our$3',

		'( [\\w\\D]*\\-)(col|flav|hum)ored': '$1$2oured',

		'([^\\w\\d\\-\\/=:])(col)or(\\W)': '$1$2our$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)': '$1$2re$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(s?\\b)': '$1$2re$3',



		// '~logu~' words

		'([^\\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',

		'\\b([a-zA-Z]*)ll(ful|ment)': '$1l$2',

		'(movie theat(er|re))': 'cinema',



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

//		'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother',  // disabled 10 June – frequent false positives

		'([ \\|\\[\\*])sidewalk': '$1pavement'

	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous pound sign; rem incidental intervening space

	editor.replace(/₤ ?(\d)/g, '£$1');

	// reconvert special cases



	editor.replace(/\b(vice) (president|chairman|chancellor|minister)/gi, '$1-$2');

}



function ohc_ENGVAR_simple_c(editor) {

	var table = {

		'ageing': '$1aging', 	

		'aluminum': '$1aluminium',

		'adrenalin(\\b)': '$1adrenaline$2',

		'annex(\\b)': '$1annexe$2',

		'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',

		'(de|of)fense': '$1$2fence',

		'percent(\\b)': '$1per cent$2',

		'license': '$1licence',

		'(licen)c(ing|ed)': '$1$2s$3',

		'(practi)s(ing|ed)': '$1$2c$3',

		'furor(\\b)': '$1furore$2',

		'(light-|dark-|\\b)gray': '$1$2grey',

		'guerilla': '$1guerrilla',

		'maneuver(ab|ed|ing)': '$1manoeuvr$2',

		'maneuver': '$1manoeuvre',

		'louve(red|ring)': '$1louv$2',

		'louver': '$1louvre',

		'encyclopaedi(a|c)': '$1encyclopedi$2',

		'skeptic': '$1sceptic',

		'mollusk': '$1mollusc',

		'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

		'anaesthesiologist': '$1anesthetist',

		'(an)aesthe(sia|tic|tist)': '$1$2esthe$3',

		'archaeo': '$1archeo',

		'diarrhoea': '$1diarrhea',

		'foetus': '$1fetus',

		'gyneco': '$1gynaeco',

		'haemo(globin|ly|phil|rr)': '$1hemo$2',

		'orthopaedic': '$1orthopedic',

		'oenology': '$1enology',

		'oesophag': '$1esophag',

		'oestrogen': '$1estrogen',

		'homoeopath': '$1homeopath',

		'omelet(\\b)': '$1omelette$2',

		'paed(iatric|ophil)': '$1ped$2',

		'palaeonto': '$1paleonto',

		'rigor(\\b)': '$1rigour$2',

		'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',



		// 'f' words

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCON



		'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?|tum)or(ed|ful|ing|less|ly|s|\\b)': '$1$2our$3',

		'(arm|sav)or(ies|y|s|\\b)': '$1$2our$3',

		'(cand|hum|od)or((?:ful|less)(?:ly|)|\\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(dy?|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|-|hundred\\s|\\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-zA-Z]{2,8}[^eglpstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', // added 'p' to avoid changing of "misspelling"

		'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)or(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2our$3',

		'( [\\w\\D]*\\-)(col|flav|hum)ored': '$1$2oured',

		'([^\\w\\d\\-\\/=:])(col)or(\\W)': '$1$2our$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(ed|ing)': '$1$2r$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)er(s?\\b)': '$1$2re$3',



		// '~logu~' words

		'([^\\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',

//		'(movie theat(er|re))': 'cinema',

		'\\b([a-z]*)ll(ful|ment)': '$1l$2'

	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous dollar sign; rem incidental intervening space

	editor.replace(/$ ?(\d)/g, '$$1');

	//editor.replace(/rigour mortis/g, 'rigor mortis');

	// reconvert special cases

}



function ohc_ENGVAR_simple_a(editor) {

	var table = {

		'ageing': '$1aging',

		'aluminium': '$1aluminum',

		'adrenaline(\\b)': '$1adrenalin$2',

		'annexe(\\b)': '$1annex$2',

		'artefact': '$1artifact',

		'(ana|breatha|cata|hydro|para)lys(e|ing)': '$1$2lyz$3',

		'bau(lk)': '$1ba$2',

//		'bestsell': '$1best-sell',  //disabled 24/04/24 following comment;word in OED

		'diarrhoea': '$1diarrhea',

		'(de|of)fence': '$1$2fense',

		'per cent(\\b)': '$1percent$2',

		'licence': '$1license',

		'(licen)c(ing|ed)': '$1$2s$3',

		'(practi)s(ing|ed)': '$1$2c$3',

		'furore(\\b)': '$1furor$2',

		'(light-|dark-|\\b)grey': '$1$2gray',

		'guerilla': '$1guerrilla',

		'jewellery': '$1jewelry',

		'manoeuvr(ab|ed?|ing)': '$1maneuver$2',

		'louv(red|ring)': '$1louve$2',

		'louvre': '$1louver',

		'paed(iatric|ophil)': '$1ped$2',

		'encyclopaedi(a|c)': '$1encyclopedi$2',

		'sceptic': '$1skeptic',

		'mollusc': '$1mollusk',

		'vapour(s?\\b)': '$1vapor$2',

		'liquorice': '$1licorice',



		// composite words

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



		// oe/ae words

		'gynaeco': '$1gyneco',

		'haemo(globin|ly|phil|rr)': '$1hemo$2',

		'orthopaedic': '$1orthopedic',

//		'archaeo': '$1archeo', // disabling per user:coffeeandcrumbs (21/8/2018)

		'palaeonto': '$1paleonto',

		'oenology': '$1enology',

		'oesophag': '$1esophag',

		'oestrogen': '$1estrogen',

		'(an)aesthe(sia|tic|tist)': '$1$2esthe$3',

		'anaesthetist': '$1anesthesiologist',

		'homoeopath': '$1homeopath',

//		'mediaeval(\\b)': '$1medieval$2',

		'omelette(\\b)': '$1omelet$2',

		'rigour(\\b)': '$1rigor$2',

		'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',



		// 'f' words

		//'(S|s)ulfur': '$1$2ulphur',  //disabled per WP:ARTCON



		'any more': '$1anymore',

		'speciality': '$1specialty',



		// non-redundant e

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



		// '~our' words

		'(arm|clam|harb|neighb|rum|savi?|tum)our(ed|ful|ing|less|ly|s|\\b)': '$1$2or$3', // removing "glamour" per user:coffeeandcrumbs (21/8/2018)

		'(arm|sav)our(ies|y|s|\\b)': '$1$2or$3',

		'(cand|hum|od)our((?:ful|less)(?:ly|)|\\b)': '$1$2or$3',

		'neighbourhood': '$1neighborhood',

		'behaviour(al|s|\\b)': '$1behavior$2',

		'favour(abl[ey]|ed|i[\\w]*|s|\\b)': '$1favor$2',

		'honour(abl[ey]|ed|ing|s|\\b)': '$1honor$2',

		'(endeav|lab)our(e[dr]|ing|s|\\W)': '$1$2or$3',

		'moul(dy?|t)(ed|ing|s|\\W)': '$1mol$2$3',



		// '~re~' words

		'(calib|fib|goit|lust|mit|nit|och|reconnoit|sab|saltpet|spect|theat|tit)re(s?\\W)': '$1$2er$3',

		'(centi|kilo|micro|milli|nano|-|hundred\\s|\\d\\s)metre': '$1$2meter',

		'(centi|milli|deci|pico|hecto|\\b)litre(s?\\b)': '$1$2liter$3',

		'(peda|mono|syna)gogue(s?\\W)': '$1$2gog$3', //rem "demagog"

//		'(\\W[a-zA-Z]{3,12}[^s\\b])iz(e[drs]?|ation(s|al|)|ing)': '$1$2is$3',



		// '~l' words where the 'l' doubles as past and present participle

		'((?:\\w{3,9}[-–—]|)(?:fu|pan))ell(e[dr]|ist|ing)': '$1$2el$3',

		'(bev|jew|lev|mod|rev|trav)ell(e[dr]|ing)': '$1$2el$3',

		'([a-zA-Z]{2,8}[^eglpstz ])ell(e[dr]|est|ing)(\\b)': '$1$2el$3$4', // added 'p' to avoid changing of "misspelling"

//		'(\\bexcel)((?:e[dr]|est|ing)\\b)': '$1l$2', // "excelling/excelled" is US English



		'(di|enthr|equ|initi|journ|riv|sign|tot)all(e[dr]|ing)': '$1$2al$3' // appalled/appalling is also American

	};



	for (var word in table) {

		try {

			editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), tableword]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + tableword + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	var table2 = {

		// '~our' words

		'([ \\|\\[\\*])(col|flav|hum)our(ed|ful|fully|ings?|less|lessly|s\\W)': '$1$2or$3',

		'( [\\w\\D]*\\-)(col|flav|hum)oured': '$1$2ored',

		'([^\\w\\d\\-\\/=:])(col)our(\\W)': '$1$2or$3',



		// '~re~' words

		'([^\\w\\d\\-\\/=])(calib|fib|goit|lust|mit|nit|reconnoit|sab|saltpet|spect|theat|tit)re(ed|ing)': '$1$2er$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)re(ed|ing)': '$1$2er$3',

		'([^\\w\\d\\-\\/=:])(cent|epicent|recent)re(s?\\b)': '$1$2er$3',



		// '~logu~' words

		'([^\\w\\d\\-\\/])(ana|cata|homo|mono|pro)logu(ed|ing)': '$1$2log$3', // removing "dialogue" per user:coffeeandcrumbs (21/8/2018) and epilog per User:DemonDays64

		'([^\\w\\d\\-\\/])(ana|cata|homo|mono|pro)logue(s?\\b)': '$1$2log$3', // removing "dialogue" per user:coffeeandcrumbs



		// '~l' words where the 'l' doubles as past and present participle

		'([ \\|\\[])(counc[ie])ll(e[dr]|ing|ors?)(\\b)': '$1$2l$3$4',

		'\\b([a-zA-Z]{3,})([^l])l(ful|ment)': '$1$2ll$3', //added specific quantifier – false positive with "ailment"

//		'(movie theat(er|re))': 'cinema', // disabling per user:coffeeandcrumbs



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

//		'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother',  // disabled 10 June – frequent false positives



	};



	for (word in table2) {

		try {

			editor.replace(new RegExp(word, 'g'), table2word]);

		} catch (err) {

			alert('There was an error when changing "' + word + '" => "' + table2word + '".\n\n'

				+ 'Error: ' + err.message + '\n\n'

				+ 'Click OK to continue.\n\n');

		}

	}



	// remove US spelling from {{convert}} template output

	editor.replace(/({{convert\|[^}]*)\|(?:sp|spell)[ ]*=[ ]*us/gi, '$1');

	editor.replace(/({{(?:in|ft|yd|[mck]?m)[23]?[ ]+to[ ]+[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');

	editor.replace(/({{(?:pd|pop[ ]+density[ ])+(?:km|mi)2[^}]*)\|(?:sp|spell)[ ]*=[ ]*(?:American|us)/gi, '$1');



	// remove ambiguous dollar sign; rem incidental intervening space

	editor.replace(/$ ?(\d)/g, '$$1');



	// reconvert special cases

}



function ohc_ENGVAR_set_variation(editor, variation) {

	ohc_ENGVAR_protect(editor);



	switch (variation) {

		case 'B':

			ohc_ENGVAR_simple_b(editor);

			ohc_ENGVAR_remove_z(editor);

			break;

		case 'O':

			ohc_ENGVAR_simple_b(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		case 'C':

			ohc_ENGVAR_simple_c(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		case 'U':

			ohc_ENGVAR_simple_a(editor);

			ohc_ENGVAR_restore_z(editor);

			break;

		default:

			return;

	}



	ohc_ENGVAR_plain(editor);

	ohc_ENGVAR_unprotect(editor);



	ohc_retask_pipes(editor);



	ohc_ENGVAR_insert_template(editor, variation);

	ohc_ENGVAR_edit_summary(editor, variation);



	editor.clickDiff();

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_remove_z(editor) {

	editor.replace(/([^\w\-.][a-z]{3,12}[^s ])iz(e[drs]?|ations?|abl[ey]|ing)(\W)/g, '$1is$2$3');

	editor.replace(/([Oo]rgan|[Rr]ecog)iz(e(?:[drs]?|rs)|ations)(\W)/g, '$1is$2$3');

	editor.replace(/(empha)siz(e|ing)/g, '$1sis$2');

	editor.replace(/(synthe)siz(e[ds]|ing)/g, '$1sis$2');



	editor.replace(/(burgl)ari[sz](ed?|ing)/g, '$1$2');



}



function ohc_ENGVAR_restore_z(editor) {

	// converts 's-words' into 'z-words'

//	editor.replace(/([\w])r([eo])mis(e|ing)/g, '$1r$2m♫is$3'); // Premise, promise et al. //new protection below

	editor.replace(/([^\w\-.\/][a-zA-Z]{5,12})is(ations?)(\W)/g, '$1iz$2$3');

	editor.replace(/([^\w\-.\/][a-zA-Z]{0,12}(?:[aeiou][^aeiosuw]|ph|rd|thes))is(e[drs]?|ing)(\W)/g, '$1iz$2$3');

	editor.replace(/([Oo]rgan|[Rr]ecogn)is(e(?:[drs]?|rs)|ations)(\W)/g, '$1iz$2$3');

}



/** ------------------------------------------------------------------------ **/



function ohc_imperial_units(editor) {

	// measurements and perception

//	editor.replace(/\[\[(foobar)(s|)]]/gi, '$1$2');



	// Template:{{convert}}

//	editor.replace(/({{convert)(\s*\|)/gi, '$1/flip$2'); // rem linking within convert template (area) // needs resolving

	editor.replace(/({{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|disp=flip'); // rem linking within convert template (area)

	editor.replace(/({{convert\|[\d.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|)(?:k?m)(?:2|3|)|hectare))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*?(?=})/gi, '$1$2|disp=flip'); // putting metres and hectares behind

	editor.replace(/({{convert\|[\d.,]+?\|(?:hectares?|ha)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip hectares

	editor.replace(/({{convert\|[\d.,]+?\|(?:kmh|km\/h)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip kmh

	editor.replace(/({{convert\|[\d.,]+?\|(?:to|by|x)(?:\|[\d.,]+?\|(?:[mck]?m))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (input ranges only)

	editor.replace(/({{convert\|[\d.,]+?\|nmi)(2|)(\|mi\2 km\2|\|km\2 mi\2|)(?=[|}])/gi, '$1$2|mi$2 km$2'); // putting miles first in nautical mile conversion

	editor.replace(/({{convert\|[\d.,]+?\|(?:kg|°?F))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]+?)*(?=})/gi, '$1$2|disp=flip'); // putting pounds and °C first

//	editor.replace(/({{(?:in|ft|mi|[mck]?m)[23]?\sto\s(?:in|ft|mi|[mck]?m)[23]?[^}]*?)\|wiki=(?:yes|no)/gi, '$1');



	// manipulating "|disp=flip" parameter where already "flipped"

	editor.replace(/({{convert\|[\d.,]+?\|\w{1,4}(?:\|\w{1,4}|)?(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(\|disp=flip)(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)+(?=})/gi, '$1$3$2'); // reordering flipping parameter within convert template (last parameter)

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:in|ft|yd|mi|acre)(?:2|3|))(?:\|(?:sq|cu|)(?:[mck]?m|ha)(?:2|3|))?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

	editor.replace(/({{convert\|[\d.,]+?\|(?:mi|miles?|mph)(?:\|kph|km\/h|)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

}



function ohc_international_units(editor) {

	// measurements and perception

//	editor.replace(/\[\[(foobar)(s|)]]/gi, '$1$2');



	// Template:{{convert}}

//	editor.replace(/({{convert)(\s*\|)/gi, '$1/flip$2'); // rem linking within convert template (area) // needs resolving

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:in|ft|yd|mi)(?:2|3|))(?:\|(?:sq|cu|)(?:[mck]?m)(?:2|3|))?(\|\d)?(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (area)

	editor.replace(/({{convert\|[\d.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|)mi(?:2|3|)|acre))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*?(?=})/gi, '$1$2|disp=flip'); // putting metres and hectares behind

//	editor.replace(/({{convert\|[\d.,]+?\|(?:hectares?|ha)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip hectares

//	editor.replace(/({{convert\|[\d.,]+?\|mp[gh](?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // flip kmh

	editor.replace(/({{convert\|[\d.,]+?\|(?:to|by|x)(?:\|[\d.,]+?\|(?:yd|f(?:oo|)t|in))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(?=})/gi, '$1|disp=flip'); // rem linking within convert template (input ranges only)

	editor.replace(/({{convert\|[\d.,]+?\|nmi)(2|)(\|mi\2 km\2|\|km\2 mi\2|)(?=[|}])/gi, '$1$2|km$2 mi$2'); // putting miles first in nautical mile conversion

	editor.replace(/({{convert\|[\d.,]+?\|(?:lb|oz|°?F))(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]+?)*(?=})/gi, '$1$2|disp=flip'); // putting pounds and °C first

//	editor.replace(/({{(?:in|ft|mi|[mck]?m)[23]?\sto\s(?:in|ft|mi|[mck]?m)[23]?[^}]*?)\|wiki=(?:yes|no)/gi, '$1');



	// manipulating "|disp=flip" parameter where already "flipped"

	editor.replace(/({{convert\|[\d.,]+?\|\w{1,4}(?:\|\w{1,4}|)?(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)(\|disp=flip)(\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)+(?=})/gi, '$1$3$2'); // reordering flipping parameter within convert template (last parameter)

	editor.replace(/({{convert\|[\d.,]+?\|(?:(?:sq|cu|)(?:[mck]?m|ha)(?:2|3|))(?:\|(?:sq|cu|)(?:in|ft|yd|mi|acre)(?:2|3|))?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

	editor.replace(/({{convert\|[\d.,]+?(?:\|kph|km\/h|)(?:\|mi|miles?|mph)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^|}]*)*)\|disp=flip(?=})/gi, '$1$2'); // rem flipping within convert template (Imperial, sq and cubed)

}



/** ------------------------------------------------------------------------ **/



function ohc_retask_pipes(editor) {

	editor.replace(/([^\w\-.]\[\[)(?:(?:[a-zA-Z]+? |)[a-zA-Z]+?[^s ]i[sz]ation)\|((?:[a-zA-Z]+? |)[a-zA-Z]{3,12}[^s ]i[sz](?:e[drs]?|ations?|abl[ey]|ing))/g, '$1$2');

//	editor.replace(/(empha|synthe)siz(e|ing)/g, '$1sis$2');

}



/** ------------------------------------------------------------------------ **/



function ohc_ENGVAR_insert_template(editor, variation) {

	// Add a template to the article identifying English variant

	// Build a string with "Month YYYY"

	var date_object = new Date();

	var month_map = 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

	var date_string = month_mapdate_object.getMonth()] + ' ' + date_object.getFullYear();



	var template_string;

	switch (variation) {

		case 'B':

			template_string = '{{EngvarB|date=' + date_string + '}}';

			break;

		case 'O':

			template_string = '{{Use Oxford spelling|date=' + date_string + '}}';

			break;

		case 'C':

			template_string = '{{Use Canadian English|date=' + date_string + '}}';

			break;

		case 'U':

			template_string = '{{Use American English|date=' + date_string + '}}';

			break;

		default:

			return;

	}



	// Matcher for every English variation template

	var template_matcher = new RegExp('{{(?:[_ ]*Template[_ ]*:)?[_ ]*(?:Use[_ ]+(?:British(?:[_ ]+\\(?(?:Oxford|IUPAC)\\)?)?|X|Hong Kong|European|Commonweal?th|Scottish|American|Canadian|Indian|Irish|Hiberno|Jamaican|Nigerian|Bangladeshi|Pakistani|Singapore(?:an)?|South African|Trinidadian|New Zealand|US|U.S.|Oxford|IUPAC)(?:(?:[_ ]+|-)English)?(?:[_ ]+Oxford)?(?:[_ ]+spelling)?|Engvar(?:Au?|Ox?|[BC])|U?BE|EB|Use BrE|En-(?:US|GB(?:-oxendict)?|CA|NZ))(?:/sandbox)?[_ ]*(?:|\\|[ ]*date[ ]*=[^{}|]*)[ ]*}}', 'gi'); //removed Australian 24/9/19



	// If not already tagged

	if (!editor.contains(template_matcher)) {

		// Prepend new template

		editor.prepend(template_string + '\r\n');

	} else {

		// Replace old template

		editor.replace(template_matcher, template_string);

	}

}



function ohc_ENGVAR_edit_summary(editor, variation) {

	// Add a tag to the summary box

	var variation_string;

	switch (variation) {

		case 'B':

			variation_string = 'EngvarB';

			break;

		case 'O':

			variation_string = 'Oxford spelling';

			break;

		case 'C':

			variation_string = 'Canadian English';

			break;

		case 'U':

			variation_string = 'American English';

			break;

		default:

			return;

	}



	editor.appendEditSummary(variation_string);

}

// </syntaxhighlight>

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook