User:Lightmouse/monobook.js/test script.js

//See Date delinking arbitration - Temporary injunction

//Quote created on 22 January 2009 (it may have changed when you read this):

//************************************************************************************

//"Until this case is decided or otherwise directed by the Arbitration Committee,

//all editors are instructed not to engage in any program of mass linking or delinking

//of dates in existing articles, including but not limited to through the use of bots,

//scripts, tools, or otherwise. This injunction is entered as an interim measure and

//does not reflect any prejudgment of any aspect of the case. The Clerk will notify the

//parties of this temporary injunction and post a note of it on the appropriate policy page(s).

//Passed 10 to 0 at 11:52, 13 January 2009 (UTC)"

//************************************************************************************

//Instructions for installation

//*EITHER: If you have a monobook already, go to it, click "edit this page", and paste in this string underneath your existing script:

//:importScript('User:Lightmouse/monobook.js/script.js');

//*OR: If you don't have a monobook.js page, create one using this title:

//:User:[your username]/monobook.js

//:Then click on "edit this page" and paste in at the top the "importScript" string you see three lines above here.

//*Hit "Save page".

//*Refresh your cache (instructions at top of monobook).

//*You're ready to start.

//Applying the script—it's very simple

//*Go to an article and determine whether US or international format is used. (For this purpose, it's best to have selected "no preferences" for dates in your user preferences, which will display the raw date formats that our readers see. Otherwise, you'll need to check in edit mode.) Occasionally, you'll see that the wrong format is used (check MOSNUM's guidance on this carefully).

//*Click on "edit this page". You'll see the list of script commands under "what links here". Click on either "delink all dates to mdy" (US format) or "delink all dates to mdy" (international format).

//*The diff will automatically appear. Check through the changes you're making before saving them. If there are problems, fix them manually before saving, or cancel.

//*Leave a note at the article talk page if editors need to negotiate which format to use, or need to be alerted to any other date-related issues.

//*Click on "Save page": it's done.

function make_dates_bold(){

var txt=document.editform.wpTextbox1;

//process date ranges containing a hyphen

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?[-–]\s?(?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)\s?:\s?/gi, '* \'\'\'$1:\'\'\' ');

//process date ranges containing a hyphen

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?[-–]\s?\d\d?)\s?:\s?/gi, '* \'\'\'$1:\'\'\' ');

//protect date ranges containing a hyphen

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?)[-–](\s?(?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)\s?:\s?/gi, '$1xx$2');

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?)[-–](\s?\d\d?)\s?:\s?/gi, '$1xx$2');

//process dates containing a hyphen

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?)[-–]\s?/gi, '* \'\'\'$1:\'\'\' ');

//unprotect date ranges containing a hyphen

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?)xx(\s?(?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)\s?:\s?/gi, '$1–$2');

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?\s?)xx(\s?\d\d?)\s?:\s?/gi, '$1–$2');

//process other dates

txt.value=txt.value.replace(/\*\s?((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)\s?:\s?/gi, '* \'\'\'$1:\'\'\' ');

edit_summary();

}

function fix_common_errors() {

var txt=document.editform.wpTextbox1;

//first add template

//if (txt.value.search(/\{\{template\}\}/gi) == -1)

//{

//txt.value='\{\{template\}\}\r\n'+txt.value;

//}

//month+day piped

txt.value=txt.value.replace(/\[\[\d{1,2}(?:th|st|nd|rd|)\s(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s\d{1,2}(?:th|st|nd|rd|)\|([^\]]{1,30})\]\]/gi, '$1');

//fix 'bda' template redirect

txt.value=txt.value.replace(/\{\{bda\|([^}]+)\}\}/gi, '\{\{birth date and age|$1\}\}');

txt.value=txt.value.replace(/(\[\[)\s([^\]]*\]\])/gi, '$1$2');

txt.value=txt.value.replace(/(\[\[[^\]\|]*)\s(\]\])/gi, '$1$2');

txt.value=txt.value.replace(/(\[\^\*\s)\s+([^\]]\]\])/gi, '$1$2');

txt.value=txt.value.replace(/(\[\^\*\d),(\]\])/gi, '$1$2');

}

function part_dates() {

var txt=document.editform.wpTextbox1;

fix_common_errors();

//remove leading zeros from dts templates

txt.value=txt.value.replace(/(\{\{dts\d?\|[^}]*\|)0([^}]*\}\})/gi, '$1$2');

//delink ISO dates

txt.value=txt.value.replace(/\[\[(\d{4}-\d\d-\d\d)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[(\d\d-\d\d)\]\]/gi, '$1-$2');

txt.value=txt.value.replace(/(\d{4})-\[\[(\d\d-\d\d)\]\]/gi, '$1-$2');

txt.value=txt.value.replace(/\[\[(\d{4})\]\]-(\d\d-\d\d)/gi, '$1-$2');

//remove templates that links launch year, baseball year etc

// txt.value=txt.value.replace(/\{\{(?:avyear|by|fy|ly|scy|sdy)\|(\d{1,4})\}\}/gi, '$1');

//remove dts1 template that links ISO dates

txt.value=txt.value.replace(/\{\{dts1\|(\d{4}-\d\d-\d\d)\}\}/gi, '$1');

// century

// txt.value=txt.value.replace(/\[\[((?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first)(?:\s|-))(century|centuries)\]\]/gi, '$1$2');

// txt.value=txt.value.replace(/\[\[(?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first(?:\s|-))(?:century|centuries)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[((?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first)(?:\s|-))(century|centuries)(\sAD|\sBC|\sCE|\sBCE|)\]\]/gi, '$1$2$3');

txt.value=txt.value.replace(/\[\[(?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first)(?:\s|-)(?:century|centuries)(?:\sAD|\sBC|\sCE|\sBCE|)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))(century|centuries)(\sAD|\sBC|\sCE|\sBCE|)\]\]/gi, '$1$2$3');

txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)(?:century|centuries)(?:\sAD|\sBC|\sCE|\sBCE|)\|([^\]]{1,30})\]\]/gi, '$1');

// decades and years

txt.value=txt.value.replace(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s');

txt.value=txt.value.replace(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1');

txt.value=txt.value.replace(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');

txt.value=txt.value.replace(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1');

//month+year

//Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below

txt.value=txt.value.replace(/\[\[\d{1,4}#[^\|\]]+\|((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{3,4})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{3,4})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{3,4}\|([^\]]{1,30})\]\]/gi, '$1');

//removed piped years when in full date

txt.value=txt.value.replace(/(\[\[\d{1,2}\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\],?\s?\[\[)[^\|\]]{1,32}\|(\d{1,4}\]\])/gi, '$1$2');

txt.value=txt.value.replace(/(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}\]\],?\s?\[\[)[^\|\]]{1,32}\|(\d{1,4}\]\])/gi, '$1$2');

//remove 'xx' left by other code

txt.value=txt.value.replace(/(in)xx((?:aviation|baseball|film|literature|comics|ireland))/gi, '$1 $2');

//'present'

txt.value=txt.value.replace(/\[\[Present\s\(time\)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(Present)\]\]/gi, '$1');

//Season

txt.value=txt.value.replace(/\[\[(spring\s\(season\)|summer|winter|autumn)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[spring\s\(season\)\|([^\]]{1,30})\]\]/gi, '$1');

//Identify surprise or 'Easter egg' diversions linking months to year articles.

txt.value=txt.value.replace(/\[\[\d{1,4}#[^\|\]]+\|(January|February|March|April|May|June|July|August|September|October|November|December)\]\]/gi, '$1');

// months

txt.value=txt.value.replace(/\[\[(January|February|March|April|May|June|July|August|September|October|November|December)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(Jan\.?|Feb\.?|Mar\.?|Apr\.?|May\.?|Jun\.?|Jul\.?|Aug\.?|Sep\.?|Oct\.?|Nov\.?|Dec\.?)\]\]/g, '$1');

//Treat 'Sept' (i.e. month abbreviation) differently from 'sept' (i.e. family)

txt.value=txt.value.replace(/\[\[(Sept)\]\]/g, '$1');

//Month+day_number "March 7th" -> "March 7"

txt.value=txt.value.replace(/\[\[(January|February|March|April|May|June|July|August|September|October|November|December)\s(\d?\d)(?:th|st|nd|rd)\]\]/gi, '$1 $2');

txt.value=txt.value.replace(/\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](?:th|st|nd|rd)/gi, '$1');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd)\s(January|February|March|April|May|June|July|August|September|October|November|December)\]\]/gi, '$1 $2');

//Sequence containing month+day_number piped into number. Preferences do not work. They don't work in sequence because digits in the two dates must be adjacent

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?\-?\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with ndash or mdash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?&[nm]dash;\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with slash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?\-?\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with ndash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?&[nm]dash;\s?)\[\[(\d{1,2})\]\]/gi, '$1$2$3$4');

