User:Typ932/monobook.js

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Typ932 (talk | contribs) at 21:49, 24 September 2008 (change). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Script from [[User:MarkS/extraeditbuttons.js]]

importScript('User:Cameltrader/Advisor.js');
importScript('User:MarkS/extraeditbuttons.js'); //[[User:MarkS/extraeditbuttons.js]]
importScript('Wikipedia:WikiProject_User_scripts/Scripts/Add_purge_to_tabs');
importScript('User:AzaToth/twinkle.js');


TwinkleConfig = {
        revertMaxRevisions              :       50,
        userTalkPageMode                :       'window',
        showSharedIPNotice              :       true,
        openTalkPage                    :       [ 'agf', 'norm', 'vand' ],
        openTalkPageOnAutoRevert        :       false,
        openAOLAnonTalkPage             :       false,
        summaryAd                       :       " using [[WP:TWINKLE|TW]]",
        deletionSummaryAd               :       " using [[WP:TWINKLE|TW]]",
        protectionSummaryAd             :       " using [[WP:TWINKLE|TW]]",
        watchSpeedyPages                :       [ 'g3', 'g5', 'g10', 'g11', 'g12' ],
        watchProdPages                  :       true,
        openUserTalkPageOnSpeedyDelete  :       [ 'g1', 'g2', 'g10', 'g11', 'g12', 'a1', 'a7', 'i3', 'i4', 'i5', 'i6', 'i7', 'u3', 't1' ],
        watchRevertedPages              :       [ 'agf', 'norm', 'vand', 'torev' ],
        markRevertedPagesAsMinor        :       [ 'agf', 'norm', 'vand', 'torev' ],
        deleteTalkPageOnDelete          :       false,
        watchWarnings                   :       true,
        markAIVReportAsMinor            :       true,
        markSpeedyPagesAsMinor          :       true,
        offerReasonOnNormalRevert       :       true,
        orphanBacklinksOnSpeedyDelete   :       {orphan:true, exclude:['g6']}
};

//Create 'winc' function:

