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. |
// NOTICE: This script is a fork of Ohconfucius' EngvarB script, all credit goes to them
/**
* This script is used to convert between different variations of English spelling conventions
* Please leave bug reports and suggestions on my talk page
*/
/**
* 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 English', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "U");
}
},
{
category: 'EngvarB', name: 'Australian English', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "A");
}
},
{
category: 'EngvarB', name: 'British English', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "B");
}
},
{
category: 'EngvarB', name: 'British English Oxford spelling', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "O");
}
},
{
category: 'EngvarB', name: 'Canadian English', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "C");
}
},
{
category: 'EngvarB', name: 'Indian English', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "I");
}
}
]);
});
// </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();
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(/(\|\s*style\s*=[^|]*)(color|center)([^|]*\|)/gi);
protect_string(/(<\/?[ ]*)(center)([ ]*>)/gi); // <center> tags
protect_string(/(align\/?[ ]*=\/?[ ]*[ "'][ ]*)(center)([ ]*[ "'])/gi); // align="center" in tables
protect_string(/(\\|\/?[ ]*)(center)([ ]*\\|)/gi); // |center| in files
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|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(/(\|)(\s*colors(?:_label|)\s*)(=)/gi);
protect_string(/(\|)(\s*analog\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(/(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(/({(?: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*\scolor\|)([^|=\[\]]*)(}})/gi); // templates
protect_string(/({{\w*)([^|=\[\]}]*)(}})/gi); // templates
protect_string(/({Infobox )((?:[\w ]*)organization)(\s+)/gi);
protect_string(/(\|\s*)(cleanup|color|coordinates\w*)([ ]*=)/gi); // parameters within infoboxes
protect_string(/(\|(?:[^=|{}]*))(cleanup|encyclopa?edia|enroll?ment|honors|lockup\w{1,4}|organi[sz]ation|catalog\snumber)(\s*=)/g);
protect_string(/(\|\s*)(encyclopedia|\w*colors)(\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);
protect_string(/(solid gr[ae]y)/gi);
// protect from hyphenation
protect_string(/(\breed(?:|s)[^aeiou]|[Rr]eegan)/g);
// protect from function ohc_ENGVAR_restore_z
protect_string(/(?:enterpri|promi|surpri|treati)(?:se[drs]?|ing)/gi);
protect_string(/(?: ant)(?:ic|idote|imon|ipath|iq)/g);
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_map[index];
});
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');
// editor.replace(/in order (to )/g, '$1'); // disabling per discussion on my talk (archive 35)
editor.replace(/In order t(o )/g, 'T$1');
// agrammatical
regex(/(comprised )of/gi, '$1');
// hyphenation
editor.replace(/(co)(o(?:per|rdin)at(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');
editor.replace(/\b(vice) (president|chairman|chancellor|minister)/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',
'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}[^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'
};
for (var word in table) {
try {
editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\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$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 (word in table2) {
try {
editor.replace(new RegExp(word, 'g'), table2[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\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');
editor.replace(/rigour mortis/g, 'rigor mortis');
// reconvert special cases
}
function ohc_ENGVAR_simple_c(editor) {
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}[^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'
};
for (var word in table) {
try {
editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\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'), table2[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\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',
'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',
'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',
'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?)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|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}[^eglpstz ])ell(e[dr]|est|ing)(\\b)': '$1$2el$3$4', // added 'p' to avoid changing of "misspelling"
'(app|di|enthr|equ|initi|journ|riv|sign|tot)all(e[dr]|ing)': '$1$2al$3'
};
for (var word in table) {
try {
editor.replace(new RegExp('([ \\|\\[\\*])' + word, 'g'), table[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\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|epi|homo|mono|pro)logu(ed|ing)': '$1$2log$3', // removing "dialogue" per user:coffeeandcrumbs (21/8/2018)
'([^\\w\\d\\-\\/])(ana|cata|epi|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]*)([^l])l(ful|ment)': '$1$2ll$3',
// '(movie theat(er|re))': 'cinema', // disabling per user:coffeeandcrumbs
'([ \\|\\[\\*])aeroplane': '$1airplane',
'([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother'
};
for (word in table2) {
try {
editor.replace(new RegExp(word, 'g'), table2[word]);
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\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_set_variation(editor, variation) {
ohc_ENGVAR_protect(editor);
switch (variation) {
case 'A':
case 'B':
case 'I':
ohc_ENGVAR_simple_b(editor);
ohc_ENGVAR_remove_z(editor);
break;
case 'O':
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-zA-Z]{3,12}[^s ])iz(e[drs]?|ations?|abl[ey]|ing)(\W)/g, '$1is$2$3');
editor.replace(/(empha)siz(e|ing)/g, '$1sis$2');
editor.replace(/(synthe)siz(e[ds]|ing)/g, '$1sis$2');
}
function ohc_ENGVAR_restore_z(editor) {
// converts 's-words' into 'z-words'
editor.replace(/([^\w\-.\/])(ar|de[mv]|improv|parad|(?:com|)pr[eo][cm]|(?:un|)rev|surm|telev)is(e|ing)/g, '$1$2♫is$3');
editor.replace(/([\w])r([eo])mis(e|ing)/g, '$1r$2m♫is$3'); // Premise, promise et al.
editor.replace(/([\w])radise/g, '$1rad♫ise'); // Paradise et al.
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');
}
/** ------------------------------------------------------------------------ **/
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_map[date_object.getMonth()] + ' ' + date_object.getFullYear();
var template_string;
switch (variation) {
case 'A':
template_string = '{{Use Australian English|date=' + date_string + '}}';
break;
case 'B':
template_string = '{{Use British English|date=' + date_string + '}}';
break;
case 'O':
template_string = '{{Use British English 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;
case 'I':
template_string = '{{Use Indian 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|Australian|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');
// 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 'A':
variation_string = 'Australian English';
break;
case 'B':
variation_string = 'British English';
break;
case 'O':
variation_string = 'British English Oxford spelling';
break;
case 'C':
variation_string = 'Canadian English';
break;
case 'U':
variation_string = 'American English';
break;
case 'I':
variation_string = 'Indian English';
break;
default:
return;
}
editor.appendEditSummary(variation_string + ' spelling per [[WP:ENGVAR]] by [[User:Lordtobi/USEnglish.js|script]]');
}