//same again but with slash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\/)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?\-?\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with ndash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?&[nm]dash;\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with slash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?\-?\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with ndash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?&[nm]dash;\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

//same again but with slash instead of hyphen

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1$2$3$4');

// month and day piped

txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[\d{1,2}(?:th|st|nd|rd)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\|([^\]]{1,30})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th))\]\]/gi, '$1');

//4 digit years piped

txt.value=txt.value.replace(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1');

//full dates with incorrect 'year in'

txt.value=txt.value.replace(/(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s(?:[0123][\d]|[\d])\]\]),\s\[\[(\d{1,4})\sin\s[^\]]{1,32}\]\]/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[(?:[0123][\d]|[\d])\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\])\s\[\[(\d{1,4})\sin\s[^\]]{1,32}\]\]/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[(?:[0123][\d]|[\d])\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\])\s\{\{(?:avyear|by|fy|ly|scy|sdy)\|(\d{1,4})\}\}/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s(?:[0123][\d]|[\d])\]\]),\s\{\{(?:avyear|by|fy|ly|scy|sdy)\|(\d{1,4})\}\}/gi, '$1 $2');

}

function formatgeneral() {

var txt=document.editform.wpTextbox1;

//remove flagicons from birth and death

txt.value=txt.value.replace(/(birth\s?=\s?)\{\{flagicon\|[^\}]+\}\}/gi, '$1');

txt.value=txt.value.replace(/(death\s?=\s?)\{\{flagicon\|[^\}]+\}\}/gi, '$1');

txt.value=txt.value.replace(/(birth_?place\s?=\s?)\{\{flagicon\|[^\}]+\}\}/gi, '$1');

txt.value=txt.value.replace(/(death_?place\s?=\s?)\{\{flagicon\|[^\}]+\}\}/gi, '$1');

//symbol for 'times'

txt.value=txt.value.replace(/×/gi, '×');

//turn letter 'x' into symbol '×'