function winc(s) {
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=' + s
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
//'winc' function allows buttons to be added toolbar
winc('User:Typ932/monobook.js/addlink.js');

function delink_ISO() {
    var txt = document.editform.wpTextbox1;
//    delink_ISO();
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');
 
// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "Date audit, [[User:Lightmouse/monobook.js/script.js|script]]-assisted; see [[Wikipedia:MOSNUM#Date_autoformatting|mosnum]]";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}
 
// Press the diff button to check it
    document.editform.wpDiff.click()
}
addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:run_delink_ISO()', 'delink ISO', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});

function delink_ISO_to_dmy() {
    var txt = document.editform.wpTextbox1;

txt.value=txt.value.replace(/\[\[(\d{4})-01-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 January $1');
txt.value=txt.value.replace(/\[\[(\d{4})-02-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 February $1');
txt.value=txt.value.replace(/\[\[(\d{4})-03-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 March $1');
txt.value=txt.value.replace(/\[\[(\d{4})-04-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 April $1');
txt.value=txt.value.replace(/\[\[(\d{4})-05-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 May $1');
txt.value=txt.value.replace(/\[\[(\d{4})-06-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 June $1');
txt.value=txt.value.replace(/\[\[(\d{4})-07-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 July $1');
txt.value=txt.value.replace(/\[\[(\d{4})-08-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 August $1');
txt.value=txt.value.replace(/\[\[(\d{4})-09-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 September $1');
txt.value=txt.value.replace(/\[\[(\d{4})-10-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 October $1');
txt.value=txt.value.replace(/\[\[(\d{4})-11-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 November $1');
txt.value=txt.value.replace(/\[\[(\d{4})-12-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 December $1');

txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[01-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 January $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[02-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 February $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[03-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 March $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[04-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 April $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[05-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 May $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[06-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 June $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[07-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 July $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[08-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 August $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[09-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 September $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[10-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 October $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[11-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 November $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[12-(?:0(\d)|([1-3]\d))\]\]/gi, '$2 December $1');
}

function delink_ISO_to_mdy() {
    var txt = document.editform.wpTextbox1;

txt.value=txt.value.replace(/\[\[(\d{4})-01-(?:0(\d)|([1-3]\d))\]\]/gi, 'January $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-02-(?:0(\d)|([1-3]\d))\]\]/gi, 'February $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-03-(?:0(\d)|([1-3]\d))\]\]/gi, 'March $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-04-(?:0(\d)|([1-3]\d))\]\]/gi, 'April $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-05-(?:0(\d)|([1-3]\d))\]\]/gi, 'May $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-06-(?:0(\d)|([1-3]\d))\]\]/gi, 'June $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-07-(?:0(\d)|([1-3]\d))\]\]/gi, 'July $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-08-(?:0(\d)|([1-3]\d))\]\]/gi, 'August $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-09-(?:0(\d)|([1-3]\d))\]\]/gi, 'September $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-10-(?:0(\d)|([1-3]\d))\]\]/gi, 'October $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-11-(?:0(\d)|([1-3]\d))\]\]/gi, 'November $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})-12-(?:0(\d)|([1-3]\d))\]\]/gi, 'December $2, $1');

txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[01-(?:0(\d)|([1-3]\d))\]\]/gi, 'January $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[02-(?:0(\d)|([1-3]\d))\]\]/gi, 'February $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[03-(?:0(\d)|([1-3]\d))\]\]/gi, 'March $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[04-(?:0(\d)|([1-3]\d))\]\]/gi, 'April $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[05-(?:0(\d)|([1-3]\d))\]\]/gi, 'May $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[06-(?:0(\d)|([1-3]\d))\]\]/gi, 'June $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[07-(?:0(\d)|([1-3]\d))\]\]/gi, 'July $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[08-(?:0(\d)|([1-3]\d))\]\]/gi, 'August $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[09-(?:0(\d)|([1-3]\d))\]\]/gi, 'September $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[10-(?:0(\d)|([1-3]\d))\]\]/gi, 'October $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[11-(?:0(\d)|([1-3]\d))\]\]/gi, 'November $2, $1');
txt.value=txt.value.replace(/\[\[(\d{4})\]\]-\[\[12-(?:0(\d)|([1-3]\d))\]\]/gi, 'December $2, $1');

}


function year_in_blah() {
    var txt = document.editform.wpTextbox1;

//Identify surprise or 'Easter egg' diversions linking years to 'year in something' articles. Turn them into year links to be dealt with below
txt.value=txt.value.replace(/\[\[\d{1,4}s?\sin\s[^\|]+\|(\d{1,4}s?)\]\]/gi, '\[\[$1\]\]');
}

function part_dates() {
    var txt = document.editform.wpTextbox1;

// 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\]\]/gi, '$1century');
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\s(AD|BC|CE|BCE)\]\]/gi, '$1century');
txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\]\]/gi, '$1century');
txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\]\]/gi, '$1centuries');
txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th))\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\]\]/gi, '$1century');
txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\]\]/gi, '$1centuries');
txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\s(AD|BC|CE|BCE)\]\]/gi, '$1century $2');
txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\s(AD|BC|CE|BCE)\]\]/gi, '$1century $2');
txt.value=txt.value.replace(/\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\s(AD|BC|CE|BCE)\]\]/gi, '$1centuries $2');
//century - protect names like '20th Century Fox', '20th Century Picture' '20th Century Limited'. Method is to test for capital letter in next word- undone below
//txt.value=txt.value.replace(/(20th)\s(Century)\s([A-Z])/gi, '$1xx$2 $3');
//century - upper case 'C' to lower case
txt.value=txt.value.replace(/(\d(?:st|nd|rd|th)(?:\s|-))Century((?:\s|-)[^A-Z])/g, '$1century$2');
//century- unprotect names
//txt.value=txt.value.replace(/(20th)xx(Century)/gi, '$1 $2');

// decades and years
txt.value=txt.value.replace(/\[\[(\d{1,4})\'?s\]\]/gi, '$1s');
txt.value=txt.value.replace(/\[\[(\d{1,4})\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
txt.value=txt.value.replace(/\[\[\d{1,4}\'?s?\s(?:AD|BC|CE|BCE)\|(\d{1,4})\'?(s)?\]\]/gi, '$1$2');
txt.value=txt.value.replace(/\[\[\d{1,4}\'?s?\s(?:AD|BC|CE|BCE)\|(\d{1,4})\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
txt.value=txt.value.replace(/\[\[\d{1,4}\'?s?\|(\d{1,4})\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
txt.value=txt.value.replace(/\[\[\d{1,4}\'?s?\|(\d{1,4})\'?(s)?\]\]/gi, '$1$2');
txt.value=txt.value.replace(/\[\[\d\d?(?:st|nd|rd|th)\scentur(?:y|ies)\|(\d{1,4})\'?(s)?\]\]/gi, '$1$2');
txt.value=txt.value.replace(/\[\[\w{5,12}\scentur(?:y|ies)\|(\d{1,4})\'?(s)?\]\]/gi, '$1$2');
// solitary day_numbers
txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[\d{1,2} (?:January|February|March|April|May|June|July|August|September|October|November|December)\|(\d{1,2}(?:th|st|nd|rd))\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[(\d{1,2}(?:st|nd|rd|th))\]\]/gi, '$1');
//month+day: remove incorrect trailing space
txt.value=txt.value.replace(/(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d\d?)\s(\]\])/gi,'$1$2');
//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) \d{3,4})\]\]/gi, '\[\[$1\]\]');
txt.value=txt.value.replace(/\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December) \d{3,4})\]\]/gi, '$1');

//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: temporary change to protext preference dates - y?y?y?. Needed to handle 'year in' piped links
txt.value=txt.value.replace(/(\[\[\d\d?\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\],?\s?\s?)\[\[(\d{1,4})\]\]y?y?y?/gi,'$1xx$2xx');
txt.value=txt.value.replace(/(\[\[\d\d?\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\]\],?\s?\s?)\[\[(\d{1,4})\]\]y?y?y?/g,'$1xx$2xx');
txt.value=txt.value.replace(/(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d\d?\]\],?\s?\s?)\[\[(\d{1,4})\]\]y?y?y?/gi,'$1xx$2xx');
txt.value=txt.value.replace(/(\[\[(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d\d?\]\],?\s?\s?)\[\[(\d{1,4})\]\]y?y?y?/g,'$1xx$2xx');
txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]y?y?y?(,?\s?\-?\s?\[\[(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d\d?\]\])/g,'xx$1xx$2');
txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]y?y?y?(,?\s?\-?\s?\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d\d?\]\])/gi,'xx$1xx$2');
txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]y?y?y?(,?\s?\-?\s?\[\[\d\d?\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\])/gi,'xx$1xx$2');
txt.value=txt.value.replace(/\[\[(\d{1,4})\]\]y?y?y?(,?\s?\-?\s?\[\[\d\d\-\d\d\]\]y?y?y?)/gi,'xx$1xx$2');

//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\]\]');

//'present'
txt.value=txt.value.replace(/\[\[Present \(time\)\|(Present)\]\]/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\)\|(spring)\]\]/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(/\[\[\s?(January|February|March|April|May|June|July|August|September|October|November|December)\s?\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\]\]/g, '$1');
txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\|(January|February|March|April|May|June|July|August|September|October|November|December)\]\]/gi, '$1');
//Treat 'Sept' (i.e. month abbreviation) differently from 'sept' (i.e. family)
txt.value=txt.value.replace(/\[\[(Sept)\]\]/g, '$1');
txt.value=txt.value.replace(/\[\[January\|(Jan)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[February\|(Feb)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[March\|(Mar)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[April\|(Apr)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[May\|(May)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[June\|(Jun)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[July\|(Jul)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[August\|(Aug)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[September\|(Sep)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[October\|(Oct)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[November\|(Nov)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[December\|(Dec)\]\]/g, '$1');

//month piped to number
txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\|(\d{1,4})\]\]/gi, '$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) (\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) \d?\d)\]\](?:th|st|nd|rd)/gi, '\[\[$1\]\]');
txt.value=txt.value.replace(/\[\[(\d?\d)(?:th|st|nd|rd) (January|February|March|April|May|June|July|August|September|October|November|December)\]\]/gi, '\[\[$1 $2\]\]');

//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) \d?\d)\]\](\s?\-?\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}\|(\d{1,2})\]\]/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) \d?\d)\]\](\s?&[nm]dash;\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}\|(\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) \d?\d)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}\|(\d{1,2})\]\]/gi, '$1$2$3$4');

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

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d) (?: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) \d{1,2}\|(\d{1,2})\]\]/gi, '$1$2$3$4');
//same again but with ndash instead of hyphen
txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d) (?: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) \d{1,2}\|(\d{1,2})\]\]/gi, '$1$2$3$4');
//same again but with slash instead of hyphen
txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d) (?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}\|(\d{1,2})\]\]/gi, '$1$2$3$4');

txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d) (?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?\-?\s?)\[\[(\d{1,2})\]\]/gi, '$1$2$3$4');
//same again but with ndash instead of hyphen
txt.value=txt.value.replace(/([^\[]{4})\[\[(\d?\d) (?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\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})\[\[(\d?\d) (?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(\d{1,2})\]\]/gi, '$1$2$3$4');

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

txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}\|((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2})\]\]/g, '$1');
//month+day piped into month+day or vice versa
txt.value=txt.value.replace(/\[\[\d{1,2}\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})\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}\|(\d{1,2}\s(?:January|February|March|April|May|June|July|August|September|October|November|December))\]\]/gi, '$1');

// days of the week in full. Optional plurals
txt.value=txt.value.replace(/\[\[(Mondays?|Tuesdays?|Wednesdays?|Thursdays?|Fridays?|Saturdays?|Sundays?)\]\]/gi, '$1');
// days of the week abbreviated. Leave out 'Sun' as potentially valid link to the Sun. Leave out 'SAT' in upper case as potential link to 'Scholastic achievement/aptitude test'.
txt.value=txt.value.replace(/\[\[(Mon|Tue|Tues|Wed|Thu|Thur|Thurs|Fri)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[(Sat)\]\]/g, '$1');
txt.value=txt.value.replace(/\[\[Mondays?\|(Mondays?|Mon)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Tuesdays?\|(Tuesdays?|Tues?)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Wednesdays?\|(Wednesdays?|Wed)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Thursdays?\|(Thursdays?|Thur?)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Fridays?\|(Fridays?|Fri)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Saturdays?\|(Saturdays?|Sat)\]\]/gi, '$1');
txt.value=txt.value.replace(/\[\[Sundays?\|(Sundays?|Sun)\]\]/gi, '$1');

//4 digit years piped into 2
txt.value=txt.value.replace(/\[\[\d{1,4}\|(\d{1,2})\]\]/gi, '$1');
}



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(/&times;/gi, '×');

//symbol for superscript 2 and 3
//txt.value=txt.value.replace(/<sup>2<\/sup>/gi, '²');
//txt.value=txt.value.replace(/<sup>3<\/sup>/gi, '³');

//Attempt to deal with naval infobox
txt.value=txt.value.replace(/General\sCharacteristics/g, 'General characteristics');

//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(/&deg;/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)(?:\s|&nbsp;|)(?:°|deg|degree|degrees)(?:\s|&nbsp;|)([CF]\W)/g, '$1 °$2');
txt.value=txt.value.replace(/(\d)(?:\s|&nbsp;|)(\[\[Celsius|°C\]\])/gi, '$1 $2');
txt.value=txt.value.replace(/(\d)(?:\s|&nbsp;|)(\[\[Fahrenheit|°F\]\])/gi, '$1 $2');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-|&nbsp;|)°?F([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|°F|°C|abbr=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-|&nbsp;|)(?:deg|degree|degrees)(?:\s|-|&nbsp;|)Fahrenheit([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|°F|°C}}$3');

// Convert &sup to superscript
txt.value=txt.value.replace(/&sup2;/g, '²');
txt.value=txt.value.replace(/&sup3;/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,\.]*)&nbsp;(?:metres|meters|metre|meter)(\))/g, '$1&nbsp;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,\.]*)&nbsp;(?:m\/second|m\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;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|-|&nbsp;|)sq(?:\s|\.\s|-|&nbsp;)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,\.]*)&nbsp;\[\[(kilometres|kilometers|kilometre|kilometer)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2&nbsp;$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,\.]*)&nbsp;\[\[(?: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,\.]*)&nbsp;kms?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;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|-|&nbsp;)\[\[km²\]\]/gi, '$1$2km²');
txt.value=txt.value.replace(/(\d)\s?sq\.?(?:\s|-|&nbsp;|)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,\.]*)&nbsp;(?:km\/second|km\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;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,\.]*)&nbsp;(?:km\/hr|km\/ph|kph|kmph|kmh)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;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,\.]*)&nbsp;\[\[(?:km\/hr|km\/ph|kph|kmph|kmh)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;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,\.]*)&nbsp;\[\[(kilograms?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2&nbsp;$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,\.]*)&nbsp;(?:feet|foot)(\))/g, '$1&nbsp;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,\.]*)&nbsp;ft\.(\))/g, '$1&nbsp;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)&nbsp;sq\.?&nbsp;(feet|foot|ft)/gi, '$1&nbsp;sq&nbsp;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)&nbsp;square&nbsp;ft/gi, '$1&nbsp;sq&nbsp;ft');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)sq(?:\s|-|&nbsp;|)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqft|m2|abbr=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)square(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqft|m2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)square(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqft|m2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)thousand(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000|sqft|m2|abbr=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)thousand(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000|sqft|m2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)thousand(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000|sqft|m2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000000|sqft|m2|abbr=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000000|sqft|m2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000000|sqft|m2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$300000|sqft|m2|abbr=on}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$300000|sqft|m2}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$300000|sqft|m2|sing=on}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$30000|sqft|m2|abbr=on}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$30000|sqft|m2}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:sq|square)\.?(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$30000|sqft|m2|sing=on}}$4');

