function formatunits() {
var txt = document.editform.wpTextbox1;
// Convert ° into ° symbol
txt.value = txt.value.replace(/°/g, '°');
txt.value = txt.value.replace(/º/g, '°');
// Convert &sup into superscript ² symbol
txt.value = txt.value.replace(/²/g, '²');
txt.value = txt.value.replace(/³/g, '³');
// Convert the word ohm(s) or the html entity into the actual Ω symbol (Omega, not the actual ohm symbol Ω) and make sure it's spaced
txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?\s?(Ω|ohm|Ohm)s?([\s,.;:\)\(\\/)])/g, '$1 $2Ω$4');
// Convert various micro symbols into the actual micro symbol, make sure it's spaced
txt.value = txt.value.replace(/(\d)\s?(μ|μ|µ)(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|°C|M)([\s,.;:\)\(\\/)])/g, '$1 µ$3$4');
// Convert capital K to lowercase k in units
txt.value = txt.value.replace(/(\d)\s?K(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|°C|M)([\s,.;:\)\(\\/)])/g, '$1 k$2$3');
// Fix common spelling error
txt.value = txt.value.replace(/celcius/gi, 'Celsius');
// Capitalize units correctly
txt.value = txt.value.replace(/(\d\s?[-])(khz)([\s,.\/\)])/gi, '$1 kHz$3');
txt.value = txt.value.replace(/(\d)\s?(mhz)([\s,.\/\)])/gi, '$1 MHz$3');
txt.value = txt.value.replace(/(\d)\s?(ghz)([\s,.\/\)])/gi, '$1 GHz$3');
txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?(hz|HZ)([\s,.;:\)\(\\/)])/g, '$1 $2Hz$4');
txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?(pa|PA)([\s,.;:\)\(\\/)])/g, '$1 $2Pa$4');
// Fix kilometres
txt.value = txt.value.replace(/(\d\s?)(kms?)/gi, '$1km');
txt.value = txt.value.replace(/(\d\-)(kms?)/gi, '$1km');
// Standardise kilometres per hour
txt.value = txt.value.replace(/(km\/hr)/gi, 'km/h');
txt.value = txt.value.replace(/(kph)/gi, 'km/h');
txt.value = txt.value.replace(/(kmph)/gi, 'km/h');
txt.value = txt.value.replace(/(\d)\s?(kmh)/gi, '$1 km/h');
txt.value = txt.value.replace(/(km\/h)/gi, 'km/h');
txt.value = txt.value.replace(/(\d)\s?(km\/h)/gi, '$1 km/h');
// Space before horsepower symbol
txt.value = txt.value.replace(/(\d)\s?(hp)/gi, '$1 hp');
txt.value = txt.value.replace(/(\d)\s?(bhp)/gi, '$1 bhp');
txt.value = txt.value.replace(/(\d)\s?(shp)/gi, '$1 shp');
// Space before other units
txt.value = txt.value.replace(/(\d)\s?(cc)([\s,.;:\)\(\\/)])/gi, '$1 cc$3');
txt.value = txt.value.replace(/(\d)\s?(mm)/gi, '$1 mm');
txt.value = txt.value.replace(/(\d)\s?(ml)/gi, '$1 ml');
// Standardise miles per hour and rpm
txt.value = txt.value.replace(/(m.p.h.)/gi, 'mph');
txt.value = txt.value.replace(/(mph)/gi, 'mph');
txt.value = txt.value.replace(/(\d)\s?(mph)/gi, '$1 mph');
txt.value = txt.value.replace(/(rpm)/gi, 'rpm');
txt.value = txt.value.replace(/(\d)\s?(rpm)/gi, '$1 rpm');
// Standardise symbol for pounds
txt.value = txt.value.replace(/(\d)\s?lbs/gi, '$1 lb');
txt.value = txt.value.replace(/(\d\+?)\s?lbs/gi, '$1 lb');
txt.value = txt.value.replace(/(\d lb)s/gi, '$1');
txt.value = txt.value.replace(/(\d)\s?(\[\[lbs\]\])/gi, '$1 \[\[Pound (mass)|lb\]\]');
// Standardise symbol for newton metres
txt.value = txt.value.replace(/(N[•]m)/gi, 'N·m');
// Standardise symbol for kilowatts
txt.value = txt.value.replace(/(\d)\s?kW/gi, '$1 kW');
// Standardise symbol for foot pounds
txt.value = txt.value.replace(/(ft[ -.•\/]lb[fs])/gi, 'ft·lbf');
txt.value = txt.value.replace(/(lb[fs][ -.•\/]ft)/gi, 'ft·lbf');
txt.value = txt.value.replace(/(lb[ -.•\/]ft)/gi, 'ft·lbf');
txt.value = txt.value.replace(/(ft[ -.•\/]lb)/gi, 'ft·lbf');
// Symbols for feet and inches
txt.value = txt.value.replace(/([^;°]\s?\s?)(\d{1,4})\s?(['’])\s?(\d{1,2})\s?(["”])/gi, '$1$2 ft $4 in');
//txt.value = txt.value.replace(/([:=\/\(])\s*(\d{1,3)\s?(['’])\s?(1?\d)\s?(["”])/gi, '$1$2 ft $4 in');
//txt.value = txt.value.replace(/(1?\d)\s?(["”])/gi, '$1 in');
//txt.value = txt.value.replace(/(eight[:= ]{1,2})\s?(\d)-(\d{1,2})([\s,.\/\)])/gi, '$1 $2 ft $3 in');
// Give digital value a percent symbol '%' instead of word
txt.value = txt.value.replace(/(\d)[\s?-]per ?cent([^aei])/gi, '$1%$2');
// Add a space before dB or B
txt.value = txt.value.replace(/(\d)\s?(dB|B)\b/g, '$1 $2');
// Add a space before any units that were missed before
txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|n|p|f|a|z|y)?(g|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|°C|°F|M)([\s,.;:\)\(\\/)])/g, '$1 $2$3$4');
// Separate one for seconds since they give a lot of false positives like "1970s". Only difference is mandatory prefix.
txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|n|p|f|a|z|y)(s)([\s,.;:\)\(\\/)])/g, '$1 $2$3$4');
// bps or b/s or bits/s --> bit/s
txt.value = txt.value.replace(/([KkMmGgTtPpEeYyZz])(bps|bits?\/s|b\/s)/g, '$1bit/s');
txt.value = txt.value.replace(/(\d)\s?(bps)/gi, '$1 bit/s');
// Bps or byte/s or bytes/s --> B/s
txt.value = txt.value.replace(/([KkMmGgTtPpEeYyZz])(Bps|bytes?\/s)/g, ' $1B/s');
// After that, make capitalization correct
txt.value = txt.value.replace(/K(bit|B)\/s/g, 'k$1/s');
txt.value = txt.value.replace(/m(bit|B)\/s/g, 'M$1/s');
txt.value = txt.value.replace(/g(bit|B)\/s/g, 'G$1/s');
txt.value = txt.value.replace(/t(bit|B)\/s/g, 'T$1/s');
txt.value = txt.value.replace(/e(bit|B)\/s/g, 'E$1/s');
txt.value = txt.value.replace(/y(bit|B)\/s/g, 'Y$1/s');
txt.value = txt.value.replace(/z(bit|B)\/s/g, 'Z$1/s');
// Common error
txt.value = txt.value.replace(/mibi(bit|byte)/g, 'mebi$1');
// Add a tag to the summary box
var txt = document.editform.wpSummary;
var summary = "units";
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) {
addLink('p-cactions', 'javascript:formatunits()', 'units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
}
});