Zum Inhalt springen

Benutzer:Svebert/autoFormatter.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 8. September 2012 um 14:29 Uhr durch Svebert (Diskussion | Beiträge) (fix). Sie kann sich erheblich von der aktuellen Version unterscheiden.
„Auto-Format“-Symbol in der Symbolleiste

Dieses Benutzerskript ist ein Fork des ursprünglich von TMg entwickelten Benutzerskripts Benutzer:TMg/autoFormatter und blendet eine „Auto-Format“-Schaltfläche in der Bearbeiten-Werkzeugleiste über dem Bearbeitungsfenster ein, die viele typische Wikifizierungs-Fehler automatisch korrigiert. Eine manuelle Nachkontrolle über „Änderungen zeigen“ ist unbedingt erforderlich!

Verwendung

Folgende Zeile in die eigene common.js einbinden:

importScript('Benutzer:Svebert/autoFormatter.js'); //[[Benutzer:Svebert/autoFormatter.js]]

Oder zur Verwendung bei Commons oder anderssprachigen Wikipedias:

mw.loader.load("//de.wikipedia.org/w/index.php?title=Benutzer:Svebert/autoFormatter.js&action=raw&ctype=text/javascript");

Was macht das Skript

Bitte dazu auf der Doku-Seite des ursprünglichen Skripts nachschauen: Benutzer:TMg/autoFormatter.

Unterschied zum Ursprungsskript

  • Keine Lokalisierung der Schlüsselwörter wie z. B. „File“ -> „Datei“ oder „thumb“ -> „miniatur“. Vielmehr gleicht das Skript nur bei inkonsistenter Verwendung von Schlüsselwörtern in einem Artikel an. Findet das Skript z. B. 3x „Datei“ und 1x „File“, so werden alle diese Schlüsselwörter nach „Datei“ umgeändert.
  • Formatierung von Einzelnachweisen:
    • Behebung vom ref-vor-Satzzeichen-Problem: „das ist ein tolles Zitat“[1]. nach „das ist ein tolles Zitat“.[2]
    • Fügt an das Ende jedes Einzelnachweises einen Punkt ein: Anstatt so „das ist ein tolles Zitat“[3] macht das Skript das hier: „das ist ein tolles Zitat“[4]
    • Einklammern von externen Links in Einzelnachweisen, also „das ist ein tolles Zitat“[5] nach „das ist ein tolles Zitat“[6]
  • Vor dem Kreuzsymbol für das Todesdatum kommt immer ein Semikolon, kein Komma o.ä.
  • Automatischer Eintrag in die Zusammenfassungszeile