txt.value=txt.value.replace(/(\d)\sx\s(\d{1,3})\sin\s\(/gi, '$1 × $2 in (');

txt.value=txt.value.replace(/(\d)\sx\s(\d{1,3})\sinch\s/gi, '$1 × $2 inch ');

// Convert degree symbols into ° symbol, ensure preceding space

txt.value=txt.value.replace(/°/g, '°');

txt.value=txt.value.replace(/º/g, '°');

//aviation specifications: protect 'main=' and 'alt=' - undone below

txt.value=txt.value.replace(/((?:main|alt)\s?=\s?)(\d)/gi, '$1xx$2');

// Celsius spelling errors

txt.value=txt.value.replace(/celsius/gi, 'Celsius');

txt.value=txt.value.replace(/celcius/gi, 'Celsius');

//Fix common naming error (be careful with this one)

txt.value=txt.value.replace(/centigrade/gi, 'Celsius');

//Celsius or Fahrenheit

txt.value=txt.value.replace(/(\d) (?:°|deg|degree|degrees) ([CF]\W)/g, '$1 °$2');

txt.value=txt.value.replace(/(\d)(?:°|deg|degree|degrees) ([CF]\W)/g, '$1 °$2');

txt.value=txt.value.replace(/(\d) (?:°|deg|degree|degrees)([CF]\W)/g, '$1 °$2');

txt.value=txt.value.replace(/(\d)(?:\s|)(?:°|deg|degree|degrees)(?:\s|)([CF]\W)/g, '$1 °$2');

txt.value=txt.value.replace(/(\d) (\[\[Celsius|°C\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\d)(?:\s|)(\[\[Celsius|°C\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\d) (\[\[Fahrenheit|°F\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\d)(?:\s|)(\[\[Fahrenheit|°F\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-| |)°?F([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|°F|°C|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-| |)(?:deg|degree|degrees)(?:\s|-| |)Fahrenheit([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|°F|°C\}\}$3');

// Convert &sup to superscript

txt.value=txt.value.replace(/²/g, '²');

txt.value=txt.value.replace(/³/g, '³');

//metre

//delink this common unit

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(metres|meters|metre|meter)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(metre|meter)\]\]s([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3s$4');

//space before 'm' only when lower case. Check for dollars and pounds to avoid 'm' used for millions in money.

txt.value=txt.value.replace(/(\(\d[\d,\.]*)(?:\s|-|)m([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 m$2');

//convert 'metres' to 'm' when in parentheses

txt.value=txt.value.replace(/(\(\d[\d,\.]*)(?:\s|-|)(?:metres|meters|metre|meter)(\))/g, '$1 m$2');

txt.value=txt.value.replace(/(\(\d[\d,\.]*) (?:metres|meters|metre|meter)(\))/g, '$1 m$2');

txt.value=txt.value.replace(/({convert\|\d+\|(?:m|ft)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

//metre per second

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(?:m\/second|m\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 m/s$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) (?:m\/second|m\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 m/s$3');

txt.value=txt.value.replace(/({convert\|\d+\|(?:m\s|ft\s)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

//square metre

txt.value=txt.value.replace(/(\d)(?:\s|-| |)sq(?:\s|\.\s|-| )m([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 m²$2');

txt.value=txt.value.replace(/({convert\|\d+\|(?:m2|sqft)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

// millimetre

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)mm([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 mm$3');

// centimetre, cubic centimetre

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(cm|cc)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

// kilometre

//delink this common unit

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(kilometres|kilometers|kilometre|kilometer)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) \[\[(kilometres|kilometers|kilometre|kilometer)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(?:kilometres?|kilometers?)\|(km)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) \[\[(?:kilometres?|kilometers?)\|(km)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)kms?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) kms?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km$3');

txt.value=txt.value.replace(/({convert\|\d+\|(?:mi|km)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

//square kilometre

txt.value=txt.value.replace(/(\d)(\s|-| )\[\[km²\]\]/gi, '$1$2km²');

txt.value=txt.value.replace(/(\d)\s?sq\.?(?:\s|-| |)kms?(\s|\.)/gi, '$1 km²$2');

txt.value=txt.value.replace(/({convert\|\d+)00\|ha\|\d(\||})/g, '$1|km2$2');

txt.value=txt.value.replace(/({convert\|\d+)00\|ha/g, '$1|km2');

txt.value=txt.value.replace(/({convert\|\d+)(\d)0\|ha\|\d(\||})/g, '$1.$2|km2$2');

txt.value=txt.value.replace(/({convert\|\d+)(\d)0\|ha/g, '$1.$2|km2');

txt.value=txt.value.replace(/({convert\|\d+)(\d\d)\|ha\|\d(\||})/g, '$1.$2|km2$2');

txt.value=txt.value.replace(/({convert\|\d+)(\d\d)\|ha/g, '$1.$2|km2');

txt.value=txt.value.replace(/({convert\|\d+\|sqmi\|)ha\|\d(\||})/g, '$1km2$2');

txt.value=txt.value.replace(/({convert\|\d+\|sqmi\|)ha/g, '$1km2');

txt.value=txt.value.replace(/({convert\|\d\d\d+\|acre\|)ha\|\d(\||})/g, '$1km2$2');

txt.value=txt.value.replace(/({convert\|\d{\d\d+\|acre\|)ha/g, '$1km2');

txt.value=txt.value.replace(/({convert\|\d\d\d+\|acre)}/g, '$1|km2}');

txt.value=txt.value.replace(/({convert\|\d(?:\.\d+|)\|acre)\|ha\|\d(\||})/g, '$1|m2$2');

txt.value=txt.value.replace(/({convert\|\d(?:\.\d+|)\|acre)\|ha/g, '$1|m2');

txt.value=txt.value.replace(/({convert\|\d(?:\.\d+|)\|acre)}/g, '$1|m2}');

txt.value=txt.value.replace(/({convert\|[^\}]*(?:km2|sqmi)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

//kilometre per second

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(?:km\/second|km\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/s$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) (?:km\/second|km\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/s$3');

// kilometre per hour

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(?:km\/hr|km\/ph|kph|kmph|kmh)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/h$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) (?:km\/hr|km\/ph|kph|kmph|kmh)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/h$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(?:km\/hr|km\/ph|kph|kmph|kmh)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/h$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) \[\[(?:km\/hr|km\/ph|kph|kmph|kmh)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 km/h$3');

//millilitre

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(ml)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

// ensure spaces and correct case in kilowatt

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)kW([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 kW$3');

// ensure spaces and correct case in hertz

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)Hz([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 Hz$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)kHz([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 kHz$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)GHz([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 GHz$3');

// ensure spaces in megahertz. Must be upper case to avoid clashing with millihertz

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)MHz([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 MHz$3');

// frames per second

txt.value=txt.value.replace(/frames\/s([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'frame/s$1');

// kilogram

txt.value=txt.value.replace(/kilogrammes/gi, 'kilograms');

txt.value=txt.value.replace(/kilogramme/gi, 'kilogram');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(kilograms?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) \[\[(kilograms?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)grammes([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 grams$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)gramme([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 gram$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(?:kgs?|\[\[kg\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 kg$3');

txt.value=txt.value.replace(/({convert\|\d+\|(?:kg|lb)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

//foot

//convert 'foot' to 'ft' when in parentheses

txt.value=txt.value.replace(/(\(\d[\d,\.]*)(?:\s|-|)(?:feet|foot)(\))/g, '$1 ft$2');

txt.value=txt.value.replace(/(\(\d[\d,\.]*) (?:feet|foot)(\))/g, '$1 ft$2');

//remove trailing period when in parentheses

txt.value=txt.value.replace(/(\(\d[\d,\.]*)(?:\s|-|)ft\.(\))/g, '$1 ft$2');

txt.value=txt.value.replace(/(\(\d[\d,\.]*) ft\.(\))/g, '$1 ft$2');

// square foot

//convert 'sq foot' to 'sq ft'

txt.value=txt.value.replace(/(\d)(\s|-)sq\.?(\s|-|)(feet|foot|ft)/gi, '$1 sq ft');

txt.value=txt.value.replace(/(\d) sq\.? (feet|foot|ft)/gi, '$1 sq ft');

//convert 'square ft' to 'sq ft'

txt.value=txt.value.replace(/(\d)(\s|-)square(\s|-)ft/gi, '$1 sq ft');

txt.value=txt.value.replace(/(\d) square ft/gi, '$1 sq ft');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)sq(?:\s|-| |)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqft|m2|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)square(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqft|m2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)square(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqft|m2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)thousand(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000|sqft|m2|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)thousand(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000|sqft|m2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)thousand(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000|sqft|m2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000000|sqft|m2|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000000|sqft|m2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000000|sqft|m2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|sqft|m2|abbr=on\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|sqft|m2\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|sqft|m2|adj=on\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|sqft|m2|abbr=on\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|sqft|m2\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)(?:sq|square)\.?(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|sqft|m2|adj=on\}\}$4');

//square foot: singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:square\sfoot|\[\[square\sfoot\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqft|m2|adj=on\}\}$3');

//square foot: plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:square\sfeet|\[\[square\sfeet\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqft|m2\}\}$3');

//feet per second

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)(?:ft\/second|ft\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 ft/s$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) (?:ft\/second|ft\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2 ft/s$3');

//feet per second:plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)feet\sper\ssecond([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft/s|m/s\}\}$3');

//feet per second:singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)foot\sper\ssecond([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft/s|m/s|adj=on\}\}$3');

//feet per second:abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)ft\/s([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft/s|m/s|abbr=on\}\}$3');

// foot and inch

txt.value=txt.value.replace(/(ength[.]{1,3})(\d{1,4})\s?['’]\s?(\d{1,3})\s?["”]/gi, '$1$2 ft $3 in');

txt.value=txt.value.replace(/(idth[.]{1,3})(\d{1,4})\s?['’]\s?(\d{1,3})\s?["”]/gi, '$1$2 ft $3 in');

txt.value=txt.value.replace(/([\(\|:]\s?\d{1,4})\s?['’]\s?(\d{1,3})\s?["”]([^NESW])/g, '$1 ft $2 in$3');

txt.value=txt.value.replace(/(\d)\s?ft\s?(\d{1,3})\s?in/gi, '$1 ft $2 in');

// yard

txt.value=txt.value.replace(/(\d)(?:\s|-| |)yds?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 yd$2');

txt.value=txt.value.replace(/(\d)(?:\s|-| |)sq\.?\s?yds?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 sq yd$2');

txt.value=txt.value.replace(/yd\.\)/gi, 'yd)');

//yards: plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:yards|\[\[yard\]\]s|\[\[yards\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|yd|m\}\}$3');

//yards: singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:yard|\[\[yard\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|yd|m|adj=on\}\}$3');

//yards: abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)yd([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|yd|m|abbr=on\}\}$3');

//yards: in full

txt.value=txt.value.replace(/([^y]\sone(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (1 m)$2');

txt.value=txt.value.replace(/([^y]\stwo(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (2 m)$2');

txt.value=txt.value.replace(/([^y]\sthree(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (3 m)$2');

txt.value=txt.value.replace(/([^y]\sfour(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4 m)$2');

txt.value=txt.value.replace(/([^y]\sfive(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (5 m)$2');

txt.value=txt.value.replace(/([^y]\ssix(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (5 m)$2');

txt.value=txt.value.replace(/([^y]\sseven(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (6 m)$2');

txt.value=txt.value.replace(/([^y]\seight(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (7 m)$2');

txt.value=txt.value.replace(/([^y]\snine(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (8 m)$2');

txt.value=txt.value.replace(/([^y]\sten(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (9 m)$2');

txt.value=txt.value.replace(/([^y]\seleven(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (10 m)$2');

txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (11 m)$2');

txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (12 m)$2');

txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (13 m)$2');

txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (14 m)$2');

txt.value=txt.value.replace(/([^y]\ssixteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (15 m)$2');

txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16 m)$2');

txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16 m)$2');

txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (17 m)$2');

txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-| |)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (18 m)$2');

// knot

txt.value=txt.value.replace(/(\d)(\s|-| )(?:kts|kt|knt)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2knots$3');

txt.value=txt.value.replace(/\[knot\s\(unit\)\|/gi, '[knot (speed)|');

txt.value=txt.value.replace(/\[\[kts\]\]/gi, 'knots');

txt.value=txt.value.replace(/\|kts\]\]/gi, '|knots]]');

//nautical mile - rename 'miles' as 'nautical miles' when followed by knots or conversion code

txt.value=txt.value.replace(/(\d)(?:\s|-| |)miles\s(?:at|@)\s([\d\.]{1,9}(?:\s|-| |)knots|\{\{convert)/gi, '$1 nautical miles at $2');

txt.value=txt.value.replace(/(\d)(\s|-| )(?:mi|nm|nmi)\s(?:at|@)\s([\d\.]{1,9}(?:\s|-| |)knots|\{\{convert)/gi, '$1$2nmi at $3');

//nautical mile: plural unlinked

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)nautical(?:\s|-| |)miles([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km\}\}$3');

//nautical mile: plural linked with 's' inside link

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[nautical(?:\s|-| |)miles\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km\}\}$3');

//nautical mile: plural linked with 's' outside link

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[nautical(?:\s|-| |)mile\]\]s([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km\}\}$3');

//nautical mile: singular unlinked

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)nautical(?:\s|-| |)mile([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km|adj=on\}\}$3');

//nautical mile: singular linked

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[nautical(?:\s|-| |)mile\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km|adj=on\}\}$3');

//nautical mile: abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:\[\[nautical\smile\|nmi?\]\]|nmi)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|nmi|km|abbr=on\}\}$3');

//nautical mile: in full

txt.value=txt.value.replace(/([^y]\sone(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (1.9 km)$2');

txt.value=txt.value.replace(/([^y]\stwo(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4 km)$2');

txt.value=txt.value.replace(/([^y]\sthree(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (6 km)$2');

txt.value=txt.value.replace(/([^y]\sfour(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (7 km)$2');

txt.value=txt.value.replace(/([^y]\sfive(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (9 km)$2');

txt.value=txt.value.replace(/([^y]\ssix(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (11 km)$2');

txt.value=txt.value.replace(/([^y]\sseven(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (13 km)$2');

txt.value=txt.value.replace(/([^y]\seight(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (15 km)$2');

txt.value=txt.value.replace(/([^y]\snine(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (17 km)$2');

txt.value=txt.value.replace(/([^y]\sten(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (19 km)$2');

txt.value=txt.value.replace(/([^y]\seleven(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (20 km)$2');

txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (22 km)$2');

txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (24 km)$2');

txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (26 km)$2');

txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (28 km)$2');

txt.value=txt.value.replace(/([^y]\ssixteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (30 km)$2');

txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (31 km)$2');

txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (33 km)$2');

txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (35 km)$2');

txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-| |)nautical(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (37 km)$2');

//knot - plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:knots|\[\[knot\s\(speed\)\|(?:knots\]\]|knot\]\]s|kts\]\]|kt\]\]s))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|kn|km/h\}\}$3');

//knot - singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:knot|\[\[knot\s\(speed\)\|(?:knot|kt|kn)\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|kn|km/h|adj=on\}\}$3');

//knot - abbreviation

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:kts?|\[\[knot\s\(speed\)\|(?:kt|kn)\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|kn|km/h|abbr=on\}\}$3');

//mile - delink this common unit

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|)\[\[(miles?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*) \[\[(miles?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2 $3$4');

//mile - lower case to avoid proper names like 'Five Mile Road'

//mile - protect 'miles per hour' - undone below

txt.value=txt.value.replace(/(miles?)\s(per)/gi, '$1xx$2');

//miles: plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:miles|\[\[miles\]\]|\[\[mile\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|mi|km\}\}$3');

//miles: singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:mile|\[\[mile\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|mi|km|adj=on\}\}$3');

//miles: abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)mi([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|mi|km|abbr=on\}\}$3');

//miles: in full

txt.value=txt.value.replace(/([^y]\sone(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (1.6 km)$2');

txt.value=txt.value.replace(/([^y]\stwo(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (3 km)$2');

txt.value=txt.value.replace(/([^y]\sthree(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (5 km)$2');

txt.value=txt.value.replace(/([^y]\sfour(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (6 km)$2');

txt.value=txt.value.replace(/([^y]\sfive(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (8 km)$2');

txt.value=txt.value.replace(/([^y]\ssix(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (10 km)$2');

txt.value=txt.value.replace(/([^y]\sseven(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (11 km)$2');

txt.value=txt.value.replace(/([^y]\seight(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (13 km)$2');

txt.value=txt.value.replace(/([^y]\snine(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (14 km)$2');

txt.value=txt.value.replace(/([^y]\sten(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (16 km)$2');

txt.value=txt.value.replace(/([^y]\seleven(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (18 km)$2');

txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (19 km)$2');

txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (19 km)$2');

txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (21 km)$2');

txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (24 km)$2');

txt.value=txt.value.replace(/([^y]\sixteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (26 km)$2');

txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (27 km)$2');

txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (29 km)$2');

txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (30 km)$2');

txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-| |)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (32 km)$2');

//mile - unprotect 'miles per hour'

txt.value=txt.value.replace(/(miles?)xx(per)/gi, '$1 $2');

//mile per hour

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)m\.?p\.?h([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|mi/h|km/h|abbr=on\}\}$3');

// square mile

txt.value=txt.value.replace(/(\d)(?:\s|-)sq(?:\s|\.\s|-)mi([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 sq mi$2');

txt.value=txt.value.replace(/\[\[(square\smile)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[square\smile\|(sq\smi)\]\]/gi, '$1');

txt.value=txt.value.replace(/(sq)(?:\s|-| |)(mile)/gi, '$1uare $2');

// square mile:plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)square(?:\s|-| |)miles([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqmi|km2\}\}$3');

// square mile:singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)square(?:\s|-| |)mile([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqmi|km2|adj=on\}\}$3');

// square mile:abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)sq(?:\s|-| |)mi([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|sqmi|km2|abbr=on\}\}$3');

//acre foot:plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)\.(\d)(?:\s|-| |)million(?:\s|-| |)acre(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|acre feet\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)\.(\d)(?:\s|-| |)MAF([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2$300000|acre feet\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)acre(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|acre feet\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)\.(\d\d)(?:\s|-| |)MAF([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2$30000|acre feet\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)(?:\s|-| |)million(?:\s|-| |)acre(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000000|acre feet\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d+)(?:\s|-| |)MAF([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2000000|acre feet\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)acre(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre feet\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[acre(?:\s|-| |)foot\|acre(?:\s|-| |)feet\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre feet\}\}$3');

//acre foot:singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)acre(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre feet|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[acre(?:\s|-| |)foot\|acre(?:\s|-| |)feet\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre feet|adj=on\}\}$3');

//acre foot:abbreviation

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:acre|ac\.?)(?:\s|-| |)(?:foot|feet|ft)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre ft|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[acre(?:\s|-| |)foot\|acre(?:\s|-| |)ft\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre ft|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)\[\[acre(?:\s|-| |)ft\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|acre ft|abbr=on\}\}$3');

//acre

//acres - temporary change to protect acre feet. changed below

txt.value=txt.value.replace(/(acre.feet)/gi, 'xtempx$1ytempy');

txt.value=txt.value.replace(/(\d)-(acre)/gi, '$1 $2');

txt.value=txt.value.replace(/(\d)(?:\s|-| |)(?:surface|square)(?:\s|-| |)acre/gi, '$1 acre');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)thousand(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000|acre|km2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)thousand(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2000|acre|km2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)million(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|e6acre|km2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-| |)million(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|e6acre|km2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-| |)million(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|acre|km2\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-| |)million(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$300000|acre|km2|adj=on\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|acre|km2\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-| |)million(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2$30000|acre|km2|adj=on\}\}$4');

txt.value=txt.value.replace(/([^y]\sone(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4,000 km²)$2');

txt.value=txt.value.replace(/(\sa(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4,000 km²)$2');

txt.value=txt.value.replace(/([^y]\stwo(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (8,000 km²)$2');

txt.value=txt.value.replace(/([^y]\sthree(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (12,000 km²)$2');

txt.value=txt.value.replace(/([^y]\sfour(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16,000 km²)$2');

txt.value=txt.value.replace(/([^y]\sfive(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (20,000 km²)$2');

txt.value=txt.value.replace(/([^y]\ssix(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (24,000 km²)$2');

txt.value=txt.value.replace(/([^y]\sseven(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (28,000 km²)$2');

txt.value=txt.value.replace(/([^y]\seight(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (32,000 km²)$2');

txt.value=txt.value.replace(/([^y]\snine(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (36,000 km²)$2');

txt.value=txt.value.replace(/([^y]\sten(?:\s|-| |)million(?:\s|-| |)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (40,000 km²)$2');

//acre:plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+\d\d[\d\.]*)(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|acre|km2\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d?\d\.\d+|\d?\d)(?:\s|-| |)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|acre|m2\}\}$3');

//acre:singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+\d\d[\d\.]*)(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|acre|km2|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d?\d\.\d+|\d?\d)(?:\s|-| |)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|acre|m2|adj=on\}\}$3');

//undo protection for acre feet

txt.value=txt.value.replace(/xtempx(acre.feet)ytempy/gi, '$1');

// foot pound

txt.value=txt.value.replace(/(\W)lbs?[\s-.·•\/]{1,2}ft([^²\w])/gi, '$1ft·lbf$2');

txt.value=txt.value.replace(/(\W)lbs?ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1ft·lbf$2');

txt.value=txt.value.replace(/ftlbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'ft·lbf$1');

txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'ft·lbf$1');

txt.value=txt.value.replace(/ftlbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'ft·lbf$1');

txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbf([^\|])/gi, 'ft·lbf$1');

txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbff/gi, 'ft·lbf');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pounds?(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|ft.lbf|N.m\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)foot(?:\s|-| |)pounds([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|ft.lbf|N.m\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pound(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|ft.lbf|N.m|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)foot(?:\s|-| |)pound([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|ft.lbf|N.m|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)ft.lbf([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1\{\{convert|$2|ft.lbf|N.m|abbr=on\}\}$3');

// pound force

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(\s|-| |)lbs?.?\s(thrust|of\sthrust|force|of\sforce)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2$3lbf $4$5');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*000)(?:\s|-| |)pounds\sforce([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|kN\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pounds\sforce([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|N\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*000)(?:\s|-| |)pound\sforce([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|kN|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pound\sforce([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|N|adj=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*000)(?:\s|-| |)lbf([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|kN|abbr=on\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)lbf([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lbf|abbr=on\}\}$3');

// pound weight. Parsed after foot pound and pound force

txt.value=txt.value.replace(/\[\[pound\s\(weight\)\|([^\]]+)\]\]/gi, '$1');

txt.value=txt.value.replace(/\|lbs?\.\]\]/gi, '|lb]]');

txt.value=txt.value.replace(/(\d)\s?lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 lb$2');

txt.value=txt.value.replace(/(\d\+?)\s?lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 lb$2');

txt.value=txt.value.replace(/(\d) lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 lb$2');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)lb([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lb|abbr=on\}\}$3');

//pounds and ounces - plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pounds(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)ounces?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lb|$3|oz|kg\}\}$4');

//pounds and ounces - singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)pound(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)ounces?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lb|$3|oz|kg|adj=on\}\}$4');

//pounds and ounces - abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)lbs?\.?,?(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)oz\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|lb|$3|oz|kg|abbr=on\}\}$4');

//foot and inch: plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)feet\.?(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)(?:in|ins|inch|inches)\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|$3|in|m\}\}$4');

//foot and inch: singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)foot\.?(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)(?:in|ins|inch|inches)\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|$3|in|m|adj=on\}\}$4');

//foot and inch: abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)ft\.?(?:\s|-| |)(\d[\d,\.]*)(?:\s|-| |)(?:in|ins|inch|inches)\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|$3|in|m|abbr=on\}\}$4');

//foot (again). Parsed after 'foot per second' and 'foot pound'

//foot: plural

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|m\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)linear(?:\s|-| |)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|m\}\}$3');

//foot: singular

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|m|adj=on\}\}$3');

//foot: abbreviated

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)ft\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ft|m|abbr=on\}\}$3');

//inch: plural

txt.value=txt.value.replace(/([^\Wt'’]\s)(\d[\d,\.]*)(?:\s|-| |)inches([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|in|mm\}\}$3');

// inch: plural with number in words

txt.value=txt.value.replace(/([^ty]\sthree(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (76 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfour(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (102 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfive(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (127 mm) $2');

txt.value=txt.value.replace(/([^ty]\ssix(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (152 mm) $2');

txt.value=txt.value.replace(/([^ty]\sseven(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (178 mm) $2');

txt.value=txt.value.replace(/([^ty]\seight(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (203 mm) $2');

txt.value=txt.value.replace(/([^ty]\snine(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (229 mm) $2');

txt.value=txt.value.replace(/([^ty]\sten(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (254 mm) $2');

txt.value=txt.value.replace(/([^ty]\seleven(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (279 mm) $2');

txt.value=txt.value.replace(/([^ty]\stwelve(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (305 mm) $2');

txt.value=txt.value.replace(/([^ty]\sthirteen(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (330 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfourteen(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (356 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfifteen(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (381 mm) $2');

txt.value=txt.value.replace(/([^ty]\ssixteen(?:\s|-| |)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (406 mm) $2');

//inch: singular

txt.value=txt.value.replace(/([^\Wt'’]\s)(\d[\d,\.]*)(?:\s|-| |)(?:inch|\[\[inch\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|in|mm|adj=on\}\}$3');

txt.value=txt.value.replace(/({convert\|\d+\|(?:in|mm|cm)[^\}]*)\|lk=(?:on|in|out)/g, '$1');

// inch: singular with number in words

txt.value=txt.value.replace(/([^ty]\sthree(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (76 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfour(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (102 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfive(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (127 mm) $2');

txt.value=txt.value.replace(/([^ty]\ssix(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (152 mm) $2');

txt.value=txt.value.replace(/([^ty]\sseven(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (178 mm) $2');

txt.value=txt.value.replace(/([^ty]\seight(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (203 mm) $2');

txt.value=txt.value.replace(/([^ty]\snine(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (229 mm) $2');

txt.value=txt.value.replace(/([^ty]\sten(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (254 mm) $2');

txt.value=txt.value.replace(/([^ty]\seleven(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (279 mm) $2');

txt.value=txt.value.replace(/([^ty]\stwelve(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (305 mm) $2');

txt.value=txt.value.replace(/([^ty]\sthirteen(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (330 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfourteen(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (356 mm) $2');

txt.value=txt.value.replace(/([^ty]\sfifteen(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (381 mm) $2');

txt.value=txt.value.replace(/([^ty]\ssixteen(?:\s|-| |)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (406 mm) $2');

// horsepower

txt.value=txt.value.replace(/\.28\s?(bhp|ihp|shp)\.29\|/gi, '($1)|');

txt.value=txt.value.replace(/(\d)(?:\s|-|)(horsepower|hp|bhp|ihp|shp)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 $2$3');

txt.value=txt.value.replace(/(\d) (horsepower|hp|bhp|ihp|shp)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 $2$3');

txt.value=txt.value.replace(/(\d)(?:\s|-|)horse(?:\s|-|)power([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 horsepower$2');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(?:horsepower|\[\[horsepower\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|hp\}\}$3');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(indicated(?:\s|-| |)horsepower)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|ihp\}\}$4');

txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)(hp|bhp|ihp|shp)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1\{\{convert|$2|$3|abbr=on\}\}$4');

txt.value=txt.value.replace(/({convert\|\d+\|)horsepower\|/gi, '$1horsepower|');

txt.value=txt.value.replace(/({convert\|\d+\|)hp\|/gi, '$1hp|');

txt.value=txt.value.replace(/({convert\|\d+\|)bhp\|/gi, '$1bhp|');

txt.value=txt.value.replace(/({convert\|\d+\|)ihp\|/gi, '$1ihp|');

txt.value=txt.value.replace(/({convert\|\d+\|)shp\|/gi, '$1shp|');

// rpm

txt.value=txt.value.replace(/(\d)\s?rpm([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 rpm$2');

txt.value=txt.value.replace(/(\d) rpm([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 rpm$2');

txt.value=txt.value.replace(/(\d)\-rpm([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 rpm$2');

// decibel

txt.value=txt.value.replace(/(\d)\s?(dB)\b/g, '$1 $2');

// bits per second

txt.value=txt.value.replace(/(\d)\s?([KkMmGgTt])?(?:bps|bits\/s|b\/s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 $2bit/s$3');

txt.value=txt.value.replace(/(\d) ([KkMmGgTt])?(?:bps|bits\/s|b\/s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 $2bit/s$3');

txt.value=txt.value.replace(/bits?\/sec([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'bit/s$1');

// bytes per second

txt.value=txt.value.replace(/([KkMmGgTt])(?:Bps|bytes?\/s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, ' $1byte/s$2');

txt.value=txt.value.replace(/bytes?\/s([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'byte/s$1');

// capitalization of prefix with bits and bytes

txt.value=txt.value.replace(/K(bit|B|byte)\/s/g, 'k$1/s');

txt.value=txt.value.replace(/m(bit|B|byte)\/s/g, 'M$1/s');

txt.value=txt.value.replace(/g(bit|B|byte)\/s/g, 'G$1/s');

txt.value=txt.value.replace(/t(bit|B|byte)\/s/g, 'T$1/s');

// space with bits and bytes

txt.value=txt.value.replace(/([^\w]\d)\s?(k|M|G|T)(bit|B)/g, '$1 $2$3');

//aviation specifications: unprotect 'main=' and 'alt='

txt.value=txt.value.replace(/((?:main|alt)\s?=\s?)xx(\d)/gi, '$1$2');

//change format of convert template variables

txt.value=txt.value.replace(/({convert\|[^}]+km):h/g, '$1/h');

txt.value=txt.value.replace(/({convert\|[^}]+mi):h/g, '$1/h');

txt.value=txt.value.replace(/({convert\|[^}]+ft):s/g, '$1/s');

txt.value=txt.value.replace(/({convert\|[^}]+m):s/g, '$1/s');

//replace other templates with convert template

txt.value=txt.value.replace(/\{\{mi\sto\skm\|(\d{1,9})\}\}/gi, '\{\{convert|$1|mi|km\}\}');

txt.value=txt.value.replace(/\{\{mi\sto\skm\|(\d{1,9})\|round[^\}]{1,5\}\}}/gi, '\{\{convert|$1|mi|km\}\}');

txt.value=txt.value.replace(/\{\{mi2\sto\skm2\|(\d{1,9})\}\}/gi, '\{\{convert|$1|mi|km\}\}');

txt.value=txt.value.replace(/\{\{mi2\sto\skm2\|(\d{1,9})\|round[^\}]{1,5\}\}}/gi, '\{\{convert|$1|mi|km\}\}');

//replace rail gauge template

txt.value=txt.value.replace(/\{\{(\d?\d)\s?in\}\}/gi, '\{\{convert|$1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{(\d?\d)\s?ft\}\}/gi, '\{\{convert|$1|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{(\d?\d)\s?ft\s?(\d?\d)\s?in\}\}/gi, '\{\{convert|$1|ft|$2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{(\d?\d)\s?ft\s?(\d?\d\.\d+)\s?in\}\}/gi, '\{\{convert|$1|ft|$2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/(\{\{railgauge\|[^}]+)\|lk=on(\}\})/gi, '$1$2');

txt.value=txt.value.replace(/\{\{railgauge\|(\d?\d)\s?in\}\}/gi, '\{\{convert|$1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|(\d?\d)\s?ft\}\}/gi, '\{\{convert|$1|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|(\d?\d)\s?ft\s?(\d?\d)\s?in\}\}/gi, '\{\{convert|$1|ft|$2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|(\d?\d)\s?ft\s?(\d?\d\.\d+)\s?in\}\}/gi, '\{\{convert|$1|ft|$2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|24\}\}/gi, '\{\{convert|2|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|25\}\}/gi, '\{\{convert|2|ft|1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|26\}\}/gi, '\{\{convert|2|ft|2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|27\}\}/gi, '\{\{convert|2|ft|3|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|28\}\}/gi, '\{\{convert|2|ft|4|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|29\}\}/gi, '\{\{convert|2|ft|5|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|30\}\}/gi, '\{\{convert|2|ft|6|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|31\}\}/gi, '\{\{convert|2|ft|7|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|32\}\}/gi, '\{\{convert|2|ft|8|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|33\}\}/gi, '\{\{convert|2|ft|9|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|34\}\}/gi, '\{\{convert|2|ft|10|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|35\}\}/gi, '\{\{convert|2|ft|11|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|36\}\}/gi, '\{\{convert|3|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|37\}\}/gi, '\{\{convert|3|ft|1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|38\}\}/gi, '\{\{convert|3|ft|2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|39\}\}/gi, '\{\{convert|3|ft|3|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|40\}\}/gi, '\{\{convert|3|ft|4|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|41\}\}/gi, '\{\{convert|3|ft|5|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|42\}\}/gi, '\{\{convert|3|ft|6|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|48\}\}/gi, '\{\{convert|4|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|49\}\}/gi, '\{\{convert|4|ft|1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|50\}\}/gi, '\{\{convert|4|ft|2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|51\}\}/gi, '\{\{convert|4|ft|3|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|52\}\}/gi, '\{\{convert|4|ft|4|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|53\}\}/gi, '\{\{convert|4|ft|5|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|54\}\}/gi, '\{\{convert|4|ft|6|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|55\}\}/gi, '\{\{convert|4|ft|7|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|56\}\}/gi, '\{\{convert|4|ft|8|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|57\}\}/gi, '\{\{convert|4|ft|9|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|58\}\}/gi, '\{\{convert|4|ft|10|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|59\}\}/gi, '\{\{convert|4|ft|11|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|60\}\}/gi, '\{\{convert|5|ft|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|61\}\}/gi, '\{\{convert|5|ft|1|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|62\}\}/gi, '\{\{convert|5|ft|2|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|63\}\}/gi, '\{\{convert|5|ft|3|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|64\}\}/gi, '\{\{convert|5|ft|4|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|65\}\}/gi, '\{\{convert|5|ft|5|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|66\}\}/gi, '\{\{convert|5|ft|6|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|67\}\}/gi, '\{\{convert|5|ft|7|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|68\}\}/gi, '\{\{convert|5|ft|8|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|69\}\}/gi, '\{\{convert|5|ft|9|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|70\}\}/gi, '\{\{convert|5|ft|10|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|71\}\}/gi, '\{\{convert|5|ft|11|in|mm|0|abbr=on\}\}');

txt.value=txt.value.replace(/\{\{railgauge\|72\}\}/gi, '\{\{convert|6|ft|mm|0|abbr=on\}\}');

//remove commas from numerical values in convert template

txt.value=txt.value.replace(/({convert\|\d+),(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|\d+),(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|\d+),(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|\d+),(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|\d+),(\d)/g, '$1$2');

//remove leading zeros from convert template

txt.value=txt.value.replace(/({convert\|)0(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|)0(\d)/g, '$1$2');

txt.value=txt.value.replace(/({convert\|)0(\d)/g, '$1$2');

//Remove surprise or 'Easter egg' diversions linking unit name to orders of magnitude articles

txt.value=txt.value.replace(/\[\[1\s?_?E\s?[\-\+]?\d{1,2}\s?..?\|([^\]]{1,50})\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[Orders\sof\smagnitude\s\([^\)]+\)\|([^\]]{1,50})\]\]/gi, '$1');

}

function run_formatgeneral() {

var txt=document.editform.wpTextbox1;

formatgeneral();

edit_summary();

}

function delink_year_in_X(){

var txt=document.editform.wpTextbox1;

txt.value=txt.value.replace(/\{\{(?:avyear|by|fy|ly|mlby|mlb\syear|scy|sdy)\|(\d{1,4})\}\}/gi, '$1');

txt.value=txt.value.replace(/\[\[\d{1,4}\sin\s\w+\|(\d{1,4})\]\]/gi, "$1");

edit_summary();

}

var linkmap=[];

function protect_dates(){

var txt=document.editform.wpTextbox1;

txt.value=txt.value.replace(/Image:[^|]+/gi, function(img){

linkmap.push(img);

return "\x02"+(linkmap.length-1)+"\x03";

});

//protect certain dates

txt.value=txt.value.replace(/(september)\s(11[^\d])/gi, '$1xx$2');

txt.value=txt.value.replace(/([^\d]7)\s(july)/gi, '$1xx$2');

txt.value=txt.value.replace(/(\[\[May)\s(1968\]\])/gi, '$1xx$2');

txt.value=txt.value.replace(/(\[\[(?:2300|2000))\s(AD\]\])/gi, '$1xx$2');

txt.value=txt.value.replace(/(\[\[(?:112|911|999))(\]\])/gi, '$1xx$2');

txt.value=txt.value.replace(/(\[\[september)xx(11\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[7)xx(july\]\])/gi, '$1 $2');

}

function unprotect_dates(){

var txt=document.editform.wpTextbox1;

//unprotect certain dates

txt.value=txt.value.replace(/(september)xx(11)/gi, '$1 $2');

txt.value=txt.value.replace(/(7)xx(july)/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[May)xx(1968\]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[(?:2300|2000))xx(AD]\])/gi, '$1 $2');

txt.value=txt.value.replace(/(\[\[(?:112|911|999))xx(\]\])/gi, '$1$2');

txt.value=txt.value.replace(/\x02([0-9]+)\x03/g, function(x, n){

return linkmap[n];

});

}

function remove_leading_zeros_from_linked_dates () {

var txt=document.editform.wpTextbox1;

//remove leading zero from linked date

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s0(\d)(?:th|st|nd|rd|)\]\]/gi, '$1 $2');

txt.value=txt.value.replace(/\[\[0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]/gi, '$1 $2');

}

function remove_leading_zeros_from_nonlinked_dates () {

var txt=document.editform.wpTextbox1;

//remove leading zero from nonlinked date

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s0(\d)(?:th|st|nd|rd|)(,?\s\d{4})([^\w\d][^\d])/gi, '$1$2 $3$4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(\s\d{4})([^\w\d][^\d])/gi, '$1$2 $3$4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s0(\d)(?:th|st|nd|rd|)([^\w\d][^\d])/gi, '$1$2 $3$4');

txt.value=txt.value.replace(/([^\d][^\w\d])0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)([^\w\d][^\d])/gi, '$1$2 $3$4');

}

function code_delink_dates_to_dmy () {

var txt=document.editform.wpTextbox1;

protect_dates();

part_dates();

remove_leading_zeros_from_linked_dates ();

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\],?\s?\[\[(\d{1,4})\]\]/gi, '$2 $1 $3');

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\],?\s?(\d{1,4})([^\w\d])/gi, '$2 $1 $3$4');

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\]/gi, '$2 $1');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\],?\s?\[\[(\d{1,4})\]\]/gi, '$1 $2 $3');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\],?\s?(\d{1,4})([^\w\d])/gi, '$1 $2 $3$4');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]/gi, '$1 $2');

//year: temporary change to protect accessyear. Undone below at #1

txt.value=txt.value.replace(/(accessyear\s?=\s?)\[\[(\d{1,4})\]\]/gi, '$1xx$2xx');

//year: now remove unprotected linked years

txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]/gi, '$1');

//year: #1. Undo temporary change to protect accessyear and date preference dates

txt.value=txt.value.replace(/xx(\d{1,4})xx/gi, '$1');

//remove dts-simple template that links dates

txt.value=txt.value.replace(/\{\{dts-simple\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|\s?(\d\d?)\|(\d{1,4})\}\}/gi, '$2 $1 $3');

//remove dts3 template that links dates

txt.value=txt.value.replace(/\{\{dts3\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|(\d\d?)\|(\d{1,4})\}\}/gi, '$2 $1 $3');

//change deprecated dts2 template

txt.value=txt.value.replace(/\{\{dts2\|(.*?)\|(.*?)\|(.*?)\}\}/gi, '\{\{dts|link=off|format=dmy|$3|$2|$1\}\}');

//fix dts template

txt.value=txt.value.replace(/(\{\{dts\|)/gi, '$1link=off|format=dmy|');

txt.value=txt.value.replace(/(\{\{dts\|)link=off\|([^}]*link=off)/gi, '$1$2');

txt.value=txt.value.replace(/(\{\{dts\|)format=dmy\|([^}]*format=dmy)/gi, '$1$2');

//change deprecated birth and death templates

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^}]*)\|mf=ye?s?/gi, '$1');

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^|]*\|)/gi, '$1df=yes|');

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^|]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');

unprotect_dates();

}

function code_delink_dates_to_mdy() {

var txt=document.editform.wpTextbox1;

protect_dates();

part_dates();

remove_leading_zeros_from_linked_dates ();

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\],?\s?\[\[(\d{1,4})\]\]/gi, '$2 $1, $3');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\],?\s?(\d{1,4})([^\w\d])/gi, '$2 $1, $3$4');

txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]/gi, '$2 $1');

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\],?\s?\[\[(\d{1,4})\]\]/gi, '$1 $2, $3');

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\],?\s(\d{1,4})([^\w\d])/gi, '$1 $2, $3$4');

txt.value=txt.value.replace(/\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\]/gi, '$1 $2');

//year: temporary change to protect accessyear. Undone below at #1

txt.value=txt.value.replace(/(accessyear\s?=\s?)\[\[(\d{1,4})\]\]/gi, '$1xx$2xx');

//year: now remove unprotected linked years

txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]/gi, '$1');

//year: #1. Undo temporary change to protect accessyear and date preference dates

txt.value=txt.value.replace(/xx(\d{1,4})xx/gi, '$1');

//remove dts-simple template that links dates

txt.value=txt.value.replace(/\{\{dts-simple\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|\s?(\d\d?)\|(\d{1,4})\}\}/gi, '$1 $2, $3');

//remove dts3 template that links dates

txt.value=txt.value.replace(/\{\{dts3\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|(\d\d?)\|(\d{1,4})\}\}/gi, '$1 $2, $3');

//change deprecated dts2 template

txt.value=txt.value.replace(/\{\{dts2\|(.*?)\|(.*?)\|(.*?)\}\}/gi, '\{\{dts|link=off|$3|$2|$1\}\}');

//fix dts template

txt.value=txt.value.replace(/(\{\{dts\|)/gi, '$1link=off|');

txt.value=txt.value.replace(/(\{\{dts\|)link=off\|([^}]*link=off)/gi, '$1$2');

//change deprecated birth and death templates

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^}]*)\|df=ye?s?/gi, '$1');

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^|]*\|)/gi, '$1mf=yes|');

txt.value=txt.value.replace(/(\{\{(?:Birth|Death|release)[^|]*\|)mf=ye?s?\|([^}]*mf=ye?s?)/gi, '$1$2');

unprotect_dates();

}

function button_delink_dates_to_dmy() {

code_delink_dates_to_dmy();

edit_summary();

}

function button_delink_dates_to_mdy() {

code_delink_dates_to_mdy();

edit_summary();

}

function all_dates_to_dmy(){

var txt=document.editform.wpTextbox1;

protect_dates();

part_dates();

code_delink_dates_to_dmy();

remove_leading_zeros_from_nonlinked_dates ();

//repeat protect dates because 'unprotect dates' function is within 'delink dates' function

protect_dates();

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|),?\s(\d{1,4})([^\w\d][^\d])/gi, '$1$3 $2 $4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|)([^\w\d][^\d])/gi, '$1$3 $2$4');

//repeat previous two bits of code to capture some date ranges that were missed first time round

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|),?\s(\d{1,4})([^\w\d][^\d])/gi, '$1$3 $2 $4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|)([^\w\d][^\d])/gi, '$1$3 $2$4');

//Month+day_number "March 7th" -> "March 7"

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d{1,4})([^\w\d][^\d])/gi, '$1$2 $3 $4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)([^\w\d][^\d])/gi, '$1$2 $3$4');

//year: temporary change to protect accessyear. Undone below at #1

txt.value=txt.value.replace(/(accessyear\s?=\s?)\[\[(\d{1,4})\]\]/gi, '$1xx$2xx');

//year: now remove unprotected linked years

txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]/gi, '$1');

//year: #1. Undo temporary change to protect accessyear and date preference dates

txt.value=txt.value.replace(/xx(\d{1,4})xx/gi, '$1');

unprotect_dates();

edit_summary();

}

function all_dates_to_mdy(){

var txt=document.editform.wpTextbox1;

protect_dates();

part_dates();

code_delink_dates_to_mdy();

remove_leading_zeros_from_nonlinked_dates ();

//repeat protect dates because 'unprotect dates' function is within 'delink dates' function

protect_dates();

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d{1,4})([^\w\d][^\d])/gi, '$1$3 $2, $4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)([^\w\d][^\d])/gi, '$1$3 $2$4');

//repeat previous two bits of code to capture some date ranges that were missed first time round

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d{1,4})([^\w\d][^\d])/gi, '$1$3 $2, $4$5');

txt.value=txt.value.replace(/([^\d][^\w\d])([0123]?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)([^\w\d][^\d])/gi, '$1$3 $2$4');

//Month+day_number "March 7th" -> "March 7"

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|)(,?\s)(\d{1,4})([^\w\d][^\d])/gi, '$1$2 $3$4$5$6');

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|)([^\w\d][^\d])/gi, '$1$2 $3$4');

//add comma when missing

txt.value=txt.value.replace(/([^\d][^\w\d])(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s([0123]?\d)(?:th|st|nd|rd|)(\s)(\d{1,4})([^\w\d][^\d])/gi, '$1$2 $3,$4$5$6');

//year: temporary change to protect accessyear. Undone below at #1

txt.value=txt.value.replace(/(accessyear\s?=\s?)\[\[(\d{1,4})\]\]/gi, '$1xx$2xx');

//year: now remove unprotected linked years

txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]/gi, '$1');

//year: #1. Undo temporary change to protect accessyear and date preference dates

txt.value=txt.value.replace(/xx(\d{1,4})xx/gi, '$1');

unprotect_dates();

edit_summary();

}

function edit_summary(){

// Add a tag to the summary box

var txt=document.editform.wpSummary;

var summary = "wp:datescript-assisted date/terms audit; see wp:unlinkdates, wp:overlink";

if (txt.value.indexOf(summary) == -1) {

if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {

txt.value += " | ";

}

txt.value += summary;

}

document.editform.wpDiff.click();

}

function delink_dates_to_dmy_and_common_terms() {

code_delink_dates_to_dmy();

CommonTerms();

edit_summary();

}

function delink_dates_to_mdy_and_common_terms() {

code_delink_dates_to_mdy();

CommonTerms();

edit_summary();

}

function CommonTerms(){

var txt=document.editform.wpTextbox1;

txt.value=txt.value.replace(/\[\[(African?|Alaskan?|American?|Antarctican?|Arctic\sOcean|Asian?|Atlantic\sOcean|Australian?|Austrian?|Beijing|Belgian|Belgium|Berlin|British|British\sIsles|Canada|Canadian|Central\sAmerican?|Chicago|China|Chinese|Korean?|Paris|People's\sRepublic\sof\sChina|Phillipines|Czech\sRepublic|Danish|Denmark|England|English|Europe|European|France|French|Finland|Finnish|Germany?|Great\sBritain|Greece|Greek|Hawaiin?|Hungary|Hungarian|Hong\sKong|Indian?|Indian\sOcean|Ireland|Irish|Italy|Italian|Japan|Japanese|London|Los\sAngeles|Mexican|Mexico|Mexico\sCity|Middle\sEast|Middle\sEastern|Moscow|the\sNetherlands|Netherlands|New\sDelhi|New\sYork|New\sYork\sCity|New\sZealand|New\sZealander|North\sAmerican?|Norway|Norwegian|Pacific|Pacific\sOcean|Poland|Polish|Portugal|Portuguese|Queensland|Rome|Russian?|Scandinavian?|Scotland|Scottish|Shanghai|South\sAfrican?|Arctic\sOcean|South\sAmerican?|South\sKorean?|Spain|Spanish|Sweden|Swedish|Switzerland|Sydney|Tokyo|Toronto|United\sKingdom|U\.K\.|UK|United\sStates|United\sStates\sof\sAmerica|US|U\.S\.|USA|U\.S\.A\.|Vancouver|Wales|Welsh|Western\sAustralian?|West\sGermany?)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(?:African?|Alaskan?|American?|Antarctican?|Arctic\sOcean|Asian?|Atlantic\sOcean|Australian?|Austrian?|Beijing|Belgian|Belgium|Berlin|British|British\sIsles|Canada|Canadian|Central\sAmerican?|Chicago|China|Chinese|Korean?|Paris|People's\sRepublic\sof\sChina|Phillipines|Czech\sRepublic|Danish|Denmark|England|English|Europe|European|France|French|Finland|Finnish|Germany?|Great\sBritain|Greece|Greek|Hawaiin?|Hungary|Hungarian|Hong\sKong|Indian?|Indian\sOcean|Ireland|Irish|Italy|Italian|Japan|Japanese|London|Los\sAngeles|Mexican|Mexico|Mexico\sCity|Middle\sEast|Middle\sEastern|Moscow|the\sNetherlands|Netherlands|New\sDelhi|New\sYork|New\sYork\sCity|New\sZealand|New\sZealander|North\sAmerican?|Norway|Norwegian|Pacific|Pacific\sOcean|Poland|Polish|Portugal|Portuguese|Queensland|Rome|Russian?|Scandinavian?|Scotland|Scottish|Shanghai|South\sAfrican?|Arctic\sOcean|South\sAmerican?|South\sKorean?|Spain|Spanish|Sweden|Swedish|Switzerland|Sydney|Tokyo|Toronto|United\sKingdom|U\.K\.|UK|United\sStates|United\sStates\sof\sAmerica|US|U\.S\.|USA|U\.S\.A\.|Vancouver|Wales|Welsh|Western\sAustralian?|West\sGermany?)\|(African?|Alaskan?|American?|Antarctican?|Arctic\sOcean|Asian?|Atlantic\sOcean|Australian?|Austrian?|Beijing|Belgian|Belgium|Berlin|British|British\sIsles|Canada|Canadian|Central\sAmerican?|Chicago|China|Chinese|Korean?|Paris|People's\sRepublic\sof\sChina|Phillipines|Czech\sRepublic|Danish|Denmark|England|English|Europe|European|France|French|Finland|Finnish|Germany?|Great\sBritain|Greece|Greek|Hawaiin?|Hungary|Hungarian|Hong\sKong|Indian?|Indian\sOcean|Ireland|Irish|Italy|Italian|Japan|Japanese|London|Los\sAngeles|Mexican|Mexico|Mexico\sCity|Middle\sEast|Middle\sEastern|Moscow|the\sNetherlands|Netherlands|New\sDelhi|New\sYork|New\sYork\sCity|New\sZealand|New\sZealander|North\sAmerican?|Norway|Norwegian|Pacific|Pacific\sOcean|Poland|Polish|Portugal|Portuguese|Queensland|Rome|Russian?|Scandinavian?|Scotland|Scottish|Shanghai|South\sAfrican?|Arctic\sOcean|South\sAmerican?|South\sKorean?|Spain|Spanish|Sweden|Swedish|Switzerland|Sydney|Tokyo|Toronto|United\sKingdom|U\.K\.|UK|United\sStates|United\sStates\sof\sAmerica|US|U\.S\.|USA|U\.S\.A\.|Vancouver|Wales|Welsh|Western\sAustralian?|West\sGermany?)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(?:African?|Alaskan?|American?|Antarctican?|Arctic\sOcean|Asian?|Atlantic\sOcean|Australian?|Austrian?|Beijing|Belgian|Belgium|Berlin|British|British\sIsles|Canada|Canadian|Central\sAmerican?|Chicago|China|Chinese|Korean?|Paris|People's\sRepublic\sof\sChina|Phillipines|Czech\sRepublic|Danish|Denmark|England|English|Europe|European|France|French|Finland|Finnish|Germany?|Great\sBritain|Greece|Greek|Hawaiin?|Hungary|Hungarian|Hong\sKong|Indian?|Indian\sOcean|Ireland|Irish|Italy|Italian|Japan|Japanese|London|Los\sAngeles|Mexican|Mexico|Mexico\sCity|Middle\sEast|Middle\sEastern|Moscow|the\sNetherlands|Netherlands|New\sDelhi|New\sYork|New\sYork\sCity|New\sZealand|New\sZealander|North\sAmerican?|Norway|Norwegian|Pacific|Pacific\sOcean|Poland|Polish|Portugal|Portuguese|Queensland|Rome|Russian?|Scandinavian?|Scotland|Scottish|Shanghai|South\sAfrican?|Arctic\sOcean|South\sAmerican?|South\sKorean?|Spain|Spanish|Sweden|Swedish|Switzerland|Sydney|Tokyo|Toronto|United\sKingdom|U\.K\.|UK|United\sStates|United\sStates\sof\sAmerica|US|U\.S\.|USA|U\.S\.A\.|Vancouver|Wales|Welsh|Western\sAustralian?|West\sGermany?)\s\(?language\)?\|(African?|Alaskan?|American?|Antarctican?|Arctic\sOcean|Asian?|Atlantic\sOcean|Australian?|Austrian?|Beijing|Belgian|Belgium|Berlin|British|British\sIsles|Canada|Canadian|Central\sAmerican?|Chicago|China|Chinese|Korean?|Paris|People's\sRepublic\sof\sChina|Phillipines|Czech\sRepublic|Danish|Denmark|England|English|Europe|European|France|French|Finland|Finnish|Germany?|Great\sBritain|Greece|Greek|Hawaiin?|Hungary|Hungarian|Hong\sKong|Indian?|Indian\sOcean|Ireland|Irish|Italy|Italian|Japan|Japanese|London|Los\sAngeles|Mexican|Mexico|Mexico\sCity|Middle\sEast|Middle\sEastern|Moscow|the\sNetherlands|Netherlands|New\sDelhi|New\sYork|New\sYork\sCity|New\sZealand|New\sZealander|North\sAmerican?|Norway|Norwegian|Pacific|Pacific\sOcean|Poland|Polish|Portugal|Portuguese|Queensland|Rome|Russian?|Scandinavian?|Scotland|Scottish|Shanghai|South\sAfrican?|Arctic\sOcean|South\sAmerican?|South\sKorean?|Spain|Spanish|Sweden|Swedish|Switzerland|Sydney|Tokyo|Toronto|United\sKingdom|U\.K\.|UK|United\sStates|United\sStates\sof\sAmerica|US|U\.S\.|USA|U\.S\.A\.|Vancouver|Wales|Welsh|Western\sAustralian?|West\sGermany?)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(actor|author|dancer|model|novelist|playwright|poet|politican|record producer|singer|songwriter|writer)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(actress)\]\]/gi, '$1');

txt.value=txt.value.replace(/\[\[(dance)\]\](r)/gi, '$1$2');

txt.value=txt.value.replace(/\[\[model\s\(person\)\|(model)\]\]/gi, '$1');

edit_summary();

}

$(function () {

if(document.forms.editform) {

mw.util.addPortletLink('p-tb', 'javascript:CommonTerms()', 'Delink common terms', 't-delinkcommon', 'Regexp common terms', , );

mw.util.addPortletLink('p-tb', 'javascript:run_formatgeneral()', 'Add metric units', 't-addmetric', 'Fixes some unit formatting', , );

mw.util.addPortletLink('p-tb', 'javascript:button_delink_dates_to_dmy()', 'Delink dates to dmy', 't-delinkdmy', 'day month', , );

mw.util.addPortletLink('p-tb', 'javascript:button_delink_dates_to_mdy()', 'Delink dates to mdy', 't-delinkmdy', 'month day', , );

mw.util.addPortletLink('p-tb', 'javascript:all_dates_to_dmy()', 'All dates to dmy', 't-alldmy', 'day month', , );

mw.util.addPortletLink('p-tb', 'javascript:all_dates_to_mdy()', 'All dates to mdy', 't-allmdy', 'month day', , );

mw.util.addPortletLink('p-tb', 'javascript:delink_year_in_X()' , 'Delink year-in-X dates', 't-yearinX', 'Regexp yearinX', , );

mw.util.addPortletLink('p-tb', 'javascript:delink_dates_to_dmy_and_common_terms()', 'Delink dates to dmy+common terms', 't-dmyandcommon', 'Fixes some unit formatting', , );

mw.util.addPortletLink('p-tb', 'javascript:delink_dates_to_mdy_and_common_terms()', 'Delink dates to mdy+common terms', 't-mdyandcommon', 'Fixes some unit formatting', , );

mw.util.addPortletLink('p-tb', 'javascript:make_dates_bold()', 'Make dates bold', 't-bolddates', 'Fixes some unit formatting', , );

}

});