Content deleted Content added
Ohconfucius (talk | contribs) tweak for false positive with "ailment" per User:DemonDays64, with thanks |
Ohconfucius (talk | contribs) Undid revision 1299042620 by Ohconfucius (talk) |
||
(46 intermediate revisions by 2 users not shown) | |||
Line 2:
// PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/EngvarB]] (click on the link above) before using.
// Feedback and constructive criticism are welcome.
//
// <syntaxhighlight lang=javascript>
/
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @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);
}
},
{
ohc_international_units(editor);
}
},
{
category: 'EngvarB', name: 'AMERICAN', isMinorEdit: true, script: function (editor) {
ohc_ENGVAR_set_variation(editor, "U");
}
},
{
category: 'EngvarB', name: 'BRITISH', 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
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
return
};
var protect_string = function (string) {
text = text.replace(string, replace_string);
};
//
protect_string(/({{\w*\scolor\|)([^|=\[\]]*)(}})/gi); //
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?|Rockefeller)/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|iri|peni)ses)/gi);
protect_string(/(World Health Organization)/gi);
protect_string(/(Royal Space Force: The Wings of Honnêamise)/g);
// protect from hyphenation
protect_string(/(\breed(?:|s)[^aeiou]|[Rr]eegan)/g);
// whitelisting: protect from doubling of "L"
protect_string(/(conceal|adrenaline|rebel|Rockefeller)/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)|Rockefeller)/gi);
protect_string(/(?:(?:mercury|nobel)pri|imagesi|picsi)(?:ze)/g);
editor.set(text);
}
function ohc_ENGVAR_unprotect(editor) {
// restore words protected at runtime
// restore words protected beforehand
var text = editor.get();
var matches;
do {
});
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(/(fill )out/gi, '$1in');
// agrammatical
editor.replace(/(comprised )of /gi, '$1');
// old-fashioned
// editor.replace(/(among)st /gi, '$1 ');
// capitalisation
// rem geographical regions - too many false positives
//
}
function ohc_ENGVAR_simple_b(editor) {
var table = {
'aging': '$1ageing',
Line 158 ⟶ 213:
'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',
Line 168 ⟶ 226:
'guerilla': '$1guerrilla',
'jewelry': '$1jewellery',
'(judg)(ment)': '$1$2e$3',
'maneuver(ab|ed|ing)': '$1manoeuvr$2',
'maneuver': '$1manoeuvre',
'meager': '$1meagre',
'louve(red|ring)': '$1louv$2',
'
'ped(iatric|ophil)': '$1paed$2',
'encyclopedi(a|c)': '$1encyclopaedi$2',
Line 179 ⟶ 239:
'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',
Line 199 ⟶ 259:
'(an|leuk|septic|tox)emi(a|c)': '$1$2aemi$3',
// 'f' words
//'(S|s)ulfur': '$1$2ulphur', //disabled per WP:ARTCOM
'anymore': '$1any more',
Line 208 ⟶ 268:
'(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',
Line 217 ⟶ 277:
'honor(abl[ey]|ed|ing|s|\\b)': '$1honour$2',
'(endeav|lab)or(e[dr]|ing|s|\\W)': '$1$2our$3',
'mol(
// '~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|canc|couns|fu|jew|lab|lev|marv|mod|
'([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
};
Line 235 ⟶ 297:
for (var word in table) {
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
var
// '~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$
'([^\\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-
'(movie theat(er|re))': 'cinema',
'([ \\|\\[\\*])airplane': '$1aeroplane',
// '([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother', // disabled 10 June – frequent false positives
'([ \\|\\[\\*])sidewalk': '$1pavement'
};
for (
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
// remove US spelling from {{convert}} template output
// remove ambiguous pound sign; rem incidental intervening space
editor.replace(/₤ ?(\d)/g, '£$1');
editor.replace(/\b(vice) (president|chairman|chancellor|minister)/gi, '$1-$2');
}
function ohc_ENGVAR_simple_c(editor) {
var table = {
'ageing': '$1aging',
'
'adrenalin(\\b)': '$1adrenaline$2',
'annex(\\b)': '$1annexe$2',
'(ana|breatha|cata|hydro|para)lyz(e|ing)': '$1$2lys$3',
'bau(lk)': '$1ba$2',
'(de|of)fense': '$1$2fence',
'license': '$1licence',
'(licen)c(ing|ed)': '$1$2s$3',
'percent(\\b)': '$1per cent$2',
'(practi)s(ing|ed)': '$1$2c$3',
'furor(\\b)': '$1furore$2',
Line 316 ⟶ 378:
'liquorice': '$1licorice',
// composite words
// 'onstage': '$1on-stage',
'(break|drop|clean|line|lock|pick)(out|up)': '$1$2-$3',
// oe/ae words
'anaesthesiologist': '$1anesthetist',
'(an
'archaeo': '$1archeo',
'diarrhoea': '$1diarrhea',
Line 339 ⟶ 401:
'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',
// 'f' words
//'(S|s)ulfur': '$1$2ulphur', //disabled per WP:ARTCOM
'anymore': '$1any more',
Line 348 ⟶ 410:
'(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',
Line 357 ⟶ 419:
'honor(abl[ey]|ed|ing|s|\\b)': '$1honour$2',
'(endeav|lab)or(e[dr]|ing|s|\\W)': '$1$2our$3',
'mol(
// '~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',
Line 365 ⟶ 427:
'(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|canc|couns|fu|jew|lab|lev|marv|mod|
'([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
};
Line 374 ⟶ 436:
for (var word in table) {
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
var
// '~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',
Line 405 ⟶ 465:
};
for (
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
// remove US spelling from {{convert}} template output
// remove ambiguous dollar sign; rem incidental intervening space
// reconvert special cases
}
function ohc_ENGVAR_simple_a(editor) {
var table = {
'ageing': '$1aging',
Line 436 ⟶ 494:
'artefact': '$1artifact',
'(ana|breatha|cata|hydro|para)lys(e|ing)': '$1$2lyz$3',
'
// 'bestsell': '$1best-sell', //disabled 24/04/24 following comment;word in OED
'diarrhoea': '$1diarrhea',
'(de|of)fence': '$1$2fense',
'licence': '$1license',
'(licen)c(ing|ed)': '$1$2s$3',
'per cent(\\b)': '$1percent$2',
'(practi)s(ing|ed)': '$1$2c$3',
'furore(\\b)': '$1furor$2',
Line 456 ⟶ 516:
'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',
'palaeonto': '$1paleonto',
'oenology': '$1enology',
'oesophag': '$1esophag',
'oestrogen': '$1estrogen',
'(an
'anaesthetist': '$1anesthesiologist',
'homoeopath': '$1homeopath',
Line 476 ⟶ 536:
'(an|leuk|septic|tox)aemi(a|c)': '$1$2emi$3',
// 'f' words
//'(S|s)ulfur': '$1$2ulphur', //disabled per WP:ARTCOM
'any more': '$1anymore',
Line 485 ⟶ 545:
'(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)
'neighbourhood': '$1neighborhood',
'behaviour(al|s|\\b)': '$1behavior$2',
Line 496 ⟶ 556:
'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|-|hundred\\s|\\d\\s)metre': '$1$2meter',
'(centi|milli|deci|pico|hecto|\\b)litre(s?\\b)': '$1$2liter$3',
'(
// '(\\W[a-
// '~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|canc|couns|fu|jew|lab|lev|marv|mod|pan|prop|quarr|rev|sign|trav)ell?(e[dr]|ing)': '$1$2el$3',
'([a-
'(di|enthr|equ|initi|journ|riv|sign|tot)all?(e[dr]|ing)': '$1$2al$3' // appalled/appalling is also American
// '\\b(appal|excel)((?:e[dr]|est|ing)\\b)': '$1l$2', // "excelling/excelled" is US English
};
for (var word in table) {
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
var
// '~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)
// '~l' words where the 'l' doubles as past and present participle
'([ \\|\\[])(counc[ie])ll(e[dr]|ing|ors?)(\\b)': '$1$2l$3$4',
'([ \\|\\[\\*])aeroplane': '$1airplane',
// '([ \\|\\[\\*])\\b[Mm](um|om(my|))\\b': '$1mother' // disabled 10 June – frequent false positives
};
for (
try {
} catch (err) {
alert('There was an error when changing "' + word + '" => "' + table2[word] + '".\n\n'
+ 'Error: ' + err.message + '\n\n'
}
}
// remove US spelling from {{convert}} template output
// remove ambiguous dollar sign; rem incidental intervening space
// reconvert special cases
}
function ohc_ENGVAR_set_variation(
ohc_ENGVAR_protect(editor);
switch (
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(
ohc_Reorder_template(editor)
ohc_ENGVAR_edit_summary(editor, variation);
editor.clickDiff();
}
/** ------------------------------------------------------------------------ **/
function
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
// 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]{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
// 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
// measurements and perception
// 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 month_year() {
const monthMap = [
'January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
const now = new Date();
return `${monthMap[now.getMonth()]} ${now.getFullYear()}`;
}
function remove_deprecated(editor) {
const deprecatedMatcher = /\{\{\s*Engvar(?:A|C)[^}]*\}\}\s*/gi; // Only remove EngvarA and EngvarC
editor.replace(deprecatedMatcher, '');
return editor;
}
function ohc_ENGVAR_insert_template(
editor = remove_deprecated(editor);
const variantClass = {
'U': [
'Use American English', 'Use Liberian English', 'Use Philippine English'
],
'C': ['Use Canadian English'],
'O': ['Use Oxford spelling'],
'B': [
'Use Commonwealth English spelling', 'Use British English', 'Use Antiguan and Barbudan English',
'Use Australian English', 'Use Bangladeshi English', 'Use Ghanaian English', 'Use Hiberno-English',
'Use Hong Kong English', 'Use Indian English', 'Use Jamaican English', 'Use Kenyan English',
'Use Malaysian English', 'Use New Zealand English', 'Use Nigerian English',
'Use Pakistani English', 'Use Singapore English', 'Use Sri Lankan English', 'Use South African English',
'Use Trinidad and Tobago English', 'Use Ugandan English'
]
};
const allTemplates = new Set(Object.values(variantClass).flat());
const templatePattern = Array.from(allTemplates)
.map(name => name.replace(/[\s\-]/g, '[\\s\\-]+').replace(/([()])/g, '\\$1'))
.join('|');
const allVarTemplatesMatcher = new RegExp(
`\{\{\s*(?:Template\s*:)?\s*(${templatePattern})(\s*\|[^}]*)?\}\}`,
'gi'
let foundVariantTemplate = false;
let engvarBFound = false;
const currentDate = month_year();
const allowedTemplates = variantClass[variant] || [];
// Process existing templates
editor.replace(allVarTemplatesMatcher, function (match, templateName, paramStr = '') {
const currentTemplate = templateName.trim();
if (!allowedTemplates.includes(currentTemplate)) {
console.log(`Removing non-matching variant template: {{${currentTemplate}}}`);
return '';
}
foundVariantTemplate = true;
let params = paramStr.split('|').map(p => p.trim()).filter(Boolean);
let paramMap = {};
for (const p of params) {
const [k, v] = p.split('=').map(s => s.trim());
paramMap[k] = v || true;
}
paramMap['date'] = currentDate;
const paramString = Object.entries(paramMap)
.map(([k, v]) => v === true ? k : `${k}=${v}`)
.join('|');
return `{{${templateName}|${paramString}}}`;
});
// Handle EngvarB specifically
const engvarBMatcher = /\{\{\s*EngvarB\s*(\|[^}]*)?\}\}/gi;
if (variant === 'B') {
editor.replace(engvarBMatcher, function (match, paramStr = '') {
engvarBFound = true;
let params = paramStr.split('|').map(p => p.trim()).filter(Boolean);
let paramMap = {};
for (const p of params) {
const [k, v] = p.split('=').map(s => s.trim());
paramMap[k] = v || true;
}
paramMap['date'] = currentDate;
const paramString = Object.entries(paramMap)
.map(([k, v]) => v === true ? k : `${k}=${v}`)
.join('|');
return `{{EngvarB|${paramString}}}`;
});
} else {
// Remove EngvarB when switching to non-Commonwealth variants
editor.replace(engvarBMatcher, '');
}
// Insert new template if needed
if (!foundVariantTemplate && !(variant === 'B' && engvarBFound)) {
let newTemplate = '';
if (variant === 'B') {
newTemplate = `{{Use British English|date=${currentDate}}}`;
} else if (allowedTemplates.length > 0) {
newTemplate = `{{${allowedTemplates[0]}|date=${currentDate}}}`;
}
if (newTemplate) {
const shortdescMatcher = /\{\{\s*short\s+description\s*\|[^}]+\}\}\s*(\r?\n)?/i;
if (editor.contains(shortdescMatcher)) {
editor.replace(shortdescMatcher, function (m) {
return m + newTemplate + '\n';
});
} else {
editor.prepend(newTemplate + '\n');
}
}
}
}
function
// Ensure Short description appears before EngvarB if both exist
editor.replace(/(\{\{Use \w+ (?:spelling|English) ?\|[^}]+\}\}\n?)((?:\{\{[\S\s]+\}\}\n?)+|)(\{\{[Ss]hort description ?\|[^}]+\}\}(<!--[^>{}]+-->|)\n?)/g, '$3$2$1');
}
function ohc_ENGVAR_edit_summary(editor, variation) {
// Add a tag to the summary box
var variation_string;
switch (variation) {
case 'B':
variation_string = 'EngvarB by [[User:Ohconfucius/script/EngvarB|script]]';
break;
case '
variation_string = 'Oxford by [[User:Ohconfucius/script/EngvarB|script]]';
break;
case 'C':
break;
case 'U':
break;
default:
return;
}
doaction('diff');
editor.appendEditSummary(variation_string);
}
// </syntaxhighlight>
|