This is the current revision of this page, as edited by Ohconfucius (talk | contribs) at 21:05, 13 November 2024 (IUPAC spellings). The present address (URL) is a permanent link to this version.
Revision as of 21:05, 13 November 2024 by Ohconfucius (talk | contribs) (IUPAC spellings)(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)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. |
Documentation for this user script can be added at User:Ohconfucius/test/formatgeneral.js/core. |
// <syntaxhighlight lang=javascript> // ********************************************************************************************* //This is a test (non-production) script, and may have untested errors. Please exercise due care should you decide to use it. // ********************************************************************************************* /** * Replicates a legacy function used by the regex menu framework for scripts * migrated to the newer TemplateScript. */ function regex(search,replace,repeat) { var editbox = $('#wpTextbox1'); /* define how many times to perform */ if(!repeat || repeat<0) { var repeat = 1; } /* perform */ var text = editbox.val(); for(var i=0; i<repeat; i++) { text = text.replace(search,replace); } editbox.val(text); }; function Ohc_format_Sundry() { var txt=document.editform.wpTextbox1; //html, superscripted ordinals regex(/\*_\d{4}#\d{4}_*_\d\d?\|(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))( \d\d?)\]\]/g, '$1$2'); // regex(/<br>/gi, '<br/>'); regex(/(\d)(<sup>)(m)(\d<\/sup>)/gi, '$1$3$2$4'); //misplaced unit (squared)il //rem linking within section headings regex(/(==?(?:*))\]+?)\]\]((?:*|)?==)/gi, '$1$2$3'); regex(/(==?(?:*))\]+?\|(]+?)\]\]((?:*|)?==)/gi, '$1$2$3'); regex(/(==?(?:*))\]+?\||)(]+?)\]\](*)\]+?\||)(]+?)\]\](?:(*)\]+?\||)(]+?)\]\]|)((?:*|)?==)/gi, '$1$2$3$4$5$6$7'); // regex(/(==?)\d{1,2}px(]+?)((?:*|)?==)/gi, '$1$2$3'); //rem artefact after removing file from title //rem refs within section headings regex(/(==?(?:*))(?:<ref(?:>*<\/ref| name=+\/)>)(*)(?=?==)/gi, '$1$2'); //rem empty parameters // regex(/\|***=*?*(?=)/g, ""); //rem deprecated parameters // regex(/\|\s*influence\s*=*(?=)/g, ""); //rfc infobox person July 2013; code fails if there are piped links regex(/({{(?:end|start)date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter regex(/({{(?:end|start)date(?:*))\|df=y(?:es|)(}})/gi, "$1$2"); //rem deprecated parameter regex(/\| ?(?:tele|)phone numbers?= ?(*)(?=)/gi, ""); //add correct hyphenation regex(/\b(|\d{2,3}|half|quarter|two|three|four|five|six|seven|eight|nine|ten) (second|minute|hour|day|week|month|year|decade|fold|liter|litre|degree|pound|inch|foot|yard|mile|(?:kilo|)met(?:re|er)|man|page|point|word|dollar|cent|floor|store?y|(?:bed|)room)\b/g, "$1-$2"); regex(/\b(|\d{2,3}|two|three|four|five|six|seven|eight|nine|ten)-(secondclass)\b/g, "$1 $2"); //palliative to reverse incorrectly inserted hyphen "n-second-class" regex(/\b(two|three|four|five|six|seven|eight|nine|ten) (halves|thirds|quarters|(?:four|fif|six|seven|eigh|nin|ten)ths)\b/gi, "$1-$2"); regex(/\b((?:|\d{2,3})-(?:month|year)) (old)\b/gi, "$1-$2"); regex(/(\bnon) (?+)/g, "$1-$2"); regex(/(\bnon)-(grata)/g, "$1 $2"); //reinstate for "persona non grata" regex(/(qua non)-()/gi, "$1 $2"); //reinstate for "sine qua non" regex(/(etween \d{4})\s?\s?(\d{4})/g, "$1 and $2"); //ungrammatical constructs involving year ranges" regex(/(etween (\d{2})\d{2})\s?\s?(\d{2})/g, "$1 and $2$3"); //ungrammatical constructs involving year ranges" regex(/(rom \d{4})\s?\s?(\d{4})/g, "$1 to $2"); //ungrammatical constructs involving year ranges" regex(/(rom (\d{2})\d{2})\s?\s?(\d{2})/g, "$1 to $2$3"); //ungrammatical constructs involving year ranges" regex(/(\| ?colou?rs?= ?+)&(+)(?=)/gi, "$1and$2"); regex(/(?:\| ?date= ?)(Cric\w{4,})(?=)/gi, "|publisher=$1"); // regex(/\{\{color ?(?:box|sample)\s?\|+\}\}(*|)\{\{color ?(?:box|sample)\s?\|+\}\}(*|)\{\{color ?(?:box|sample)\s?\|+\}\}(*|)/gi, "$1$2$3"); // regex(/\{\{color ?(?:box|sample)\s?\|+\}\}(*|)\{\{color ?(?:box|sample)\s?\|+\}\}(*|)/gi, "$1$2"); // regex(/(\|\s*(?:\w+_|)colou?rs\s*=\s**)\{\{color ?(?:box|sample)\s?\|+\}\}(*|)(?=\n?)/gi, "$1$2"); } function Ohc_format_MOSCAPS(){ //WP:AMPERSAND regex(/(==** )&( *)(?=*=)/g, '$1and$2'); regex(/(\|\s*(?:\w+_|)colou?rs\s*=\s*+)& (\w+)/gi, '$1and $2'); //replace ampersand //improper capitalisation within section headings regex(/(==*External )(Links)(?=*=)/g, '$1links'); regex(/(==*See )(Also)(?=*=)/g, '$1also'); regex(/(==*)Notable Alumnae/g, '$1Alumni'); regex(/(==*)Notable (\w*?)/g, '$1$2'); regex(/(==*Box )O(ffice)(?=*=)/g, '$1o$2'); regex(/(==*+? and )A(wards?|chievements?)(?=*=)/g, '$1a$2'); regex(/(==*+? )A(lbums?)(?=*=)/g, '$1a$2'); regex(/(==*+? )C(areer|haracters|hart|ompetitions?|ompositions|redits)(?=*=)/g, '$1c$2'); regex(/(==*+? )(Capped layers)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*\w+ )((?:\w+ |and |)Destinations?)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*+? )E(ducation)(?=*=)/g, '$1e$2'); regex(/(==*+? )F(acilities|ilms?)(?=*=)/g, '$1f$2'); // regex(/(==*+? )G(roups?)(?=*=)/g, '$1g$2'); regex(/(==*+? )L(evels?|ife|istings?)(?=*=)/g, '$1l$2'); regex(/(==*+? )M(ember(?:ship|s?))(?=*=)/g, '$1m$2'); regex(/(==*+? )P(oll(?:ing|s?))(?=*=)/g, '$1p$2'); regex(/(==*+? )R(ankings?|eading|esults?|ecords?|eception|ecognition)(?=*=)/g, '$1r$2'); regex(/(==+) +S((?:chedule|creenings?|ummary) ?==)/gi, '$1 s$2'); regex(/(==*+? )T(ables?|ournaments|ransport(?:ations?|))(?=*=)/gi, '$1t$2'); regex(/(==*+? )W(inners)(?=*=)/g, '$1w$2'); regex(/(==*+? )Y(ears)(?=*=)/g, '$1y$2'); regex(/(==*Performance )(By \w+)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Extra )(Preliminary Round)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Extended )(Playing Squad)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Wider )(Training roup)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Regular )(Season chedule)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Right )(f Reply)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Twin )(Towns(?: nd ister ities|))(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*Heraldic )(Items)(?=*=)/g, '$1items'); regex(/(==*Campaign )C(redits)(?=*=)/g, '$1c$2'); regex(/(==*Combat )C(hronicle)(?=*=)/g, '$1c$2'); regex(/(==*+? )(International Trips)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(\|\s*(?:\w+_|)colou?rs\s*=\s*)(+)(?=)/gi, '$1{{' + 'subst:' + 'lc:$2}}'); //downcase colours in infobox regex(/(\|\s*(?:\w+_|)colou?rs\s*=\s*+)&(+)/gi, '$1and$2'); //replace ampersand regex(/(==\w+) M(atch(?:es|))\b/gi, '$1 m$2'); regex(/(==\w+)B(acks?)\b/gi, '$1-b$2'); regex(/(==\w+)E(ight)/gi, '$1-e$2'); regex(/(==(?:Top|Bottom))H(alf)\b/gi, '$1 h$2'); regex(/(==(?:Scrum|Fly))H(alf|alves)\b/gi, '$1-h$2'); regex(/(==\w+)Q(uarters?)\b/gi, '$1-q$2'); // within links and pipes regex(/((?:'''|\|)(?:alf|ull))B(acks?(?:'''|\]\]))/gi, '$1 b$2'); regex(/((?:'''|\|)\w+)F(orwards?(?:'''|\]\]))/gi, '$1 f$2'); regex(/((?:'''|\|)(?:ne|hree|our||ive))E(ights?(?:'''|\]\]))/gi, '$1-e$2'); regex(/((?:'''|\|)\w+)H((?:alf|alves)(?:'''|\]\]))/gi, '$1-h$2'); regex(/((?:'''|\|)(?:ne|hree|our))Q(uarters?(?:'''|\]\]))/gi, '$1-q$2'); regex(/((?:'''|\|) ?Player )(One|Two|Three|Four)/gi, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/((?:'''|\|)Population)D(ensity(?:'''|\s?\|))/gi, '$1 d$2'); regex(/((?:'''|\|)Population)P(rojection(?: \w+|)(?:'''|\s?\|))/gi, '$1 p$2'); regex(/(\]+\|National )P(arty\]\])/g, '$1p$2'); regex(/(*\])/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/((?:*|\s)\])/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/\b(Armenian|Assyrian|Cambodian|Darfur|Dzungar|East Timor|Greek|Herero and Namaqua|Rwandan) G(enocide)\b/g, '$1 g$2'); regex(/(\+ )(?:+ )*)(Conspiracy|Controversy|(?:Race |)Riot|Massacre|Murder|Protest|Uprising)(?=s?(?: of \d{3,4}|)\]| \(\d{3,4}\))/g, '$1{{' + 'subst:' + 'lc:$2}}'); //per Frietjes: you cannot use subst: inside of references //improper capitalisation within infobox strings regex(/(, |\band )A(cademic|ctor|ctress|ctivist|nimator|rranger|rtist|rt critic|strologer|thlete|uthor)(?= ?)/g, '$1a$2'); regex(/(, |\band )B(allet|iography|roadcaster|usiness(?:wo|)man)(?= ?)/g, '$1b$2'); regex(/(, |\band )C(hef|olumnist|o-\w+|omedian|omposer|onsultant|ritic|urator)(?= ?)/g, '$1c$2'); regex(/(, |\band )D(entist|esigner|j|irector|is jockey|ocumentary maker|ramatist)(?= ?)/g, '$1d$2'); regex(/(, |\band )E(ditor|ditorinchief|ducator|ngineer|ntertainer|ntrepreneur|nvironmentalist|ssayist|xecutive producer|xplorer)(?= ?)/g, '$1e$2'); regex(/(, |\band )F(ashion (?:designer|model)|iction|ilm(?: critic|director|?maker|producer))(?= ?)/g, '$1f$2'); regex(/(, |\band )G(raphic designer)(?= ?)/g, '$1g$2'); regex(/(, |\band )H(acker|istorian|istorical fiction)(?= ?)/g, '$1h$2'); regex(/(, |\band )J(ournalist)(?= ?)/g, '$1j$2'); regex(/(, |\band )L(awyer|eader|ecturer|ibrarian|iterary editor|yricist)(?= ?)/g, '$1l$2'); regex(/(, |\band )M(ayor|athematician|odel|usician|ulti-instrumentalist)(?= ?)/g, '$1m$2'); regex(/(, |\band )M(usic (?:arranger|composer|critic|director|producer))(?= ?)/g, '$1m$2'); regex(/(, |\band )N(arrator|ovelist)(?= ?)/g, '$1n$2'); regex(/(, |\band )O(rator)(?= ?)/g, '$1o$2'); regex(/(, |\band )P(erformance artist|erformer|hilosopher|hilosophy|hotographer|laywright|oet|oetry|olitical activist|olitician|laywright|riest|resenter|roducer|rofessor|olitical commentator|ublic speaker|ublicist|ublisher|undit)(?= ?)/g, '$1p$2'); regex(/(, |\band )R(ecord producer|eporter)(?= ?)/g, '$1r$2'); regex(/(, |\band )S(ailor|cholar|cientist|creenwriter|culptor|oldier|olicitor|inger.songwriter|ong-?writer|peaker|tockbroker)(?= ?)/g, '$1s$2'); regex(/(, |\band )S(tand?up) C(omed(?:ian|))(?= ?)/g, '$1s$2 c$3'); regex(/(, |\band )T(eacher|elevision|heatr(?:e|ical) (?:critic|director|producer)|ranslator)(?= ?)/g, '$1t$2'); regex(/(, |\band )V(oice actor)(?= ?)/g, '$1v$2'); regex(/(, |\band )W(riter)(?= ?)/g, '$1w$2'); //rem inappropriate regex(/((?:occupation|profession)*=*\w+) & (\w+)/gi, '$1, $2'); regex(/((?:occupation|profession)*=*)(?:, (?:activ|philanthrop)ist|Member of Parliament)(?=*\n*\|)/gi, '$1'); // regex(/((?:occupation|profession)*=*)(?:\\])(?=*\n*\|)/gi, '$1Politican'); regex(/((?:occupation|profession)*=*)(?:(?:\]+\||)Member of Parliament\]\])(?=*\n*\|)/gi, '$1Politican'); regex(/((?:focus|instrument|industry|known for|method|occupation|products|profession)*=*+)(++)(?=\n*\|)/gi, '$1{{' + 'subst:' + 'lc:$2}}'); //to genericise downcasing of occupations and musical instruments regex(/(?:activ|philanthrop)ist, (politician|businessman)(?=*\n*\|)/gi, '$1'); regex(/(?:Activ|Philanthrop)ist, ()(olitician|usinessman|awyer)/g, '{{' + 'subst:' + 'uc:$1}}$2'); //other improper capitalisation -sports regex(/((?:==?|\||\()*+? )H(eld|istory|onou?rs)(?=*=)/g, '$1h$2'); regex(/((?:==?|\||\()*(?:1st|2nd|3rd|\dth) )M(atch)/g, '$1m$2'); regex(/((?:==?|\||\()*(?:1st|2nd|3rd|\dth) )F(inal)/g, '$1f$2'); regex(/((?:==?|\||\()*(?:First|Second|Third|Fourth|(?:st|nd|rd|th)) )Q(uarter)/g, '$1q$2'); regex(/((?:==?|\||\()*(?:First|Second|Third|Fourth|(?:st|nd|rd|th)) )R(ound)/g, '$1r$2'); regex(/(\W+ )(uarter)F(inal)/g, '$1q$2-f$3'); regex(/((?:==?|\||\()*uarter|emi)?F(inal)/gi, '$1-f$2'); regex(/(\W+ )(emi)F(inal)/g, '$1s$2-f$3'); regex(/(==*Overall )(Team ecords?)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*(?:CFL|NL) )C(oaching )(ecords?)(?=*=)/g, '$1c$2r$3'); regex(/(==*+? )C(areer )S(tatistics)(?=*=)/g, '$1{{' + 'subst:' + 'lc:$2}}'); regex(/(==*+? (?:and |& |))S(eason|quad|tyle|taff|tage|tatistics)(?=*=)/g, '$1s$2'); regex(/\b(Bowling |Batting )S(tyle)\b/g, '$1s$2'); regex(/\b(ight|eft)-(anded(?: (?:Opening|Top rder) Batsman|))\b/gi, '$1-{{' + 'subst:' + 'lc:$2}}'); regex(/\b(ll)R(ounder)\b/gi, '$1-r$2'); regex(/\b(Wicket)K(eeper)\b/gi, '$1-k$2'); regex(/(ight|eft)(rm (?:\]+\||))(?:rthodox|(?:eg|ff)pin|edium(?: ast|)|ast(?: edium|))\]\])/g, '$1-{{' + 'subst:' + 'lc:$2}}'); regex(/((?:\]+\|)(?:ight|eft))(rm (?:rthodox|(?:eg|ff)pin|edium(?: ast|)|ast(?: edium|))\]\])/g, '$1-{{' + 'subst:' + 'lc:$2}}'); regex(/\b(Fast)(edium owler)\b/g, '$1–{{' + 'subst:' + 'lc:$2}}'); regex(/\b(ast |edium )B(owler)\b/g, '$1b$2'); regex(/\b(ast|low)((?:lef|righ)t-rm owler)\b/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/\b(fast)B(owler)\b/g, '$1-b$2'); regex(/\b(eg|ff)((?:pin )(?:Bowler|))\b/g, '$1-{{' + 'subst:' + 'lc:$2}}'); regex(/(== ?\w )(League Table)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Contract) +(Detail|Length)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/((?:\||==)\s*Current) +(Club|Line-?up|Roster|Team)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Points|Pts) +(Ag(?:ain|)st|Diff(?:erence|)|For)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(== ?Top) +(scorers(?: in Order of League Goals|))/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(== ?Touring )P(arty)/g, '$1p$2'); regex(/((?:==|)\s*(?:\d+ Season |Current |Former ))P(layers)/g, '$1p$2'); regex(/(== ?\d+ Gains & )L(osses)/g, '$1l$2'); regex(/(== ?\d+ Signings & )T(ransfers)/g, '$1t$2'); regex(/(== ?\w+) +(Results & Fixtures)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(== ?\w+) +(and Capacity)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(== ?Accidents+)I(ncidents)/g, '$1i$2'); regex(/(Airport) +(Name|Code)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Bonus )P(oints|ts)/g, '$1p$2'); regex(/(Broadcast )D(ates?)/g, '$1d$2'); regex(/(Busiest) +((?:International |Domestic |) *(?:Flight|Routes(?: Out f|)))/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(City ) ?S(erved)/g, '$1s$2'); regex(/(br(?: ?\/|)>|Aircraft |Passenger |reight )M(ovement)/gi, '$1m$2'); regex(/(br(?: ?\/|)>|Total |Domestic |International )P(assenger)/g, '$1p$2'); regex(/(Date (?:and|&) )T(ime)/gi, '$1t$2'); regex(/(\|\s*(?:Date|Years?)) ((?:f |)\w+)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); //piping added to exclude false positive: "10 Years Younger" regex(/(\|+\s*)Hall \d ?/g, '$1'); //rem over-specific location of match regex(/(Did) +(ot (?:nter|articipate|ualify))/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(: Estimated otes by) +EU P(arty)/gi, '{{' + 'subst:' + 'lc:$1}}EU party'); regex(/(First|Second|Third|1st|2nd|3rd|(?:Four|Fif|Six|Seven|Eigh|Nin|Ten|\d)th) +(Places?(?: Match|))/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Group )S(tage)/gi, '$1s$2'); regex(/(Seasonal )C(harter)/g, '$1c$2'); regex(/(Term )((?:f |)\w+)/g, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Top )C(arrier)/g, '$1c$2'); regex(/(Winter |Summer ) ?S(easonal)/g, '$1s$2'); regex(/(Until the )E(nd of)/gi, '$1e$2'); regex(/(Former |Last |New |Previous )C(lub)/gi, '$1c$2'); regex(/(Years |When )S(igned)/gi, '$1s$2'); regex(/(Match )I(nformation)/gi, '$1i$2'); regex(/(\|\s*\w+ )S(taff\b)(?=\s?\w)/gi, '$1s$2'); //bug fix regex(/N(ational Distribution of Seats)/gi, 'N{{' + 'subst:' + 'lc:$1}}'); regex(/(\s?Won (?:Gold|Silver|Bronze) Medal)/gi, '{{' + 'subst:' + 'lc:$1}}'); regex(/(Tour|Test|International) +M(atch)/gi, '$1 m$2'); regex(/(Oppo)(?:sing eam)/g, '$1nent'); regex(/(by )O(pponent)/g, '$1o$2'); regex(/(Tournaments(?:<br>| ))(Met)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(W–L(?:<br>| ))(Record)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Largest(?:<br>| ))(Victory|Defeat)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Current(?:<br>| ))(Streak)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(Current(?:<br>| ))(Streak)/gi, '$1 {{' + 'subst:' + 'lc:$2}}'); regex(/(MEP<br ?\/>)P(arty)/g, '$1p$2'); regex(/(MEP<br ?\/>\()P(arty\))/g, '$1 p$2'); regex(/(Single Transferable Vote)/g, '{{' + 'subst:' + 'lc:$1}}'); // regex(/(Official )S(ite)/g, '$1s$2'); // regex(/(+ )O(fficial )W(ebsite\])/g, '$1o$2w$3'); regex(/(\'Further )R(eading)(?=\')/g, '$1r$2'); regex(/( )A(nd|t) A(n? \w)/g, '$1a$2 a$3'); regex(/( )A(nd|t) M(y \w)/g, '$1a$2 m$3'); regex(/( )A(nd|t) T(he \w)/g, '$1a$2 t$3'); regex(/( )By A(n? \w)/g, '$1by a$2'); regex(/( )By m(y \w)/g, '$1by m$2'); regex(/( )By T(he \w)/g, '$1by t$2'); regex(/( )For A(n? \w)/g, '$1for a$2'); regex(/( )For M(y \w)/g, '$1for m$2'); regex(/( )For T(he \w)/g, '$1for t$2'); regex(/( )In A(n? \w)/g, '$1in a$2'); regex(/( )In M(y \w)/g, '$1in m$2'); regex(/( )In T((?:he|o) \w)/g, '$1in t$2'); regex(/( )I(nto \w)/g, '$1i$2'); regex(/( )O(f|n|r) A(n? \w)/g, '$1o$2 a$3'); regex(/( )O(f|n|r) M(y \w)/g, '$1o$2 m$3'); regex(/( )O(f|n|r) T(he \w)/g, '$1o$2 t$3'); regex(/( )To A(n? \w)/g, '$1to a$2'); regex(/( )To M(y \w)/g, '$1to m$2'); regex(/( )To T(he \w)/g, '$1to t$2'); regex(/( )With A(n? \w)/g, '$1with a$2'); regex(/( )With M(y \w)/g, '$1with M$2'); regex(/( )With T(he \w)/g, '$1with t$2'); regex(/( )A(t \w)/g, '$1a$2'); regex(/( )I(n \w)/g, '$1i$2'); // regex(/( )O( \w)/g, '$1o$2'); //'Or' - false positive (with heraldric Or); 'On' - name (e.g. Ma On Shan) regex(/(unners?)U(p\b)/g, '$1-u$2'); regex(/(unner)(?:ps)\b/g, '$1s-up'); regex(/(lay)(ffs?)/g, '$1-o$2'); regex(/(\b\d{4})-P(resent\b)/gi, '$1–p$2'); regex(/(\b\d{4}) - P(resent\b)/gi, '$1 – p$2'); regex(/(\b\d{4}(?:–| – ))P(resent\b)/g, '$1p$2'); regex(/(Bring |Turn )t o(n)/g, '$1It O$2'); //reverting proper name - title of song or work regex(/(Carry )o(n \w*|n film)/g, '$1O$2'); //reverting proper name - 'Carry On' film series regex(/(\bMa )o(n Shan\b)/g, '$1O$2'); //reverting proper name - 'Ma On Shan' regex(/(NZ |New Zealand )o(n Air|n Screen)/g, '$1O$2'); //reverting proper name - 'NZ On Air' regex(/(\w (?:\[\[|))O(ff-Broadway\b)/g, '$1O$2'); //not a proper noundowncase regex(/in t(he ir onight)/g, 'In t$1'); //reverting per "In the Air Tonight" regex(/in t(he Flesh our)/g, 'In t$1'); //reverting per "In the Flesh tour" regex(/(\W)o(n This Day)/g, '$1O$2'); //reverting per "on This Day" regex(/({NYT )o(n this day)/g, '$1O$2'); //reverting per "on This Day" regex(/(\bWing )o(n\s\D)/g, '$1O$2'); //reverting "Wing on" regex(/(Star Trek )into( Darkness)/g, '$1Into$2'); //reverting proper name - title of work regex(/((?:Sonata|Symphony|Concerto|Prelude)(?: No\. \d\d?|)) in a((?:-flat|) (?:inor|ajor))/g, '$1 in A$2'); //reverting musical term } function Ohc_format_MOSFLAG(){ //remove flagicons from country, birth and death regex(/((?:birth|death|place|captain|chairman|club|coach|manager|headquarters|citizenship|nationality|occupation|origin|party|region_served|stadium)\s*=\s*)(?:\{\{flag ?icon\|+(?:\|+|)\}\} ?|\]\]\] ?)/gi, '$1'); regex(/((?:birth|death)(?:_?place|)\s*=\s*)\{\{flag(?:country|u|)\|(+)(?:\|+|)\}\}/gi, '$1$2'); regex(/((?:(?:birth|death)(?:_?place|)|citizenship|residence|nationality)\s*=\s*)(?:\{\{flag ?icon\|+(?:\|+|)\}\} ?|\]+\]\] ?)/gi, '$1$2'); regex(/((?:city|location|citizenship|residence|nationality|venue)\s*=\s*)\{\{flag(?:country|)\|(+)(?:\|+|)\}\}/gi, '$1$2'); // regex(/((?:city|location|residence|venue)\s*=\s**)(?:\{\{flag ?icon\|+(?:\|+|)\}\}|\]+\]\]) ?/gi, '$1'); regex(/((?:city|location|citizenship|residence|nationality|venue)\s*=\s*(\]+\|]+\]\]|)*)(?:\{\{flag ?icon\|+(?:\|+|)\}\}|\]+\]\]) ?/gi, '$1'); regex(/((?:country|location|nationality|residence)\s*=\s*)\{\{flagu?\|(+)(?:\|+|)\}\}/gi, '$1$2'); regex(/((?:champs|name|leader|scorer)\s*=\s*)\{\{leagueicon?\|(+)(?:\|+|)\}\}/gi, '$1'); //strip bare facilities icons regex(/\]+)?\]\]\s*/gi, ''); //remove scroll bar for reflists regex(/(References ?={1,4})*<div class=*>(*?)<\/div>/gi, '$1$2'); // regex(/((?:Notes ?|References ?)={2,4}\s?)*(?:\{\{eflist\}\}|<eferences ?\/>)/gi, '$1{{reflist|colwidth=30em}}'); } function Ohc_format_MOSPUNCT(){ //rem redundant spaces underlining and punctuation // regex(/()(\[?\w+)/gi, '$1\"$2'); // regex(/(\w+\]?\.?)(\W)/gi, '$1\"$2'); regex(/(.)(.)/gi, '$1\"$2'); // regex(/()(\[?\w+)/gi, '$1\'$2'); regex(/(\w)(s|t)\b/gi, '$1\'$2'); // in-word replacement of various single quotes and prime symbol with straight apostrophe // regex(/(.)(.)/gi, '$1\'$2'); // straight apostrophe (won't touch prime symbol here) // regex(/(\)>] ) +(|)/gi, '$1$2'); //rem multiple spaces except when preceded by full stop; tweaked to not remove dbl spaces where preceded by new sentence (caps) //disabled per User:Mike Christie request 14 August 2023 regex(/(^\.U\.)+((?:S|K)\.)/gi, '$1$2'); //U. S. and U. K. to U.S. and U.K. regex(/(<\/?ref(?: name=*?|)>)*(<ref)/gi, '$1$2'); // remove punctuation between ref tags regex(/{1,3}(<\/?ref(?:>| >| n))/gi, '$1'); // remove spaces and line feeds preceding ref tags and templates // regex(/{1,3}(:\s)/gi, '$1'); // remove spaces preceding colons //disabled following complaint (Peter Coxhead Sept 2017) // regex(/(<\/ref ?>|<ref name=+\/>)()/gi, '$1 $2'); // add spaces after ref tags // regex(/+(\n|\r)/gi, '$1'); //removes multiple spaces preceding line break regex(/(\d), (\d{3}\b)+/gi, '$1, $2'); //removes nbsp preceding year regex(/(\d)(?: | )%/gi, '$1%'); //removes nbsp preceding '%' regex(/(singer)\/(songwriter)/gi, '$1-$2'); //removes slash regex(/( )(–|–)/gi, '$1$2'); //Palliative for dashes script insertion of space after nbsp regex(/(\d{3,4})(?: | )(?:—|–|—)(?: | )(present)/gi, '$1–$2'); //correct dashes spacing per List 40 regex(/\b(US|UK|A(?:US|)|C(?:AN|)|NZ|HK) ()(\d)/g, '$1$2$3'); regex(/() (\d)/gi, '$1$2'); regex(/(\{\{(?:INR|Indian Rupee)\}\}|Rs\.?)(\d+)/g, '$1 $2'); regex(/\{\{AUD\}\} ?(\d+)/g, 'A$$1'); //rem 'external' wiktionary links regex(/\*(\w]*)\]/gi, '$1'); //rem linked copyright symbol regex(/(\\] |©)/gi, ''); regex(//gi, ''); //rem leading and lagging spaces within wikilinks regex(/(\+(\|]*?)*(\]\])/gi, '$1$2$3'); regex(/(\*(\|]*?)+(\]\])/gi, '$1$2$3'); regex(/(\\|]*?)+(]*?\]\])/gi, '$1$2'); regex(/(\\|]*?)+\|*(]+\]\])/gi, '$1|$2'); // regex(/(\\|]*?)*\|+(]+\]\])/gi, '$1|$2'); //can't remember why we need the second (repeated) line regex(/\\(\)\|:]*)( \(\(\)\|]*(?:album|film|magazine|newspaper|song)\))(\]\])/gi, '[[$1$2|$1$3'); //adding piping to album|film|magazine dabbed by parentheticals //symbol for 'times' and dashes // regex(/×/gi, '×'); // regex(/(+)x(+(?:\.+|)\s)/gi, '$1 × $2'); //disabling - never ending false positives regex(/(\d) x (\d )/gi, '$1 × $2'); regex(/\s(A|B?|C|D|E|F?|G|H|I?|Kr?|L|M|N?|Os?|P?|R|S?|T?|U|V|W|Xe|Yb?|Z)-(Br|Cl?|F|H|I|N|O|P|Se?)\s/g, ' $1–$2 '); //signifying chemical bonds abbrev // regex(/( *)--( *)/gi, '$1–$2'); //disabling - causes false positives with urls and some images // regex(/—/gi, '—'); //stop removing mdash regex(/() — (?=)/gi, '$1 – '); // tweak to avoid replacing emdashes in strings that are in non-roman unicode characters regex(/(\D7\d7)–(\d(?:00|)\D)/gi, '$1-$2'); //airplane model numbers taking hyphen //inserting a white space between wikilinks to avoid errors upon unlinking regex(/(\]\]?)(\[\[)(?!file|image)/gi, '$1 $2'); //full stop and nbsp fixes //protection for strings within wikilinks regex(/(\]*)\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})(*(?:)]*?])/gi, '$1♭$2'); regex(/(\]*)(?:\d?\d\d?\d| \d?\d))(*(?:\.m\.|m)]*?])/gi, '$1♭$2'); //degrees and titles regex(/(Ph)(?:\.\s?|\s)(D)\.?/g, '$1$2'); regex(/\b(B|M)(?:\.\s?|\s)(Arch|Comm|Ed|Eng|Sc|Tech)\.?(?=\W)/g, '$1$2'); // regex(/(\|)\.\s?()\.\s?()\.\s?()\.?\]\]/g, '$1$2$3$4]]'); // regex(/(\|)\.\s?()\.\s?()\.?\]\]/g, '$1$2$3]]'); // regex(/(\|)\.\s?()\.?\]\]/g, '$1$2]]'); //times of day, time ranges // regex(/((?:\d?\d\d?\d| \d?\d) )(?:\.m\.)(?=)/gi, '$1m'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:a\.m\.|am)(?:*| )(?:*| )(\d?\d\d?\d|\d?\d)(?:*| )(?:p\.m\.|pm)(?=)/gi, '$1 am – $2 pm'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:p\.m\.|pm)(?:*| )(?:*| )(\d?\d\d?\d|\d?\d)(?:*| )(?:a\.m\.|am)(?=)/gi, '$1 pm – $2 am'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:a\.m\.|am)(?:*| )(?:*| )(\d?\d\d?\d|\d?\d)(?:*| )(?:a\.m\.|am)(?=)/gi, '$1 am – $2 am'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:p\.m\.|pm)(?:*| )(?:*| )(\d?\d\d?\d|\d?\d)(?:*| )(?:p\.m\.|pm)(?=)/gi, '$1 pm – $2 pm'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:a\.m\.|am)(?:*| )(?:*| )(noon|midnight)(?=)/gi, '$1 am – $2'); // regex(/(\d?\d\d?\d| \d?\d)(?:*| )(?:p\.m\.|pm)(?:*| )(?:*| )(noon|midnight)(?=)/gi, '$1 pm – $2'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:am|AM)(?=)/g, '$1 am'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:pm|PM)(?=)/g, '$1 pm'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.\.)(?=\S)/g, '$1 am'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.\.)(?=\S)/g, '$1 pm'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.)(?=\.)/g, '$1 am'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.)(?=\.)/g, '$1 pm'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.)(?=\.<)/g, '$1 am'); regex(/\b(\d?\d\d?\d| \d?\d)(?:*| )(?:\.)(?=\.<)/g, '$1 pm'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:kw)\b/gi, '$1 kW'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:khz)\b/gi, '$1 kHz'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:mhz)\b/gi, '$1 MHz'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:ghz)\b/gi, '$1 GHz'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:kph|kphr|kmh|kmhr|kmph|kmphr|km\/hr)\b/gi, '$1 km/h'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:m\.p\.h\.)\b/gi, '$1 mph'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(gm|km)s?\b/g, '$1 $2'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:g)s?\b/gi, '$1 kg'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*KMs?\b/gi, '$1 km'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*KGs?\b/gi, '$1 kg'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*(?:K(g|m))s?\b/gi, '$1 k$2'); regex(/(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})*cms?/gi, '$1 cm'); regex(/(\d{1,3})\s(m|b|tr)illion(\b)/g, '$1 $2illion$3'); regex(/(\d)(?: |\s)?C(entimet(?:er|re))/g, '$1 c$2'); regex(/(\d)(?: |\s)?K(ilomet(?:er|re))/g, '$1 k$2'); regex(/(\d)(?: |\s)?KM\b/g, '$1 km'); //turn letter 'x' into symbol '×' regex(/(\d)\sx\s(\d{1,3})\sin\s\(/gi, '$1 × $2 in ('); regex(/(\d)\sx\s(\d{1,3})\sinch\s/gi, '$1 × $2 inch '); // Convert degree symbols into ° symbol, ensure preceding space regex(/°/g, '°'); // regex(/º/g, '°'); // Celsius spelling errors regex(/(?:celsius|celcius|centigrade)/gi, 'Celsius'); //Fix common naming error (be careful with this one) // regex(/centigrade/gi, 'Celsius'); //Celsius or Fahrenheit regex(/(\d) (?:|deg|degree|degrees) (\W)/g, '$1 °$2'); regex(/(\d)(?:|deg|degree|degrees) (\W)/g, '$1 °$2'); regex(/(\d) (?:|deg|degree|degrees)(\W)/g, '$1 °$2'); regex(/(\d)(?:\s|)(?:|deg|degree|degrees)(?:\s|)(\W)/g, '$1 °$2'); regex(/(\d)(?:\s| )?(?=\C\]\])/gi, '$1 $2'); regex(/(\d)(?:\s| )?(?=\F\]\])/gi, '$1 $2'); regex(/(\s)(-?\d*)(?:\s|-| |)F(?\s)/g, '$1{{convert|$2|°F|°C|abbr=on}}$3'); regex(/(\s)(-?\d*)(?:\s|-| |)(?:deg|degree|degrees)(?:\s|-| |)Fahrenheit(?\s)/gi, '$1{{convert|$2|°F|°C}}$3'); // Convert &sup to superscript // regex(/(m)(?:²|²);/gi, '$1<sup>2</sup>'); // regex(/(m)(?:³|³);/gi, '$1<sup>3</sup>'); //remove commas from numerical values in convert template regex(/(\{convert\|\d+),(\d)/gi, '$1$2'); regex(/(\{convert\|\d+),(\d)/gi, '$1$2'); regex(/(\{convert\|\d+),(\d)/gi, '$1$2'); regex(/(\{convert\|\d+),(\d)/gi, '$1$2'); regex(/(\{convert\|\d+),(\d)/gi, '$1$2'); //inappropriate unit pairs for convert template regex(/(\{\{convert\s*\|\d+(?:\.\d|)\|acre\|)m2(?=)/gi, '$1ha'); //remove leading zeros from convert template regex(/(\{\{convert\s*\|)\s*0+(?=)/gi, '$1$2'); ///e-acute accent in spelling regex(/\b(caf|clich)e\b/g, '$1é'); } function Ohc_format_MOSHASH(){ //hash fixes regex(/( )#(\d{1,3}?)/gi, '$1No. $2'); } function Ohc_format_COMMONALITY(){ ///per WP:COMMONALITY regex(/()reshman (year)/g, '$1irst $2'); regex(/()ophomore (album|year)/g, '$1econd $2'); regex(/in order (that )/g, 'so $1'); // see Tony email of 31/8/2019 regex(/in order (to |for )/g, '$1'); // see Tony email of 31/8/2019 regex(/In order t(o )/g, 'T$1'); regex(/In order f(or )/g, 'F$1'); regex(/(said),? in a statement/g, '$1'); regex(/(over|under)\-(u)tili(e?)/g, '$1$2s$3'); //"use" instead of "utilise" regex(/()tili(e?|ing)/g, '$1s$2'); //"use" instead of "utilise" regex(/()tiliation/g, '$1se'); regex(/((?:back|for|down|left|right)ward)s/g, '$1'); regex(/(hil)st/g, '$1e'); regex(/(mong)st/g, '$1'); regex(/(sul)ph(ur|ate)/g, '$1f$2'); //IUPAC spelling per message on Engvar page regex(/c(esium)/g, 'ca$1'); //IUPAC spelling per message on Engvar page regex(/(alumin)(um)/g, '$1i$2'); //IUPAC spelling per message on Engvar page regex(/(New York)(?: City|), New York(?: state|)/g, '$1 City'); //remove Crores and Lakhs in templates converting to USD regex(/\{\{INR Convert*\|*/gi, '{{INRConvert|'); //removing spaces (redirects to shortcut) regex(/(\{INRConvert\|-?\d{2,})8\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$19$2'); regex(/(\{INRConvert\|-?\d{2,})7\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$18$2'); regex(/(\{INRConvert\|-?\d{2,})6\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$17$2'); regex(/(\{INRConvert\|-?\d{2,})5\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$16$2'); regex(/(\{INRConvert\|-?\d{2,})4\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$15$2'); regex(/(\{INRConvert\|-?\d{2,})3\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$14$2'); regex(/(\{INRConvert\|-?\d{2,})2\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$13$2'); regex(/(\{INRConvert\|-?\d{2,})1\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$12$2'); regex(/(\{INRConvert\|-?\d{2,})0\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$11$2'); regex(/(\{INRConvert\|-?\d{3,})\.\d**(\|c(?:\|-?\d|)\}\})/gi, '$1$2'); regex(/(\{INRConvert\|)(-?\d+)0000*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2|b$3$4'); regex(/(\{INRConvert\|)(-?\d+)0*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2|m$3$4'); regex(/(\{INRConvert\|)(-?\d+)(\d)*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2.$3|m$4$5'); regex(/(\{INRConvert\|)(-?\d+)*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$200000$3$4'); regex(/(\{INRConvert\|)(-?\d+)\.(\d)*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2$30000$4$5'); regex(/(\{INRConvert\|)(-?\d+)\.(\d)(\d)*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2$3$4000$5$6'); // regex(/(\{INRConvert\|)(-?\d+)(\d)*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2.$3|m$4$5'); regex(/(\{INRConvert\|)(-?\d+)\.(\d)*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2$3|m$4$5'); regex(/(\{INRConvert\|)(-?\d+)\.(\d)(\d+)*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2$3.$4|m$5$6'); regex(/(\{INRConvert\|)(-?\d+)00*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2|b$3$4'); regex(/(\{INRConvert\|)(-?\d+)(\d)0*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2.$3|b$4$5'); regex(/(\{INRConvert\|)(-?\d+)(\d\d)*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$2.$3|b$4$5'); regex(/(\{INRConvert\|)(-?\d+)*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})/gi, '$1$20|m$3$4'); regex(/(\{INRConvert\|-?\d{2,})8\.\d**(\|(?:\|-?\d|)\}\})/gi, '$19$2'); regex(/(\{INRConvert\|-?\d{2,})7\.\d**(\|(?:\|-?\d|)\}\})/gi, '$18$2'); regex(/(\{INRConvert\|-?\d{2,})6\.\d**(\|(?:\|-?\d|)\}\})/gi, '$17$2'); regex(/(\{INRConvert\|-?\d{2,})5\.\d**(\|(?:\|-?\d|)\}\})/gi, '$16$2'); regex(/(\{INRConvert\|-?\d{2,})4\.\d**(\|(?:\|-?\d|)\}\})/gi, '$15$2'); regex(/(\{INRConvert\|-?\d{2,})3\.\d**(\|(?:\|-?\d|)\}\})/gi, '$14$2'); regex(/(\{INRConvert\|-?\d{2,})2\.\d**(\|(?:\|-?\d|)\}\})/gi, '$13$2'); regex(/(\{INRConvert\|-?\d{2,})1\.\d**(\|(?:\|-?\d|)\}\})/gi, '$12$2'); regex(/(\{INRConvert\|-?\d{2,})0\.\d**(\|(?:\|-?\d|)\}\})/gi, '$11$2'); regex(/(\{INRConvert\|-?\d{3,})\.\d**(\|(?:\|-?\d|)\}\})/gi, '$1$2'); //Currency notation placements regex(/\s(\$(?:\d+\.\d\d?|\d{1,3}|\d{1,3},\d{3}))((?:\s| )(?:m|b|tr)illion|)*(?:US(?:|\s?dollars?))\b/gi, ' US$1$2'); //Remove surprise or 'Easter egg' diversions linking unit name to orders of magnitude articles regex(/\?\d{1,2}\s?..?\|(]{1,50})\]\]/gi, '$1'); regex(/\+\)\|(]{1,50})\]\]/gi, '$1'); regex(/(\d)♭(\w| )/g, '$1$2'); //remove useless comments regex(/<!-- Metadata: see \\]\. -->/gi, ''); //Deleted image cleanup regex(/<!-- Deleted image removed:*? -->\n*/gi, ''); // setoptions(minor='true'); //removed ",watch='false'" in response to user notification 13 Nov. 2010 // setreason('remove bold formatting', 'append'); } /** ------------------------------------------------------------------------ **/ /// PROTECTION BY STRING SUBSTITUTION var linkmap=; function ohc_downcase_CEO() { // 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(/(<(?:imagemap)>)(*)(<\/(?:imagemap)>)/gi, protect_function); regex(/(\{(?:Coord|See ?also|Main|Wikisource))(\|*)(\})/gi, protect_function); regex(/(\{\{cit(?:ation|e))(*)(\}\})/gi, protect_function); regex(/((?:Category|File|Image):)(]*)(])/gi, protect_function); regex(/((?:image\d?|image_skyline|imagelocation\d?|imagename|imagefile|img|pic)\s*=)(*)()/gi, protect_function); regex(/(\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|colors?|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)(*)()/gi, protect_function); regex(/(\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|colors?|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)(*)()/gi, protect_function); regex(/(\|\s*edition\s*=)(]*)(])/gi, protect_function); regex(/(\|\s*\w*\s*=\s*)(\d(?:st|nd|rd|th)]*)(])/gi, protect_function); regex(/(\D)(\d(?:st|nd|rd|th)(?: (?:to |and )(?:the |)\d{1,2}(?:st|nd|rd|th)|) (?:centur|ed|grade|millenni|parallel|round))(.)/gi, protect_function); //protecting lower case terms only; code does not expand where ordinal num is followed by a block cap regex(/((?:cover|file(?:name\d?|)|image\d?|image_skyline|imagelocation\d?|imagename|img|pic|map|title|quote)\s*=)(*)()/gi, protect_function); regex(/(\]*)(\])/gi, protect_function); regex(/(\]*)(\|)/gi, protect_function); regex(/(\{\{\w*)(]*)(\}\})/gi, protect_function); regex(/(<ref(?: name="*?" ?|)>)(*?)(<\/ref>)/gi, protect_function); regex(/(<ref(?: name=\w+)>)(*?)(<\/ref>)/gi, protect_function); regex(/(\{Infobox)( non Test)( cricket)/gi, protect_function); regex(/(.)((?:Chairman's|President'?s) (?:XI|Cup))(.)/g, protect_function); regex(/(.)(100\scrore club)(.)/gi, protect_function); regex(/(.)(Conference of Presidents)(.)/g, protect_function); regex(/(.)((?:Pussy|Infa) Riot)(.)/g, protect_function); regex(/(.)(Dramatical Murder)(.)/gi, protect_function); regex(/(\|]*)(|])/gi, protect_function); regex(/(Chief (Executive|Financial|Operating|Information|Marketing) Officer)/g, '{{' + 'subst:' + 'lc:$1}}'); // regex(/C(hief Executive)(?=\W)/g, 'C{{' + 'subst:' + 'lc:$1}}'); regex(/M(anaging )D(irector)(?=\W)/g, 'm$1d$2'); regex(/G(eneral )M(anager\b)(?!of|*=)/g, 'g$1m$2'); regex(/(Chairman of the Board(?: of Directors|))/g, '{{' + 'subst:' + 'lc:$1}}'); regex(/(oard of Directors)(?=\W)/g, '{{' + 'subst:' + 'lc:$1}}'); regex(/(Board Members?)(?=\W)/g, '{{' + 'subst:' + 'lc:$1}}'); regex(/(Committee Members?)(?=\W)/g, 'c{{' + 'subst:' + 'lc:$1}}'); regex(/(Independent (?:(?:Non|)Executive |)Directors)(?=\W)/gi, '{{' + 'subst:' + 'lc:$1}}'); regex(/(NonExecutive Directors?)(?=\W)/g, '{{' + 'subst:' + 'lc:$1}}'); // regex(/I(ndependent )S(chool)(?=\W)/g, 'i$1s$2'); //false positive with Independent Schools Inspectorate etc regex(/N(on)P(rofit)(?=\W)/g, 'n$1p$2'); regex(/(\w\s)V(ice)C(hair(?:man|)\W)(?!of)/g, '$1v$2-c$3'); regex(/(\w\s)C(hairman\W)(?!of)/g, '$1c$2'); regex(/C(ompany )S(ecretary\W)(?!of)/g, 'c$1s$2'); // regex(/G(eneral )S(ecretary\W)(?!of)/g, 'g$1s$2'); //disabled General Secretary // regex(/(\b\w*\.?\s)V(ice)P(resident\W|rincipal)(?!of)/g, '$1v$2-p$3'); regex(/(\w\s+)P(residents)/g, '$1p$2'); // regex(/(\b\w*\.?\s)P(resident\W)(?!of)/g, '$1p$2'); // regex(/(\w\s)D(eputy) P(rime)M(inister\W)(?!of)/g, '$1d$2 p$3 m$4'); regex(/(\s)M(ember of )P(arliament\W)/g, '$1m$2p$3'); regex(/(\w\s)M(embers of )P(arliament\W)/g, '$1m$2p$3'); // Euros - replace space as separator regex(/(€|Euros?) ?(\d+)(\d{3})(\d{3})(\d{3})(\d{3})(?=\W)/g, '$1$2,$3,$4,$5,$6'); regex(/(€|Euros?) ?(\d+)(\d{3})(\d{3})(\d{3})(?=\W)/g, '$1$2,$3,$4,$5'); regex(/(€|Euros?) ?(\d+)(\d{3})(\d{3})(?=\W)/g, '$1$2,$3,$4'); regex(/(€|Euros?) ?(\d{3})(\d{3})(?=\W)/g, '$1$2,$3'); regex(/(\d+)(\d{3})(\d{3}) ?(€|Euros?|\\])(?=\W)/g, '$4$1,$2,$3'); regex(/(\d+)(\d{3}) ?(€|Euros?|\\])(?=\W)/g, '$3$1,$2'); // replace full stop as thousands separator regex(/(\|+)(\d+)(\d{3})(\d{3})(\d{3})(?=*)/g, '$1$2,$3,$4,$5'); regex(/(\|+)(\d+)(\d{3})(\d{3})(?=*)/g, '$1$2,$3,$4'); // regex(/(\|+)(\d+)(\d{3})(?=*)/g, '$1$2,$3'); //disabled 2 april 2017 due to false positives with 3dp // replace comma as decimal separator regex(/(\|+)(\d+),(\d\d?)(?=*)/g, '$1$2.$3'); //add obligatory space or single quote mark,- false positives within convert templates regex(/(\(\d+),(\d\d?%\))/g, '$1.$2'); //percentages in parentheses regex(/(\{\{(?:de|in)crease\}\}\s*)(\d+),(\d\d?)(?=*)/g, '$1$2.$3'); regex(/()*(\d+)(?=\W)/g, '$1$2'); regex(/()(\d+),(\d\d?)(?=\W)/g, '$1$2.$3'); regex(/(\W)(\d+),(\d\d?)*(?=|Euro?)/g, '$1$2.$3'); regex(/(\|\s*attendance\s*=\s*\d{1,3})?(\d{3}\D)/gi, '$1,$2'); // layout - rem horizontal lines per WP:LAYOUT // regex(/(\n)----\n/g, '$1'); // html element - may sometimes be appropriate – disabled per discussion at WT:LAYOUT July 2014 //remove Crores and Lakhs not in templates regex(/(\d+)?(?:lakh|\\])(?:crores?|\\])/g, '$1 trillion (])'); regex(/(?:(\d+),|)(\d+)0,000(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$2 billion'); regex(/(?:(\d+),|)(\d+)\.(\d)(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$2$30,000'); regex(/(?:(\d+),|)(\d+)\.(\d)(\d)(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$2$3$4,000'); regex(/(?:(\d+),|)(\d+)0(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$2 million'); regex(/(?:(\d+),|)(\d+)(\d+)(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$2.$3 million'); regex(/(?:(\d+),|)(\d+)(?: |\s)?(?:acs?|akhs?|\akhs?(?:\||\|acs?|\|akhs?|)\]\]s?)(?=)/g, '$1$200,000'); regex(/(?:(\d+),|)(\d+)\.(\d)(?: |\s)?(?:rs?|rores?|\rores?(?:\|rs?|\|rores?|)\]\]s?)(?=)/g, '$1$2$3 million'); regex(/(?:(\d+),|)(\d+)\.(\d)(\d+)(?: |\s)?(?:rs?|rores?|\rores?(?:\|rs?|\|rores?|)\]\]s?)(?=)/g, '$1$2$3.$4 million'); regex(/(?:(\d+),|)(\d+)00(?: |\s)?(?:rs?|rores?|\rores?(?:\|rs?|\|rores?|)\]\]s?)(?=)/g, '$1$2 billion'); regex(/(?:(\d+),|)(\d+)(\d\d)(?: |\s)?(?:rs?|rores?|\rores?(?:\|rs?|\|rores?|)\]\]s?)(?=)/g, '$1$2.$3 billion'); regex(/(?:(\d+),|)(\d+)(?: |\s)?(?:rs?|rores?|\rores?(?:\|rs?|\|rores?|)\]\]s?)(?=)/g, '$1$20 million'); // Indian commas regex(/(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d),(\d\d),(\d\d\d)(?=\D)/g, '$1{{formatnum:$2$3$4$5$6$7}}'); regex(/(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d),(\d\d\d)(?=\D)/g, '$1{{formatnum:$2$3$4$5$6}}'); regex(/(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d\d)(?=\D)/g, '$1{{formatnum:$2$3$4$5}}'); regex(/(\W)(\d{1,3}),(\d\d),(\d\d\d)(?=\D)/g, '$1{{formatnum:$2$3$4}}'); regex(/(\{INR)\}\}*\{\{formatnum:(\d+\}\})/g, '$1Convert|$2'); // regex(/(\{\{(?:INR|Indian Rupee)\}\}|Rs\.?) (\d+)/g, '$1$2'); //removes protection put in place by function ohc_protect_fmt (all cats, templates etc.) regex(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { return linkmap; }); return res; }); return res; }); return res; }); } /** ------------------------------------------------------------------------ **/ /// LINKSPAM removal with protection for Reference tags and External links var linkmap=; function ohc_linkspam() { // protects everything within reference tags // 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(/(== ?(?:Bibliography|Further reading|References|Sources|Works) ?==+)(\n*?)(\n)(?===)/gi, protect_function); regex(/(== ?(?:Attribution|External links) ?==+)(\n*?)(\]+\]\])/gi, protect_function); regex(/({{(?:r?efn|sfnp?|wikicite) ?\|)(*?)(}})/gi, protect_function); regex(/(<ref name="*?" ?>)(*?)(<\/ref>)/gi, protect_function); regex(/(<ref*?>)(*?)(<\/ref>)/gi, protect_function); regex(/(\|\s?(?:image|model|references?|video)\d\s?=\s??\]*)(\])/gi, protect_function); regex(/(?\]*)(\])/gi, protect_function); //protect links within tables regex(/(?)\]*+(]*)\](?!*+)/gi, '$1$2'); //removes protection put in place by function ohc_protect_fmt (all cats, templates etc.) regex(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { return linkmap; }); return res; }); return res; }); return res; }); } function ohc_change_type(){ //update syntax of 'File' // regex(/\mage):/g, '[[File:'); //add {{url}} template to infobox parameter regex(/(\{\{) ?(url) ?(?=\|)/gi, '$1$2'); regex(/(\{\{url\|)*(?:http:\/\/|)(www\.+\}\})*(?=)/gi, '$1$2'); regex(/(\{\{url\|)(?:http:\/\/|)www\.(+)\|(?:\2|Official (?:web|)site)}}(?=)/gi, '$1$2}}'); regex(/(\| ?homepage*=)*(?:http:\/\/|)(]+)(?=)/gi, '$1\{\{url|$2\}\}'); //rem 'website=' regex(/(\| ?(?:homepage|website)*=)*\]+) \2\3\](?=)/gi, '$1\{\{url|$3}}'); regex(/(\| ?(?:homepage|website)*=)*\]+) official (?:web|)site\](?=)/gi, '$1{{url|$2}}'); //remove icons from headers (needs to occur before protection) regex(/(==?(?:*))\]+?\]\](*)(?==)/gi, '$1$2$3'); } function Ohc_final_cleanup(){ //adjust piping - remove redundant, adding piping for parentheticals regex(/\\|]*)\|(a)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(b)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(c)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(d)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(e)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(f)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(g)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(h)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(i)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(j)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(k)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(l)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(m)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(n)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(o)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(p)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(q)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(r)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(s)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(t)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(w)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(x)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(y)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|(z)\1( ]*|)(\]\])/g, '[[$2$1$4$3'); regex(/\\|]*)\|\1( ]*|)(\]\])/gi, '[[$1$3$2'); regex(/\\(\)\|:]*)( \((?:\d{4} |)film\))(\]\])/gi, '\'\'[[$1$2|$1$3\'\''); regex(/\\(\)\|:]*)( \(\(\)\|]*(?:album|film|magazine|newspaper|song|\bEP)\))(\]\])/g, '[[$1$2|$1$3'); //adding piping to album|film|magazine dabbed by parentheticals // regex(/(\\(\)\|:]*)( \(\(\)\|]*\))(\]\])(?!)/gi, '$1$2$3|$2$4'); //ensure songs titles not piped by default, but disabled due to false removal from visible disambiguators // deprecated parameters in citation templates regex(/(\|\s*)coauthors(\s*=\s*)/g, '$1author2$2'); } function Ohc_downcase_headings(){ //cleanup of headings per MOSHEAD before complete downcasing (most code is copied from other parts of the script) // remove file regex(/(==?(?:*))\]+?\]\](*)(?==)/gi, '$1$2$3'); //rem linking within section headings regex(/(==?(?:*))\]+?)\]\]((?:*|)?==)/gi, '$1$2$3'); regex(/(==?(?:*))\]+?\|(]+?)\]\]((?:*|)?==)/gi, '$1$2$3'); regex(/(==?(?:*))\]+?\||)(]+?)\]\](*)\]+?\||)(]+?)\]\](?:(*)\]+?\||)(]+?)\]\]|)((?:*|)?==)/gi, '$1$2$3$4$5$6$7'); //original code regex(/(==+?)(*)(?===+ ?\n)/g, '$1{{' + 'subst:' + 'lc:$2}}'); } function Ohc_castlist(){ //remove flagicons from country, birth and death regex(/(\* )(\*\]\]) as (*)()(*)()/gi, '$1\'\'\'$3\'\'\' ($2)$4$5$6'); } /** ------------------------------------------------------------------------ **/ /// PROTECTION BY STRING SUBSTITUTION var linkmap=; function ohc_protect_fmt() { // 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(/(\{Wikisource\|)(*)(\})/gi, protect_function); regex(/((?:Category|File|Image):)(]*)(])/gi, protect_function); regex(/((?:{2,3}):)(]*)(])/gi, protect_function); regex(/(\{(?:See ?also|Main))(\|*)(\})/gi, protect_function); regex(/((?:cover|file(?:name|)|image\d?|image_skyline|imagelocation\d?|imagename|img|pic|map|quote|title)\s*=)(*)()/gi, protect_function); regex(/(\]*)(\|)/gi, protect_function); regex(/(\{\{\w*)(]*)(\}\})/gi, protect_function); regex(/()(*)()/gi, protect_function); regex(/(<ref name=)(*)(>)/gi, protect_function); regex(/(Convoy(?: |\s))(\w{2,3}(?: |\s)\d\d(?: |\s)?\w{2,3})(.)/gi, protect_function); regex(/(\{Infobox)( non Test)( cricket)/gi, protect_function); regex(/(\d*)(Cr App R)(.)/g, protect_function); regex(/(.)(British Coal Utilisation Research Association)(.)/g, protect_function); regex(/(.)(On a Friday)(.)/g, protect_function); regex(/(.)(Not On Our Watch Project)(.)/g, protect_function); regex(/(.)(Octopussy and the living daylights)(.)/gi, protect_function); regex(/(.)(\'?Carry On *)(.)/g, protect_function); regex(/(.)(10 metre (?:air|running) \w*)(.)/g, protect_function); regex(/(.)(\d day (?:schools) \w*)(.)/g, protect_function); regex(/(.)(TV)(.)/g, protect_function); regex(/(\|\s*quote\s*=)(+)(\|)/g, protect_function); } function ohc_unprotect_fmt() { //removes protection put in place by function ohc_protect_fmt (all cats, templates etc.) regex(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { var res = linkmap; res = res.replace(/⍌(+)⍍/g, function(x, n) { return linkmap; }); return res; }); return res; }); return res; }); } /** ------------------------------------------------------------------------ **/ //DRIVERS function Ohc_formats(){ Ohc_format_Sundry(); Ohc_format_MOSCAPS(); Ohc_format_MOSFLAG(); Ohc_format_MOSPUNCT(); Ohc_format_MOSHASH(); Ohc_format_COMMONALITY(); } function Ohc_formatsbis(){ Ohc_format_Sundry(); Ohc_format_MOSCAPS(); Ohc_format_MOSFLAG(); Ohc_format_MOSPUNCT(); // Ohc_format_MOSHASH(); Ohc_format_COMMONALITY(); } // </syntaxhighlight>