User:Omegatron/monobook.js/unitformatter.js

// See also User:Atrian/monobook.js/unitformatter.js and User:Bobblewik/monobook.js/unitformatter.js

function formatunits() {

var txt = document.editform.wpTextbox1;

// Convert all ° into actual ° symbol

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Ω$5');

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

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

// Add a space before dB or B

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

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

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

// 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 = "Regex unit formatter";

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()

}

$(function () {

if(document.forms.editform) {

mw.util.addPortletLink('p-cactions', 'javascript:formatunits()', 'µ', 'ca-unitfixer', 'Fixes some unit formatting', , );

}

});