//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,\.]*)&nbsp;(?:ft\/second|ft\/sec)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1$2&nbsp;ft/s$3');
//feet per second:plural
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)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|-|&nbsp;|)foot\sper\ssecond([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ft/s|m/s|sing=on}}$3');
//feet per second:abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)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|-|&nbsp;|)yds?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 yd$2');
txt.value=txt.value.replace(/(\d)(?:\s|-|&nbsp;|)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|-|&nbsp;|)(?: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|-|&nbsp;|)(?:yard|\[\[yard\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|yd|m|sing=on}}$3');
//yards: abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)yd([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|yd|m|abbr=on}}$3');
//yards: in full
txt.value=txt.value.replace(/([^y]\sone(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (1 m)$2');
txt.value=txt.value.replace(/([^y]\stwo(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (2 m)$2');
txt.value=txt.value.replace(/([^y]\sthree(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (3 m)$2');
txt.value=txt.value.replace(/([^y]\sfour(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4 m)$2');
txt.value=txt.value.replace(/([^y]\sfive(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (5 m)$2');
txt.value=txt.value.replace(/([^y]\ssix(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (5 m)$2');
txt.value=txt.value.replace(/([^y]\sseven(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (6 m)$2');
txt.value=txt.value.replace(/([^y]\seight(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (7 m)$2');
txt.value=txt.value.replace(/([^y]\snine(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (8 m)$2');
txt.value=txt.value.replace(/([^y]\sten(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (9 m)$2');
txt.value=txt.value.replace(/([^y]\seleven(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (10 m)$2');
txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (11 m)$2');
txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (12 m)$2');
txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (13 m)$2');
txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (14 m)$2');
txt.value=txt.value.replace(/([^y]\ssixteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (15 m)$2');
txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16 m)$2');
txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16 m)$2');
txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (17 m)$2');
txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-|&nbsp;|)yards?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (18 m)$2');

// knot
txt.value=txt.value.replace(/(\d)(\s|-|&nbsp;)(?: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, '[[knot (speed)|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|-|&nbsp;|)miles\s(?:at|@)\s([\d\.]{1,9}(?:\s|-|&nbsp;|)knots|{{convert)/gi, '$1 nautical miles at $2');
txt.value=txt.value.replace(/(\d)(\s|-|&nbsp;)(?:mi|nm|nmi)\s(?:at|@)\s([\d\.]{1,9}(?:\s|-|&nbsp;|)knots|{{convert)/gi, '$1$2nmi at $3');
//nautical mile: plural unlinked
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)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|-|&nbsp;|)\[\[nautical(?:\s|-|&nbsp;|)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|-|&nbsp;|)\[\[nautical(?:\s|-|&nbsp;|)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|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)mile([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|nmi|km|sing=on}}$3');
//nautical mile: singular linked
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)\[\[nautical(?:\s|-|&nbsp;|)mile\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|nmi|km|sing=on}}$3');
//nautical mile: abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?:\[\[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|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (1.9 km)$2');
txt.value=txt.value.replace(/([^y]\stwo(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4 km)$2');
txt.value=txt.value.replace(/([^y]\sthree(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (6 km)$2');
txt.value=txt.value.replace(/([^y]\sfour(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (7 km)$2');
txt.value=txt.value.replace(/([^y]\sfive(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (9 km)$2');
txt.value=txt.value.replace(/([^y]\ssix(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (11 km)$2');
txt.value=txt.value.replace(/([^y]\sseven(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (13 km)$2');
txt.value=txt.value.replace(/([^y]\seight(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (15 km)$2');
txt.value=txt.value.replace(/([^y]\snine(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (17 km)$2');
txt.value=txt.value.replace(/([^y]\sten(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (19 km)$2');
txt.value=txt.value.replace(/([^y]\seleven(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (20 km)$2');
txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (22 km)$2');
txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (24 km)$2');
txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (26 km)$2');
txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (28 km)$2');
txt.value=txt.value.replace(/([^y]\ssixteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (30 km)$2');
txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (31 km)$2');
txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (33 km)$2');
txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (35 km)$2');
txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-|&nbsp;|)nautical(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (37 km)$2');

//knot - plural
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?: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|-|&nbsp;|)(?:knot|\[\[knot\s\(speed\)\|(?:knot|kt|kn)\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|kn|km/h|sing=on}}$3');
//knot - abbreviation
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?: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,\.]*)&nbsp;\[\[(miles?)\]\]([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1$2&nbsp;$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|-|&nbsp;|)(?: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|-|&nbsp;|)(?:mile|\[\[mile\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|mi|km|sing=on}}$3');
//miles: abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)mi([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|mi|km|abbr=on}}$3');
//miles: in full
txt.value=txt.value.replace(/([^y]\sone(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (1.6 km)$2');
txt.value=txt.value.replace(/([^y]\stwo(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (3 km)$2');
txt.value=txt.value.replace(/([^y]\sthree(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (5 km)$2');
txt.value=txt.value.replace(/([^y]\sfour(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (6 km)$2');
txt.value=txt.value.replace(/([^y]\sfive(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (8 km)$2');
txt.value=txt.value.replace(/([^y]\ssix(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (10 km)$2');
txt.value=txt.value.replace(/([^y]\sseven(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (11 km)$2');
txt.value=txt.value.replace(/([^y]\seight(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (13 km)$2');
txt.value=txt.value.replace(/([^y]\snine(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (14 km)$2');
txt.value=txt.value.replace(/([^y]\sten(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (16 km)$2');
txt.value=txt.value.replace(/([^y]\seleven(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (18 km)$2');
txt.value=txt.value.replace(/([^y]\stwelve(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (19 km)$2');
txt.value=txt.value.replace(/([^y]\sthirteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (19 km)$2');
txt.value=txt.value.replace(/([^y]\sfourteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (21 km)$2');
txt.value=txt.value.replace(/([^y]\sfifteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (24 km)$2');
txt.value=txt.value.replace(/([^y]\sixteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (26 km)$2');
txt.value=txt.value.replace(/([^y]\sseventeen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (27 km)$2');
txt.value=txt.value.replace(/([^y]\seighteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (29 km)$2');
txt.value=txt.value.replace(/([^y]\snineteen(?:\s|-|&nbsp;|)miles?)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1 (30 km)$2');
txt.value=txt.value.replace(/([^y]\stwenty(?:\s|-|&nbsp;|)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|-|&nbsp;|)m\.?p\.?h([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|mi/h|km/h|abbr=on}}$3');



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



// foot pound 
 	
 	
 	
txt.value=txt.value.replace(/(\W)lbs?[\s-.·•\/]{1,2}ft([^²\w])/gi, '$1lb·ft$2');
	 
	
txt.value=txt.value.replace(/(\W)lbs?ft([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1lb·ft$2');
	 
	
txt.value=txt.value.replace(/ftlbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'lb·ft$1');
	 
	
txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'lb·ft$1');
	 
	
txt.value=txt.value.replace(/ftlbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, 'lb·ft$1');
	 
	
txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbf([^\|])/gi, 'lb·ft$1');
	 
	
txt.value=txt.value.replace(/ft[\s-.·•\/]{1,2}lbff/gi, 'lb·ft');
	 
	
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)pounds?(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|lb·ft|N.m}}$3');
	 
	
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)foot(?:\s|-|&nbsp;|)pounds([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|lb·ft|N.m}}$3');
	 
	
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)pound(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|lb·ft|N.m|sing=on}}$3');
	 
 	
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)foot(?:\s|-|&nbsp;|)pound([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|lb·ft|N.m|sing=on}}$3');
	 
	
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)ft.lbf([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|lb·ft|N.m|abbr=on}}$3');



// Newton metre
txt.value=txt.value.replace(/(\d)\s?Nm/gi, '$1 Nm');
txt.value=txt.value.replace(/(\d)&nbsp;Nm/gi, '$1&nbsp;Nm');



txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)Nm([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|Nm|lb·ft|abbr=on}}$3');
 
//kgm
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)kgm([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|kgm|Nm ftlbf|0|abbr=on}}$3');
 
//bhp
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)bhp([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|bhp|kW PS|0|abbr=on}}$3');
 
//kW
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)kW([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|kW|PS hp|0|abbr=on}}$3');
 
//kg
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)kg([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|kg|lb|0|abbr=on}}$3');
 
//mm
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)mm([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|mm|in|1|abbr=on}}$3');
 
//m
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)m([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|m|in|abbr=on}}$3');
 
 
//in
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)in([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|in|mm|0|abbr=on}}$3');
 
// PS
txt.value=txt.value.replace(/(\d)\s?PS/gi, '$1 PS');
txt.value=txt.value.replace(/(\d)&nbsp;PS/gi, '$1&nbsp;PS');
 
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]{0,16})(?:\s|-|&nbsp;|)PS([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|PS|kW hp|0|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|-|&nbsp;|)(mile)/gi, '$1uare $2');
// square mile:plural
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)square(?:\s|-|&nbsp;|)miles([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqmi|km2}}$3');
// square mile:singular
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)square(?:\s|-|&nbsp;|)mile([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqmi|km2|sing=on}}$3');
// square mile:abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)sq(?:\s|-|&nbsp;|)mi([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|sqmi|km2|abbr=on}}$3');

//acre foot:plural
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]\d\d+[\d,\.]*)(?:\s|-|&nbsp;|)acre(?:\s|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|acre feet}}$3');
//acre foot:singular
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]\d\d+[\d,\.]*)(?:\s|-|&nbsp;|)acre(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|acre feet|sing=on}}$3');
//acre foot:abbreviation
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]\d\d+[\d,\.]*)(?:\s|-|&nbsp;|)(?:acre|ac\.?)(?:\s|-|&nbsp;|)(?:foot|feet|ft)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$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|-|&nbsp;|)surface(?:\s|-|&nbsp;|)acre/gi, '$1 acre');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)thousand(?:\s|-|&nbsp;|)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000|acre|km2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)thousand(?:\s|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2000|acre|km2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|e6acre|km2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|e6acre|km2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$300000|acre|km2}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$300000|acre|km2|sing=on}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+)\.(\d\d)(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?: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|-|&nbsp;|)million(?:\s|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2$30000|acre|km2|sing=on}}$4');
txt.value=txt.value.replace(/([^y]\sone(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4,000 km²)$2');
txt.value=txt.value.replace(/(\sa(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (4,000 km²)$2');
txt.value=txt.value.replace(/([^y]\stwo(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (8,000 km²)$2');
txt.value=txt.value.replace(/([^y]\sthree(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (12,000 km²)$2');
txt.value=txt.value.replace(/([^y]\sfour(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (16,000 km²)$2');
txt.value=txt.value.replace(/([^y]\sfive(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (20,000 km²)$2');
txt.value=txt.value.replace(/([^y]\ssix(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (24,000 km²)$2');
txt.value=txt.value.replace(/([^y]\sseven(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (28,000 km²)$2');
txt.value=txt.value.replace(/([^y]\seight(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (32,000 km²)$2');
txt.value=txt.value.replace(/([^y]\snine(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (36,000 km²)$2');
txt.value=txt.value.replace(/([^y]\sten(?:\s|-|&nbsp;|)million(?:\s|-|&nbsp;|)acres?)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (40,000 km²)$2');

//acre:plural
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)([\d,]+\d\d[\d\.]*)(?:\s|-|&nbsp;|)(?:acres|\[\[acres\]\]|\[\[acre\]\]s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|acre|km2}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d?\d\.\d+)(?:\s|-|&nbsp;|)(?: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|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|acre|km2|sing=on}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d?\d\.\d+)(?:\s|-|&nbsp;|)(?:acre|\[\[acre\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1{{convert|$2|acre|m2|sing=on}}$3');

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





// pound weight. Parsed after foot pound and pound force
txt.value=txt.value.replace(/\[\[pound\s\(weight\)\|([^\]]+)\]\]/gi, '[[pound (mass)|$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)&nbsp;lbs?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1&nbsp;lb$2');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)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|-|&nbsp;|)pounds(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)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|-|&nbsp;|)pound(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)ounces?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|lb|$3|oz|kg|sing=on}}$4');
//pounds and ounces - abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)lbs?\.?,?(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)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|-|&nbsp;|)feet\.?(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?: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|-|&nbsp;|)foot\.?(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?:in|ins|inch|inches)\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ft|$3|in|m|sing=on}}$4');
//foot and inch: abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)ft\.?(?:\s|-|&nbsp;|)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?: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|-|&nbsp;|)feet([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ft|m}}$3');
//foot: singular
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)foot([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ft|m|sing=on}}$3');
//foot: abbreviated
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)ft\.?([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ft|m|abbr=on}}$3');

//inch: plural
txt.value=txt.value.replace(/([^\Wt'’]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)inches([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|in|mm}}$3');
// inch: plural with number in words
txt.value=txt.value.replace(/([^ty]\sthree(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (76 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfour(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (102 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfive(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (127 mm) $2');
txt.value=txt.value.replace(/([^ty]\ssix(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (152 mm) $2');
txt.value=txt.value.replace(/([^ty]\sseven(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (178 mm) $2');
txt.value=txt.value.replace(/([^ty]\seight(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (203 mm) $2');
txt.value=txt.value.replace(/([^ty]\snine(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (229 mm) $2');
txt.value=txt.value.replace(/([^ty]\sten(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (254 mm) $2');
txt.value=txt.value.replace(/([^ty]\seleven(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (279 mm) $2');
txt.value=txt.value.replace(/([^ty]\stwelve(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (305 mm) $2');
txt.value=txt.value.replace(/([^ty]\sthirteen(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (330 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfourteen(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (356 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfifteen(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (381 mm) $2');
txt.value=txt.value.replace(/([^ty]\ssixteen(?:\s|-|&nbsp;|)(?:inches|\[\[inches\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (406 mm) $2');
//inch: singular
txt.value=txt.value.replace(/([^\Wt'’]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|in|mm|sing=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|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (76 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfour(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (102 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfive(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (127 mm) $2');
txt.value=txt.value.replace(/([^ty]\ssix(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (152 mm) $2');
txt.value=txt.value.replace(/([^ty]\sseven(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (178 mm) $2');
txt.value=txt.value.replace(/([^ty]\seight(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (203 mm) $2');
txt.value=txt.value.replace(/([^ty]\snine(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (229 mm) $2');
txt.value=txt.value.replace(/([^ty]\sten(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (254 mm) $2');
txt.value=txt.value.replace(/([^ty]\seleven(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (279 mm) $2');
txt.value=txt.value.replace(/([^ty]\stwelve(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (305 mm) $2');
txt.value=txt.value.replace(/([^ty]\sthirteen(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (330 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfourteen(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (356 mm) $2');
txt.value=txt.value.replace(/([^ty]\sfifteen(?:\s|-|&nbsp;|)(?:inch|\[\[inch\]\]))([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 (381 mm) $2');
txt.value=txt.value.replace(/([^ty]\ssixteen(?:\s|-|&nbsp;|)(?: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)&nbsp;(horsepower|hp|bhp|ihp|shp)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1&nbsp;$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|-|&nbsp;|)(?:horsepower|\[\[horsepower\]\])([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|hp}}$3');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(indicated(?:\s|-|&nbsp;|)horsepower)([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1{{convert|$2|ihp}}$4');
txt.value=txt.value.replace(/([^\d\(\)\/\\]\s)(\d[\d,\.]*)(?:\s|-|&nbsp;|)(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)&nbsp;rpm([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1&nbsp;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)\s?bps([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1 bit/s$2');
txt.value=txt.value.replace(/(\d)&nbsp;([KkMmGgTt])?(?:bps|bits\/s|b\/s)([:;,\.?!]?\s[^\d\(\)\/\\])/g, '$1&nbsp;$2bit/s$3');
//txt.value=txt.value.replace(/(\d)&nbsp;bps([:;,\.?!]?\s[^\d\(\)\/\\])/gi, '$1&nbsp;bit/s$2');
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');

//change deprecated knot in template code
txt.value=txt.value.replace(/({convert\|[^}]+\|kn)ot(\||})/g, '$1$2');

//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 all_dates() {
    var txt = document.editform.wpTextbox1;
    part_dates();



//Remove full US format dates, ensure that comma is present
txt.value=txt.value.replace(/\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d\d?)\]\],?\s?\s?\[\[(\d{1,4})\]\]/gi,'$1, $2');

//Remove month+day and day+month formats
txt.value=txt.value.replace(/\[\[(\d\d?\s(?:January|February|March|April|May|June|July|August|September|October|November|December))\]\]/gi,'$1');
txt.value=txt.value.replace(/\[\[(\d\d?\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\]\]/g,'$1');
txt.value=txt.value.replace(/\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d\d?)\]\]/gi,'$1');
txt.value=txt.value.replace(/\[\[((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d\d?)\]\]/g,'$1');

//year: temporary change to protect split linked ISO dates. Undone below
txt.value=txt.value.replace(/(\[\[\d{1,4}\]\]-\[\[\d\d-\d\d\]\])/gi, 'qq$1');
//year: now remove unprotected linked years
txt.value=txt.value.replace(/([^q])\[\[(\d{1,4})\]\]/gi, '$1$2');
//year: Undo temporary change to protect part linked ISO dates
txt.value=txt.value.replace(/qq(\[\[)/gi, '$1');

}

function run_part_dates() {
    var txt = document.editform.wpTextbox1;
    part_dates();

    var txt = document.editform.wpSummary;
    var summary = "[[User:Lightmouse/monobook.js/script.js|Script]]-assisted. Units/dates/other";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}
    document.editform.wpDiff.click()
}
addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:run_part_dates()', 'part dates', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});

function run_all_dates() {
    var txt = document.editform.wpTextbox1;
    all_dates();
// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "[[User:Lightmouse/monobook.js/script.js|Script]]-assisted. Units/dates/other";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}
// Press the diff button to check it
    document.editform.wpDiff.click()
}
addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:run_all_dates()', 'all dates', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});




function run_year_in_blah() {
    var txt = document.editform.wpTextbox1;
    year_in_blah();

// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "[[User:Lightmouse/monobook.js/script.js|Script]]-assisted. Units/dates/other";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}

// Press the diff button to check it
    document.editform.wpDiff.click()
}
addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:run_year_in_blah()', 'year in blah', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});


function run_formatgeneral() {
    var txt = document.editform.wpTextbox1;
    formatgeneral();

// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "Script assisted. Units/dates/other/ per [[WP:AUN]], [[User:Lightmouse/monobook.js/script.js|Script]]-assisted. Units/dates/other";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}

// Press the diff button to check it
    document.editform.wpDiff.click()
}
addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:run_formatgeneral()', 'units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});

function combined() {
    var txt = document.editform.wpTextbox1;
    formatgeneral();
    part_dates();

// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "Script assisted. Units/dates/other/ per [[WP:AUN]], [[User:Lightmouse/monobook.js/script.js|Script]]-assisted. Units/dates/other";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}

// Press the diff button to check it
    document.editform.wpDiff.click()
}

addOnloadHook(function () {
    if(document.forms.editform) {
//        addPortletLink('p-cactions', 'javascript:combined()', 'dates+units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
//        addPortletLink('p-cactions', '', 'Note to users: script commands now in toolbox at bottom left beneath: What links here', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
//        addPortletLink('p-cactions', '', 'B', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});

//
function LMmosdate() {
   var txt = document.editform.wpTextbox1;
   txt.value = txt.value

   //MOSDATE remove th in dates followed by -th, others
    //.replace(/([^\[])(January|February|March|April|May|June|July|August|September|October|November|December)\s(\d\d?)(th|st|nd|rd)/gi, '$1[[$2 $3]]')
    .replace(/(January|February|March|April|May|June|July|August|September|October|November|December)\s(\d\d?)(th|st|nd|rd)/gi, '$1 $2')
    .replace(/\[\[(January|February|March|April|May|June|July|August|September|October|November|December)\s(\d\d?)\]\](<sup>)?(th|st|nd|rd)(<\/sup>)?/gi, '[[$1 $2]]') 
    .replace(/(\D\d\d?)(<sup>)?(th|st|nd|rd)(<\/sup>)?\s(January|February|March|April|May|June|July|August|September|October|November|December)/gi, '$1 $5')
    .replace(/\s(\d{3}0)'s(\W)/gi, ' $1s$2');
}


function LMyearinX() {
   var monthyear = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December),? *([0-9][0-9][0-9][0-9])\\]\\]", "g");
   var txt = document.editform.wpTextbox1;
   txt.value = txt.value.replace(/\[\[[1-2][0-9][0-9][0-9] in [A-Za-z]+\|([1-2][0-9][0-9][0-9])\]\]/g, "[[$1]]");
   txt.value = txt.value.replace(/([^,\]] |[^,\] ])\[\[([1-2][0-9][0-9][0-9])\]\]/g, "$1$2");
   txt.value = txt.value.replace(monthyear, "$1 $2");
}
 
function LMdayMonth(option) {

   var daymonth = new RegExp("\\[\\[0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)\\]\\],? *\\[\\[([0-9][0-9][0-9][0-9])\\]\\]", "g");
   var monthday = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)\\]\\](?:st|nd|rd|th|),? *\\[\\[([0-9][0-9][0-9][0-9])\\]\\]", "g");
   var daymonth2 = new RegExp("\\[\\[0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)\\]\\]", "g");
   var monthday2 = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)\\]\\](?:st|nd|rd|th|)", "g");
 
   var txt = document.editform.wpTextbox1;
   if (option == 1) {
//protect certain dates
txt.value=txt.value.replace(/([^\[])(september 11)/gi, '$1xx$2xx');
txt.value=txt.value.replace(/(september 11)([^\]])/gi, 'xx$1xx$2');

      // dd Month
      txt.value = txt.value.replace(monthday , "[[$2 $1]] [[$3]]");
      txt.value = txt.value.replace(daymonth , "[[$1 $2]] [[$3]]");
      txt.value = txt.value.replace(monthday2, "[[$2 $1]]");
      txt.value = txt.value.replace(daymonth2, "[[$1 $2]]");

//change deprecated dts2 template
txt.value=txt.value.replace(/{{dts2\|(.*?)\|(.*?)\|(.*?)}}/g, '{{dts|link=off|format=dmy|$3|$2|$1}}');
//fix dts template
txt.value=txt.value.replace(/({{dts\|)/g, '$1link=off|format=dmy|');
txt.value=txt.value.replace(/({{dts\|)link=off\|([^}]*link=off)/g, '$1$2');
txt.value=txt.value.replace(/({{dts\|)format=dmy\|([^}]*format=dmy)/g, '$1$2');

//Attempt to fix date range errors
txt.value=txt.value.replace(/ ([0-3][\d]|[\d]) (January|February|March|April|May|June|July|August|September|October|November|December)-([0-3][\d]|[\d]),? /gi, ' $1-$3 $2 ');
txt.value=txt.value.replace(/ (January|February|March|April|May|June|July|August|September|October|November|December),? ([0-3][\d]|[\d])-([0-3][\d]|[\d]),? /gi, ' $2-$3 $1 ');

//change deprecated birth and death templates
txt.value=txt.value.replace(/({{(?:Birth|Death)\|[^}]*)\|mf=ye?s?/gi, '$1');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|[^}]*)\|mf=ye?s?/gi, '$1');
txt.value=txt.value.replace(/({{(?:Birth|Death)\|)/gi, '$1df=yes|');
txt.value=txt.value.replace(/({{(?:Birth|Death)\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|)/gi, '$1df=yes|');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');

//delink ISO
//delink_ISO_to_dmy();

   } else {
      // Month dd
      txt.value = txt.value.replace(monthday , "[[$1 $2]], [[$3]]");
      txt.value = txt.value.replace(daymonth , "[[$2 $1]], [[$3]]");
      txt.value = txt.value.replace(monthday2, "[[$1 $2]]");
      txt.value = txt.value.replace(daymonth2, "[[$2 $1]]");

//change deprecated dts2 template
txt.value=txt.value.replace(/{{dts2\|(.*?)\|(.*?)\|(.*?)}}/g, '{{dts|link=off|$3|$2|$1}}');
//fix dts template
txt.value=txt.value.replace(/({{dts\|)/g, '$1link=off|');
txt.value=txt.value.replace(/({{dts\|)link=off\|([^}]*link=off)/g, '$1$2');

//change deprecated birth and death templates
txt.value=txt.value.replace(/({{(?:Birth|Death)\|[^}]*)\|df=ye?s?/gi, '$1');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|[^}]*)\|df=ye?s?/gi, '$1');
txt.value=txt.value.replace(/({{(?:Birth|Death)\|)/gi, '$1mf=yes|');
txt.value=txt.value.replace(/({{(?:Birth|Death)\|)mf=ye?s?\|([^}]*df=yes)/gi, '$1$2');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|)/gi, '$1mf=yes|');
txt.value=txt.value.replace(/({{(?:Birth|Death)\sdate\sand\sage\|)mf=ye?s?\|([^}]*mf=ye?s?)/gi, '$1$2');

//Attempt to fix date range errors
txt.value=txt.value.replace(/ ([0-3][\d]|[\d])-(January|February|March|April|May|June|July|August|September|October|November|December) ([0-3][\d]|[\d]),? /gi, ' $2 $1-$3 ');
txt.value=txt.value.replace(/ ([0-3][\d]|[\d])-([0-3][\d]|[\d]) (January|February|March|April|May|June|July|August|September|October|November|December),? /gi, ' $3 $1-$2 ');

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

//delink ISO
//delink_ISO_to_mdy();
   }
}
 
function LMaddDLinks() {
   var daymonth = new RegExp("0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December),? *([0-9][0-9][0-9][0-9])", "g");
   var monthday = new RegExp("(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|),? *([0-9][0-9][0-9][0-9])", "g");
   var daymonth2 = new RegExp("\\[\\[0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)\\]\\],? *([0-9][0-9][0-9][0-9])", "g");
   var monthday2 = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)\\]\\],? *([0-9][0-9][0-9][0-9])", "g");
   var daymonth3 = new RegExp("([^0-9\[])0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)([^0-9\\]])", "g");
   var monthday3 = new RegExp("([^0-9\[])(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)([^0-9\\]])", "g");
   var txt = document.editform.wpTextbox1;
   txt.value = txt.value.replace(monthday, "[[$1 $2]], [[$3]]");
   txt.value = txt.value.replace(daymonth, "[[$1 $2]] [[$3]]");
   txt.value = txt.value.replace(monthday2, "[[$1 $2]], [[$3]]");
   txt.value = txt.value.replace(daymonth2, "[[$1 $2]] [[$3]]");
   txt.value = txt.value.replace(monthday3, "$1[[$2 $3]]$4");
   txt.value = txt.value.replace(daymonth3, "$1[[$2 $3]]$4");
}
 
function LMremDLinks() {
   var daymonth = new RegExp("\\[\\[0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)\\]\\],? *\\[\\[([0-9][0-9][0-9][0-9])\\]\\]", "g");
   var monthday = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)\\]\\](?:st|nd|rd|th|),? *\\[\\[([0-9][0-9][0-9][0-9])\\]\\]", "g");
   var daymonth3 = new RegExp("\\[\\[0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|) (January|February|March|April|May|June|July|August|September|October|November|December)\\]\\]", "g");
   var monthday3 = new RegExp("\\[\\[(January|February|March|April|May|June|July|August|September|October|November|December) 0?([1-3][0-9]|[0-9])(?:st|nd|rd|th|)\\]\\](?:st|nd|rd|th|)", "g");
   var txt = document.editform.wpTextbox1;
   txt.value = txt.value.replace(monthday, "$1 $2, $3");
   txt.value = txt.value.replace(daymonth, "$1 $2 $3");
   txt.value = txt.value.replace(monthday3, "$1 $2");
   txt.value = txt.value.replace(daymonth3, "$1 $2");
}

function oneclickCombo(option) {
//   LMyearinX();
   LMaddDLinks();
   LMdayMonth(option);
   LMremDLinks();
   all_dates();
//run function again because it contains a date range bit
   LMdayMonth(option);
// Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "Date audit, [[User:Lightmouse/monobook.js/script.js|script]]-assisted; see [[Wikipedia:MOSNUM#Date_autoformatting|mosnum]]";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}
   document.editform.wpDiff.click();
}

function CommonTerms(){
    var txt = document.editform.wpTextbox1;

txt.value = txt.value.replace(/\[\[(African?|American?|Asian?|Australian?|Canada|Canadian|China|Chinese|People's\sRepublic\sof\sChina|England|English|Europe|European|France|French|Germany?|Indian?|Ireland|Irish|Italy|Italian|Japan|Japanese|New\sZealand|New\sZealander|North\sAmerican?|Russian?|Scotland|Scottish|South\sAfrican?|South\sAmerican?|South\sKorean?|Spain|Spanish|United Kingdom|U\.K\.|UK|United States|U\.S\.|US)\]\]/g, '$1');

txt.value=txt.value.replace(/\[\[(?:African?|American?|Asian?|Australian?|Canada|Canadian|China|Chinese|People's\sRepublic\sof\sChina|England|English|Europe|European|France|French|Germany?|Indian?|Ireland|Irish|Italy|Italian|Japan|Japanese|New\sZealand|New\sZealander|North\sAmerican?|Russian?|Scotland|Scottish|South\sAfrican?|South\sAmerican?|South\sKorean?|Spain|Spanish|United Kingdom|U\.K\.|UK|United States|U\.S\.|US)\|(African?|American?|Asian?|Australian?|Canada|Canadian|China|Chinese|People's\sRepublic\sof\sChina|England|English|Europe|European|France|French|Germany?|Indian?|Ireland|Irish|Italy|Italian|Japan|Japanese|New\sZealand|New\sZealander|North\sAmerican?|Russian?|Scotland|Scottish|South\sAfrican?|South\sAmerican?|South\sKorean?|Spain|Spanish|United Kingdom|U\.K\.|UK|United States|U\.S\.|US)\]\]/g, '$1');

txt.value=txt.value.replace(/\[\[(?:African?|American?|Asian?|Australian?|Canada|Canadian|China|Chinese|People's\sRepublic\sof\sChina|England|English|Europe|European|France|French|Germany?|Indian?|Ireland|Irish|Italy|Italian|Japan|Japanese|New\sZealand|New\sZealander|North\sAmerican?|Russian?|Scotland|Scottish|South\sAfrican?|South\sAmerican?|South\sKorean?|Spain|Spanish|United Kingdom|U\.K\.|UK|United States|U\.S\.|US)\s\(language\)\|(African?|American?|Asian?|Australian?|Canada|Canadian|China|Chinese|People's\sRepublic\sof\sChina|England|English|Europe|European|France|French|Germany?|Indian?|Ireland|Irish|Italy|Italian|Japan|Japanese|New\sZealand|New\sZealander|North\sAmerican?|Russian?|Scotland|Scottish|South\sAfrican?|South\sAmerican?|South\sKorean?|Spain|Spanish|United Kingdom|U\.K\.|UK|United States|U\.S\.|US)\]\]/g, '$1');

txt.value = txt.value.replace(/\[\[(actor|novelist|playwright|poet|politican|singer|songwriter)\]\]/gi, '$1');
txt.value = txt.value.replace(/\[\[(act)ress\]\]/g, '$1or');


    var txt = document.editform.wpSummary;
    var summary = "Delink common terms. See: [[wp:overlink]]";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}
   document.editform.wpDiff.click();
}

addOnloadHook(function () {
    if(document.forms.editform) {
        addPortletLink('p-tb', 'javascript:LMyearinX()'  , 'Delink year-in-X dates', 't-yearinX',  'Regexp yearinX', '', '');
//        addPortletLink('p-tb', 'javascript:LMaddDLinks()', 'Add date links', 't-monthday', 'Regexp links', '', '');
//        addPortletLink('p-tb', 'javascript:LMdayMonth(1)', 'Reformat dates to dmy', 't-daymonth', 'Regexp day month', '', '');
//        addPortletLink('p-tb', 'javascript:LMdayMonth(2)', 'Reformat dates to mdy', 't-monthday', 'Regexp month day', '', '');
//        addPortletLink('p-tb', 'javascript:all_dates()', 'Delink all dates', 't-monthday', 'Regexp links', '', '');
        addPortletLink('p-tb', 'javascript:oneclickCombo(1)', 'Delink all dates to dmy', 't-dmy', 'day month', '', '');
        addPortletLink('p-tb', 'javascript:oneclickCombo(2)', 'Delink all dates to mdy', 't-mdy', 'month day', '', '');
        addPortletLink('p-tb', 'javascript:run_formatgeneral()', 'Add metric units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
        addPortletLink('p-tb', 'javascript:delink_ISO()', 'Delink ISO dates', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
        addPortletLink('p-tb', 'javascript:run_part_dates()', 'Delink non-full dates', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
        addPortletLink('p-tb', 'javascript:combined()', 'Delink non-full dates+add metric units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
        addPortletLink('p-tb', 'javascript:CommonTerms()', 'Delink common terms', 't-dmy', 'Regexp common terms', '', '');

    }
});