User:Bobblewik/monobook.js/general.js

In this article, we will explore in detail the topic of User:Bobblewik/monobook.js/general.js, with the aim of providing our readers with a comprehensive vision of this relevant aspect in today's society. We will address various aspects, from its origin and evolution to its implications in daily life, in order to offer a comprehensive look that allows us to understand its importance and impact in different areas. Through an exhaustive analysis, we aim to provide an enriching perspective that contributes to knowledge and reflection on User:Bobblewik/monobook.js/general.js, inviting the audience to delve deeper into a topic of great relevance today.
//'winc' function allows buttons to be added toolbar

winc('User:Omegatron/monobook.js/addlink.js');

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

    //Attempt to deal with naval infobox

    //real symbol for 'times'
    txt.value = txt.value.replace(/×/gi, '×');

    txt.value = txt.value.replace(/General\sCharacteristics/g, 'General characteristics');


    //expand torpedo tube abbreviation
    txt.value = txt.value.replace(/inch\st\.?t\.?/g, 'inch torpedo tubes');

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


    txt.value = txt.value.replace(/one\s5\-inch\/({1,2})\sdeck\sgun/g, '1 x 5 in (127 mm)\$1 cal deck gun');
    //Attempt to deal with naval infobox


    //3 inch
    txt.value = txt.value.replace(/one\s3inch\s()/gi, '1 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/two\s3inch\s()/gi, '2 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/three\s3inch\s()/gi, '3 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/four\s3inch\s()/gi, '4 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/five\s3inch\s()/gi, '5 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/six\s3inch\s()/gi, '6 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/seven\s3inch\s()/gi, '7 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/eight\s3inch\s()/gi, '8 × 3 in (76 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\sthreeinch/gi, '$1 × 3 in (76 mm)');
    txt.value = txt.value.replace(/(\d)\s\s3inch/gi, '$1 × 3 in (76 mm)');
    txt.value = txt.value.replace(/\(76\s?mm\)\s?\(76\s?mm\)/gi, '(76 mm)');

    //4 inch
    txt.value = txt.value.replace(/one\s4inch\s()/gi, '1 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/two\s4inch\s()/gi, '2 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/three\s4inch\s()/gi, '3 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/four\s4inch\s()/gi, '4 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/five\s4inch\s()/gi, '5 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/six\s4inch\s()/gi, '6 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/seven\s4inch\s()/gi, '7 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/eight\s4inch\s()/gi, '8 × 4 in (102 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\sfourinch/gi, '$1 × 4 in (102 mm)');
    txt.value = txt.value.replace(/(\d)\s\s4inch/gi, '$1 × 4 in (102 mm)');
    txt.value = txt.value.replace(/\(102\s?mm\)\s?\(102\s?mm\)/gi, '(102 mm)');

    //5 inch
    txt.value = txt.value.replace(/one\s5inch\s()/gi, '1 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/two\s5inch\s()/gi, '2 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/three\s5inch\s()/gi, '3 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/four\s5inch\s()/gi, '4 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/five\s5inch\s()/gi, '5 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/six\s5inch\s()/gi, '6 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/seven\s5inch\s()/gi, '7 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/eight\s5inch\s()/gi, '8 × 5 in (127 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s5inch/gi, '$1 × 5 in (127 mm)');
    txt.value = txt.value.replace(/(\d)\s\sfiveinch/gi, '$1 × 5 in (127 mm)');
    txt.value = txt.value.replace(/\(127\s?mm\)\s?\(127\s?mm\)/gi, '(127 mm)');

    //6 inch
    txt.value = txt.value.replace(/one\s6inch\s()/gi, '1 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/two\s6inch\s()/gi, '2 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/three\s6inch\s()/gi, '3 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/four\s6inch\s()/gi, '4 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/five\s6inch\s()/gi, '5 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/six\s6inch\s()/gi, '6 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/seven\s6inch\s()/gi, '7 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/eight\s6inch\s()/gi, '8 × 6 in (152 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s6inch/gi, '$1 × 6 in (152 mm)');
    txt.value = txt.value.replace(/(\d)\s\ssixinch/gi, '$1 × 6 in (152 mm)');
    txt.value = txt.value.replace(/\(152\s?mm\)\s?\(152\s?mm\)/gi, '(152 mm)');

    //7 inch
    txt.value = txt.value.replace(/one\s7inch\s()/gi, '1 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/two\s7inch\s()/gi, '2 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/three\s7inch\s()/gi, '3 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/four\s7inch\s()/gi, '4 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/five\s7inch\s()/gi, '5 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/six\s7inch\s()/gi, '6 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/seven\s7inch\s()/gi, '7 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/eight\s7inch\s()/gi, '8 × 7 in (178 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\sseveninch/gi, '$1 × 7 in (178 mm)');
    txt.value = txt.value.replace(/(\d)\s\s7inch/gi, '$1 × 7 in (178 mm)');
    txt.value = txt.value.replace(/\(178\s?mm\)\s?\(178\s?mm\)/gi, '(178 mm)');

    //8 inch
    txt.value = txt.value.replace(/one\s8inch\s()/gi, '1 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/two\s8inch\s()/gi, '2 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/three\s8inch\s()/gi, '3 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/four\s8inch\s()/gi, '4 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/five\s8inch\s()/gi, '5 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/six\s8inch\s()/gi, '6 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/seven\s8inch\s()/gi, '7 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/eight\s8inch\s()/gi, '8 × 8 in (203 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s8inch/gi, '$1 × 8 in (203 mm)');
    txt.value = txt.value.replace(/(\d)\s\seightinch/gi, '$1 × 8 in (203 mm)');
    txt.value = txt.value.replace(/\(203\s?mm\)\s?\(203\s?mm\)/gi, '(203 mm)');

    //9 inch
    txt.value = txt.value.replace(/one\s9inch\s()/gi, '1 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/two\s9inch\s()/gi, '2 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/three\s9inch\s()/gi, '3 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/four\s9inch\s()/gi, '4 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/five\s9inch\s()/gi, '5 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/six\s9inch\s()/gi, '6 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/seven\s9inch\s()/gi, '7 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/eight\s9inch\s()/gi, '9 × 9 in (229 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s9inch/gi, '$1 × 9 in (229 mm)');
    txt.value = txt.value.replace(/(\d)\s\snineinch/gi, '$1 × 9 in (229 mm)');
    txt.value = txt.value.replace(/\(229\s?mm\)\s?\(229\s?mm\)/gi, '(229 mm)');

    //10 inch
    txt.value = txt.value.replace(/one\s10inch\s()/gi, '1 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/two\s10inch\s()/gi, '2 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/three\s10inch\s()/gi, '3 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/four\s10inch\s()/gi, '4 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/five\s10inch\s()/gi, '5 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/six\s10inch\s()/gi, '6 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/seven\s10inch\s()/gi, '7 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/eight\s10inch\s()/gi, '10 × 10 in (254 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s10inch/gi, '$1 × 10 in (254 mm)');
    txt.value = txt.value.replace(/(\d)\s\steninch/gi, '$1 × 10 in (254 mm)');
    txt.value = txt.value.replace(/\(254\s?mm\)\s?\(254\s?mm\)/gi, '(254 mm)');

    //11 inch
    txt.value = txt.value.replace(/one\s11inch\s()/gi, '1 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/two\s11inch\s()/gi, '2 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/three\s11inch\s()/gi, '3 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/four\s11inch\s()/gi, '4 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/five\s11inch\s()/gi, '5 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/six\s11inch\s()/gi, '6 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/seven\s11inch\s()/gi, '7 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/eight\s11inch\s()/gi, '11 × 11 in (279 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s11inch/gi, '$1 × 11 in (279 mm)');
    txt.value = txt.value.replace(/(\d)\s\seleveninch/gi, '$1 × 11 in (279 mm)');
    txt.value = txt.value.replace(/\(279\s?mm\)\s?\(279\s?mm\)/gi, '(279 mm)');

    //12 inch
    txt.value = txt.value.replace(/one\s12inch\s()/gi, '1 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/two\s12inch\s()/gi, '2 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/three\s12inch\s()/gi, '3 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/four\s12inch\s()/gi, '4 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/five\s12inch\s()/gi, '5 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/six\s12inch\s()/gi, '6 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/seven\s12inch\s()/gi, '7 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/eight\s12inch\s()/gi, '8 × 12 in (305 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\stwelveinch/gi, '$1 × 12 in (305 mm)');
    txt.value = txt.value.replace(/(\d)\s\s12inch/gi, '$1 × 12 in (305 mm)');
    txt.value = txt.value.replace(/\(305\s?mm\)\s?\(305\s?mm\)/gi, '(305 mm)');

    //13 inch
    txt.value = txt.value.replace(/one\s13inch\s()/gi, '1 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/two\s13inch\s()/gi, '2 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/three\s13inch\s()/gi, '3 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/four\s13inch\s()/gi, '4 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/five\s13inch\s()/gi, '5 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/six\s13inch\s()/gi, '6 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/seven\s13inch\s()/gi, '7 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/eight\s13inch\s()/gi, '8 × 13 in (330 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\sthirteeninch/gi, '$1 × 13 in (330 mm)');
    txt.value = txt.value.replace(/(\d)\s\s13inch/gi, '$1 × 13 in (330 mm)');
    txt.value = txt.value.replace(/\(330\s?mm\)\s?\(330\s?mm\)/gi, '(330 mm)');

    //14 inch
    txt.value = txt.value.replace(/one\s14inch\s()/gi, '1 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/two\s14inch\s()/gi, '2 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/three\s14inch\s()/gi, '3 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/four\s14inch\s()/gi, '4 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/five\s14inch\s()/gi, '5 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/six\s14inch\s()/gi, '6 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/seven\s14inch\s()/gi, '7 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/eight\s14inch\s()/gi, '14 × 14 in (356 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s14inch/gi, '$1 × 14 in (356 mm)');
    txt.value = txt.value.replace(/(\d)\s\sfourteeninch/gi, '$1 × 14 in (356 mm)');
    txt.value = txt.value.replace(/\(356\s?mm\)\s?\(356\s?mm\)/gi, '(356 mm)');

    //15 inch
    txt.value = txt.value.replace(/one\s15inch\s()/gi, '1 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/two\s15inch\s()/gi, '2 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/three\s15inch\s()/gi, '3 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/four\s15inch\s()/gi, '4 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/five\s15inch\s()/gi, '5 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/six\s15inch\s()/gi, '6 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/seven\s15inch\s()/gi, '7 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/eight\s15inch\s()/gi, '15 × 15 in (381 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s15inch/gi, '$1 × 15 in (381 mm)');
    txt.value = txt.value.replace(/(\d)\s\sfifteeninch/gi, '$1 × 15 in (381 mm)');
    txt.value = txt.value.replace(/\(381\s?mm\)\s?\(381\s?mm\)/gi, '(381 mm)');

    //16 inch
    txt.value = txt.value.replace(/one\s16inch\s()/gi, '1 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/two\s16inch\s()/gi, '2 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/three\s16inch\s()/gi, '3 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/four\s16inch\s()/gi, '4 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/five\s16inch\s()/gi, '5 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/six\s16inch\s()/gi, '6 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/seven\s16inch\s()/gi, '7 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/eight\s16inch\s()/gi, '16 × 16 in (406 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s16inch/gi, '$1 × 16 in (406 mm)');
    txt.value = txt.value.replace(/(\d)\s\ssixteeninch/gi, '$1 × 16 in (406 mm)');
    txt.value = txt.value.replace(/\(406\s?mm\)\s?\(406\s?mm\)/gi, '(406 mm)');

    //18 inch
    txt.value = txt.value.replace(/one\s18inch\s()/gi, '1 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/two\s18inch\s()/gi, '2 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/three\s18inch\s()/gi, '3 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/four\s18inch\s()/gi, '4 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/five\s18inch\s()/gi, '5 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/six\s18inch\s()/gi, '6 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/seven\s18inch\s()/gi, '7 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/eight\s18inch\s()/gi, '18 × 18 in (457 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\s18inch/gi, '$1 × 18 in (457 mm)');
    txt.value = txt.value.replace(/(\d)\s\seighteeninch/gi, '$1 × 18 in (457 mm)');
    txt.value = txt.value.replace(/\(457\s?mm\)\s?\(457\s?mm\)/gi, '(457 mm)');

    //21 inch
    txt.value = txt.value.replace(/one\s21inch\s()/gi, '1 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/two\s21inch\s()/gi, '2 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/three\s21inch\s()/gi, '3 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/four\s21inch\s()/gi, '4 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/five\s21inch\s()/gi, '5 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/six\s21inch\s()/gi, '6 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/seven\s21inch\s()/gi, '7 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/eight\s21inch\s()/gi, '8 × 21 in (533 mm) $1');
    txt.value = txt.value.replace(/(\d)\s\stwentyoneinch/gi, '$1 × 21 in (533 mm)');
    txt.value = txt.value.replace(/(\d)\s\s21inch/gi, '$1 × 21 in (533 mm)');
    txt.value = txt.value.replace(/\(533\s?mm\)\s?\(533\s?mm\)/gi, '(533 mm)');



    // Convert degree symbols into ° symbol, ensure preceding space
    txt.value = txt.value.replace(/°/g, '°');
    txt.value = txt.value.replace(/º/g, '°');

    // 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
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    //Fahrenheit
    //txt.value = txt.value.replace(/\\]/gi, '$1');
   // txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    //Celsius or Fahrenheit
    txt.value = txt.value.replace(/°\s()/g, '°$1');
    txt.value = txt.value.replace(/°\s?(celsius)/gi, '°C');
    txt.value = txt.value.replace(/(\d)\s?(°)/g, '$1 $2');
    txt.value = txt.value.replace(/deg()/gi, '°$1');
    txt.value = txt.value.replace(/deg\s()/gi, '°$1');
    txt.value = txt.value.replace(/deg\.?\s?()/gi, '°$1');
    txt.value = txt.value.replace(/degrees?\s()(\W)/gi, '°$1$2');
    txt.value = txt.value.replace(/(\d)\s?° ()/g, '$1 °$2');


    // Convert &sup to superscript
    txt.value = txt.value.replace(/²/g, '²');
    txt.value = txt.value.replace(/³/g, '³');

    // Convert micro symbol to 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|M)(\W)/g, '$1 µ$3$4');

    //metre
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //space before 'm' only when lower case
    txt.value = txt.value.replace(/(\d)\s?m(\W)/g, '$1 m$2');
    txt.value = txt.value.replace(/(\d)\-m(\W)/g, '$1 m$2');
    txt.value = txt.value.replace(/(\d)\s?sq\.?\s?m(\W)/gi, '$1 m²$2');
    txt.value = txt.value.replace(/(\d)\-?sq\-?m(\W)/gi, '$1 m²$2');
    txt.value = txt.value.replace(/m²\.\)/gi, 'm²)');
    txt.value = txt.value.replace(/\smetres?\)/gi, ' m)');
    txt.value = txt.value.replace(/\smeters?\)/gi, ' m)');
    txt.value = txt.value.replace(/({1,9})meters?(\s{1,3}\()/gi, '$1m$2');
    txt.value = txt.value.replace(/({1,9})metres?(\s{1,3}\()/gi, '$1m$2');
    txt.value = txt.value.replace(/({1,9} )meters?(( |\s{1,3})\()/gi, '$1m$2');
    txt.value = txt.value.replace(/({1,9} )metres?(( |\s{1,3})\()/gi, '$1m$2');

    // millimetre
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/(\d)\s?mm(\W)/g, '$1 mm$2');
    txt.value = txt.value.replace(/(\d)\-mm(\W)/g, '$1 mm$2');

    // centimetre
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    // kilometre
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/(\d)\s?kms?(\W)/gi, '$1 km$2');
    txt.value = txt.value.replace(/(\d)\-kms?(\W)/gi, '$1 km$2');
    txt.value = txt.value.replace(/(\d) kms?(\W)/gi, '$1 km$2');
    //square kilometre
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/(\d)\s?sq\.?\s?kms?/gi, '$1 km²');
    txt.value = txt.value.replace(/sq\.?\s?kms?/gi, 'km²');

    // kilometre per hour
    txt.value = txt.value.replace(/km\/hr(\W)/gi, 'km/h$1');
    txt.value = txt.value.replace(/kph(\W)/gi, 'km/h$1');
    txt.value = txt.value.replace(/kmph(\W)/gi, 'km/h$1');
    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');
    txt.value = txt.value.replace(/(\d)\-km\/h/gi, '$1 km/h');
    txt.value = txt.value.replace(/(\d) km\/h/gi, '$1 km/h');

    // cubic centimetre
    txt.value = txt.value.replace(/(\d)\s?cm(\W)/gi, '$1 cm$2');
    txt.value = txt.value.replace(/(\d)\s?cc(\W)/gi, '$1 cc$2');
    txt.value = txt.value.replace(/(\d)\-cc(\W)/gi, '$1 cc$2');

    // millilitre
    txt.value = txt.value.replace(/(\d)\s?ml(\W)/g, '$1 ml$2');
    txt.value = txt.value.replace(/(\d)\-ml(\W)/g, '$1 ml$2');

    // second
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/\/sec(\W)/gi, '/s$1');
    txt.value = txt.value.replace(/\/sec\)/gi, '/s)$1');

    txt.value = txt.value.replace(/(\d)\s?ft\/second/gi, '$1 ft/s');
    txt.value = txt.value.replace(/(\d)\s?m\/second/gi, '$1 m/s');
    txt.value = txt.value.replace(/(\d)\s?km\/sec(\W)/gi, '$1 km/s$2');
    txt.value = txt.value.replace(/frames\/s(\W)/gi, 'frame/s$1');

    //minute
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    // hour
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/\/hr(\W)/gi, '/h$1');

    //day
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    // kilogram
    txt.value = txt.value.replace(/(kilogram)me/gi, '$1');
    txt.value = txt.value.replace(/(\W)(gram)mes?(\W)/gi, '$1$2$3');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/(\d)\s?kg(\W)/gi, '$1 kg$2');
    txt.value = txt.value.replace(/(\d)\-kg(\W)/gi, '$1 kg$2');

    // newton metre
    //txt.value = txt.value.replace(/(\W)Nm(\W)/gi, '$1N·m$2');
    txt.value = txt.value.replace(/(\d)\s?(Nm\W)/gi, '$1 $2');
    txt.value = txt.value.replace(/(\d)\-(Nm\W)/gi, '$1 $2');

    // kilowatt
    txt.value = txt.value.replace(/(\d)\s?kW(\W)/gi, '$1 kW$2');
    txt.value = txt.value.replace(/(\d)\-kW(\W)/gi, '$1 kW$2');

    // Hertz
    txt.value = txt.value.replace(/(\d)\s?(G|M|k)?hz/gi, '$1 $2Hz');
    txt.value = txt.value.replace(/(\d)\-(G|M|k)?hz/gi, '$1 $2Hz');
    txt.value = txt.value.replace(/khz/gi, 'kHz');


    // ohm
    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?(\W)/g, '$1 $2Ω$4');

    // pound weight
    //txt.value = txt.value.replace(/(\d)\s?(\\])/gi, '$1 lb');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    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) lbs?/gi, '$1 lb');
    txt.value = txt.value.replace(/(\d)\slb.\)/gi, '$1 lb)');

    //inch
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');

    //foot
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    txt.value = txt.value.replace(/(\d)\s?ft(\W)/gi, '$1 ft$2');
    txt.value = txt.value.replace(/(\d)\-ft(\W)/gi, '$1 ft$2');
    txt.value = txt.value.replace(/(\W)ft\.\)/gi, '$1ft)');
    txt.value = txt.value.replace(/\sfeet\)/gi, ' ft)');
    txt.value = txt.value.replace(/ feet\)/gi, ' ft)');
    txt.value = txt.value.replace(/(\|{1,9})feet(\s{1,3}\()/gi, '$1ft$2');

    // square foot
    txt.value = txt.value.replace(/sq\.?\s?ft/gi, 'sq ft');

    // foot and inch
    //txt.value = txt.value.replace(/({1,4})(\d{1,4})\s?\s?(\d{1,3})\s?()/g, '$1$2 ft $3 in$4');
    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?()/g, '$1 ft $2 in$3');
    txt.value = txt.value.replace(/(\d)\s?ft\s?(\d{1,3})\s?in/gi, '$1 ft $2 in');

    // yard
    txt.value = txt.value.replace(/(\d)\s?yds(\W)/gi, '$1 yd$2');
    txt.value = txt.value.replace(/(\d) yds(\W)/gi, '$1 yd$2');
    txt.value = txt.value.replace(/sq\.?\s?yds?/gi, 'sq yd');
    txt.value = txt.value.replace(/yd\.\)/gi, 'yd)');

    // mile and mile per hour
    //txt.value = txt.value.replace(/\]{1,30})\]\]/gi, '$1');
    //txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/m\.p\.h\.(\W)/g, 'mph$1');
    txt.value = txt.value.replace(/(\W)mph(\W)/gi, '$1mph$2');
    txt.value = txt.value.replace(/(\d)\s?mph/gi, '$1 mph');
    txt.value = txt.value.replace(/(\d)\-mph/gi, '$1 mph');

    // square mile
    txt.value = txt.value.replace(/sq\.?\s?mi/gi, 'sq mi');

    // foot pound
    txt.value = txt.value.replace(/ftlbs?(\W)/gi, 'ft·lbf$1');
    txt.value = txt.value.replace(/ftlb(\W)/gi, 'ft·lbf$1');
    txt.value = txt.value.replace(/ftlbs/gi, 'ft·lbf');
    txt.value = txt.value.replace(/ftlbf/gi, 'ft·lbf');
    txt.value = txt.value.replace(/ftlbff/gi, 'ft·lbf');
    //the next two suspended until solution is found for wing loading (i.e. pounds per square foot)
    //txt.value = txt.value.replace(/lbft/gi, 'ft·lbf');
    //txt.value = txt.value.replace(/lbft/gi, 'ft·lbf');

    // Give digital value a percent symbol '%' instead of word
    txt.value = txt.value.replace(/(\d)\s?per ?cent()/gi, '$1%$2');
    txt.value = txt.value.replace(/(\d)\-per ?cent()/gi, '$1%$2');

    // knot
    txt.value = txt.value.replace(/(\d)\s?kts(\W)/gi, '$1 knots$2');
    txt.value = txt.value.replace(/(\d)\s?knt(\W)/gi, '$1 knots$2');

    // horsepower
    txt.value = txt.value.replace(/(\d)\s?hp(\W)/gi, '$1 hp$2');
    txt.value = txt.value.replace(/(\d)\s?bhp/gi, '$1 bhp');
    txt.value = txt.value.replace(/(\d)\s?shp/gi, '$1 shp');

    //Pferdestärke
    txt.value = txt.value.replace(/(\d)\s?(ps\W)/gi, '$1 $2');

    // rpm
    txt.value = txt.value.replace(/(\d)\s?rpm/gi, '$1 rpm');
    txt.value = txt.value.replace(/(\d)\-rpm/gi, '$1 rpm');

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

    // bits per second
    txt.value = txt.value.replace(/()(bps|bits?\/s|b\/s)/g, '$1bit/s');
    txt.value = txt.value.replace(/(\d)\s?(bps)/gi, '$1 bit/s');
    txt.value = txt.value.replace(/(\d) bps/gi, '$1 bit/s');
    txt.value = txt.value.replace(/bits?\/sec(\W)/gi, 'bit/s$1');

    // bytes per second
    txt.value = txt.value.replace(/()(Bps|bytes?\/s)/g, ' $1B/s');
    txt.value = txt.value.replace(/bytes?\/s(\W)/gi, 'B/s$1');

    // capitalization of prefix with bits and bytes
    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');

    // space with bits and bytes
    txt.value = txt.value.replace(/(\d)\s?(k|M|G)(bit|B)/g, '$1 $2$3');

    // Common error with bits and bytes
    txt.value = txt.value.replace(/mibi(bit|byte)/g, 'mebi$1');

    //Remove 'Easter egg' diversions (linking unit name to orders of magnitude articles)
    txt.value = txt.value.replace(/\]{1,50})\]\]/gi, '$1');
    txt.value = txt.value.replace(/\{1,30}\)\|(]{1,50})\]\]/gi, '$1');

    // century without AD,BC etc
    txt.value = txt.value.replace(/\century\]\]/gi, '$1 century');
    txt.value = txt.value.replace(/\century\|(\d{1,2}(?:st|nd|rd|th))\]\]/gi, '$1');
    txt.value = txt.value.replace(/\century\|(\d{1,2}(?:st|nd|rd|th))century\]\]/gi, '$1 century');
    txt.value = txt.value.replace(/\century\|(\d{1,2}(?:st|nd|rd|th))centuries\]\]/gi, '$1 centuries');
    // century with AD,BC etc
    txt.value = txt.value.replace(/\century\s(AD|BC|CE|BCE)\]\]/gi, '$1 century $2');
    txt.value = txt.value.replace(/\century\|(\d{1,2}(?:st|nd|rd|th))century\s(AD|BC|CE|BCE)\]\]/gi, '$1 century $2');
    txt.value = txt.value.replace(/\century\|(\d{1,2}(?:st|nd|rd|th))centuries\s(AD|BC|CE|BCE)\]\]/gi, '$1 centuries $2');
    txt.value = txt.value.replace(/(\d(?:st|nd|rd|th))Century/gi, '$1 century');

    // piped decades and years
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');

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

    //month+year
    txt.value = txt.value.replace(/\\]/gi, '$1');

    //Month+day_number "March 7th" -> "March 7"
    txt.value = txt.value.replace(/\\]/gi, '\\]');
    txt.value = txt.value.replace(/\\](?:th|st|nd|rd)/gi, '\\]');
    txt.value = txt.value.replace(/\\]/gi, '\\]');

    //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})\\](\s?\-?\s?)\\]/gi, '$1$2$3$4');
    //same again but with ndash or mdash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\s?‐\s?)\\]/gi, '$1$2$3$4');
    //same again but with slash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\/)\\]/gi, '$1$2$3$4');

    txt.value = txt.value.replace(/({4})\\](\s?\-?\s?)\\]/gi, '$1$2$3$4');
    //same again but with ndash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\s?‐\s?)\\]/gi, '$1$2$3$4');
    //same again but with slash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\/)\\]/gi, '$1$2$3$4');

    txt.value = txt.value.replace(/({4})\\](\s?\-?\s?)\\]/gi, '$1$2$3$4');
    //same again but with ndash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\s?‐\s?)\\]/gi, '$1$2$3$4');
    //same again but with slash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\/)\\]/gi, '$1$2$3$4');

    txt.value = txt.value.replace(/({4})\\](\s?\-?\s?)\\]/gi, '$1$2$3$4');
    //same again but with ndash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\s?‐\s?)\\]/gi, '$1$2$3$4');
    //same again but with slash instead of hyphen
    txt.value = txt.value.replace(/({4})\\](\/)\\]/gi, '$1$2$3$4');

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

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


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

    // days of the week in full. Optional plurals
    txt.value = txt.value.replace(/\\]/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(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/g, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');
    txt.value = txt.value.replace(/\\]/gi, '$1');

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

    //year: examine characters in link on left for date, examine characters in link on right for date
    txt.value = txt.value.replace(/((?:..|.|)\]\]\s?,?\-?\s?)\\](\s?,?\-?\s?\|.|..))/gi, '$1$2$3');
    //year pair: examine characters in link on left for date, examine characters in link on right for date
    txt.value = txt.value.replace(/((?:..|.|)\]\]\s?,?\-?\s?)\\](.?.?.?.?.?.?)\\](\s?,?\-?\s?\|.|..))/gi, '$1$2$3$4$5');

    //year: examine characters in link on left for date, avoid links on right
    txt.value = txt.value.replace(/((?:..|.|)\]\]\s?,?\-?\s?)\\]({4})/gi, '$1$2$3');
    //year pair: examine characters in link on left for date, avoid links on right
    txt.value = txt.value.replace(/((?:..|.|)\]\]\s?,?\-?\s?)\\](.?.?.?.?.?.?)\\]({4})/gi, '$1$2$3$4$5');

    //year: check for line-ends, text on left, avoid links on right. Run twice to deal better with lists.
    txt.value = txt.value.replace(/(\s?,?\-?\s?|\n)\\]({4}|\n)/gi, '$1$2$3');
    txt.value = txt.value.replace(/(\s?,?\-?\s?|\n)\\]({4}|\n)/gi, '$1$2$3');
    //year pair: check for line-ends, text on left, avoid links on right
    txt.value = txt.value.replace(/(\s?,?\-?\s?)\\](.?.?.?.?.?.?)\\]({4}|\n)/gi, '$1$2$3$4$5');

    //year: avoid links on left, examine characters in link on right for date
    txt.value = txt.value.replace(/(]{4})\\](\s?,?\-?\s?\|.|..))/gi, '$1$2$3');
    //year pair: avoid links on left, examine characters in link on right for date
    txt.value = txt.value.replace(/(]{4})\\](.?.?.?.?.?.?)\\](\s?,?\-?\s?\|.|..))/gi, '$1$2$3$4$5');

    //year:avoid links on left, text on right
    txt.value = txt.value.replace(/(]{4})\\](\s?,?\-?\s?)/gi, '$1$2$3');
    //year pair: avoid links on left, text on right
    txt.value = txt.value.replace(/(]{4})\\](.?.?.?.?.?.?)\\](\s?,?\-?\s?)/gi, '$1$2$3$4$5');

    //year:text on left, text on right
    txt.value = txt.value.replace(/(\s?,?\-?\s?)\\](\s?,?\-?\s?)/gi, '$1$2$3');
    //year pair: avoid links on left, text on right
    txt.value = txt.value.replace(/(\s?,?\-?\s?)\\](.?.?.?.?.?.?)\\](\s?,?\-?\s?)/gi, '$1$2$3$4$5');

    //year:avoid links on left, hyphen but no digits (to avoid ISO date) in link on right. Currently suspended because it isn't fully tested.
    //txt.value = txt.value.replace(/(]{4})\\](\s?,?\-?\s?\)/gi, '$1$2$3');

    //year:avoid links on both sides
    txt.value = txt.value.replace(/(]{4})\\]({4})/gi, '$1$2$3');
    //year pair: avoid links on both sides
    txt.value = txt.value.replace(/(]{4})\\](.?.?.?.?.?.?)\\]({4})/gi, '$1$2$3$4$5');

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

    //Eliminate 'surprise links' also known as 'easter egg links'
    txt.value = txt.value.replace(/\{1,30}\|(\d{1,4}s?)\]\]/gi, '$1');


    
    // Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "units &/or links";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}

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

$(function () {
    if(document.forms.editform) {
        addLink('p-cactions', 'javascript:formatgeneral()', 'general', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});