User:IceWelder/USEnglish.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:IceWelder/USEnglish. |
// This script converts between multiple variations of English 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]] <https://meta.wikimedia.org/wiki/User:Pathoschild/Scripts/Regex_menu_framework>
*** - adds a sidebar menu of user-defined scripts.
*************/
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Pathoschild/standardise.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(wgServer + wgScript + "?title=User:" + wgUserName + "/EngvarB.js&action=edit");');
//regexTool('• Protect words', 'ohc_ENGVAR_protect()');
regexTool('• Flip imperial units', 'ohc_imperial_units()');
regexTool('• Flip international units', 'ohc_international_units()');
regexTool('• AMERICAN', 'ohc_ENGVAR_set_variation("U")');
regexTool('• AUSTRALIAN', 'ohc_ENGVAR_set_variation("A")');
regexTool('• BRITISH', 'ohc_ENGVAR_set_variation("B")');
regexTool('• BRITISH (Oxford)', 'ohc_ENGVAR_set_variation("Ox")');
regexTool('• CANADIAN', 'ohc_ENGVAR_set_variation("C")');
regexTool('• INDIAN', 'ohc_ENGVAR_set_variation("I")');
}
/* 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
// https://meta.wikimedia.org/wiki/User:Pathoschild/Scripts/Regex_menu_framework
/** ------------------------------------------------------------------------ **/
// PROTECTION FROM STRING SUBSTITUTION
var linkmap = [];
function ohc_ENGVAR_protect() {
//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 protect_function = function (s, begin, replace, end) {
linkmap.push(replace);
return begin + '⍌' + (linkmap.length - 1) + '⍍' + end;
};
// regex(/(pre)(string)(post)/gi, protect_function); //template
regex(/(<blockquote>)(.*?)(<\/blockquote>)/gi, protect_function);
regex(/({\| class= ?\"wikitable ?\")([\S\s]*?)(\|})/gi, protect_function);
regex(/(<table[^<>]*?>)([^<>]*)(<\/table>)/gi, protect_function);
regex(/(<timeline[^<>]*?>)([^<>]*)(<\/timeline>)/gi, protect_function);
regex(/(\|\s*style\s*=[^|]*)(color|center)([^|]*\|)/gi, protect_function);
regex(/(<\/?[ ]*)(center)([ ]*>)/gi, protect_function); //<center> tags
regex(/(align\/?[ ]*=\/?[ ]*[ "'][ ]*)(center)([ ]*[ "'])/gi, protect_function); //align="center" in tables
regex(/(\\|\/?[ ]*)(center)([ ]*\\|)/gi, protect_function); //|center| in files
regex(/(<ref[^<>]*?>)([^<>]*)(<\/ref>)/gi, protect_function);
regex(/(<ref name=)([^<>]*)(\/>)/gi, protect_function);
regex(/(\{[\w ]{0,12}(?:quot[^\|]{1,7}\s?|sic|(?:not a |)typo|as written)\|)([^\}]+)(\})/gi, protect_function);
regex(/([\s\(]["“])([^"“”\n]*)(["”])/gi, protect_function); //double quotes
regex(/((?:Category|Image):)([^|\]]*)([\|\]])/gi, protect_function); //cats, images
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _](?:map|name)|img|pic)\s*=)([^\|\}]*)([\|\}])/gi, protect_function); //images within templates infoboxes etc
regex(/(.)(cite encyclopedia\s*\|)(.)/gi, protect_function);
regex(/(\|)(\s*colors(?:_label|)\s*)(=)/gi, protect_function);
regex(/(\|)(\s*analog\s*)(=)/gi, protect_function);
regex(/((?:url)\s*=)([^\|\}]*)([\|\}])/gi, protect_function); //urls within templates infoboxes etc
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
regex(/(\[(?:https?:|ftp:))([^\s\]]*)([\s\]])/gi, protect_function);
regex(/(\[\[)([^\|\]]*)(\|)/gi, protect_function); //pipings
regex(/(.)(Back in the U.S.S.R.)(.)/gi, protect_function); //title of work
regex(/(.)(Born in the U.S.A.)(.)/gi, protect_function); //title of work
regex(/(\{(?:See ?also|Main))(\|[^\}]*)(\})/gi, protect_function); //see also and main templates
regex(/(\{\{(?:external|wide )image\s?\|)([^\}]+)(\})/gi, protect_function);
regex(/(\{\{(?:harvnb|wikisource)\|)([^\}]+)(\})/gi, protect_function);
regex(/(\{\{)((?:NYT|WSJ)topic\|[^\}]*)(\}\})/gi, protect_function);
regex(/(\{\{\w*)([^\|=\[\]]*)(\}\})/gi, protect_function); //templates
regex(/(\{Infobox )((?:[\w ]*)organization)(\s+)/gi, protect_function);
regex(/(\|\s*)(cleanup|color|coordinates\w*)([ ]*=)/gi, protect_function); //parameters within infoboxes
regex(/(\|(?:[^=\|\{\}]*))(cleanup|encyclopa?edia|enroll?ment|honors|lockup\w{1,4}|organi[sz]ation|catalog\snumber)(\s*=)/g, protect_function);
regex(/(\|\s*)(encyclopedia|\w*colors)(\s?=)/gi, protect_function);
regex(/(\|\s*)(local[ _]authority)(\s?=)/gi, protect_function);
regex(/(\|\s*)([Ss]hip[ _](?:armou?r|honou?rs))([ ]*?\=)/g, protect_function);
regex(/(\|\s*title\s?=)([^|\]]*)(\|)/gi, protect_function);
regex(/(.)(solid gray)(.)/gi, protect_function);
//protect from hyphenation
regex(/(.)(\breed(?:|s)[^aeiou]|[Rr]eegan)(.)/g, protect_function);
//protect from function ohc_ENGVAR_restore_z
regex(/(.)((?:enterpri|promi|surpri|treati)(?:se[drs]?|ing))(.)/gi, protect_function);
regex(/(.)((?: ant)(?:ic|idote|imon|ipath|iq))(.)/g, protect_function);
regex(/(.)((?:(?:mercury|nobel)pri|imagesi|picsi)(?:ze))(.)/g, protect_function);
}
function ohc_ENGVAR_unprotect() {
//removes protection put in place by function ohc_protect_fmt (all cats, templates etc.)
regex(/[♫]/g, '');
regex(/⍌([0-9]+)⍍/g, function (x, n) {
var res = linkmap[n];
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
var res = linkmap[n];
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
var res = linkmap[n];
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
return linkmap[n];
});
return res;
});
return res;
});
return res;
});
}
/** ------------------------------------------------------------------------ **/
function ohc_ENGVAR_plain() {
//per https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style
//redundancies
regex(/B\.B\.C\./g, 'BBC');
regex(/U\.S\.A\./g, 'U.S.');
regex(/U\.S\.S\.R\./g, 'USSR');
regex(/U\.K\./g, 'UK');
regex(/E\.U\./g, 'EU');
regex(/(fill )out/gi, '$1in');
// regex(/in order (to )/g, '$1'); // disabling per discussion on my talk (archive 35)
regex(/In order t(o )/g, 'T$1');
//hyphenation
regex(/(co)(o(?:per|rdin)at(e\b|ing|ion))/g, '$1-$2');
regex(/\b(re)(e\w[aeiou]\w{4,})/gi, '$1-$2');
regex(/\b(over|under)(r\w{4,})/gi, '$1-$2');
regex(/\b(vice) (president|chairman|chancellor|minister)/gi, '$1-$2');
//capitalisation
//rem geographical regions - too many false positives
regex(/(local )authority/g, '$1council');
regex(/w(estern European Union)/g, 'W$1');
regex(/(New )s(outh Wales)/g, '$1S$2');
}
function ohc_ENGVAR_simple_b() {
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',
'diarrhea': '$1diarrhoea',
'(de|of)fense': '$1$2fence',
'license': '$1licence',
'(licen)c(ing|ed)': '$1$2s$3',
'(practi)c(ing|ed)': '$1$2s$3',
'furor(\\b)': '$1furore$2',
'(light-|dark-|\\b)gray': '$1$2grey',
'guerilla': '$1guerrilla',
'jewelry': '$1jewellery',
'maneuver(ab|ed|ing)': '$1manoeuvr$2',
'maneuver': '$1manoeuvre',
'louve(red|ring)': '$1louv$2',
'louver': '$1louvre',
'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',
'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',
'(cand|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(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-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}[^eglstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', //added 'z' to avoid changing of "embezzled"
'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3'
};
for (var word in table) {
try {
regex(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_b(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
var table = {
//'~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$2re$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'
};
for (var word in table) {
try {
regex(new RegExp(word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_b(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
//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');
//remove ambiguous pound sign; rem incidental intervening space
regex(/₤ ?(\d)/g, '£$1');
regex(/rigour mortis/g, 'rigor mortis');
//reconvert special cases
}
function ohc_ENGVAR_simple_c() {
var table = {
'ageing': '$1aging',
'aluminium': '$1aluminum',
'adrenalin(\\b)': '$1adrenaline$2',
'annex(\\b)': '$1annexe$2',
'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',
'(de|of)fense': '$1$2fence',
'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',
'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',
'(cand|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(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-zA-Z]{2,8}[^eglstz ])el(e[dr]|est|ing)(\\b)': '$1$2ell$3$4', //added 'z' to avoid changing of "embezzled"
'(app|di|enthr|equ|initi|journ|riv|sign|tot)al(e[dr]|ing)': '$1$2all$3'
};
for (var word in table) {
try {
regex(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_c(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
var table = {
//'~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
'([ \\|\\[])(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'
};
for (var word in table) {
try {
regex(new RegExp(word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_c(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
//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');
//remove ambiguous dollar sign; rem incidental intervening space
regex(/$ ?(\d)/g, '$$1');
regex(/rigour mortis/g, 'rigor mortis');
//reconvert special cases
}
function ohc_ENGVAR_simple_a() {
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',
'best-sell': '$1bestsell',
'diarrhoea': '$1diarrhea',
'(de|of)fence': '$1$2fense',
'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',
'manoeuvre': '$1maneuver',
'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',
'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',
'any more': '$1anymore',
'speciality': '$1specialty',
// non-redundant e
'(lik|liv|rat|sal|siz|shak)e(able)': '$1$2$3',
//'~our' words
'(arm|clam|glam|harb|neighb|rum|savi?)our(ed|ful|ing|less|ly|s|\\b)': '$1$2or$3',
'(arm|sav)our(ies|y|s|\\b)': '$1$2or$3',
'(cand|od)oru((?: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(d|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|-|\\d\\s)metre': '$1$2meter',
'(centi|milli|deci|pico|hecto|\\b)litre(s?\\b)': '$1$2liter$3',
'(dema|peda|mono|syna)gogue(s?\\W)': '$1$2gog$3',
// '(\\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}[^eglstz ])ell(e[dr]|est|ing)(\\b)': '$1$2el$3$4', //added 'z' to avoid changing of "embezzled"
'(app|di|enthr|equ|initi|journ|riv|sign|tot)all(e[dr]|ing)': '$1$2al$3'
};
for (var word in table) {
try {
regex(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_a(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
var table = {
//'~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|dia|epi|homo|mono|pro)logu(ed|ing)': '$1$2log$3',
'([^\\w\\d\\-\\/])(ana|cata|dia|epi|homo|mono|pro)logue(s?\\b)': '$1$2log$3',
//'~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]*)([^l])l(ful|ment)': '$1$2ll$3',
'(movie theat(er|re))': 'cinema',
'([ \\|\\[\\*])aeroplane': '$1airplane',
'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother'
};
for (var word in table) {
try {
regex(new RegExp(word, 'g'), table[word]);
}
catch (err) {
var text = 'There was an error on function ohc_ENGVAR_simple_a(), when changing "' + word + '" => "' + table[word] + '".\n\n';
text += 'Error: ' + err.message + '\n\n';
text += 'Click OK to continue.\n\n';
alert(text);
}
}
//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');
//remove ambiguous dollar sign; rem incidental intervening space
regex(/$ ?(\d)/g, '$$1');
regex(/rigour mortis/g, 'rigor mortis');
//reconvert special cases
}
function ohc_ENGVAR_set_variation(v) {
ohc_ENGVAR_protect();
switch (v) {
case 'A':
case 'B':
case 'I':
ohc_ENGVAR_simple_b();
ohc_ENGVAR_remove_z();
break;
case 'Ox':
case 'C':
ohc_ENGVAR_simple_c();
ohc_ENGVAR_restore_z();
break;
case 'U':
ohc_ENGVAR_simple_a();
ohc_ENGVAR_restore_z();
break;
}
ohc_ENGVAR_plain();
ohc_ENGVAR_unprotect();
ohc_retask_pipes();
ohc_ENGVAR_insert_template(v);
ohc_ENGVAR_edit_summary(v);
doaction('diff');
}
/** ------------------------------------------------------------------------ **/
function ohc_retask_pipes() {
regex(/([^\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');
// regex(/(empha|synthe)siz(e|ing)/g, '$1sis$2');
}
function ohc_ENGVAR_remove_z() {
regex(/([^\w\-\.][a-zA-Z]{3,12}[^s ])iz(e[drs]?|ations?|abl[ey]|ing)(\W)/g, '$1is$2$3');
regex(/(empha)siz(e|ing)/g, '$1sis$2');
regex(/(synthe)siz(e[ds]|ing)/g, '$1sis$2');
}
function ohc_ENGVAR_restore_z() {
//converts 's-words' into 'z-words'
regex(/([^\w\-\.\/])(ar|de[mv]|improv|parad|(?:com|)pr[eo][cm]|(?:un|)rev|surm|telev)is(e|ing)/g, '$1$2♫is$3');
regex(/([\w])remise/g, '$1rem♫ise'); // Premise et al.
regex(/([\w])radise/g, '$1rad♫ise'); // Paradise et al.
regex(/([^\w\-\.\/][a-zA-Z]{5,12})is(ations?)(\W)/g, '$1iz$2$3');
regex(/([^\w\-\.\/][a-zA-Z]{0,12}(?:[aeiou][^aeiosuw]|ph|rd|thes))is(e[drs]?|ing)(\W)/g, '$1iz$2$3');
}
function ohc_imperial_units() {
//measurements and perception
// regex(/\[\[(foobar)(s|)\]\]/gi, '$1$2');
//Template:{{convert}}
// regex(/(\{\{convert)(\s*\|)/gi, '$1/flip$2'); //rem linking within convert template (area) //needs resolving
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|disp=flip'); //rem linking within convert template (area)
regex(/(\{\{convert\|[\d\.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1|disp=flip'); //rem linking within convert template
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|disp=flip'); //flip hectares
regex(/(\{\{convert\|[\d\.,]+?\|(?:kmh|km\/h)(?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1|disp=flip'); //flip kmh
regex(/(\{\{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)
regex(/(\{\{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
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');
//manipulating "|disp=flip" parameter where already "flipped"
regex(/(\{\{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)
regex(/(\{\{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)
regex(/(\{\{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() {
//measurements and perception
// regex(/\[\[(foobar)(s|)\]\]/gi, '$1$2');
//Template:{{convert}}
// regex(/(\{\{convert)(\s*\|)/gi, '$1/flip$2'); //rem linking within convert template (area) //needs resolving
regex(/(\{\{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)
regex(/(\{\{convert\|[\d\.,]+?\|tonnes?(?:\|tons?)?(\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1|disp=flip'); //rem linking within convert template
regex(/(\{\{convert\|[\d\.,]+?\|(?:(?:sq|)mi(?:2|3|)|acre))(\|(?: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|disp=flip'); //flip hectares
// regex(/(\{\{convert\|[\d\.,]+?\|mp[gh](?:\|\d)?(?:\|(?:sp|adj|abbr|lk|sigfig|sortable)=[^\|\}]*)*)(?=\})/gi, '$1|disp=flip'); //flip kmh
regex(/(\{\{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)
regex(/(\{\{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
regex(/(\{\{convert\|[\d\.,]+?\|(?:lb|oz|°?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');
//manipulating "|disp=flip" parameter where already "flipped"
regex(/(\{\{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)
regex(/(\{\{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)
regex(/(\{\{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_ENGVAR_insert_template(v) {
// Add a template to the article identifying English variant
var box = document.editform.wpTextbox1;
var article = box.value;
// Build a string with "Month YYYY"
var dateobj = new Date();
var month = ['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');
// Matches "Use British English" or "EngvarB"
var reB = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+British[_ ]+English|[Ee]ngvarB)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
// Matches "Use British (Oxford) English", "Use British English Oxford spelling" or "EngvarOx"
var reOx = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+British[_ ]+\\(Oxford\\)[_ ]+English|[Uu]se[_ ]+British[_ ]+English[_ ]+Oxford[_ ]+[Ss]pelling|[Ee]ngvarOx)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
// Matches "Use Canadian English" or "EngvarC"
var reC = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+Canadian[_ ]+English|[Ee]ngvarC)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
// Matches "Use American English"
var reU = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+American[_ ]+English)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
// Matches "Use Indian English"
var reI = new RegExp('{{[_ ]*(?:[Uu]se[_ ]+Indian[_ ]+English)[_ ]*(?:|\\|[ ]*date[ ]*=[^{}\\|]*)[ ]*}}', 'gi');
var reg;
var template;
switch (v) {
case 'A':
template = '{{Use Australian English|date=' + datestr + '}}';
reg = reA;
break;
case 'B':
template = '{{Use British English|date=' + datestr + '}}';
reg = reB;
break;
case 'Ox':
template = '{{Use British English Oxford spelling|date=' + datestr + '}}';
reg = reOx;
break;
case 'C':
template = '{{Use Canadian English|date=' + datestr + '}}';
reg = reC;
break;
case 'U':
template = '{{Use American English|date=' + datestr + '}}';
reg = reU;
break;
case 'I':
template = '{{Use Indian English|date=' + datestr + '}}';
reg = reI;
break;
}
// Replace with existing variants
article = article.replace(reA, template);
article = article.replace(reB, template);
article = article.replace(reOx, template);
article = article.replace(reC, template);
article = article.replace(reU, template);
article = article.replace(reI, template);
// Prepend template if not already tagged
if (article.search(reg) === -1) {
article = template + '\r\n' + article;
}
box.value = article;
}
function ohc_ENGVAR_edit_summary(v) {
//Add a tag to the summary box
setoptions(minor = 'true');
//removed ",watch='false'" in response to user notification 13 Nov. 2010
var variation = 'English';
switch (v) {
case 'A':
variation = 'Australian English';
break;
case 'B':
variation = 'British English';
break;
case 'Ox':
variation = 'British English Oxford';
break;
case 'C':
variation = 'Canadian English';
break;
case 'U':
variation = 'American English';
break;
case 'I':
variation = 'Indian English';
break;
}
setreason(variation + ' spelling per [[WP:ENGVAR]] by [[User:Ohconfucius/EngvarB|script]]', 'append');
}