_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

Benutzer:Akkakk/TMg-autoFormatter.js

In diesem Artikel werden wir uns eingehend mit Benutzer:Akkakk/TMg-autoFormatter.js befassen, einem Thema, das in letzter Zeit die Aufmerksamkeit und das Interesse vieler Menschen geweckt hat. Benutzer:Akkakk/TMg-autoFormatter.js ist ein Thema, das in verschiedenen Bereichen zu Debatten und Diskussionen geführt hat, und es ist wichtig, seine Relevanz und Auswirkungen in der heutigen Gesellschaft zu verstehen. In diesem Artikel werden wir verschiedene Perspektiven auf Benutzer:Akkakk/TMg-autoFormatter.js untersuchen, seine wichtigsten Aspekte ansprechen und seine heutigen Auswirkungen analysieren. Darüber hinaus werden wir uns mit seiner Geschichte, seiner Entwicklung und seinem Einfluss auf verschiedene Aspekte des täglichen Lebens befassen. Wir hoffen, dass dieser Artikel einen vollständigen und bereichernden Überblick über Benutzer:Akkakk/TMg-autoFormatter.js bietet und die Leser dazu einlädt, ihr Wissen und Verständnis für dieses sehr relevante Thema zu vertiefen.
// kopie von ]

/**
 * Blendet eine „Auto-Format“-Funktion unter dem Bearbeitungsfenster ein, die
 * viele typische Wikifizierungs-Fehler automatisch korrigiert.
 * Eine ausführliche Beschreibung ist auf der Diskussionsseite zu finden.
 */
