User:Gerbrant/edit/autoReplace/default.js

new function {

wloRE = "\\[\\["; wlcRE = "\\]\\]"; monthRE = "([Jj]anuary|[Ff]ebruary|[Mm]arch|[Aa]pril|[Mm]ay|[Jj]une|[Jj]uly|[Aa]ugust|[Ss]eptember|[Oo]ctober|[Nn]ovember|[Dd]ecember)"; dayRE = "(\\d{1,2})(?:th)?"; yearRE = "(\\d{4})";

monthDayRE = monthRE + "\\s*" + dayRE; dayMonthRE = dayRE + "\\s*" + monthRE; wlMonthDayRE = wloRE + monthDayRE + wlcRE; wlDayMonthRE = wloRE + dayMonthRE + wlcRE; wlYearRE = wloRE + yearRE + wlcRE;

csRE1 = "\\s*(?:,\\s*|\\s+)"; csRE2 = "\\s*,?\\s*";

unitPRE = "([YZEPTGMkKhdcmµnpfazy]|da|)"; unitRE = "([gsmAKNJWCVΩFTHSM]|mol|cd|rad|sr|Hz|Pa|lm|lx|Wb|Bq|Gy|Sv|kat|°C)";

function fixCaps(a){ return a.slice(0,1) + a.slice(1).toLowerCase;  }

function monthDayYear(a, m, d, y){return "" + fixCaps(m) + " " + d + ", " + y + "";} function dayMonthYear(a, d, m, y){return "" + d + " " + fixCaps(m) + " " + y + "";}

function binPrefCap(p){ return p == "k" || p == "K" ? "k" : p.toUpperCase; }

module("Gerbrant.edit.autoReplace.default", [

//Leave the following alone: {re: "\\[\\[\\d{4}-\\d{2}-\\d{2}\\]\\]|\\|\\s*accessdate\\s*=\\s*\\d{4}-\\d{2}-\\d{2}|ISBN [-0-9]+|\\|\\s*url\\s*=.*(?:\\||\\}\\})|http://[-A-Za-z0-9._\\\\/~%+&#?!=@\\u0028\\u0029]+|\\s*\\n\\s*|\\s*[\\n\\r]\\|-|\\|\\s*isbn\\s*=\\s*[-0-9]+|\\{\\{convert\\s*\\|.*?\\}\\}", hf: function(a){return a;}},

{re: "ISBN([-0-9]+)", hf: function(a, n){return "ISBN " + n;}},

{re: " --(?!>) ?| —(?! )", hf: function{return " — ";}}, {re: "(?!<!)([^ ]{2})--(?!>) ?", hf: function(a,s){return s + " — ";}}, {re: "([^ ])— ?", hf: function(a,l){return l + " — ";}}, {re: " -(?!->) ?| –(?! )", hf: function{return " – ";}}, {re: "(?!<!-)([^ ]{3})- ", hf: function(a,s){return s + " – ";}}, {re: "([^ ])– ", hf: function(a,l){return l + " – ";}}, {re: "(€[0-9,]+\\.)--?", hf: function(a,v){return v + "—";}}, {re: "(\\d)-(?=\\d)", hf: function(a,l){return l + "–";}}, {re: "\\.\\.\\.", hf: function{return "…";}}, // Convert the word ohm(s) or the html entity into the actual Ω symbol (Omega, not the actual ohm symbol &#8486;) and make sure it's spaced {re: "(\\d)\\s?" + unitPRE + "(?:\\s|-|)(?:&Omega;|ohm|Ohm)s?([\\s,.])", hf: function(a,d,p,t){return d + " " + p + "Ω" + t;}}, // Convert various micro symbols into the actual micro symbol, make sure it's spaced {re: "(\\d)\\s?(?:&mu;|μ|&micro;)" + unitRE + "([\\s,.])", hf: function(a,d,u,t){return d + " µ" + u + t;}}, // Convert capital K to lowercase k in units {re: "(\\d)\\s?K" + unitRE + "([\\s,.])", hf: function(a,d,u,t){return d + " k" + u + t;}}, // Capitalize units correctly (kHz is already covered) {re: "(\\d)\\s?(?!MHz)(?:[Mm][Hh][Zz])([\\s,.])", hf: function(a,d,t){return d + " MHz" + t;}}, {re: "(\\d)\\s?(?!GHz)(?:[Gg][Hh][Zz])([\\s,.])", hf: function(a,d,t){return d + " GHz" + t;}}, {re: "(\\d)\\s?" + unitPRE + "(?:hz|HZ)([\\s,.])", hf: function(a,d,p,t){return d + " " + p + "Hz" + t;}}, {re: "(\\d)\\s?" + unitPRE + "(?:pa|PA)([\\s,.])", hf: function(a,d,p,t){return d + " " + p + "Pa" + t;}}, // Add a space before dB or B {re: "(\\d)dB\\b", hf: function(a,d){return d + " dB";}}, {re: "(\\d)B\\b", hf: function(a,d){return d + " B";}}, // Add a space before any units that were missed before // Separate one for seconds since they give a lot of false positives like "1970s ". Only difference is mandatory prefix. // (changed the way that works – now uses a negative lookahead) {re: "((?:\\D|^)(?!\\d\\d(?:\\d\\d)?s)[0-9,.]*\\d)" + unitPRE + unitRE + "([\\s,.])", hf: function(a,d,p,u,t){return d + " " + p + u + t;}}, // bps or b/s or bits/s --> bit/s {re: "([KkMmGgTtPpEeYyZz]|)(?:bps|bits\\/s|b\\/s)", hf: function(a,p){return p + "bit/s";}}, // Bps or byte/s or bytes/s --> B/s {re: "([KkMmGgTtPpEeYyZz]|)(?:Bps|bytes?\\/s)", hf: function(a,p){return binPrefCap(p) + "B/s";}}, // (After that, – would req. multiple runs, so I integrated this in the above) make capitalization correct {re: "([Kmgtpeyz])(bit|B)\\/s", hf: function(a,p,u){return binPrefCap(p) + u + "/s";}}, // Common error {re: "\\bmibi(bit|byte)\\b", hf: function(a,u){return "mebi" + u;}}, // Convert hyphen next to a number into a minus sign character {re: "([^a-zA-Z0-9\\,\\_\\{])-(\\d)", hf: function(a,l,r){return l + "−" + r;}}, // Changes 2x3 to 2×3 {re: "((?:\\D|^)(?!0x[0-9A-Fa-f])[0-9,.]*\\d\\s?)x(\\s?\\d)", hf: function(a,l,r){return l + "×" + r;}}, // Changes 10^3 to 103 // Changes x^3 to x3 {re: "([0-9a-zA-Z])\\^(\\d+)(?!(?:(?!$$).)*$$)", hf: function(a,l,r){return l + "" + r + "";}}, // Changes tags inside tags back into carets // (don't know of a way to exclude them from the above statement) //(but I do, see the RE above) // Changes 2 +/- 3 to 2±3 {re: "(\\s|\\d)\\+\\/?(?:-|−|-)(\\s|\\d)", hf: function(a,l,r){return l + "±" + r;}}, // Remove all extra newlines? {re: "(?:\\n\\s*){3,}", hf: function{return "\n\n";}},

{re: "(?:\\n\\s*){2,}([*#;:])", hf: function(a,s){return "\n" + s;}}, {re: "\\[\\[(.*?)\\|\\1\\]\\]", hf: function(a,b){return "" + b + "";}}, {re: "\\{\\{[Cc]quote\\|((?:.|\\n)*?)\\}\\}", hf: function(a,b) { var r = /(\s*\n){2,}/g; if(r.test(b)) b = " " + b.replace(r, " \n ") + " "; return ""' + b + '""; }}, {re: "\\{\\{(?:[Rr]quote\\|.*?|[Cc]quote2)\\|((?:.|\\n)*?)\\|((?:.|\\n)*?)\\}\\}", hf: function(a,b,c) { var r = /(\s*\n){2,}/g; if(r.test(b)) b = " " + b.replace(r, " \n ") + " – " + c + " "; else b += " – " + c;  return ""' + b + '"";  }},

{re: monthDayRE + csRE1 + yearRE, hf: monthDayYear}, {re: wlMonthDayRE + csRE2 + yearRE, hf: monthDayYear}, {re: monthDayRE + csRE2 + wlYearRE, hf: monthDayYear},

{re: dayMonthRE + csRE2 + yearRE, hf: dayMonthYear}, {re: wlDayMonthRE + csRE2 + yearRE, hf: dayMonthYear}, {re: dayMonthRE + csRE2 + wlYearRE, hf: dayMonthYear}, {re: wloRE + monthRE + "\\s*(\\d{1,2})th" + wlcRE + csRE2 + wlYearRE, hf: monthDayYear},

//Leave all other links alone to prevent accidentally breaking them: {re: "\\[\\[.*?(?:\\]\\]|\\|)", hf: function(a){return a;}},

{re: "\\d{4}-\\d{2}-\\d{2}(?!\\]\\])", hf: function(a){return "" + a + "";}}, {re: "(\\d{4})\\.(\\d{2})\\.(\\d{2})", hf: function(a, y, m, d){return "" + y + "-" + m + "-" + d + "";}},

{re: "\\s*(|\\s+name)(?:(?!|\\s+name)).)*(?: |/>))\\s*([.,:;!?])", hf: function(a,b,c){return c + b;}}, {re: "\\s*|\\s)", hf: function{return "<ref";}},

{re: "…\\.", hf: function{return "…";}}

]);

}