User:Dinoguy1000/scripts/fullwidth2ascii.js

/***********************************************************************

* *

* en:User:Dinoguy1000/scripts/fullwidth2ascii.js *

* *

* Replaces all instances of ASCII fullwidth characters with *

* their original ASCII counterparts, according to the list *

* at en:User:Dinoguy1000/Cheatsheet#Fullwidth character table. *

* *

* Framework shamelessly ripped from en:User:Drilnoth/codefixer.js *

* *

* Spinoff stuff (try to keep everything in sync): *

* - Wikipedia:AutoEd/fullwidth.js *

* - User:TheFarix/AWB/scripts/FullwidthReplacer *

* *

***********************************************************************/

function fullwidthReplacer() { //MAIN FUNCTION describes list of fixes

var txt = document.editform.wpTextbox1;

//replace

//Common punctuation

txt.value = txt.value.replace(/ /g, ' '); //fullwidth space

//txt.value = txt.value.replace(/・/g, '·'); //fullwidth interpunct

txt.value = txt.value.replace(/。/g, '.'); //replace ideographic period with a regular period (from TheFarix's AWB cleanup module)

//txt.value = txt.value.replace(/・・・/g, '...'); //three interpuncts normally mean an ellipsis

//txt.value = txt.value.replace(/···/g, '...'); //catch already converted triple interpuncts - it's after the interpunct rule so we only need one go-through to catch partial replacements

txt.value = txt.value.replace(/…/g, '...'); //it's a little ballsy, I guess, but we're already doing lots of replacements, so... (see also WP:ELLIPSES)

txt.value = txt.value.replace(/!/g, '!');

txt.value = txt.value.replace(/(/g, '(');

txt.value = txt.value.replace(/)/g, ')');

txt.value = txt.value.replace(/?/g, '?');

//Numbers

txt.value = txt.value.replace(/0/g, '0');

txt.value = txt.value.replace(/1/g, '1');

txt.value = txt.value.replace(/2/g, '2');

txt.value = txt.value.replace(/3/g, '3');

txt.value = txt.value.replace(/4/g, '4');

txt.value = txt.value.replace(/5/g, '5');

txt.value = txt.value.replace(/6/g, '6');

txt.value = txt.value.replace(/7/g, '7');

txt.value = txt.value.replace(/8/g, '8');

txt.value = txt.value.replace(/9/g, '9');

//Latin letters, uppercase

txt.value = txt.value.replace(/A/g, 'Α');

txt.value = txt.value.replace(/B/g, 'B');

txt.value = txt.value.replace(/C/g, 'C');

txt.value = txt.value.replace(/D/g, 'D');

txt.value = txt.value.replace(/E/g, 'E');

txt.value = txt.value.replace(/F/g, 'F');

txt.value = txt.value.replace(/G/g, 'G');

txt.value = txt.value.replace(/H/g, 'H');

txt.value = txt.value.replace(/I/g, 'I');

txt.value = txt.value.replace(/J/g, 'J');

txt.value = txt.value.replace(/K/g, 'K');

txt.value = txt.value.replace(/L/g, 'L');

txt.value = txt.value.replace(/M/g, 'M');

txt.value = txt.value.replace(/N/g, 'N');

txt.value = txt.value.replace(/O/g, 'O');

txt.value = txt.value.replace(/P/g, 'P');

txt.value = txt.value.replace(/Q/g, 'Q');

txt.value = txt.value.replace(/R/g, 'R');

txt.value = txt.value.replace(/S/g, 'S');

txt.value = txt.value.replace(/T/g, 'T');

txt.value = txt.value.replace(/U/g, 'U');

txt.value = txt.value.replace(/V/g, 'V');

txt.value = txt.value.replace(/W/g, 'W');

txt.value = txt.value.replace(/X/g, 'X');

txt.value = txt.value.replace(/Y/g, 'Y');

txt.value = txt.value.replace(/Z/g, 'Z');

//Latin letters, lowercase

txt.value = txt.value.replace(/a/g, 'a');

txt.value = txt.value.replace(/b/g, 'b');

txt.value = txt.value.replace(/c/g, 'c');

txt.value = txt.value.replace(/d/g, 'd');

txt.value = txt.value.replace(/e/g, 'e');

txt.value = txt.value.replace(/f/g, 'f');

txt.value = txt.value.replace(/g/g, 'g');

txt.value = txt.value.replace(/h/g, 'h');

txt.value = txt.value.replace(/i/g, 'i');

txt.value = txt.value.replace(/j/g, 'j');

txt.value = txt.value.replace(/k/g, 'k');

txt.value = txt.value.replace(/l/g, 'l');

txt.value = txt.value.replace(/m/g, 'm');

txt.value = txt.value.replace(/n/g, 'n');

txt.value = txt.value.replace(/o/g, 'o');

txt.value = txt.value.replace(/p/g, 'p');

txt.value = txt.value.replace(/q/g, 'q');

txt.value = txt.value.replace(/r/g, 'r');

txt.value = txt.value.replace(/s/g, 's');

txt.value = txt.value.replace(/t/g, 't');

txt.value = txt.value.replace(/u/g, 'u');

txt.value = txt.value.replace(/v/g, 'v');

txt.value = txt.value.replace(/w/g, 'w');

txt.value = txt.value.replace(/x/g, 'x');

txt.value = txt.value.replace(/y/g, 'y');

txt.value = txt.value.replace(/z/g, 'z');

//Other punctuation

txt.value = txt.value.replace(/"/g, '"');

txt.value = txt.value.replace(/#/g, '#');

txt.value = txt.value.replace(/$/g, '$');

txt.value = txt.value.replace(/%/g, '%');

txt.value = txt.value.replace(/&/g, '&');

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

txt.value = txt.value.replace(/*/g, '*');

txt.value = txt.value.replace(/+/g, '+');

txt.value = txt.value.replace(/,/g, ', ');

//txt.value = txt.value.replace(/、/g, ', '); //replace ideographic comma with a regular comma (from TheFarix's AWB cleanup module)

txt.value = txt.value.replace(/-/g, '-');

txt.value = txt.value.replace(/./g, '. ');

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

txt.value = txt.value.replace(/:/g, ': ');

txt.value = txt.value.replace(/;/g, '; ');

txt.value = txt.value.replace(/</g, '<');

txt.value = txt.value.replace(/=/g, '='); //this replacement could break template usage, use {{=}} as an alternative inside templates

txt.value = txt.value.replace(/>/g, '>');

txt.value = txt.value.replace(/@/g, '@');

txt.value = txt.value.replace(/[/g, '['); //this replacement could break wikimarkup usage

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

txt.value = txt.value.replace(/]/g, ']'); //this replacement could break wikimarkup usage

txt.value = txt.value.replace(/^/g, '^');

txt.value = txt.value.replace(/_/g, '_');

txt.value = txt.value.replace(/`/g, '`');

txt.value = txt.value.replace(/{/g, '{'); //this replacement could break wikimarkup usage, use {{(}} as an alternative

txt.value = txt.value.replace(/|/g, '|'); //this replacement could break template usage, use {{!}} as an alternative inside templates

txt.value = txt.value.replace(/}/g, '}'); //this replacement could break wikimarkup usage, use {{)}} as an alternative

txt.value = txt.value.replace(/~/g, '〜'); //ASCII tilde is, apparently, treated as a diacritic in some fonts, so this should be a better replacement

txt.value = txt.value.replace(/¢/g, '¢');

txt.value = txt.value.replace(/£/g, '£');

txt.value = txt.value.replace(/¬/g, '¬');

txt.value = txt.value.replace(/¦/g, '¦');

txt.value = txt.value.replace(/¥/g, '¥');

txt.value = txt.value.replace(/₩/g, '₩');

txt.value = txt.value.replace(/│/g, '│');

txt.value = txt.value.replace(/←/g, '←');

txt.value = txt.value.replace(/↑/g, '↑');

txt.value = txt.value.replace(/→/g, '→');

txt.value = txt.value.replace(/↓/g, '↓');

txt.value = txt.value.replace(/■/g, '■');

txt.value = txt.value.replace(/○/g, '○');

txt.value = txt.value.replace(/『/g, '「'); //some Japanese quote replacement (from TheFarix's AWB cleanup module)

txt.value = txt.value.replace(/』/g, '」'); //some Japanese quote replacement (from TheFarix's AWB cleanup module)

}

function fullwidthReplacerStartInEdit() { //Initiates fullwidthReplacer if you are already in edit mode

fullwidthReplacer();

// Add a tag to the summary box

var txt = document.editform.wpSummary;

var summary = "replaced fullwidth chars with ASCII equivalents (FullwidthReplacer)";

if (txt.value.indexOf(summary) == -1) {

if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {

txt.value += "; ";

}

txt.value += summary;

}

document.editform.wpDiff.click()

}

if(queryString('fullwidthReplacerStartFromView')) $(function() { fullwidthReplacerStartFromView(); }) //Part of next function

function fullwidthReplacerStartFromView() { //Initiates FullwidthReplacer if you are viewing the article without currently editing it

var txt = document.getElementById('wpTextbox1');

if(!txt) return;

fullwidthReplacer();

document.getElementById('wpSummary').value += 'Replaced fullwidth chars with ASCII equivalents using FullwidthReplacer';

document.editform.wpDiff.click()

}

function queryString(p) { //Allows URI to be properly decoded so that fullwidthReplacerStartFromView() works properly

var re = RegExp('[&?]' + p + '=([^&]*)');

var matches;

if (matches = re.exec(document.location)) {

try {

return decodeURI(matches[1]);

} catch (e) {

}

}

return null;

}

$(function () { //Adds "replace fullwidth" tabs to page.

if(mw.config.get("wgNamespaceNumber") == 0 || mw.config.get("wgNamespaceNumber") == 2) {

if(document.forms.editform) {

mw.util.addPortletLink('p-cactions', 'javascript:fullwidthReplacerStartInEdit()', 'replace fullwidth', 'ca-fullwidthreplaceredit', 'Replaces fullwidth ASCII characters with their ASCII equivalents', '', document.getElementById('ca-talk'));

}

if(mw.config.get("wgAction") == "view"){

var url = mw.config.get("wgServer") + mw.config.get("wgScript") + '?title=' + encodeURIComponent(mw.config.get("wgPageName")) + '&action=edit';

mw.util.addPortletLink('p-cactions', url + '&fullwidthReplacerStartFromView=true', 'replace fullwidth', 'ca-fullwidthreplacerview', 'Replaces fullwidth ASCII characters with their ASCII equivalents'), '', document.getElementById('ca-talk');

}

}

});