Einzelnachweise

  1. Und das Zitati stammt von dieser tollen Person
  2. Und das Zitati stammt von dieser tollen Person
  3. Tolle Person: Toller Artikel, S. 17
  4. Tolle Person: Toller Artikel, S. 17.
  5. www.tolle-internetseite.de/index.php?id=342
  6. www.tolle-internetseite.de.

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/**
 * Skript ursprünglich erstellt von [[Benutzer:TMg|TMg]]
 * 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 GetConsistentKeyWord(list, default_str) {
 var inconsistency = false;
 for( i=0;i<list.length;i++ )
 {
  for( j=i;j<list.length;j++){
   if ( list[j] != list[i] ){
    inconsistency = true;
    break;
   }
   if ( inconsistency == true ){
    break;
   }
  }
 }
 if ( list.length > 0 ){
  if ( inconsistency == true ){
   return default_str;
  }
  else{
   return list[0];
  }
 }
 else{
  return default_str;
 }
}

function doAutoFormat(a)
{

	var i;
	var e = document.forms['editform'].elements;
	var b = e['wpTextbox1'];
        var summary = $('#wpSummary, #wpReason');
	var t = b.value;
	/* Überflüssige Leerräume entfernen, aber das allein rechtfertigt keinen Edit */
	t = t.replace(/\s+$/, '');
	t = t.replace(/[ \t\r]+\n/g, '\n');
	b.value = t;

	/* Steuerzeichen, undefinierte Unicode-Nummern, LRM, ZERO WIDTH SPACE, BOM entfernen */
	t = t.replace(/[\x00-\x08\x0C\x0E-\x1F\x7F-\x9F\u200B\u200E\uFEFF]+/g, '');
	/* Mehrfache Leerzeilen auf einzelne reduzieren */
	if (t.indexOf('{{Begriffsklärung}}') < 0)
		t = t.replace(/([ \t\r]*\n){3,}/g, '\n\n');
	/* Geschützte Leerzeichen einheitlich als „&nbsp;“, vereinfacht viele folgende Suchmuster */
	t = t.replace(/&#(x0*A|0*16)0 *;/gi, '&nbsp;');
	/* Die verschiedensten Formen der Zeilenumbrüche durch korrekte ersetzen */
	t = t.replace(/<[\s\/]*br\s*(\s\w[^>]*?)?[\s\/]*>/gi, '<br$1 />');

        /* Dateinamen retten */
        var regex = /(^|\[\[)\s*(Bild|Datei|File|Image)\s*:\s*([^|\]\n]*?)\s*([|\]\n])/gim;
	var files = [], match;
	while (match = regex.exec(t)) files[files.length] = match;
	for (i = files.length; i--; )
	{
		if (!files[i][1]) files[i][0] = (files[i][1] = '\n') + files[i][0];
		/* Keine geschützten Leerzeichen/Unterstriche in Dateinamen */
		files[i][3] = files[i][3].replace(/(_|%20|&nbsp;)/gi, ' ');
                t = t.replace(files[i][0], files[i][1] + files[i][2] + ':' + i + files[i][4]);
	}

        /* make key-words consistent */
        var RulesToFindPossibilities = new Array();
        var GroupingNr = new Array();
        var ConsistentKeyWord = new Array();
        var RulesToReplaceConsistently = new Array();

        /* define specific rules and defaults */
        /* RulesToFindPossibilities[x] = ' <- Fill in the rule to find key words of same type but different names->'; */
        /* ConsistentKeyWord[x] = „Default for this key word“; */
        /* RulesToReplaceConsistently[x] = '$j|CONSISTENT_KEYWORD|'; with $j the grouping number in RulesToFindPossibilities[x] which is to be replaced */
        RulesToFindPossibilities[0] = /(^|\[\[)\s*(Bild|Datei|File|Image)\s*:\s*([^|\]\n]*?)\s*([|\]\n])/gim;  /* File key word*/
        GroupingNr[0] = 2;
        ConsistentKeyWord[0] = 'File'; /* Default */
        RulesToReplaceConsistently[0] = '$1CONSISTENT_KEYWORD:$3$4';
        RulesToFindPossibilities[1] = /\[\[\s*(Category|Kategorie)\s*:\s*/gi;  /* Category key word*/
        GroupingNr[1] = 1;
        ConsistentKeyWord[1] = 'Kategorie';
        RulesToReplaceConsistently[1] = '[[CONSISTENT_KEYWORD:';
        RulesToFindPossibilities[2] =  /(\[\[\s*(Bild|Datei|File|Image)\s*:[^\]]*?)\s*\|+\s*((rechts|right)\s*\|+\s*)?(miniatur|thumb)\s*\|+\s*((rechts|right)\s*\|+\s*)?/gi;/* File „sub“ key word thumb*/
        GroupingNr[2] = 5;
        ConsistentKeyWord[2] = 'thumb';
        RulesToReplaceConsistently[2] = '$1|CONSISTENT_KEYWORD|';
        RulesToFindPossibilities[3] = /(\[\[\s*(Bild|Datei|File|Image)\s*:[^\]]*?)\s*\|+\s*(rechts|right)\s*\|+\s*/gi;/* File „sub“ key word right*/
        ConsistentKeyWord[3] = 'right';
        GroupingNr[3] = 3;
        RulesToReplaceConsistently[3] = '$1|CONSISTENT_KEYWORD|';
        RulesToFindPossibilities[4] = /(\[\[\s*(Bild|Datei|File|Image)\s*:[^\]]*?)\s*\|+\s*(links|left)\s*\|+\s*/gi;/* File „sub“ key word left*/
        ConsistentKeyWord[4] = 'left';
        GroupingNr[4] = 3;
        RulesToReplaceConsistently[4] = '$1|CONSISTENT_KEYWORD|';
        RulesToFindPossibilities[5] =  /(\[\[\s*(Bild|Datei|File|Image)\s*:[^\]]*?)\s*\|+\s*(hochkant|upright)\s*((=)\s*([\d.]*))?\s*\|+\s*/gi;/* File „sub“ key word upright*/
        ConsistentKeyWord[5] = "upright";
        GroupingNr[5] = 3;
        RulesToReplaceConsistently[5] = '$1|CONSISTENT_KEYWORD$5$6|';

        /* loop over all rules */
        for (i=0;i<RulesToFindPossibilities.length;i++){
         var list = new Array(), tmp;
         while (tmp = RulesToFindPossibilities[i].exec(t)) list[list.length] = tmp[GroupingNr[i]];
         ConsistentKeyWord[i] = GetConsistentKeyWord(list,ConsistentKeyWord[i]);
         /* compile right replacement rule */
         RulesToReplaceConsistently[i] = RulesToReplaceConsistently[i].replace('CONSISTENT_KEYWORD',ConsistentKeyWord[i]);
         t = t.replace(RulesToFindPossibilities[i],RulesToReplaceConsistently[i]);
        }
	/* == Überschriften == immer mit Leerzeichen, repariert auch kaputte Überschriften */
	t = t.replace(/^(=+) *(.*[^ =]) *\1$/gm, '$1 $2 $1');

	/* Weblinks immer als Weblinks */
	t = t.replace(/^== *(External|Externer?)? *(Links?|Weblinks?|Webseiten?|Websites?) *==/gim,
		'== Weblinks ==');

	/* Leerzeichenausgleich bei weiteren Schlüsselwörtern */
	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*<\s*\/\s*ref\s*>/gi, '</ref>');
	t = t.replace(/<\s*references\s*\/\s*>/gi, '<references />');
	t = t.replace(/class\s*=\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:[^}]*?)([' + sortSrc + '])', '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[a-z])/g;
	while (t.match(regex)) t = t.replace(regex, function($0, $1, $2) { return $1 + $2.toUpperCase(); });
	regex = /(\{\{SORTIERUNG:[^}]*?)(\B[A-Z]+)/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 '[[:' + $1 + ':' + $2.replace(/_/g, ' ') + (typeof $3 === 'string' ? '|' + $3 : '') + ']]';
	}
	t = t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\[\]|]*?) *\|+ *([^\[\]\n]+?) *\]+/gi, interWikiReplace);
	t = t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\[\]\s]*) +([^\[\]\n]+?) *\]+/gi, interWikiReplace);
	t = t.replace(/\[+ *\w+:\/+([a-z-]+)\.wikipedia\.org\/wiki\/([^?\[\]\s]*) *\]+/gi, interWikiReplace);
	/* Wikilinks mit unnötigem Präfix w:de: oder :de: vereinfachen */
	t = t.replace(/\[\[ *w? *: *de *: *([^\[\]\n]*?) *\]\]/gi, '[[$1]]');
	/* Sonstige Weblinks mit senkrechtem Strich reparieren */
	t = t.replace(/\[ *(https?:\/\/[^\s|\]]*?) *\| *([^\[\]\n]*?) *\]/gi, '[$1 $2]');
	/* Doppelte eckige Klammern um Weblinks entfernen */
	t = t.replace(/\[+ *(https?:\/\/[^\[\]\n]*?) *\]+/gi, '[$1]');

	/* Anker in Links dekodieren */
	t = t.replace(/(\[\[[^#|\]]*#)([^|\]]+)(\|?[^|\]]*\]\])/gi, function($0, $1, $2, $3)
	{
		try
		{
			$2 = decodeURIComponent($2.replace(/\.([289A-E][\dA-F]|[357][B-F]|40|60)/g, '%$1')).
				replace(/[%\[\]{|}]/g, function($0)
				{
					return '%' + $0.charCodeAt(0).toString(16).toUpperCase();
				});
		}
		catch (ex) { /* keine Veränderung im Fehlerfall */ }
		return ($1 + $2).replace(/_/g, ' ') + $3;
	});

	/* [[Link|Die]]s wird zu [[Link|Dies]] weil besser lesbar */
	t = t.replace(/(\[\[[^\|\]]+\|[^\|\]]+)\]\]([a-zäöüß]+)/gi, '$1$2]]');
	/* [[Link|Link]]s werden zu [[Link]]s weil kürzer und besser lesbar */
	t = t.replace(/\[\[([^\|\]]+)\|\1([^\[\]\n]*)\]\]/g, '[[$1]]$2');
	/* Jede Kategorie in einer eigenen Zeile */
	t = t.replace(/(\[\[Kategorie:[^\[\]\n]*\]\]) *(?!\n|$)/gi, '$1\n');
	t = t.replace(/([^\n])(\[\[Kategorie:[^\[\]\n]*\]\])/gi, '$1\n$2');
	t = t.replace(/(\[\[Kategorie:[^\[\]\n]*\]\]\n)(?!\[\[Kategorie:|\n|$)/gi, '$1\n');

	/* Versehentliche Links um ISO-Daten entfernen */
	t = t.replace(/\[+([12]\d{3}-[01]\d-[0-3]\d)\]+/g, '$1');
	/* Doppelte Jahreszahlen entlinken */
	var m = t.match(/\[\[[12]\d{3}\]\]/g);
	if (m && m.length > 1)
	{
		var p, pMax = t.lastIndexOf('{{Personendaten');
		for (i = m.length; i--; )
		{
			p = t.lastIndexOf(m[i], pMax > 0 ? pMax : t.length);
			/* Je ein Duplikat entfernen, wenn vorhanden */
			if (p > t.indexOf(m[i]))
				t = t.substr(0, p) + m[i].replace(/[\[\]]+/g, '') +
					t.substring(p + m[i].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(/([^\w={])["“]([^\n"“”]+)["”]([^\w|])/gm, '$1„$2“$3');
	/* Bis-Striche bei Jahreszahlen */
	t = t.replace(/([\s(|][12]\d{3}) *[–-]{1,2} *([12]\d{3}[^\d\]–-])/g, '$1–$2');
	/* ISSNs aber ohne Bis-Striche */
	t = t.replace(/(IS\wN\W*\d+)–(\d)/g, '$1-$2');
	/* ISBNs mit Bindestrichen gliedern, aktuell für englische (0 und 1) und deutsche (3) Bücher */
	t = t.replace(/\bISBN(?:-?1[03])?:?\s*((?:9-?7-?[89]-?)?0)([\d-]{8,}[\dX]\b)/gi, function($0, $1, $2) {
		return 'ISBN ' + $1.replace(/^9\D*7\D*([89])\D*0/, '97$1-0') + '-' + $2.replace(/[^\dX]/gi, '').
			replace(/^([01]\d)(\d{6})/, '$1-$2-').
			replace(/^([2-6]\d\d)(\d{5})/, '$1-$2-').
			replace(/^(7\d{3}|8[0-4]\d\d)(\d{4})/, '$1-$2-').
			replace(/^(8[5-9]\d{3})(\d{3})/, '$1-$2-').
			replace(/^(9[0-4]\d{4})(\d\d)/, '$1-$2-').
			replace(/^(9[5-9]\d{5})(\d)/, '$1-$2-');
	});
	t = t.replace(/\bISBN(?:-?1[03])?:?\s*((?:9-?7-?[89]-?)?1)([\d-]{8,}[\dX]\b)/gi, function($0, $1, $2) {
		return 'ISBN ' + $1.replace(/^9\D*7\D*([89])\D*1/, '97$1-1') + '-' + $2.replace(/[^\dX]/gi, '').
			replace(/^(0\d)(\d{6})/, '$1-$2-').
			replace(/^([1-3]\d\d)(\d{5})/, '$1-$2-').
			replace(/^(4\d{3}|5[0-4]\d\d)(\d{4})/, '$1-$2-').
			replace(/^(5[5-9]\d{3}|[67]\d{4}|8[0-5]\d{3}|86[0-8]\d\d|869[0-7]\d)(\d{3})/, '$1-$2-').
			replace(/^(869[89]\d\d|8[7-9]\d{4}|9[0-8]\d{4}|99[0-8]\d{3})(\d\d)/, '$1-$2-').
			replace(/^(999\d{4})(\d)/, '$1-$2-');
	});
	t = t.replace(/\bISBN(?:-?1[03])?:?\s*((?:9-?7-?[89]-?)?3)([\d-]{8,}[\dX]\b)/gi, function($0, $1, $2) {
		return 'ISBN ' + $1.replace(/^9\D*7\D*([89])\D*3/, '97$1-3') + '-' + $2.replace(/[^\dX]/gi, '').
			replace(/^(0[0-24-9]|1\d)(\d{6})/, '$1-$2-').
			replace(/^(03[0-3]|[2-6]\d\d)(\d{5})/, '$1-$2-').
			replace(/^(03[4-6]\d|7\d{3}|8[0-4]\d\d)(\d{4})/, '$1-$2-').
			replace(/^(03[7-9]\d\d|8[5-9]\d{3}|95[4-9]\d\d|9[69]\d{3})(\d{3})/, '$1-$2-').
			replace(/^(9[0-4]\d{4})(\d\d)/, '$1-$2-').
			replace(/^(95[0-3]\d{4}|9[78]\d{5})(\d)/, '$1-$2-');
	});

	var months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
		'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
	/* Missverständliches deutsches Datumsformat durch Langform ersetzen */
	t = t.replace(/([\s(|])(3[01]|[12]\d|0?[1-9])\. *(1[012]|0?[1-9])\. *([12]\d{3}[^\d.–-])/g,
		function($0, $1, $2, $3, $4)
		{
			return $1 + 1 * $2 + '. ' + months[$3 - 1] + ' ' + $4;
		});
	/* In „1850–1814. Januar“ immer „bis“ einsetzen */
	t = t.replace(/(\s[12]\d{3}) *[–-]{1,2} *(3[01]|[12]\d|0?[1-9])\. *([A-Z][a-zä]+)/g,
		function($0, $1, $2, $3)
		{
			for (i = months.length; i--; )
				if ($3 === months[i]) return $1 + ' bis ' + $2 + '. ' + $3;
			return $0;
		});
	/* 1980–1990 immer als 1980–1990 */
	t = t.replace(/([\s(|][12]\d{3}) *- *((?:1[3-9]|[2-9]\d)\b[^.=–-])/g, '$1–$2'); /* Bindestrich gefunden *
	t = t.replace(/\b(([12]\d)\d{2}) *– *(\d{2}\b[^=–-])/g, '$1–$2$3'); /* Bis-Strich gefunden *
	/* Gedankenstriche in <math> vermeiden *
	t = t.replace(/(['\)a-z\]\xC0-\xFF]) +- +(['\(a-z\[\xC0-\xFF])/gi, '$1 – $2');

	/* Maßeinheiten immer mit Leerzeichen */
	t = t.replace(/\b(\d+) ?([mck]?m|kg|[KMG]iB|[kMG](B|Hz)|KB)\b(?![\xC0-\xFF])/g, '$1&nbsp;$2');
	/* Prozentwerte erhalten seit Mitte 2007 automatisch ein geschütztes Leerzeichen */
	t = t.replace(/\b(\d+)(&nbsp;)?(%[^\w"%;])/gi, '$1 $3');
	/* Paragraf, Abs. und Satz mit geschützten Leerzeichen */
	t = t.replace(/§( |&nbsp;)+(\d+\w* +Abs\.)( |&nbsp;)+(\d+ +Satz) +(\d+)/gi,
		'§&nbsp;$2&nbsp;$4&nbsp;$5');
	t = t.replace(/§( |&nbsp;)+(\d+\w* +Abs\.) +(\d+)/gi,
		'§&nbsp;$2&nbsp;$3');
	t = t.replace(/§ +(\d+)/gi,
		'§&nbsp;$1');

	var autoFormatReplacements = window.autoFormatReplacements || [], from;
	for (from in autoFormatReplacements)
	{
		var to = autoFormatReplacements[from];
		from = from.replace(/([.+*?(){}<>|])/g, '\\$1'); //Regex-Zeichen maskieren
		from = from.replace(/^(\w)/, '\\b$1').replace(/(\w)$/, '$1\\b'); //Wortgrenzen beachten
		for (i = 1; from.match(/\.\\d/); i++)
		{
			from = from.replace(/\.\\d/, '.(\\d+)'); //Platzhalter für Zahlen
			to = to.replace(/\\d/, '$' + i);
		}
		from = from.replace(/\.([\w\xC0-\xFF(])/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');

	t = t.replace(/\{\{\s*Normdaten\s*\|\s*PND\s*=\s*/g, '{{Normdaten|TYP=p|GND=');

	var redundantTemplateParameters = window.redundantTemplateParameters || [
		'Infobox Arcade|Titel',
		'Infobox Band|Name',
		'Infobox Berg|NAME',
		'Infobox Burg|Name',
		'Infobox Chemikalie|Name',
		'Infobox Computer- und Videospiel|Titel',
		'Infobox Eishockeyspieler|Name',
		'Infobox Flughafen|Name',
		'Infobox Flugzeug|Name',
		'Infobox Fluss|NAME',
		'Infobox Fußballspieler|kurzname',
		'Infobox Gemeinde in Österreich|Name',
		'Infobox Gemeinde in Deutschland|Name',
		'Infobox Gemeinde in Italien|nomeComune',
		'Infobox Gemeindeverband in Deutschland|Name',
		'Infobox Insel|NAME',
		'Infobox Landkreis|Name',
		'Infobox Musikalbum|Titel',
		'Infobox Ort in den Vereinigten Staaten|Name',
		'Infobox Ort in der Schweiz|NAME_ORT',
		'Infobox Ort in Polen|Ort',
		'Infobox Ort in Tschechien|Ort',
		'Infobox Ortsteil einer Gemeinde|Ortsteil',
		'Infobox Ortsteil einer Gemeinde in Deutschland|Ortsteil',
		'Infobox PKW-Modell|Modell',
		'Infobox Publikation|titel',
		'Infobox Schiff|Name',
		'Infobox See|NAME',
		'Infobox Software|Name',
		'Infobox Stadion|Name',
		'Infobox Unternehmen|Name'];
	var parameter = '\\s*=\\s*(' +
		wgTitle.replace(/([.\\+*?\[\](){}|])/g, '\\$1').replace(/\s+/g, '\\s+') +
		'|\\{+\\w*\\}+)?\\s*([}|])';
	for (i = redundantTemplateParameters.length; i--; )
	{
		t = t.replace(new RegExp('(\\{\\{\\s*' +
			redundantTemplateParameters[i].replace(/[\s_]+/g, '[\\s_]+').replace('|', '\\s*(?:\\|[^|}]*)*)\\|\\s*') +
			parameter, 'g'), '$1$3');
	}

	/* Spezielle Infobox-Ersetzungen */
	if (t.match(/Infobox[ _](Gemeinde|Ort)[ _]in[ _]Deutschland/i))
	{
		t = t.replace(/Infobox[ _](Gemeinde|Ort)[ _]in[ _]Deutschland([^}]*}})[\s\r\n]*/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*)+[\r\n]+/g, '\n');
		t = t.replace(/(\[http:\/\/[^\/\s\]]*)\s+/ig, '$1/ ');
		if (t.match(/Art\s*=\s*(Amt|(Samt|Verbands)gemeinde|Verwaltungsgemeinschaft|(Gemeinde)?verwaltungsverband)/i))
		{
			t = t.replace(/[ _]Gemeinde[ _]in[ _]Deutschland/i, ' Gemeindeverband in Deutschland');
			t = t.replace(/\|\s*(PLZ(-alt)?|Vorwahl|Kfz)\s*=.*[\r\n]+/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*(\d*).*/i, '|Gliederung        = $1');
			e['wpSummary'].value += 'Einsatz der neuen [[Vorlage:Infobox Gemeindeverband in Deutschland]]';
			e['wpMinoredit'].checked = true;
		}
		if (!t.match(/\|\s*Partei\s*=/))
			t = t.replace(/((\|\s*(Bürgermeister|Organwalter)[^|}]*)+)/i, '$1|Partei            =\n');
		t = t.replace(/[\r\n]+\s*\|\s*(.{17})\s*=/ig, '\n|$1 =');
	}

        /* Satzzeichen nach Ref fixen */
        t = t.replace(/(\s*<\s*ref.*\/\s*>|\s*<\s*ref\s*[^\/\\]*\s*>[^<]*<\s*\/\s*ref\s*>)\s*([\,\.\!\?\)\]\}\:])/ig,'$2$1');
        /* Doppelte Satzzeichen bei ref fixen */
        t = t.replace(/([\,\.\!\?\)\]\}\:])(\s*<\s*ref.*\/\s*>|\s*<\s*ref\s*[^\/\\]*\s*>[^<]*<\s*\/\s*ref\s*>)\s*([\,\.\!\?\)\]\}\:])/ig,'$1$2');
        /* Referenzen die pure Links sind einklammern */
        t = t.replace(/\s*<\s*ref(\s*[^\/\\]*)\s*>(http\:\/\/)?(www\.)?([a-zA-Z0-9_üÜöÖäÄß\.\-]{2,255}\.[a-zA-Z]{2,4})([a-zA-Z0-9_üÜöÖäÄß\.\-\/\%\&\?\#\+\~\=])\s*<\s*\/\s*ref\s*>)/ig,'<ref$1>[$2$3$4$5 $2$3$4]</ref>'); 
        /* Punkt an das Ende jeder Referenz */
        t = t.replace(/\s*<\s*ref(\s*[^\/\\]*)\s*>([^<\.]*)([^\.\?\!\;])\s*(<\s*\/\s*ref\s*>)/ig,'<ref$1>$2.</ref>');       

	/* Gerettete Dateinamen wieder einsetzen */
	for (i = files.length; i--; )
	{
		t = t.replace(files[i][1] + ConsistentKeyWord[0] + ':' + i + files[i][4], files[i][1] + ConsistentKeyWord[0] +':' + files[i][3] + files[i][4]);
	}

	var changed = t != b.value.replace(/\r+\n/g, '\n');
	if (changed){
         b.value = t.replace(/\s+$/, '');
         /* Include edit info in summary-textbox */
         if ( summary.val() != '' ){ summary.val(summary.val() + ' +');}
         summary.val(summary.val() + '[[Benutzer:Svebert/autoFormatter.js|auto-fmt]]');
        }
	if ((!a || !a.nodeType || a.nodeName === 'IMG') && $j) /* Vector/Monobook */
	{
		var e = $j(a && a.nodeType ? a : 'img[rel=autoFormatter]');
		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 $ === 'function' && typeof mw === 'object' && mw.user.options.get('usebetatoolbar')) /* Vector */
{
	mw.loader.using('ext.wikiEditor.toolbar', function() {
		$('#wpTextbox1').wikiEditor('addToToolbar', {
			'section': 'main', /* oder advanced */
			'group': 'format',
			'tools': {
				'autoFormatter': {
					'label': 'Auto-Format',
					'type': 'button',
					'icon': '/media/wikipedia/commons/thumb/2/2c/Broom_icon.svg/22px-Broom_icon.svg.png',
					'action': {
						'type': 'callback',
						'execute': function() { return doAutoFormat(this); }
					}
				}
			}
		});
	});
}
else if (typeof $ === 'function' && typeof mw === 'object' && mw.user.options.get('showtoolbar')) /* Monobook */
{
	mw.loader.using('mediawiki.action.edit', function() {
		mw.toolbar.addButton('/media/wikipedia/commons/2/2e/Button_broom.png',
			'Auto-Format', '', '', '', 'mw-customeditbutton-autoFormatter');
		$(function() {
			$('#mw-customeditbutton-autoFormatter').click(function() { return doAutoFormat(this); })
		});
	});
}
else if (typeof hookEvent === 'function')
{
	hookEvent('load', function()
	{
		/* 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[i].className === 'editHelp') { s = s[i]; break; }
		s.appendChild(document.createTextNode(' | '));
		s.appendChild(a);
	});
}