function doAutoFormat(a)
{
	var e = document.forms.elements;
	var b = e;
	var t = b.value;

  /* jahreszahlen & daten entlinken, ausser im nullten abschnitt */
  p = t.indexOf("\n=");
  if (p > 0)
  {
    t1 = t.substr(0, p);
    t = t.substr(p);
    t = t.replace(/\{3})\]\]/g, "$1");
    t = t.replace(/\?\. (Januar|Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\]\]/g, "$1");
    t = t1 + t;
  }

	/* Überflüssige Leerräume entfernen, aber das allein rechtfertigt keinen Edit */
	t = t.replace(/\s+$/, "");
	t = t.replace(/+\n/g, "\n");
	b.value = t;

	/* Mehrfache Leerzeilen auf einzelne reduzieren */
	t = t.replace(/(*\n){3,}/g, "\n\n");
	/* Die verschiedensten Formen der Zeilenumbrüche durch korrekte ersetzen */
	t = t.replace(/<*br\s*(\s\w*?)?*>/gi, "<br$1 />");

	/* Dateinamen retten */
	var regex = new RegExp("(^|\\\\n]*?)\\s*(\\n])", "gim");
	var files = ;
	while (match = regex.exec(t)) files = match;
	for (var i = files.length - 1; i >= 0; i--)
	{
		/* Keine geschützten Leerzeichen/Unterstriche in Dateinamen */
		files = files.replace(/(_|%20|&nbsp;|&#0*160;|&#x0*A0;)/gi, " ");
		/* Einheitliche Schreibweise und Leerzeichenausgleich */
		t = t.replace(files, files + "Datei:" + i + files);
	}

	/* == Überschriften == immer mit Leerzeichen */
	t = t.replace(/^(=+) *(.*=)$/gm, "$1 $2");
	t = t.replace(/^(=.*) *(=+)$/gm, "$1 $2");
	/* Weblinks immer als Weblinks */
	t = t.replace(/^== *(External|Externer?)? *(Links?|Weblinks?|Webseiten?|Websites?) *==/gim,
		"== Weblinks ==");

	/* Einheitliche Schreibweisen für Schlüsselwörter incl. Leerzeichenausgleich */
	t = t.replace(/\[\[\s*(Category|Kategorie)\s*:\s*/gi, "[[Kategorie:");
	t = t.replace(/(\]*?)\s*\|+\s*((rechts|right)\s*\|+\s*)?(miniatur|thumb)\s*\|+\s*((rechts|right)\s*\|+\s*)?/gi, "$1|miniatur|");
	t = t.replace(/(\]*?)\s*\|+\s*(rechts|right)\s*\|+\s*/gi, "$1|rechts|");
	t = t.replace(/(\]*?)\s*\|+\s*(links|left)\s*\|+\s*/gi, "$1|links|");
	t = t.replace(/(\]*?)\s*\|+\s*(hochkant|upright)\s*((=)\s*(*))?\s*\|+\s*/gi, "$1|hochkant$4$5|");
	t = t.replace(/\{\{\s*(Template|Vorlage)\s*:\s*/gi, "{{");
	t = t.replace(/\{\{\s*Commons(cat\s*\|(\s*(Category|Kategorie)\s*:)?|\s*\|\s*(Category|Kategorie)\s*:)\s*/gi, "{{Commonscat|");
	t = t.replace(/\{\{\s*Commons\s*\|\s*/gi, "{{Commons|");
	t = t.replace(/\{\{\s*Wikisource\s*\|\s*/gi, "{{Wikisource|");
	t = t.replace(/\{\{\s*Wiktionary\s*\|\s*/gi, "{{Wiktionary|");
	t = t.replace(/\{\{\s*(DEFAULTSORT|SORTIERUNG)\s*:\s*/gi, "{{SORTIERUNG:");
	t = t.replace(/\s*#(REDIRECT|WEITERLEITUNG)\s*\[\[/gi, "#WEITERLEITUNG [[");
	t = t.replace(/\s*<\s*\/\s*ref>/gi, "</ref>");
	t = t.replace(/<references\s*\/\s*>/gi, "<references />");
	t = t.replace(/class\s*=\s*("(\s*+\s)*)?\s*\bprettytable\b/g, 'class=$1wikitable');

	/* Sortierung soll nie Umlaute enthalten */
	t = t.replace(/(\{\{SORTIERUNG:*?)ß/, "$1ss");
	var sortSrc = "¢£¥©ª®²³¹ºÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿ";
	var sortDst = "cLYCaR231oAAAAAACEEEEIIIIDNOOOOOOUUUUYaaaaaaceeeeiiiidnoooooouuuuyy";
	regex = new RegExp("(\\{\\{SORTIERUNG:*?)()", "g");
	while (t.match(regex)) t = t.replace(regex, function($0, $1, $2) { return $1 + sortDst.charAt(sortSrc.indexOf($2)); });
	/* Sortierung soll einheitliche Groß/Kleinschreibung haben */
	regex = /(\{\{SORTIERUNG:*?)(\b)/g;
	while (t.match(regex)) t = t.replace(regex, function($0, $1, $2) { return $1 + $2.toUpperCase(); });
	regex = /(\{\{SORTIERUNG:*?)(\B+)/g;
	while (t.match(regex)) t = t.replace(regex, function($0, $1, $2) { return $1 + $2.toLowerCase(); });

	/* Weblinks auf Wikipedia-Sprachversionen in Wikilinks umwandeln */
	var interWikiReplace = function($0, $1, $2, $3)
	{
		return "]";
	}
	t = t.replace(/\+)\.wikipedia\.org\/wiki\/(*?) *\|+ *(+?) *\]+/gi, interWikiReplace);
	t = t.replace(/\+)\.wikipedia\.org\/wiki\/(*) +(+?) *\]+/gi, interWikiReplace);
	t = t.replace(/\+)\.wikipedia\.org\/wiki\/(*) *\]+/gi, interWikiReplace);
	/* Wikilinks mit unnötigem Präfix w:de: oder :de: vereinfachen */
	t = t.replace(/\*?) *\]\]/gi, "]");
	/* Sonstige Weblinks mit senkrechtem Strich reparieren */
	t = t.replace(/\]*?) *\| *(*?) *\]/gi, "");
	/* Doppelte eckige Klammern um Weblinks entfernen */
	t = t.replace(/\*?) *\]+/gi, "");

	/* Anker in Links dekodieren */
	t = t.replace(/(\]*#)(]+)(\|?]*\]\])/gi, function($0, $1, $2, $3)
	{
		try
		{
			$2 = decodeURIComponent($2.replace(/\.(||40|60)/g, "%$1")).
				replace(/%/g, "%25").replace(/\/g, "%5D").
				replace(/\{/g, "%7B").replace(/\|/g, "%7C").replace(/}/g, "%7D");
		}
		catch (ex) { /* keine Veränderung im Fehlerfall */ }
		return ($1 + $2).replace(/_/g, " ") + $3;
	});

	/* ]s wird zu ] weil besser lesbar */
	t = t.replace(/(\]+\|]+)\]\](+)/gi, "$1$2]]");
	/* ]s werden zu ]s weil kürzer und besser lesbar */
	t = t.replace(/\]+)\|\1(*)\]\]/g, "]$2");
	/* Jede Kategorie in einer eigenen Zeile */
	t = t.replace(/(\*\]\])(?!\n|$)/gi, "$1\n");
	t = t.replace(/()(\*\]\])/gi, "$1\n$2");
	t = t.replace(/(\*\]\]\n)(?!\[\[Kategorie:|\n|$)/gi, "$1\n");

	/* Versehentliche Links um ISO-Daten entfernen */
	t = t.replace(/\{3}--)\]+/g, "$1");
	/* Doppelte Jahreszahlen entlinken */
	var m = t.match(/\{3}\]\]/g);
	if (m && m.length > 1)
	{
		var i, p, pMax = t.lastIndexOf("{{Personendaten");
		for (i = m.length - 1; i >= 0; i--)
		{
			p = t.lastIndexOf(m, pMax > 0 ? pMax : t.length);
			/* Je ein Duplikat entfernen, wenn vorhanden */
			if (p > t.indexOf(m))
				t = t.substr(0, p) + m.replace(/]+/g, "") +
					t.substring(p + m.length, t.length);
		}
	}

	/* Unnötige Leerzeichen bei HTML-Attributen, wichtig vor den Anführungszeichen */
	while (t.match(/*?\b *= +"/im))
		t = t.replace(/(*?)\b *= +"/gim, "$1=\"");
	/* Anführungszeichen */
	t = t.replace(/()(+)()/gm, "$1„$2“$3");
	/* Bis-Striche bei Jahreszahlen */
	t = t.replace(/({3}) *{1,2} *({3})/g, "$1–$2");
	/* ISSNs aber ohne Bis-Striche */
	t = t.replace(/(IS\wN\W*\d+)–(\d+)/g, "$1-$2");
	/* ISBNs mit Bindestrichen gliedern */
	t = t.replace(/\bISBN(-?1)?:?\s*((9-?7-?-?)?3)({8,}\b)/gi, function($0, $1, $2, $3, $4) {
		return "ISBN " + $2.replace(/^9\D*7\D*()\D*3/, "97$1-3") + "-" + $4.replace(//gi, "").
			replace(/^(0|1\d)(\d{6})/, "$1-$2-").
			replace(/^(\d\d)(\d{5})/, "$1-$2-"). /* einschl. Einzel-ISBNs Österreich*/
			replace(/^(7\d\d|8\d\d)(\d{4})/, "$1-$2-").
			replace(/^(8\d{3})(\d{3})/, "$1-$2-").
			replace(/^(9\d{4})(\d\d)/, "$1-$2-").
			replace(/^(9\d{5})(\d)/, "$1-$2-");
	});

	var months = ["Januar", "Februar", "März", "April", "Mai", "Juni",
		"Juli", "August", "September", "Oktober", "November", "Dezember"];
	for (var i = 0; i < months.length; i++)
	{
		/* Missverständliches deutsches Datumsformat durch Langform ersetzen */
		regex = new RegExp("()0?(3|?)\\. *0?" + (1 + i) + "\\. *({3})", "g");
		t = t.replace(regex, "$1$2. " + months + " $3");
		/* In "1850–14. Januar" immer "bis" einsetzen */
		regex = new RegExp("({3}) *{1,2} *0?({1,2}\\. *" + months + ")", "g");
		t = t.replace(regex, "$1 bis $2");
	}
	/* 1980–90 immer als 1980–1990 */
	t = t.replace(/({3}) *- *((1|))/g, "$1–$2"); /* Bindestrich gefunden */
	t = t.replace(/\b((){2}) *– *({2})\b/g, "$1–$2$3"); /* Bis-Strich gefunden */
	/* Gedankenstriche in <math> vermeiden */
	t = t.replace(/(\xC0-\xFF]) +- +()/gi, "$1 – $2");

	/* Maßeinheiten immer mit Leerzeichen */
	t = t.replace(/\b(\d+)( |&#160;|&#0*0;)?(?m|kg|iB|(B|Hz)|KB)\b/g, "$1&nbsp;$3");
	/* Prozentwerte erhalten seit Mitte 2007 automatisch ein geschütztes Leerzeichen */
	t = t.replace(/\b(\d+)(&nbsp;|&#160;|&#x0*A0;)?(%)/gi, "$1 $3");
	/* Paragraf, Abs. und Satz mit geschützten Leerzeichen */
	t = t.replace(/§( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Abs\.)( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Satz)( |&#160;|&#x0*A0;)+(\d+)/gi,
		"§&nbsp;$2&nbsp;$4&nbsp;$6");
	t = t.replace(/§( |&#160;|&#x0*A0;|&nbsp;)+(\d+ +Abs\.)( |&#160;|&#x0*A0;)+(\d+)/gi,
		"§&nbsp;$2&nbsp;$4");
	t = t.replace(/§( |&#160;|&#x0*A0;)+(\d+)/gi,
		"§&nbsp;$2");

	var autoFormatReplacements = window.autoFormatReplacements || ;
	for (from in autoFormatReplacements)
	{
		var to = autoFormatReplacements;
		from = from.replace(/()/g, '\\$1'); //Regex-Zeichen maskieren
		from = from.replace(/^(\w)/, '\\b$1').replace(/(\w)$/, '$1\\b'); //Wortgrenzen beachten
		from = from.replace(/\.()/g, '.( |&nbsp;)*$1'); //Leerzeichen nach Punkt
		t = t.replace(new RegExp(from, 'g'), to);
	}

	/* Keine geschützten Leerzeichen in Überschriften */
	while (t.match(/^=.*&nbsp;.*=$/m))
		t = t.replace(/^(=.*)&nbsp;(.*=)$/gm, "$1 $2");

	var redundantTemplateParameters = window.redundantTemplateParameters || [
		"Infobox Arcade|Titel",
		"Infobox Band|Name",
		"Infobox Berg|NAME",
		"Infobox Computer- und Videospiel|Titel",
		"Infobox Eishockeyspieler|Name",
		"Infobox Fluss|NAME",
		"Infobox Fußballspieler|kurzname",
		"Infobox Gemeinde in Deutschland|Name",
		"Infobox Gemeinde in Italien|nomeComune",
		"Infobox Gemeindeverband in Deutschland|Name",
		"Infobox Landkreis|Name",
		"Infobox Musikalbum|Titel",
		"Infobox Ort in Tschechien|Ort",
		"Infobox Ortsteil einer Gemeinde|Ortsteil",
		"Infobox Unternehmen|Name"];
	var parameter = "\\s*=\\s*(" +
		wgTitle.replace(/((){}|])/g, "\\$1").replace(/\s+/g, "\\s+") +
		"|\\{+\\w*\\}+)?\\s*()";
	for (var i = redundantTemplateParameters.length - 1; i >= 0; i--)
	{
		var regex = new RegExp("(\\{\\{\\s*" +
			redundantTemplateParameters.replace(/+/g, "+").replace(/\|/, "*)\\|\\s*") +
			parameter, "g");
		t = t.replace(regex, "$1$3");
	}

	/* Spezielle Infobox-Ersetzungen */
	if (t.match(/Infobox(Gemeinde|Ort)inDeutschland/i))
	{
		t = t.replace(/Infobox(Gemeinde|Ort)inDeutschland(*}})*/i, 'Infobox Gemeinde in Deutschland$2\n\n');
		t = t.replace(/\|\s*lat_deg\s*=\s*(\S*)(\s*\|\s*lat_min\s*=\s*(\S*)(\s*\|\s*lat_sec\s*=\s*(\S*))?)?/ig,
			'|Breitengrad       = $1/$3/$5');
		t = t.replace(/\|\s*lon_deg\s*=\s*(\S*)(\s*\|\s*lon_min\s*=\s*(\S*)(\s*\|\s*lon_sec\s*=\s*(\S*))?)?/ig,
			'|Längengrad        = $1/$3/$5');
		t = t.replace(/(\/0*)++/g, '\n');
		t = t.replace(/(\]*)\s+/ig, '$1/ ');
		if (t.match(/Art\s*=\s*(Amt|Samtgemeinde|Verbandsgemeinde|Verwaltungsgemeinschaft|(Gemeinde)?verwaltungsverband)/i))
		{
			t = t.replace(/GemeindeinDeutschland/i, ' Gemeindeverband in Deutschland');
			t = t.replace(/\|\s*(PLZ(-alt)?|Vorwahl|Kfz)\s*=.*+/ig, '');
			t = t.replace(/\|\s*Bürgermeister( {0,5}|titel)?\s*=\s*/ig, '|Organwalter$1  = ');
			if (!t.match(/\|\s*Gliederung\s*=/))
				t = t.replace(/(\|\s*Adresse\s*=)/i, '|Gliederung        = \n$1');
			t = t.replace(/\|\s*Gliederung\s*=\s*(*).*/i, '|Gliederung        = $1');
			e.value += "Einsatz der neuen ]";
			e.checked = true;
		}
		if (!t.match(/\|\s*Partei\s*=/))
			t = t.replace(/((\|\s*(Bürgermeister|Organwalter)*)+)/i, '$1|Partei            =\n');
		t = t.replace(/+\s*\|\s*(.{17})\s*=/ig, '\n|$1 =');
	}

	/* Gerettete Dateinamen wieder einsetzen */
	for (var i = files.length - 1; i >= 0; i--)
	{
		if (!files) files = "\n";
		t = t.replace(files + "Datei:" + i + files, files + "Datei:" + files + files);
	}

	var changed = t != b.value.replace(/\r+\n/g, "\n");
	if (changed) b.value = t.replace(/\s+$/, "");
	if ((!a || !a.nodeType || a.nodeName === 'IMG') && $) /* Vector/Monobook */
	{
		var e = $(a && a.nodeType ? a : 'img');
		e.css('backgroundColor', changed ? '#DEF740' : '');
		e.css('borderRadius', changed ? '3px' : '');
		e.css('opacity', changed ? '' : '0.4');
	}
	else if (a) a.style.color = changed ? 'green' : 'silver';
	return false;
}

if (typeof $ != 'undefined' && typeof $.fn.wikiEditor != 'undefined' && $.wikiEditor.isSupported($.wikiEditor.modules.toolbar)) /* Vector */
{
	$(function() {
		$('#wpTextbox1').wikiEditor('addToToolbar', {
			'section': 'main', /* oder advanced */
			'group': 'format',
			'tools': {
				'autoFormatter': {
					'label': 'Auto-Format',
					'type': 'button',
					'icon': 'http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/22px-Broom_icon.svg.png',
					'action': {
						'type': 'callback',
						'execute': function() { return doAutoFormat(this); }
					}
				}
			}
		});
	});
}
else
{
	if (mwCustomEditButtons) /* Monobook */
	{
		mwCustomEditButtons = {
			'imageId': 'mw-customeditbutton-autoFormatter',
			'imageFile': 'http://upload.wikimedia.org/wikipedia/commons/2/2e/Button_broom.png',
			'speedTip': 'Auto-Format',
			'tagOpen': '', 'sampleText': '', 'tagClose': ''
		};
	}
	hookEvent('load', function()
	{
		var f = document.getElementById('mw-customeditbutton-autoFormatter');
		if (f) { f.onclick = function() { return doAutoFormat(this); }; return; }

		/* Notfalls als Link unter dem Bearbeitungsfenster */
		f = document.getElementById('editform');
		if (!f) return;
		var a = document.createElement('A');
		a.href = '#';
		a.onclick = function() { return doAutoFormat(this); }
		a.appendChild(document.createTextNode('Auto-Format'));
		var s = f.getElementsByTagName('SPAN');
		for (var i = s.length - 1; i >= 0; i--) if (s.className === 'editHelp') { s = s; break; }
		s.appendChild(document.createTextNode(' | '));
		s.appendChild(a);
	});
}